Nordstrom Capabilities
Naftiko 0.5 capability definitions for Nordstrom - 115 capabilities showing integration workflows and service orchestrations.
Retrieves website performance metrics from Adobe Analytics for Nordstrom.com, returning page views, unique visitors, and bounce rate.
naftiko: "0.5"
info:
label: "Adobe Analytics Site Performance"
description: "Retrieves website performance metrics from Adobe Analytics for Nordstrom.com, returning page views, unique visitors, and bounce rate."
tags:
- e-commerce
- analytics
- adobe-analytics
capability:
exposes:
- type: mcp
namespace: site-analytics
port: 8080
tools:
- name: get-site-performance
description: "Fetch Adobe Analytics site performance metrics by date range."
inputParameters:
- name: start_date
in: body
type: string
description: "Start date in YYYY-MM-DD format."
- name: end_date
in: body
type: string
description: "End date in YYYY-MM-DD format."
call: "adobe-analytics.get-report"
with:
start_date: "{{start_date}}"
end_date: "{{end_date}}"
outputParameters:
- name: page_views
type: string
mapping: "$.totalCount"
- name: unique_visitors
type: string
mapping: "$.summaryData.uniqueVisitors"
- name: bounce_rate
type: string
mapping: "$.summaryData.bounceRate"
consumes:
- type: http
namespace: adobe-analytics
baseUri: "https://analytics.adobe.io/api/nordstrom/reports"
authentication:
type: bearer
token: "$secrets.adobe_analytics_token"
resources:
- name: reports
path: "/ranked"
operations:
- name: get-report
method: POST
Orchestrates app release pipeline for Nordstrom across devops, github, datadog.
naftiko: "0.5"
info:
label: "App Release Pipeline"
description: "Orchestrates app release pipeline for Nordstrom across devops, github, datadog."
tags:
- devops
- github
- datadog
- servicenow
capability:
exposes:
- type: mcp
namespace: platform-ops
port: 8080
tools:
- name: app-release-pipeline
description: "Orchestrates app release pipeline for Nordstrom across devops, github, datadog."
inputParameters:
- name: store_id
type: string
description: "Store or entity identifier."
- name: date
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: create-ticket
type: call
call: servicenow.create-incident
with:
short_description: "App Release Pipeline — {{store_id}}"
category: "devops"
- name: check-health
type: call
call: datadog.get-monitor
with:
monitor_id: "store-{{store_id}}"
- name: check-repo
type: call
call: github.get-repo
with:
repo: "nordstrom/{{store_id}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://nordstrom.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: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: monitors
path: "/monitor/{{monitor_id}}"
inputParameters:
- name: monitor_id
in: path
operations:
- name: get-monitor
method: GET
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: repos
path: "/repos/{{repo}}"
inputParameters:
- name: repo
in: path
operations:
- name: get-repo
method: GET
Orchestrates associate onboarding flow for Nordstrom across hr, workday, servicenow.
naftiko: "0.5"
info:
label: "Associate Onboarding Flow"
description: "Orchestrates associate onboarding flow for Nordstrom across hr, workday, servicenow."
tags:
- hr
- workday
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-ops
port: 8080
tools:
- name: associate-onboarding-flow
description: "Orchestrates associate onboarding flow for Nordstrom across hr, workday, servicenow."
inputParameters:
- name: store_id
type: string
description: "Store or entity identifier."
- name: date
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: create-ticket
type: call
call: servicenow.create-incident
with:
short_description: "Associate Onboarding Flow — {{store_id}}"
category: "hr"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "ops-{{store_id}}"
text: "Associate Onboarding Flow done."
- name: get-hr
type: call
call: workday.get-workers
with:
store: "{{store_id}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://nordstrom.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: channels
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
operations:
- name: send-message
method: POST
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/nordstrom/workers"
operations:
- name: get-workers
method: GET
Checks the status of AWS CloudWatch alarms for Nordstrom cloud infrastructure.
naftiko: "0.5"
info:
label: "AWS CloudWatch Alarm Status"
description: "Checks the status of AWS CloudWatch alarms for Nordstrom cloud infrastructure."
tags:
- monitoring
- cloudwatch
- cloud
capability:
exposes:
- type: mcp
namespace: cloud-monitoring
port: 8080
tools:
- name: get-alarm-status
description: "Check CloudWatch alarm status by alarm name."
inputParameters:
- name: alarm_name
in: body
type: string
description: "The CloudWatch alarm name."
call: "cloudwatch.describe-alarm"
with:
alarm_name: "{{alarm_name}}"
outputParameters:
- name: state
type: string
mapping: "$.MetricAlarms[0].StateValue"
- name: reason
type: string
mapping: "$.MetricAlarms[0].StateReason"
consumes:
- type: http
namespace: cloudwatch
baseUri: "https://monitoring.us-east-1.amazonaws.com"
authentication:
type: aws
accessKeyId: "$secrets.aws_access_key"
secretAccessKey: "$secrets.aws_secret_key"
resources:
- name: alarms
path: "/?Action=DescribeAlarms&AlarmNames.member.1={{alarm_name}}"
inputParameters:
- name: alarm_name
in: query
operations:
- name: describe-alarm
method: GET
Checks the status of an Azure DevOps build pipeline for Nordstrom engineering.
naftiko: "0.5"
info:
label: "Azure DevOps Pipeline Status"
description: "Checks the status of an Azure DevOps build pipeline for Nordstrom engineering."
tags:
- development
- azure-devops
- ci-cd
capability:
exposes:
- type: mcp
namespace: ci-cd
port: 8080
tools:
- name: get-pipeline-status
description: "Check Azure DevOps pipeline build status."
inputParameters:
- name: build_id
in: body
type: string
description: "The build identifier."
call: "azuredevops.get-build"
with:
build_id: "{{build_id}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: result
type: string
mapping: "$.result"
consumes:
- type: http
namespace: azuredevops
baseUri: "https://dev.azure.com/nordstrom"
authentication:
type: bearer
token: "$secrets.azuredevops_token"
resources:
- name: builds
path: "/{{project}}/_apis/build/builds/{{build_id}}?api-version=7.0"
inputParameters:
- name: project
in: path
- name: build_id
in: path
operations:
- name: get-build
method: GET
Invokes the Azure ML product recommendation model for personalized shopping experiences.
naftiko: "0.5"
info:
label: "Azure Machine Learning Recommendation Model"
description: "Invokes the Azure ML product recommendation model for personalized shopping experiences."
tags:
- e-commerce
- azure-machine-learning
- personalization
capability:
exposes:
- type: mcp
namespace: ml-recommendations
port: 8080
tools:
- name: get-recommendations
description: "Get product recommendations by customer profile."
inputParameters:
- name: customer_id
in: body
type: string
description: "The customer identifier."
- name: context
in: body
type: string
description: "Shopping context (browsing, cart, checkout)."
call: "azureml.predict-recommendations"
with:
customer_id: "{{customer_id}}"
context: "{{context}}"
outputParameters:
- name: recommendations
type: array
mapping: "$.result.products"
consumes:
- type: http
namespace: azureml
baseUri: "https://nordstrom-ml.eastus.inference.ml.azure.com"
authentication:
type: bearer
token: "$secrets.azureml_token"
resources:
- name: scoring
path: "/score"
operations:
- name: predict-recommendations
method: POST
Orchestrates benefits enrollment pipeline for Nordstrom across hr, workday, servicenow.
naftiko: "0.5"
info:
label: "Benefits Enrollment Pipeline"
description: "Orchestrates benefits enrollment pipeline for Nordstrom across hr, workday, servicenow."
tags:
- hr
- workday
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-ops
port: 8080
tools:
- name: benefits-enrollment-pipeline
description: "Orchestrates benefits enrollment pipeline for Nordstrom across hr, workday, servicenow."
inputParameters:
- name: store_id
type: string
description: "Store or entity identifier."
- name: date
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: create-ticket
type: call
call: servicenow.create-incident
with:
short_description: "Benefits Enrollment Pipeline — {{store_id}}"
category: "hr"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "ops-{{store_id}}"
text: "Benefits Enrollment Pipeline done."
- name: get-hr
type: call
call: workday.get-workers
with:
store: "{{store_id}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://nordstrom.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: channels
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
operations:
- name: send-message
method: POST
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/nordstrom/workers"
operations:
- name: get-workers
method: GET
Synchronizes product listings between Nordstrom's catalog and BigCommerce marketplace by pulling catalog data from Elasticsearch, updating BigCommerce listings, and logging results in SharePoint.
naftiko: "0.5"
info:
label: "BigCommerce Marketplace Sync"
description: "Synchronizes product listings between Nordstrom's catalog and BigCommerce marketplace by pulling catalog data from Elasticsearch, updating BigCommerce listings, and logging results in SharePoint."
tags:
- e-commerce
- marketplace
- elasticsearch
- bigcommerce
- sharepoint
capability:
exposes:
- type: mcp
namespace: marketplace-sync
port: 8080
tools:
- name: sync-marketplace-listings
description: "Given a product category, sync catalog data to BigCommerce and log the results."
inputParameters:
- name: category
in: body
type: string
description: "The product category to sync."
steps:
- name: get-catalog-data
type: call
call: "elasticsearch.get-category-products"
with:
category: "{{category}}"
- name: update-bigcommerce
type: call
call: "bigcommerce.bulk-update-products"
with:
products: "{{get-catalog-data.products}}"
- name: log-sync
type: call
call: "sharepoint.upload-file"
with:
site_id: "marketplace_site"
folder_path: "SyncLogs/{{category}}"
file_name: "sync_log.json"
content: "Category: {{category}} | Synced: {{update-bigcommerce.updated_count}} | Errors: {{update-bigcommerce.error_count}}"
consumes:
- type: http
namespace: elasticsearch
baseUri: "https://nordstrom-catalog.es.amazonaws.com"
authentication:
type: bearer
token: "$secrets.elasticsearch_token"
resources:
- name: products
path: "/products/_search"
operations:
- name: get-category-products
method: POST
- type: http
namespace: bigcommerce
baseUri: "https://api.bigcommerce.com/stores/{{store_hash}}/v3"
authentication:
type: bearer
token: "$secrets.bigcommerce_token"
inputParameters:
- name: store_hash
in: path
value: "$secrets.bigcommerce_store_hash"
resources:
- name: products
path: "/catalog/products"
operations:
- name: bulk-update-products
method: PUT
- 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}}/{{file_name}}:/content"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
- name: file_name
in: path
operations:
- name: upload-file
method: PUT
Retrieves a document from Box by file ID.
naftiko: "0.5"
info:
label: "Box Document Retrieval"
description: "Retrieves a document from Box by file ID."
tags:
- document-management
- box
capability:
exposes:
- type: mcp
namespace: documents
port: 8080
tools:
- name: get-box-document
description: "Retrieve a Box document by file ID."
inputParameters:
- name: file_id
in: body
type: string
description: "The Box file identifier."
call: "box.get-file"
with:
file_id: "{{file_id}}"
outputParameters:
- name: file_name
type: string
mapping: "$.name"
- name: size
type: string
mapping: "$.size"
- name: owner
type: string
mapping: "$.owned_by.name"
consumes:
- type: http
namespace: box
baseUri: "https://api.box.com/2.0"
authentication:
type: bearer
token: "$secrets.box_token"
resources:
- name: files
path: "/files/{{file_id}}"
inputParameters:
- name: file_id
in: path
operations:
- name: get-file
method: GET
Orchestrates catalog sync pipeline for Nordstrom across inventory, sap, snowflake.
naftiko: "0.5"
info:
label: "Catalog Sync Pipeline"
description: "Orchestrates catalog sync pipeline for Nordstrom across inventory, sap, snowflake."
tags:
- inventory
- sap
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: merchandising
port: 8080
tools:
- name: catalog-sync-pipeline
description: "Orchestrates catalog sync pipeline for Nordstrom across inventory, sap, snowflake."
inputParameters:
- name: store_id
type: string
description: "Store or entity identifier."
- name: date
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: query-data
type: call
call: snowflake.run-query
with:
statement: "SELECT * FROM CATALOG_SYNC_PIPELINE"
- name: check-erp
type: call
call: sap.get-data
with:
entity: "{{store_id}}"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "ops-{{store_id}}"
text: "Catalog Sync Pipeline done."
consumes:
- type: http
namespace: snowflake
baseUri: "https://nordstrom.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: sap
baseUri: "https://nordstrom-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: entities
path: "/A_BusinessPartner"
operations:
- name: get-data
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
operations:
- name: send-message
method: POST
Orchestrates churn prevention pipeline for Nordstrom across loyalty, snowflake, salesforce.
naftiko: "0.5"
info:
label: "Churn Prevention Pipeline"
description: "Orchestrates churn prevention pipeline for Nordstrom across loyalty, snowflake, salesforce."
tags:
- loyalty
- snowflake
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: loyalty-ops
port: 8080
tools:
- name: churn-prevention-pipeline
description: "Orchestrates churn prevention pipeline for Nordstrom across loyalty, snowflake, salesforce."
inputParameters:
- name: store_id
type: string
description: "Store or entity identifier."
- name: date
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: query-data
type: call
call: snowflake.run-query
with:
statement: "SELECT * FROM CHURN_PREVENTION_PIPELINE"
- name: get-sf
type: call
call: salesforce.query
with:
q: "SELECT Id FROM Account"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "ops-{{store_id}}"
text: "Churn Prevention Pipeline done."
consumes:
- type: http
namespace: snowflake
baseUri: "https://nordstrom.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: salesforce
baseUri: "https://nordstrom.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: query
path: "/query"
operations:
- name: query
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
operations:
- name: send-message
method: POST
Queries Cloudflare analytics for Nordstrom web properties, returning bandwidth, cache hit ratio, and threat counts.
naftiko: "0.5"
info:
label: "Cloudflare CDN Performance Check"
description: "Queries Cloudflare analytics for Nordstrom web properties, returning bandwidth, cache hit ratio, and threat counts."
tags:
- infrastructure
- cloudflare
- cdn
capability:
exposes:
- type: mcp
namespace: cdn
port: 8080
tools:
- name: get-cdn-performance
description: "Retrieve Cloudflare CDN performance metrics for a given zone."
inputParameters:
- name: zone_id
in: body
type: string
description: "The Cloudflare zone identifier."
call: "cloudflare.get-zone-analytics"
with:
zone_id: "{{zone_id}}"
outputParameters:
- name: bandwidth
type: string
mapping: "$.result.totals.bandwidth.all"
- name: cache_hit_ratio
type: string
mapping: "$.result.totals.bandwidth.cached"
- name: threats
type: string
mapping: "$.result.totals.threats.all"
consumes:
- type: http
namespace: cloudflare
baseUri: "https://api.cloudflare.com/client/v4"
authentication:
type: bearer
token: "$secrets.cloudflare_token"
resources:
- name: zone-analytics
path: "/zones/{{zone_id}}/analytics/dashboard"
inputParameters:
- name: zone_id
in: path
operations:
- name: get-zone-analytics
method: GET
Orchestrates compliance review pipeline for Nordstrom across compliance, servicenow, snowflake.
naftiko: "0.5"
info:
label: "Compliance Review Pipeline"
description: "Orchestrates compliance review pipeline for Nordstrom across compliance, servicenow, snowflake."
tags:
- compliance
- servicenow
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: compliance
port: 8080
tools:
- name: compliance-review-pipeline
description: "Orchestrates compliance review pipeline for Nordstrom across compliance, servicenow, snowflake."
inputParameters:
- name: store_id
type: string
description: "Store or entity identifier."
- name: date
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: query-data
type: call
call: snowflake.run-query
with:
statement: "SELECT * FROM COMPLIANCE_REVIEW_PIPELINE"
- name: create-ticket
type: call
call: servicenow.create-incident
with:
short_description: "Compliance Review Pipeline — {{store_id}}"
category: "compliance"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "ops-{{store_id}}"
text: "Compliance Review Pipeline done."
consumes:
- type: http
namespace: snowflake
baseUri: "https://nordstrom.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://nordstrom.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: channels
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
operations:
- name: send-message
method: POST
Searches the Nordstrom Confluence knowledge base by keyword.
naftiko: "0.5"
info:
label: "Confluence Knowledge Base Search"
description: "Searches the Nordstrom Confluence knowledge base by keyword."
tags:
- knowledge-management
- confluence
capability:
exposes:
- type: mcp
namespace: knowledge
port: 8080
tools:
- name: search-knowledge-base
description: "Search Confluence knowledge base by keyword."
inputParameters:
- name: query
in: body
type: string
description: "The search query keywords."
call: "confluence.search"
with:
query: "{{query}}"
outputParameters:
- name: results
type: array
mapping: "$.results"
- name: total_count
type: string
mapping: "$.totalSize"
consumes:
- type: http
namespace: confluence
baseUri: "https://nordstrom.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: search
path: "/search?cql=text~'{{query}}'"
inputParameters:
- name: query
in: query
operations:
- name: search
method: GET
Orchestrates contract renewal alerts for Nordstrom across procurement, sap, servicenow.
naftiko: "0.5"
info:
label: "Contract Renewal Alerts"
description: "Orchestrates contract renewal alerts for Nordstrom across procurement, sap, servicenow."
tags:
- procurement
- sap
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: procurement-ops
port: 8080
tools:
- name: contract-renewal-alerts
description: "Orchestrates contract renewal alerts for Nordstrom across procurement, sap, servicenow."
inputParameters:
- name: store_id
type: string
description: "Store or entity identifier."
- name: date
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: check-erp
type: call
call: sap.get-data
with:
entity: "{{store_id}}"
- name: create-ticket
type: call
call: servicenow.create-incident
with:
short_description: "Contract Renewal Alerts — {{store_id}}"
category: "procurement"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "ops-{{store_id}}"
text: "Contract Renewal Alerts done."
consumes:
- type: http
namespace: sap
baseUri: "https://nordstrom-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: entities
path: "/A_BusinessPartner"
operations:
- name: get-data
method: GET
- type: http
namespace: servicenow
baseUri: "https://nordstrom.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: channels
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
operations:
- name: send-message
method: POST
Orchestrates cost optimization pipeline for Nordstrom across infrastructure, snowflake, servicenow.
naftiko: "0.5"
info:
label: "Cost Optimization Pipeline"
description: "Orchestrates cost optimization pipeline for Nordstrom across infrastructure, snowflake, servicenow."
tags:
- infrastructure
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: finops
port: 8080
tools:
- name: cost-optimization-pipeline
description: "Orchestrates cost optimization pipeline for Nordstrom across infrastructure, snowflake, servicenow."
inputParameters:
- name: store_id
type: string
description: "Store or entity identifier."
- name: date
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: query-data
type: call
call: snowflake.run-query
with:
statement: "SELECT * FROM COST_OPTIMIZATION_PIPELINE"
- name: create-ticket
type: call
call: servicenow.create-incident
with:
short_description: "Cost Optimization Pipeline — {{store_id}}"
category: "infrastructure"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "ops-{{store_id}}"
text: "Cost Optimization Pipeline done."
consumes:
- type: http
namespace: snowflake
baseUri: "https://nordstrom.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://nordstrom.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: channels
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
operations:
- name: send-message
method: POST
Orchestrates customer feedback analysis for Nordstrom across customer-service, salesforce, snowflake.
naftiko: "0.5"
info:
label: "Customer Feedback Analysis"
description: "Orchestrates customer feedback analysis for Nordstrom across customer-service, salesforce, snowflake."
tags:
- customer-service
- salesforce
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: analytics
port: 8080
tools:
- name: customer-feedback-analysis
description: "Orchestrates customer feedback analysis for Nordstrom across customer-service, salesforce, snowflake."
inputParameters:
- name: store_id
type: string
description: "Store or entity identifier."
- name: date
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: query-data
type: call
call: snowflake.run-query
with:
statement: "SELECT * FROM CUSTOMER_FEEDBACK_ANALYSIS"
- name: get-sf
type: call
call: salesforce.query
with:
q: "SELECT Id FROM Account"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "ops-{{store_id}}"
text: "Customer Feedback Analysis done."
consumes:
- type: http
namespace: snowflake
baseUri: "https://nordstrom.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: salesforce
baseUri: "https://nordstrom.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: query
path: "/query"
operations:
- name: query
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
operations:
- name: send-message
method: POST
Orchestrates customer order resolution workflow for Nordstrom across customer-service, salesforce, snowflake.
naftiko: "0.5"
info:
label: "Customer Order Resolution Workflow"
description: "Orchestrates customer order resolution workflow for Nordstrom across customer-service, salesforce, snowflake."
tags:
- customer-service
- salesforce
- snowflake
- servicenow
capability:
exposes:
- type: mcp
namespace: customer-ops
port: 8080
tools:
- name: customer-order-resolution-workflow
description: "Orchestrates customer order resolution workflow for Nordstrom across customer-service, salesforce, snowflake."
inputParameters:
- name: store_id
type: string
description: "Store or entity identifier."
- name: date
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: query-data
type: call
call: snowflake.run-query
with:
statement: "SELECT * FROM CUSTOMER_ORDER_RESOLUTION_WORKFLOW"
- name: get-sf
type: call
call: salesforce.query
with:
q: "SELECT Id FROM Account"
- name: create-ticket
type: call
call: servicenow.create-incident
with:
short_description: "Customer Order Resolution Workflow — {{store_id}}"
category: "customer-service"
consumes:
- type: http
namespace: snowflake
baseUri: "https://nordstrom.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: salesforce
baseUri: "https://nordstrom.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: query
path: "/query"
operations:
- name: query
method: GET
- type: http
namespace: servicenow
baseUri: "https://nordstrom.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
Retrieves the status of a customer order from Salesforce Commerce Cloud by order number, returning order status, shipping status, and estimated delivery date.
naftiko: "0.5"
info:
label: "Customer Order Status Lookup"
description: "Retrieves the status of a customer order from Salesforce Commerce Cloud by order number, returning order status, shipping status, and estimated delivery date."
tags:
- e-commerce
- order-management
- salesforce
capability:
exposes:
- type: mcp
namespace: orders
port: 8080
tools:
- name: get-order-status
description: "Look up a customer order by order number."
inputParameters:
- name: order_number
in: body
type: string
description: "The customer order number."
call: "salesforce.get-order"
with:
order_number: "{{order_number}}"
outputParameters:
- name: order_status
type: string
mapping: "$.Status"
- name: shipping_status
type: string
mapping: "$.Shipping_Status__c"
- name: estimated_delivery
type: string
mapping: "$.Estimated_Delivery__c"
- name: total_amount
type: string
mapping: "$.TotalAmount"
consumes:
- type: http
namespace: salesforce
baseUri: "https://nordstrom.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: orders
path: "/sobjects/Order/{{order_number}}"
inputParameters:
- name: order_number
in: path
operations:
- name: get-order
method: GET
Orchestrates cx survey pipeline for Nordstrom across customer-service, salesforce, snowflake.
naftiko: "0.5"
info:
label: "Cx Survey Pipeline"
description: "Orchestrates cx survey pipeline for Nordstrom across customer-service, salesforce, snowflake."
tags:
- customer-service
- salesforce
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: customer-ops
port: 8080
tools:
- name: cx-survey-pipeline
description: "Orchestrates cx survey pipeline for Nordstrom across customer-service, salesforce, snowflake."
inputParameters:
- name: store_id
type: string
description: "Store or entity identifier."
- name: date
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: query-data
type: call
call: snowflake.run-query
with:
statement: "SELECT * FROM CX_SURVEY_PIPELINE"
- name: get-sf
type: call
call: salesforce.query
with:
q: "SELECT Id FROM Account"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "ops-{{store_id}}"
text: "Cx Survey Pipeline done."
consumes:
- type: http
namespace: snowflake
baseUri: "https://nordstrom.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: salesforce
baseUri: "https://nordstrom.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: query
path: "/query"
operations:
- name: query
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
operations:
- name: send-message
method: POST
Orchestrates daily ops report for Nordstrom across store-ops, snowflake, datadog.
naftiko: "0.5"
info:
label: "Daily Ops Report"
description: "Orchestrates daily ops report for Nordstrom across store-ops, snowflake, datadog."
tags:
- store-ops
- snowflake
- datadog
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: store-ops
port: 8080
tools:
- name: daily-ops-report
description: "Orchestrates daily ops report for Nordstrom across store-ops, snowflake, datadog."
inputParameters:
- name: store_id
type: string
description: "Store or entity identifier."
- name: date
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: query-data
type: call
call: snowflake.run-query
with:
statement: "SELECT * FROM DAILY_OPS_REPORT"
- name: check-health
type: call
call: datadog.get-monitor
with:
monitor_id: "store-{{store_id}}"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "ops-{{store_id}}"
text: "Daily Ops Report done."
consumes:
- type: http
namespace: snowflake
baseUri: "https://nordstrom.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: monitors
path: "/monitor/{{monitor_id}}"
inputParameters:
- name: monitor_id
in: path
operations:
- name: get-monitor
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
operations:
- name: send-message
method: POST
Queries Datadog for the current health status of Nordstrom infrastructure.
naftiko: "0.5"
info:
label: "Datadog Infrastructure Health Check"
description: "Queries Datadog for the current health status of Nordstrom infrastructure."
tags:
- infrastructure
- monitoring
- datadog
capability:
exposes:
- type: mcp
namespace: infra-monitoring
port: 8080
tools:
- name: get-infra-health
description: "Retrieve Datadog infrastructure health summary."
inputParameters:
- name: environment
in: body
type: string
description: "The environment to check (production, staging)."
call: "datadog.get-monitors"
with:
environment: "{{environment}}"
outputParameters:
- name: total_hosts
type: string
mapping: "$.total_hosts"
- name: active_alerts
type: string
mapping: "$.alert_count"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
resources:
- name: monitors
path: "/monitor"
operations:
- name: get-monitors
method: GET
Checks Datadog monitor status for Nordstrom.
naftiko: "0.5"
info:
label: "Datadog Monitor Health"
description: "Checks Datadog monitor status for Nordstrom."
tags:
- monitoring
- datadog
- infrastructure
capability:
exposes:
- type: mcp
namespace: monitoring
port: 8080
tools:
- name: check-monitor
description: "Check Datadog monitor."
inputParameters:
- name: monitor_id
type: string
description: "Monitor ID."
call: datadog.get-monitor
with:
monitor_id: "{{monitor_id}}"
outputParameters:
- name: state
type: string
mapping: "$.overall_state"
- name: name
type: string
mapping: "$.name"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: monitors
path: "/monitor/{{monitor_id}}"
inputParameters:
- name: monitor_id
in: path
operations:
- name: get-monitor
method: GET
Checks synthetic test for Nordstrom.
naftiko: "0.5"
info:
label: "Datadog Synthetic Test"
description: "Checks synthetic test for Nordstrom."
tags:
- monitoring
- datadog
- e-commerce
capability:
exposes:
- type: mcp
namespace: monitoring
port: 8080
tools:
- name: get-synthetic
description: "Check synthetic."
inputParameters:
- name: test_id
type: string
description: "Test ID."
call: datadog.get-test
with:
test_id: "{{test_id}}"
outputParameters:
- name: status
type: string
mapping: "$.results[0].status"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: synthetics
path: "/synthetics/tests/{{test_id}}/results"
inputParameters:
- name: test_id
in: path
operations:
- name: get-test
method: GET
Queries Dynatrace for application health metrics for Nordstrom digital services.
naftiko: "0.5"
info:
label: "Dynatrace Application Health Check"
description: "Queries Dynatrace for application health metrics for Nordstrom digital services."
tags:
- monitoring
- dynatrace
- application-health
capability:
exposes:
- type: mcp
namespace: app-health
port: 8080
tools:
- name: get-dynatrace-health
description: "Retrieve Dynatrace application health metrics by entity ID."
inputParameters:
- name: entity_id
in: body
type: string
description: "The Dynatrace application entity ID."
call: "dynatrace.get-app-health"
with:
entity_id: "{{entity_id}}"
outputParameters:
- name: availability
type: string
mapping: "$.result[0].data[0].values[0]"
- name: response_time
type: string
mapping: "$.result[1].data[0].values[0]"
- name: failure_rate
type: string
mapping: "$.result[2].data[0].values[0]"
consumes:
- type: http
namespace: dynatrace
baseUri: "https://nordstrom.live.dynatrace.com/api/v2"
authentication:
type: bearer
token: "$secrets.dynatrace_token"
resources:
- name: metrics
path: "/metrics/query"
operations:
- name: get-app-health
method: POST
Searches the Nordstrom product catalog via Elasticsearch by keyword, returning product name, price, availability, and brand.
naftiko: "0.5"
info:
label: "E-Commerce Product Search"
description: "Searches the Nordstrom product catalog via Elasticsearch by keyword, returning product name, price, availability, and brand."
tags:
- e-commerce
- product-catalog
- elasticsearch
capability:
exposes:
- type: mcp
namespace: catalog
port: 8080
tools:
- name: search-products
description: "Search the product catalog by keyword."
inputParameters:
- name: query
in: body
type: string
description: "The search query keywords."
- name: category
in: body
type: string
description: "Product category filter."
call: "elasticsearch.search-products"
with:
query: "{{query}}"
category: "{{category}}"
outputParameters:
- name: products
type: array
mapping: "$.hits.hits"
- name: total_results
type: string
mapping: "$.hits.total.value"
consumes:
- type: http
namespace: elasticsearch
baseUri: "https://nordstrom-catalog.es.amazonaws.com"
authentication:
type: bearer
token: "$secrets.elasticsearch_token"
resources:
- name: products
path: "/products/_search"
operations:
- name: search-products
method: POST
Orchestrates emergency notification pipeline for Nordstrom across store-ops, workday, microsoft-teams.
naftiko: "0.5"
info:
label: "Emergency Notification Pipeline"
description: "Orchestrates emergency notification pipeline for Nordstrom across store-ops, workday, microsoft-teams."
tags:
- store-ops
- workday
- microsoft-teams
- servicenow
capability:
exposes:
- type: mcp
namespace: emergency-ops
port: 8080
tools:
- name: emergency-notification-pipeline
description: "Orchestrates emergency notification pipeline for Nordstrom across store-ops, workday, microsoft-teams."
inputParameters:
- name: store_id
type: string
description: "Store or entity identifier."
- name: date
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: create-ticket
type: call
call: servicenow.create-incident
with:
short_description: "Emergency Notification Pipeline — {{store_id}}"
category: "store-ops"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "ops-{{store_id}}"
text: "Emergency Notification Pipeline done."
- name: get-hr
type: call
call: workday.get-workers
with:
store: "{{store_id}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://nordstrom.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: channels
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
operations:
- name: send-message
method: POST
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/nordstrom/workers"
operations:
- name: get-workers
method: GET
On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint folder, and sends a Microsoft Teams welcome message.
naftiko: "0.5"
info:
label: "Employee Onboarding Orchestrator"
description: "On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint folder, and sends a Microsoft Teams welcome message."
tags:
- hr
- onboarding
- workday
- servicenow
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-onboarding
port: 8080
tools:
- name: trigger-onboarding
description: "Given a Workday employee ID and start date, orchestrate onboarding across ServiceNow, SharePoint, and Microsoft Teams."
inputParameters:
- name: workday_employee_id
in: body
type: string
description: "The Workday worker ID."
- name: start_date
in: body
type: string
description: "Employee start date in YYYY-MM-DD format."
- name: department
in: body
type: string
description: "The department the new hire is joining."
steps:
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{workday_employee_id}}"
- name: open-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "New hire onboarding: {{get-employee.full_name}}"
category: "hr_onboarding"
- name: provision-folder
type: call
call: "sharepoint.create-folder"
with:
site_id: "hr_onboarding_site"
folder_path: "OnboardingDocs/{{get-employee.full_name}}_{{start_date}}"
- name: send-welcome
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{get-employee.work_email}}"
text: "Welcome to Nordstrom, {{get-employee.first_name}}! Your onboarding ticket is {{open-ticket.number}}."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://nordstrom.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
Orchestrates employee promotion workflow for Nordstrom across hr, workday, servicenow.
naftiko: "0.5"
info:
label: "Employee Promotion Workflow"
description: "Orchestrates employee promotion workflow for Nordstrom across hr, workday, servicenow."
tags:
- hr
- workday
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-ops
port: 8080
tools:
- name: employee-promotion-workflow
description: "Orchestrates employee promotion workflow for Nordstrom across hr, workday, servicenow."
inputParameters:
- name: store_id
type: string
description: "Store or entity identifier."
- name: date
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: create-ticket
type: call
call: servicenow.create-incident
with:
short_description: "Employee Promotion Workflow — {{store_id}}"
category: "hr"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "ops-{{store_id}}"
text: "Employee Promotion Workflow done."
- name: get-hr
type: call
call: workday.get-workers
with:
store: "{{store_id}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://nordstrom.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: channels
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
operations:
- name: send-message
method: POST
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/nordstrom/workers"
operations:
- name: get-workers
method: GET
Orchestrates energy monitoring pipeline for Nordstrom across store-ops, snowflake, sap.
naftiko: "0.5"
info:
label: "Energy Monitoring Pipeline"
description: "Orchestrates energy monitoring pipeline for Nordstrom across store-ops, snowflake, sap."
tags:
- store-ops
- snowflake
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: facilities
port: 8080
tools:
- name: energy-monitoring-pipeline
description: "Orchestrates energy monitoring pipeline for Nordstrom across store-ops, snowflake, sap."
inputParameters:
- name: store_id
type: string
description: "Store or entity identifier."
- name: date
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: query-data
type: call
call: snowflake.run-query
with:
statement: "SELECT * FROM ENERGY_MONITORING_PIPELINE"
- name: check-erp
type: call
call: sap.get-data
with:
entity: "{{store_id}}"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "ops-{{store_id}}"
text: "Energy Monitoring Pipeline done."
consumes:
- type: http
namespace: snowflake
baseUri: "https://nordstrom.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: sap
baseUri: "https://nordstrom-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: entities
path: "/A_BusinessPartner"
operations:
- name: get-data
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
operations:
- name: send-message
method: POST
Orchestrates eod reconciliation for Nordstrom across store-ops, snowflake, sap.
naftiko: "0.5"
info:
label: "Eod Reconciliation"
description: "Orchestrates eod reconciliation for Nordstrom across store-ops, snowflake, sap."
tags:
- store-ops
- snowflake
- sap
- servicenow
capability:
exposes:
- type: mcp
namespace: finance-ops
port: 8080
tools:
- name: eod-reconciliation
description: "Orchestrates eod reconciliation for Nordstrom across store-ops, snowflake, sap."
inputParameters:
- name: store_id
type: string
description: "Store or entity identifier."
- name: date
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: query-data
type: call
call: snowflake.run-query
with:
statement: "SELECT * FROM EOD_RECONCILIATION"
- name: check-erp
type: call
call: sap.get-data
with:
entity: "{{store_id}}"
- name: create-ticket
type: call
call: servicenow.create-incident
with:
short_description: "Eod Reconciliation — {{store_id}}"
category: "store-ops"
consumes:
- type: http
namespace: snowflake
baseUri: "https://nordstrom.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: sap
baseUri: "https://nordstrom-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: entities
path: "/A_BusinessPartner"
operations:
- name: get-data
method: GET
- type: http
namespace: servicenow
baseUri: "https://nordstrom.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
Retrieves ad campaign performance metrics from Meta/Facebook Marketing API.
naftiko: "0.5"
info:
label: "Facebook Campaign Performance Lookup"
description: "Retrieves ad campaign performance metrics from Meta/Facebook Marketing API."
tags:
- marketing
- facebook
- meta
- advertising
capability:
exposes:
- type: mcp
namespace: social-advertising
port: 8080
tools:
- name: get-fb-campaign
description: "Look up Facebook ad campaign metrics by campaign ID."
inputParameters:
- name: campaign_id
in: body
type: string
description: "The Facebook campaign identifier."
call: "facebook.get-campaign-insights"
with:
campaign_id: "{{campaign_id}}"
outputParameters:
- name: impressions
type: string
mapping: "$.data[0].impressions"
- name: reach
type: string
mapping: "$.data[0].reach"
- name: spend
type: string
mapping: "$.data[0].spend"
consumes:
- type: http
namespace: facebook
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.facebook_token"
resources:
- name: insights
path: "/{{campaign_id}}/insights"
inputParameters:
- name: campaign_id
in: path
operations:
- name: get-campaign-insights
method: GET
Orchestrates gift card inquiry handler for Nordstrom across e-commerce, salesforce, snowflake.
naftiko: "0.5"
info:
label: "Gift Card Inquiry Handler"
description: "Orchestrates gift card inquiry handler for Nordstrom across e-commerce, salesforce, snowflake."
tags:
- e-commerce
- salesforce
- snowflake
- servicenow
capability:
exposes:
- type: mcp
namespace: customer-ops
port: 8080
tools:
- name: gift-card-inquiry-handler
description: "Orchestrates gift card inquiry handler for Nordstrom across e-commerce, salesforce, snowflake."
inputParameters:
- name: store_id
type: string
description: "Store or entity identifier."
- name: date
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: query-data
type: call
call: snowflake.run-query
with:
statement: "SELECT * FROM GIFT_CARD_INQUIRY_HANDLER"
- name: get-sf
type: call
call: salesforce.query
with:
q: "SELECT Id FROM Account"
- name: create-ticket
type: call
call: servicenow.create-incident
with:
short_description: "Gift Card Inquiry Handler — {{store_id}}"
category: "e-commerce"
consumes:
- type: http
namespace: snowflake
baseUri: "https://nordstrom.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: salesforce
baseUri: "https://nordstrom.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: query
path: "/query"
operations:
- name: query
method: GET
- type: http
namespace: servicenow
baseUri: "https://nordstrom.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
Retrieves GitHub repo info for Nordstrom.
naftiko: "0.5"
info:
label: "GitHub Repository Info"
description: "Retrieves GitHub repo info for Nordstrom."
tags:
- devops
- github
- infrastructure
capability:
exposes:
- type: mcp
namespace: devops
port: 8080
tools:
- name: get-repo-info
description: "Get GitHub repo info."
inputParameters:
- name: repo
type: string
description: "Repository."
call: github.get-repo
with:
repo: "{{repo}}"
outputParameters:
- name: branch
type: string
mapping: "$.default_branch"
- name: issues
type: integer
mapping: "$.open_issues_count"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: repos
path: "/repos/{{repo}}"
inputParameters:
- name: repo
in: path
operations:
- name: get-repo
method: GET
Retrieves the current status of a Nordstrom GitHub repository.
naftiko: "0.5"
info:
label: "GitHub Repository Status"
description: "Retrieves the current status of a Nordstrom GitHub repository."
tags:
- development
- github
capability:
exposes:
- type: mcp
namespace: dev-ops
port: 8080
tools:
- name: get-repo-status
description: "Look up GitHub repository status by repo name."
inputParameters:
- name: repo_name
in: body
type: string
description: "The GitHub repository name."
call: "github.get-repo"
with:
repo: "{{repo_name}}"
outputParameters:
- name: open_prs
type: string
mapping: "$.open_issues_count"
- name: default_branch
type: string
mapping: "$.default_branch"
- name: last_push
type: string
mapping: "$.pushed_at"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: repos
path: "/repos/nordstrom/{{repo}}"
inputParameters:
- name: repo
in: path
operations:
- name: get-repo
method: GET
Checks workflow for Nordstrom.
naftiko: "0.5"
info:
label: "GitHub Workflow Status"
description: "Checks workflow for Nordstrom."
tags:
- devops
- github
- infrastructure
capability:
exposes:
- type: mcp
namespace: devops
port: 8080
tools:
- name: get-wf
description: "Check workflow."
inputParameters:
- name: repo
type: string
description: "Repo."
- name: wf
type: string
description: "Workflow."
call: github.get-run
with:
repo: "{{repo}}"
wf: "{{wf}}"
outputParameters:
- name: conclusion
type: string
mapping: "$.workflow_runs[0].conclusion"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: runs
path: "/repos/{{repo}}/actions/workflows/{{wf}}/runs?per_page=1"
inputParameters:
- name: repo
in: path
- name: wf
in: path
operations:
- name: get-run
method: GET
Retrieves Google Ads campaign performance metrics for Nordstrom digital marketing.
naftiko: "0.5"
info:
label: "Google Ads Campaign Performance"
description: "Retrieves Google Ads campaign performance metrics for Nordstrom digital marketing."
tags:
- marketing
- google-ads
- advertising
capability:
exposes:
- type: mcp
namespace: paid-media
port: 8080
tools:
- name: get-google-ads-performance
description: "Fetch Google Ads campaign metrics by campaign ID."
inputParameters:
- name: campaign_id
in: body
type: string
description: "The Google Ads campaign identifier."
call: "googleads.get-campaign-metrics"
with:
campaign_id: "{{campaign_id}}"
outputParameters:
- name: impressions
type: string
mapping: "$.results[0].metrics.impressions"
- name: clicks
type: string
mapping: "$.results[0].metrics.clicks"
- name: cost
type: string
mapping: "$.results[0].metrics.costMicros"
consumes:
- type: http
namespace: googleads
baseUri: "https://googleads.googleapis.com/v15"
authentication:
type: bearer
token: "$secrets.google_ads_token"
resources:
- name: campaigns
path: "/customers/{{customer_id}}/googleAds:searchStream"
inputParameters:
- name: customer_id
in: path
operations:
- name: get-campaign-metrics
method: POST
Retrieves e-commerce performance metrics from Google Analytics for Nordstrom.com, returning revenue, conversion rate, and average order value.
naftiko: "0.5"
info:
label: "Google Analytics E-Commerce Metrics"
description: "Retrieves e-commerce performance metrics from Google Analytics for Nordstrom.com, returning revenue, conversion rate, and average order value."
tags:
- e-commerce
- analytics
- google-analytics
capability:
exposes:
- type: mcp
namespace: e-commerce-analytics
port: 8080
tools:
- name: get-ecommerce-metrics
description: "Fetch e-commerce metrics from Google Analytics by date range."
inputParameters:
- name: start_date
in: body
type: string
description: "Start date in YYYY-MM-DD format."
- name: end_date
in: body
type: string
description: "End date in YYYY-MM-DD format."
call: "google-analytics.run-report"
with:
start_date: "{{start_date}}"
end_date: "{{end_date}}"
outputParameters:
- name: revenue
type: string
mapping: "$.rows[0].metricValues[0].value"
- name: conversion_rate
type: string
mapping: "$.rows[0].metricValues[1].value"
- name: avg_order_value
type: string
mapping: "$.rows[0].metricValues[2].value"
consumes:
- type: http
namespace: google-analytics
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
Provides store location and directions using Google Maps for a given customer address, returning nearest store, distance, and travel time.
naftiko: "0.5"
info:
label: "Google Maps Store Locator"
description: "Provides store location and directions using Google Maps for a given customer address, returning nearest store, distance, and travel time."
tags:
- retail
- store-locator
- google-maps
capability:
exposes:
- type: mcp
namespace: store-locator
port: 8080
tools:
- name: find-nearest-store
description: "Find the nearest Nordstrom store to a given address."
inputParameters:
- name: customer_address
in: body
type: string
description: "The customer's address or ZIP code."
call: "googlemaps.find-store"
with:
address: "{{customer_address}}"
outputParameters:
- name: store_name
type: string
mapping: "$.results[0].name"
- name: distance
type: string
mapping: "$.results[0].distance.text"
- name: travel_time
type: string
mapping: "$.results[0].duration.text"
consumes:
- type: http
namespace: googlemaps
baseUri: "https://maps.googleapis.com/maps/api"
authentication:
type: apiKey
key: "$secrets.google_maps_key"
resources:
- name: places
path: "/place/nearbysearch/json?keyword=Nordstrom&location={{address}}&rankby=distance"
inputParameters:
- name: address
in: query
operations:
- name: find-store
method: GET
Captures leads from HubSpot forms, enriches with ZoomInfo data, creates contacts in Salesforce, and assigns to the appropriate sales team via Microsoft Teams notification.
naftiko: "0.5"
info:
label: "HubSpot Lead Capture Pipeline"
description: "Captures leads from HubSpot forms, enriches with ZoomInfo data, creates contacts in Salesforce, and assigns to the appropriate sales team via Microsoft Teams notification."
tags:
- marketing
- lead-capture
- hubspot
- zoominfo
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: lead-management
port: 8080
tools:
- name: process-lead
description: "Given a HubSpot form submission ID, enrich with ZoomInfo, create in Salesforce, and notify sales."
inputParameters:
- name: submission_id
in: body
type: string
description: "The HubSpot form submission identifier."
steps:
- name: get-submission
type: call
call: "hubspot.get-form-submission"
with:
submission_id: "{{submission_id}}"
- name: enrich-data
type: call
call: "zoominfo.enrich-contact"
with:
email: "{{get-submission.email}}"
- name: create-lead
type: call
call: "salesforce.create-lead"
with:
name: "{{get-submission.name}}"
email: "{{get-submission.email}}"
company: "{{enrich-data.company}}"
title: "{{enrich-data.title}}"
- name: notify-sales
type: call
call: "msteams.send-message"
with:
channel_id: "sales-leads"
text: "New lead: {{get-submission.name}} from {{enrich-data.company}} ({{enrich-data.title}}). Salesforce: {{create-lead.id}}."
consumes:
- type: http
namespace: hubspot
baseUri: "https://api.hubapi.com"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: submissions
path: "/form-integrations/v1/submissions/{{submission_id}}"
inputParameters:
- name: submission_id
in: path
operations:
- name: get-form-submission
method: GET
- type: http
namespace: zoominfo
baseUri: "https://api.zoominfo.com/v2"
authentication:
type: bearer
token: "$secrets.zoominfo_token"
resources:
- name: contacts
path: "/contacts/enrich"
operations:
- name: enrich-contact
method: POST
- type: http
namespace: salesforce
baseUri: "https://nordstrom.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: leads
path: "/sobjects/Lead"
operations:
- name: create-lead
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: send-message
method: POST
Creates shoppable Instagram posts by generating product images via Adobe Creative Cloud, publishing to Instagram, and tracking engagement in Google Analytics.
naftiko: "0.5"
info:
label: "Instagram Social Commerce Post"
description: "Creates shoppable Instagram posts by generating product images via Adobe Creative Cloud, publishing to Instagram, and tracking engagement in Google Analytics."
tags:
- marketing
- social-commerce
- adobe-creative-cloud
- instagram
- google-analytics
capability:
exposes:
- type: mcp
namespace: social-commerce
port: 8080
tools:
- name: create-shoppable-post
description: "Given a product ID and campaign name, create visual assets, post to Instagram, and set up tracking."
inputParameters:
- name: product_id
in: body
type: string
description: "The product identifier."
- name: campaign_name
in: body
type: string
description: "The marketing campaign name."
- name: caption
in: body
type: string
description: "The Instagram post caption."
steps:
- name: create-assets
type: call
call: "adobe-cc.generate-product-image"
with:
product_id: "{{product_id}}"
template: "instagram_square"
- name: publish-post
type: call
call: "instagram.create-post"
with:
image_url: "{{create-assets.image_url}}"
caption: "{{caption}} #Nordstrom #ShopNow"
- name: track-engagement
type: call
call: "google-analytics.create-campaign-tracking"
with:
campaign_name: "{{campaign_name}}"
source: "instagram"
medium: "social"
consumes:
- type: http
namespace: adobe-cc
baseUri: "https://cc-api-storage.adobe.io/v1"
authentication:
type: bearer
token: "$secrets.adobe_cc_token"
resources:
- name: images
path: "/renditions"
operations:
- name: generate-product-image
method: POST
- type: http
namespace: instagram
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.instagram_token"
resources:
- name: media
path: "/{{ig_user_id}}/media"
inputParameters:
- name: ig_user_id
in: path
operations:
- name: create-post
method: POST
- type: http
namespace: google-analytics
baseUri: "https://analyticsdata.googleapis.com/v1beta"
authentication:
type: bearer
token: "$secrets.google_analytics_token"
resources:
- name: campaign-tracking
path: "/properties/{{property_id}}/customDimensions"
inputParameters:
- name: property_id
in: path
operations:
- name: create-campaign-tracking
method: POST
Orchestrates inventory audit pipeline for Nordstrom across inventory, sap, snowflake.
naftiko: "0.5"
info:
label: "Inventory Audit Pipeline"
description: "Orchestrates inventory audit pipeline for Nordstrom across inventory, sap, snowflake."
tags:
- inventory
- sap
- snowflake
- servicenow
capability:
exposes:
- type: mcp
namespace: inventory-ops
port: 8080
tools:
- name: inventory-audit-pipeline
description: "Orchestrates inventory audit pipeline for Nordstrom across inventory, sap, snowflake."
inputParameters:
- name: store_id
type: string
description: "Store or entity identifier."
- name: date
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: query-data
type: call
call: snowflake.run-query
with:
statement: "SELECT * FROM INVENTORY_AUDIT_PIPELINE"
- name: check-erp
type: call
call: sap.get-data
with:
entity: "{{store_id}}"
- name: create-ticket
type: call
call: servicenow.create-incident
with:
short_description: "Inventory Audit Pipeline — {{store_id}}"
category: "inventory"
consumes:
- type: http
namespace: snowflake
baseUri: "https://nordstrom.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: sap
baseUri: "https://nordstrom-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: entities
path: "/A_BusinessPartner"
operations:
- name: get-data
method: GET
- type: http
namespace: servicenow
baseUri: "https://nordstrom.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
Orchestrates it incident escalation for Nordstrom across infrastructure, datadog, servicenow.
naftiko: "0.5"
info:
label: "It Incident Escalation"
description: "Orchestrates it incident escalation for Nordstrom across infrastructure, datadog, servicenow."
tags:
- infrastructure
- datadog
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: it-ops
port: 8080
tools:
- name: it-incident-escalation
description: "Orchestrates it incident escalation for Nordstrom across infrastructure, datadog, servicenow."
inputParameters:
- name: store_id
type: string
description: "Store or entity identifier."
- name: date
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: create-ticket
type: call
call: servicenow.create-incident
with:
short_description: "It Incident Escalation — {{store_id}}"
category: "infrastructure"
- name: check-health
type: call
call: datadog.get-monitor
with:
monitor_id: "store-{{store_id}}"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "ops-{{store_id}}"
text: "It Incident Escalation done."
consumes:
- type: http
namespace: servicenow
baseUri: "https://nordstrom.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: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: monitors
path: "/monitor/{{monitor_id}}"
inputParameters:
- name: monitor_id
in: path
operations:
- name: get-monitor
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
operations:
- name: send-message
method: POST
Retrieves the current sprint status from Jira.
naftiko: "0.5"
info:
label: "Jira Sprint Status Lookup"
description: "Retrieves the current sprint status from Jira."
tags:
- development
- jira
- agile
capability:
exposes:
- type: mcp
namespace: agile
port: 8080
tools:
- name: get-sprint-status
description: "Look up Jira active sprint by board ID."
inputParameters:
- name: board_id
in: body
type: string
description: "The Jira board identifier."
call: "jira.get-active-sprint"
with:
board_id: "{{board_id}}"
outputParameters:
- name: sprint_name
type: string
mapping: "$.values[0].name"
- name: start_date
type: string
mapping: "$.values[0].startDate"
- name: end_date
type: string
mapping: "$.values[0].endDate"
consumes:
- type: http
namespace: jira
baseUri: "https://nordstrom.atlassian.net/rest/agile/1.0"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: sprints
path: "/board/{{board_id}}/sprint?state=active"
inputParameters:
- name: board_id
in: path
operations:
- name: get-active-sprint
method: GET
Orchestrates labor schedule optimizer for Nordstrom across store-ops, snowflake, workday.
naftiko: "0.5"
info:
label: "Labor Schedule Optimizer"
description: "Orchestrates labor schedule optimizer for Nordstrom across store-ops, snowflake, workday."
tags:
- store-ops
- snowflake
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: workforce
port: 8080
tools:
- name: labor-schedule-optimizer
description: "Orchestrates labor schedule optimizer for Nordstrom across store-ops, snowflake, workday."
inputParameters:
- name: store_id
type: string
description: "Store or entity identifier."
- name: date
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: query-data
type: call
call: snowflake.run-query
with:
statement: "SELECT * FROM LABOR_SCHEDULE_OPTIMIZER"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "ops-{{store_id}}"
text: "Labor Schedule Optimizer done."
- name: get-hr
type: call
call: workday.get-workers
with:
store: "{{store_id}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://nordstrom.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
operations:
- name: send-message
method: POST
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/nordstrom/workers"
operations:
- name: get-workers
method: GET
Creates and manages LinkedIn job postings for Nordstrom retail positions.
naftiko: "0.5"
info:
label: "LinkedIn Job Posting Manager"
description: "Creates and manages LinkedIn job postings for Nordstrom retail positions."
tags:
- recruiting
- linkedin
- talent-acquisition
capability:
exposes:
- type: mcp
namespace: recruiting
port: 8080
tools:
- name: create-job-posting
description: "Create a LinkedIn job posting."
inputParameters:
- name: title
in: body
type: string
description: "The job title."
- name: description
in: body
type: string
description: "The job description."
- name: location
in: body
type: string
description: "The job location."
call: "linkedin.create-job"
with:
title: "{{title}}"
description: "{{description}}"
location: "{{location}}"
outputParameters:
- name: job_id
type: string
mapping: "$.id"
- name: status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: jobs
path: "/simpleJobPostings"
operations:
- name: create-job
method: POST
Orchestrates loyalty enrollment pipeline for Nordstrom across loyalty, salesforce, snowflake.
naftiko: "0.5"
info:
label: "Loyalty Enrollment Pipeline"
description: "Orchestrates loyalty enrollment pipeline for Nordstrom across loyalty, salesforce, snowflake."
tags:
- loyalty
- salesforce
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: loyalty-ops
port: 8080
tools:
- name: loyalty-enrollment-pipeline
description: "Orchestrates loyalty enrollment pipeline for Nordstrom across loyalty, salesforce, snowflake."
inputParameters:
- name: store_id
type: string
description: "Store or entity identifier."
- name: date
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: query-data
type: call
call: snowflake.run-query
with:
statement: "SELECT * FROM LOYALTY_ENROLLMENT_PIPELINE"
- name: get-sf
type: call
call: salesforce.query
with:
q: "SELECT Id FROM Account"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "ops-{{store_id}}"
text: "Loyalty Enrollment Pipeline done."
consumes:
- type: http
namespace: snowflake
baseUri: "https://nordstrom.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: salesforce
baseUri: "https://nordstrom.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: query
path: "/query"
operations:
- name: query
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
operations:
- name: send-message
method: POST
Orchestrates loyalty points reconciliation for Nordstrom across loyalty, salesforce, snowflake.
naftiko: "0.5"
info:
label: "Loyalty Points Reconciliation"
description: "Orchestrates loyalty points reconciliation for Nordstrom across loyalty, salesforce, snowflake."
tags:
- loyalty
- salesforce
- snowflake
- servicenow
capability:
exposes:
- type: mcp
namespace: loyalty-ops
port: 8080
tools:
- name: loyalty-points-reconciliation
description: "Orchestrates loyalty points reconciliation for Nordstrom across loyalty, salesforce, snowflake."
inputParameters:
- name: store_id
type: string
description: "Store or entity identifier."
- name: date
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: query-data
type: call
call: snowflake.run-query
with:
statement: "SELECT * FROM LOYALTY_POINTS_RECONCILIATION"
- name: get-sf
type: call
call: salesforce.query
with:
q: "SELECT Id FROM Account"
- name: create-ticket
type: call
call: servicenow.create-incident
with:
short_description: "Loyalty Points Reconciliation — {{store_id}}"
category: "loyalty"
consumes:
- type: http
namespace: snowflake
baseUri: "https://nordstrom.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: salesforce
baseUri: "https://nordstrom.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: query
path: "/query"
operations:
- name: query
method: GET
- type: http
namespace: servicenow
baseUri: "https://nordstrom.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
Processes a loyalty points redemption by validating the member's balance in Salesforce, applying the discount to the order, updating the points ledger, and sending a confirmation via Adobe Campaign.
naftiko: "0.5"
info:
label: "Loyalty Points Redemption Orchestrator"
description: "Processes a loyalty points redemption by validating the member's balance in Salesforce, applying the discount to the order, updating the points ledger, and sending a confirmation via Adobe Campaign."
tags:
- loyalty
- redemption
- salesforce
- adobe-campaign
capability:
exposes:
- type: mcp
namespace: loyalty-redemption
port: 8080
tools:
- name: redeem-loyalty-points
description: "Given a member ID, order ID, and points to redeem, validate balance, apply discount, update ledger, and confirm."
inputParameters:
- name: member_id
in: body
type: string
description: "The loyalty member identifier."
- name: order_id
in: body
type: string
description: "The order to apply redemption to."
- name: points_to_redeem
in: body
type: string
description: "Number of points to redeem."
steps:
- name: validate-balance
type: call
call: "salesforce.get-loyalty-member"
with:
member_id: "{{member_id}}"
- name: apply-discount
type: call
call: "salesforce.apply-loyalty-discount"
with:
order_id: "{{order_id}}"
points: "{{points_to_redeem}}"
member_id: "{{member_id}}"
- name: update-ledger
type: call
call: "salesforce.debit-points"
with:
member_id: "{{member_id}}"
points: "{{points_to_redeem}}"
- name: send-confirmation
type: call
call: "adobe-campaign.trigger-email"
with:
template: "points_redemption"
recipient_email: "{{validate-balance.email}}"
points_redeemed: "{{points_to_redeem}}"
new_balance: "{{update-ledger.new_balance}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://nordstrom.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: loyalty-members
path: "/sobjects/Loyalty_Member__c/{{member_id}}"
inputParameters:
- name: member_id
in: path
operations:
- name: get-loyalty-member
method: GET
- name: loyalty-discounts
path: "/sobjects/Loyalty_Discount__c"
operations:
- name: apply-loyalty-discount
method: POST
- name: points-ledger
path: "/sobjects/Points_Ledger__c"
operations:
- name: debit-points
method: POST
- type: http
namespace: adobe-campaign
baseUri: "https://mc.adobe.io/nordstrom/campaign"
authentication:
type: bearer
token: "$secrets.adobe_campaign_token"
resources:
- name: email-triggers
path: "/profileAndServicesExt/aemTriggerEvent"
operations:
- name: trigger-email
method: POST
Retrieves a Nordy Club loyalty member's profile from Salesforce, returning tier status, points balance, lifetime spend, and reward certificates.
naftiko: "0.5"
info:
label: "Loyalty Program Member Lookup"
description: "Retrieves a Nordy Club loyalty member's profile from Salesforce, returning tier status, points balance, lifetime spend, and reward certificates."
tags:
- loyalty
- customer-experience
- salesforce
capability:
exposes:
- type: mcp
namespace: loyalty
port: 8080
tools:
- name: get-loyalty-member
description: "Look up a Nordy Club loyalty member by member ID."
inputParameters:
- name: member_id
in: body
type: string
description: "The loyalty program member identifier."
call: "salesforce.get-loyalty-member"
with:
member_id: "{{member_id}}"
outputParameters:
- name: tier_status
type: string
mapping: "$.Tier_Status__c"
- name: points_balance
type: string
mapping: "$.Points_Balance__c"
- name: lifetime_spend
type: string
mapping: "$.Lifetime_Spend__c"
consumes:
- type: http
namespace: salesforce
baseUri: "https://nordstrom.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: loyalty-members
path: "/sobjects/Loyalty_Member__c/{{member_id}}"
inputParameters:
- name: member_id
in: path
operations:
- name: get-loyalty-member
method: GET
Retrieves email campaign performance from MailChimp, returning open rate, click rate, and unsubscribe count.
naftiko: "0.5"
info:
label: "MailChimp Campaign Performance Lookup"
description: "Retrieves email campaign performance from MailChimp, returning open rate, click rate, and unsubscribe count."
tags:
- marketing
- mailchimp
- email
capability:
exposes:
- type: mcp
namespace: email-marketing
port: 8080
tools:
- name: get-campaign-performance
description: "Look up MailChimp campaign performance by campaign ID."
inputParameters:
- name: campaign_id
in: body
type: string
description: "The MailChimp campaign identifier."
call: "mailchimp.get-campaign-report"
with:
campaign_id: "{{campaign_id}}"
outputParameters:
- name: open_rate
type: string
mapping: "$.opens.open_rate"
- name: click_rate
type: string
mapping: "$.clicks.click_rate"
- name: unsubscribes
type: string
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: campaign-reports
path: "/reports/{{campaign_id}}"
inputParameters:
- name: campaign_id
in: path
operations:
- name: get-campaign-report
method: GET
Orchestrates maintenance request workflow for Nordstrom across store-ops, servicenow, sap.
naftiko: "0.5"
info:
label: "Maintenance Request Workflow"
description: "Orchestrates maintenance request workflow for Nordstrom across store-ops, servicenow, sap."
tags:
- store-ops
- servicenow
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: facilities
port: 8080
tools:
- name: maintenance-request-workflow
description: "Orchestrates maintenance request workflow for Nordstrom across store-ops, servicenow, sap."
inputParameters:
- name: store_id
type: string
description: "Store or entity identifier."
- name: date
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: check-erp
type: call
call: sap.get-data
with:
entity: "{{store_id}}"
- name: create-ticket
type: call
call: servicenow.create-incident
with:
short_description: "Maintenance Request Workflow — {{store_id}}"
category: "store-ops"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "ops-{{store_id}}"
text: "Maintenance Request Workflow done."
consumes:
- type: http
namespace: sap
baseUri: "https://nordstrom-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: entities
path: "/A_BusinessPartner"
operations:
- name: get-data
method: GET
- type: http
namespace: servicenow
baseUri: "https://nordstrom.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: channels
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
operations:
- name: send-message
method: POST
Orchestrates markdown optimization pipeline for Nordstrom across e-commerce, snowflake, sap.
naftiko: "0.5"
info:
label: "Markdown Optimization Pipeline"
description: "Orchestrates markdown optimization pipeline for Nordstrom across e-commerce, snowflake, sap."
tags:
- e-commerce
- snowflake
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pricing-ops
port: 8080
tools:
- name: markdown-optimization-pipeline
description: "Orchestrates markdown optimization pipeline for Nordstrom across e-commerce, snowflake, sap."
inputParameters:
- name: store_id
type: string
description: "Store or entity identifier."
- name: date
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: query-data
type: call
call: snowflake.run-query
with:
statement: "SELECT * FROM MARKDOWN_OPTIMIZATION_PIPELINE"
- name: check-erp
type: call
call: sap.get-data
with:
entity: "{{store_id}}"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "ops-{{store_id}}"
text: "Markdown Optimization Pipeline done."
consumes:
- type: http
namespace: snowflake
baseUri: "https://nordstrom.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: sap
baseUri: "https://nordstrom-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: entities
path: "/A_BusinessPartner"
operations:
- name: get-data
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
operations:
- name: send-message
method: POST
Orchestrates marketing roi tracker for Nordstrom across marketing, snowflake, salesforce.
naftiko: "0.5"
info:
label: "Marketing Roi Tracker"
description: "Orchestrates marketing roi tracker for Nordstrom across marketing, snowflake, salesforce."
tags:
- marketing
- snowflake
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: marketing-ops
port: 8080
tools:
- name: marketing-roi-tracker
description: "Orchestrates marketing roi tracker for Nordstrom across marketing, snowflake, salesforce."
inputParameters:
- name: store_id
type: string
description: "Store or entity identifier."
- name: date
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: query-data
type: call
call: snowflake.run-query
with:
statement: "SELECT * FROM MARKETING_ROI_TRACKER"
- name: get-sf
type: call
call: salesforce.query
with:
q: "SELECT Id FROM Account"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "ops-{{store_id}}"
text: "Marketing Roi Tracker done."
consumes:
- type: http
namespace: snowflake
baseUri: "https://nordstrom.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: salesforce
baseUri: "https://nordstrom.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: query
path: "/query"
operations:
- name: query
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
operations:
- name: send-message
method: POST
Retrieves transaction analytics from Mastercard for Nordstrom payment processing, returning authorization rate, decline reasons, and average transaction value.
naftiko: "0.5"
info:
label: "Mastercard Transaction Analytics"
description: "Retrieves transaction analytics from Mastercard for Nordstrom payment processing, returning authorization rate, decline reasons, and average transaction value."
tags:
- payments
- mastercard
- analytics
capability:
exposes:
- type: mcp
namespace: payment-analytics
port: 8080
tools:
- name: get-transaction-analytics
description: "Retrieve Mastercard transaction analytics by date range."
inputParameters:
- name: start_date
in: body
type: string
description: "Start date in YYYY-MM-DD."
- name: end_date
in: body
type: string
description: "End date in YYYY-MM-DD."
call: "mastercard.get-analytics"
with:
start_date: "{{start_date}}"
end_date: "{{end_date}}"
outputParameters:
- name: auth_rate
type: string
mapping: "$.data.authorization_rate"
- name: avg_transaction
type: string
mapping: "$.data.avg_transaction_value"
consumes:
- type: http
namespace: mastercard
baseUri: "https://gateway.mastercard.com/api/rest/version/73"
authentication:
type: basic
username: "$secrets.mastercard_merchant_id"
password: "$secrets.mastercard_api_password"
resources:
- name: analytics
path: "/merchant/{{merchant_id}}/analytics"
inputParameters:
- name: merchant_id
in: path
operations:
- name: get-analytics
method: GET
Triggers a Microsoft Power Automate flow for workflow automation.
naftiko: "0.5"
info:
label: "Microsoft Power Automate Flow Trigger"
description: "Triggers a Microsoft Power Automate flow for workflow automation."
tags:
- automation
- microsoft-power-automate
capability:
exposes:
- type: mcp
namespace: workflow-automation
port: 8080
tools:
- name: trigger-flow
description: "Trigger a Power Automate flow by ID."
inputParameters:
- name: flow_id
in: body
type: string
description: "The Power Automate flow identifier."
- name: input_data
in: body
type: string
description: "JSON input data."
call: "powerautomate.trigger-flow"
with:
flow_id: "{{flow_id}}"
data: "{{input_data}}"
outputParameters:
- name: run_id
type: string
mapping: "$.name"
- name: status
type: string
mapping: "$.properties.status"
consumes:
- type: http
namespace: powerautomate
baseUri: "https://management.azure.com/subscriptions"
authentication:
type: bearer
token: "$secrets.azure_management_token"
resources:
- name: flows
path: "/{{subscription_id}}/resourceGroups/{{resource_group}}/providers/Microsoft.Logic/workflows/{{flow_id}}/triggers/manual/run"
inputParameters:
- name: subscription_id
in: path
- name: resource_group
in: path
- name: flow_id
in: path
operations:
- name: trigger-flow
method: POST
Retrieves application performance metrics from New Relic for Nordstrom digital properties.
naftiko: "0.5"
info:
label: "New Relic Application Performance Lookup"
description: "Retrieves application performance metrics from New Relic for Nordstrom digital properties."
tags:
- monitoring
- new-relic
- application-performance
capability:
exposes:
- type: mcp
namespace: apm
port: 8080
tools:
- name: get-app-performance
description: "Look up New Relic application performance by app name."
inputParameters:
- name: app_name
in: body
type: string
description: "The New Relic application name."
call: "newrelic.get-app-metrics"
with:
app_name: "{{app_name}}"
outputParameters:
- name: response_time
type: string
mapping: "$.application.application_summary.response_time"
- name: throughput
type: string
mapping: "$.application.application_summary.throughput"
- name: error_rate
type: string
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.json?filter[name]={{app_name}}"
inputParameters:
- name: app_name
in: query
operations:
- name: get-app-metrics
method: GET
Orchestrates offboarding pipeline for Nordstrom across hr, workday, servicenow.
naftiko: "0.5"
info:
label: "Offboarding Pipeline"
description: "Orchestrates offboarding pipeline for Nordstrom across hr, workday, servicenow."
tags:
- hr
- workday
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-ops
port: 8080
tools:
- name: offboarding-pipeline
description: "Orchestrates offboarding pipeline for Nordstrom across hr, workday, servicenow."
inputParameters:
- name: store_id
type: string
description: "Store or entity identifier."
- name: date
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: create-ticket
type: call
call: servicenow.create-incident
with:
short_description: "Offboarding Pipeline — {{store_id}}"
category: "hr"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "ops-{{store_id}}"
text: "Offboarding Pipeline done."
- name: get-hr
type: call
call: workday.get-workers
with:
store: "{{store_id}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://nordstrom.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: channels
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
operations:
- name: send-message
method: POST
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/nordstrom/workers"
operations:
- name: get-workers
method: GET
Orchestrates a personalized omnichannel experience by pulling customer profile from Salesforce, fetching browsing history from Adobe Analytics, generating personalized recommendations via TensorFlow, and delivering via Adobe Campaign.
naftiko: "0.5"
info:
label: "Omnichannel Customer Experience Pipeline"
description: "Orchestrates a personalized omnichannel experience by pulling customer profile from Salesforce, fetching browsing history from Adobe Analytics, generating personalized recommendations via TensorFlow, and delivering via Adobe Campaign."
tags:
- e-commerce
- personalization
- salesforce
- adobe-analytics
- tensorflow
- adobe-campaign
capability:
exposes:
- type: mcp
namespace: personalization
port: 8080
tools:
- name: deliver-personalized-experience
description: "Given a customer ID and channel, pull profile and behavior data, generate recommendations, and deliver personalized content."
inputParameters:
- name: customer_id
in: body
type: string
description: "The customer identifier."
- name: channel
in: body
type: string
description: "The delivery channel (email, app-push, sms)."
steps:
- name: get-profile
type: call
call: "salesforce.get-customer"
with:
customer_id: "{{customer_id}}"
- name: get-behavior
type: call
call: "adobe-analytics.get-customer-behavior"
with:
customer_id: "{{customer_id}}"
- name: generate-recommendations
type: call
call: "tensorflow.predict-recommendations"
with:
customer_profile: "{{get-profile}}"
browsing_history: "{{get-behavior.recent_views}}"
- name: deliver-content
type: call
call: "adobe-campaign.trigger-personalized"
with:
customer_email: "{{get-profile.email}}"
channel: "{{channel}}"
recommendations: "{{generate-recommendations.products}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://nordstrom.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: customers
path: "/sobjects/Customer__c/{{customer_id}}"
inputParameters:
- name: customer_id
in: path
operations:
- name: get-customer
method: GET
- type: http
namespace: adobe-analytics
baseUri: "https://analytics.adobe.io/api/nordstrom"
authentication:
type: bearer
token: "$secrets.adobe_analytics_token"
resources:
- name: customer-behavior
path: "/reports/customer/{{customer_id}}"
inputParameters:
- name: customer_id
in: path
operations:
- name: get-customer-behavior
method: GET
- type: http
namespace: tensorflow
baseUri: "https://nordstrom-ml.amazonaws.com/v1"
authentication:
type: bearer
token: "$secrets.tensorflow_serving_token"
resources:
- name: models
path: "/models/product_recommendations:predict"
operations:
- name: predict-recommendations
method: POST
- type: http
namespace: adobe-campaign
baseUri: "https://mc.adobe.io/nordstrom/campaign"
authentication:
type: bearer
token: "$secrets.adobe_campaign_token"
resources:
- name: personalized-triggers
path: "/profileAndServicesExt/aemTriggerEvent"
operations:
- name: trigger-personalized
method: POST
Retrieves a financial report from Oracle Cloud Financials for a given period and cost center.
naftiko: "0.5"
info:
label: "Oracle Cloud Financial Report"
description: "Retrieves a financial report from Oracle Cloud Financials for a given period and cost center."
tags:
- finance
- oracle-cloud
- reporting
capability:
exposes:
- type: mcp
namespace: finance
port: 8080
tools:
- name: get-financial-report
description: "Extract Oracle Cloud financial report by period and cost center."
inputParameters:
- name: fiscal_period
in: body
type: string
description: "The fiscal period."
- name: cost_center
in: body
type: string
description: "The cost center code."
call: "oracle.get-financials"
with:
period: "{{fiscal_period}}"
cost_center: "{{cost_center}}"
outputParameters:
- name: revenue
type: string
mapping: "$.data.revenue"
- name: expenses
type: string
mapping: "$.data.expenses"
consumes:
- type: http
namespace: oracle
baseUri: "https://nordstrom.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: bearer
token: "$secrets.oracle_cloud_token"
resources:
- name: financials
path: "/financialReports"
operations:
- name: get-financials
method: POST
Queries Palo Alto Networks firewall for a specific security rule.
naftiko: "0.5"
info:
label: "Palo Alto Firewall Rule Lookup"
description: "Queries Palo Alto Networks firewall for a specific security rule."
tags:
- security
- palo-alto-networks
- firewall
capability:
exposes:
- type: mcp
namespace: network-security
port: 8080
tools:
- name: get-firewall-rule
description: "Look up a Palo Alto Networks firewall rule by name."
inputParameters:
- name: rule_name
in: body
type: string
description: "The firewall rule name."
call: "paloalto.get-rule"
with:
rule_name: "{{rule_name}}"
outputParameters:
- name: action
type: string
mapping: "$.result.entry.action"
- name: source_zones
type: array
mapping: "$.result.entry.from.member"
consumes:
- type: http
namespace: paloalto
baseUri: "https://nordstrom-fw.paloaltonetworks.com/restapi/v10.2"
authentication:
type: apiKey
key: "$secrets.paloalto_api_key"
resources:
- name: security-rules
path: "/Policies/SecurityRules?name={{rule_name}}"
inputParameters:
- name: rule_name
in: query
operations:
- name: get-rule
method: GET
Orchestrates payment processing pipeline for Nordstrom across procurement, sap, snowflake.
naftiko: "0.5"
info:
label: "Payment Processing Pipeline"
description: "Orchestrates payment processing pipeline for Nordstrom across procurement, sap, snowflake."
tags:
- procurement
- sap
- snowflake
- servicenow
capability:
exposes:
- type: mcp
namespace: finance-ops
port: 8080
tools:
- name: payment-processing-pipeline
description: "Orchestrates payment processing pipeline for Nordstrom across procurement, sap, snowflake."
inputParameters:
- name: store_id
type: string
description: "Store or entity identifier."
- name: date
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: query-data
type: call
call: snowflake.run-query
with:
statement: "SELECT * FROM PAYMENT_PROCESSING_PIPELINE"
- name: check-erp
type: call
call: sap.get-data
with:
entity: "{{store_id}}"
- name: create-ticket
type: call
call: servicenow.create-incident
with:
short_description: "Payment Processing Pipeline — {{store_id}}"
category: "procurement"
consumes:
- type: http
namespace: snowflake
baseUri: "https://nordstrom.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: sap
baseUri: "https://nordstrom-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: entities
path: "/A_BusinessPartner"
operations:
- name: get-data
method: GET
- type: http
namespace: servicenow
baseUri: "https://nordstrom.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
Creates personalized marketing campaigns by pulling customer segments from Salesforce, generating personalized content via Adobe Creative Cloud, scheduling email delivery in Adobe Campaign, and tracking engagement in Google Analytics.
naftiko: "0.5"
info:
label: "Personalized Marketing Campaign Orchestrator"
description: "Creates personalized marketing campaigns by pulling customer segments from Salesforce, generating personalized content via Adobe Creative Cloud, scheduling email delivery in Adobe Campaign, and tracking engagement in Google Analytics."
tags:
- marketing
- personalization
- salesforce
- adobe-creative-cloud
- adobe-campaign
- google-analytics
capability:
exposes:
- type: mcp
namespace: marketing
port: 8080
tools:
- name: launch-personalized-campaign
description: "Given a segment name and campaign theme, pull customer data, create content, schedule delivery, and set up tracking."
inputParameters:
- name: segment_name
in: body
type: string
description: "The customer segment name."
- name: campaign_theme
in: body
type: string
description: "The campaign theme or promotion."
- name: send_date
in: body
type: string
description: "The scheduled send date."
steps:
- name: get-segment
type: call
call: "salesforce.get-segment"
with:
segment_name: "{{segment_name}}"
- name: create-content
type: call
call: "adobe-cc.create-campaign-assets"
with:
theme: "{{campaign_theme}}"
audience_size: "{{get-segment.member_count}}"
- name: schedule-campaign
type: call
call: "adobe-campaign.schedule-delivery"
with:
segment_id: "{{get-segment.segment_id}}"
template: "{{campaign_theme}}"
assets: "{{create-content.asset_urls}}"
send_date: "{{send_date}}"
- name: setup-tracking
type: call
call: "google-analytics.create-campaign-tracking"
with:
campaign_name: "{{campaign_theme}}"
campaign_id: "{{schedule-campaign.campaign_id}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://nordstrom.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: segments
path: "/query/?q=SELECT+Id,Member_Count__c+FROM+Customer_Segment__c+WHERE+Name='{{segment_name}}'"
inputParameters:
- name: segment_name
in: query
operations:
- name: get-segment
method: GET
- type: http
namespace: adobe-cc
baseUri: "https://cc-api-storage.adobe.io/v1"
authentication:
type: bearer
token: "$secrets.adobe_cc_token"
resources:
- name: projects
path: "/projects"
operations:
- name: create-campaign-assets
method: POST
- type: http
namespace: adobe-campaign
baseUri: "https://mc.adobe.io/nordstrom/campaign"
authentication:
type: bearer
token: "$secrets.adobe_campaign_token"
resources:
- name: deliveries
path: "/profileAndServicesExt/aemScheduleDelivery"
operations:
- name: schedule-delivery
method: POST
- type: http
namespace: google-analytics
baseUri: "https://analyticsdata.googleapis.com/v1beta"
authentication:
type: bearer
token: "$secrets.google_analytics_token"
resources:
- name: campaign-tracking
path: "/properties/{{property_id}}/customDimensions"
inputParameters:
- name: property_id
in: path
operations:
- name: create-campaign-tracking
method: POST
Triggers Power BI refresh for Nordstrom.
naftiko: "0.5"
info:
label: "Power BI Refresh"
description: "Triggers Power BI refresh for Nordstrom."
tags:
- analytics
- power-bi
- store-ops
capability:
exposes:
- type: mcp
namespace: analytics
port: 8080
tools:
- name: refresh-dataset
description: "Trigger refresh."
inputParameters:
- name: dataset_id
type: string
description: "Dataset ID."
call: powerbi.refresh
with:
dataset_id: "{{dataset_id}}"
outputParameters:
- name: status
type: string
mapping: "$.value[0].status"
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/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: refresh
method: POST
Triggers a Power BI dataset refresh for Nordstrom sales reporting dashboards.
naftiko: "0.5"
info:
label: "Power BI Sales Dashboard Refresh"
description: "Triggers a Power BI dataset refresh for Nordstrom sales reporting dashboards."
tags:
- analytics
- power-bi
- reporting
capability:
exposes:
- type: mcp
namespace: reporting
port: 8080
tools:
- name: refresh-sales-dashboard
description: "Trigger a Power BI dataset refresh."
inputParameters:
- name: dataset_id
in: body
type: string
description: "The Power BI dataset identifier."
call: "powerbi.refresh-dataset"
with:
dataset_id: "{{dataset_id}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
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/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
Orchestrates price change pipeline for Nordstrom across e-commerce, sap, snowflake.
naftiko: "0.5"
info:
label: "Price Change Pipeline"
description: "Orchestrates price change pipeline for Nordstrom across e-commerce, sap, snowflake."
tags:
- e-commerce
- sap
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pricing-ops
port: 8080
tools:
- name: price-change-pipeline
description: "Orchestrates price change pipeline for Nordstrom across e-commerce, sap, snowflake."
inputParameters:
- name: store_id
type: string
description: "Store or entity identifier."
- name: date
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: query-data
type: call
call: snowflake.run-query
with:
statement: "SELECT * FROM PRICE_CHANGE_PIPELINE"
- name: check-erp
type: call
call: sap.get-data
with:
entity: "{{store_id}}"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "ops-{{store_id}}"
text: "Price Change Pipeline done."
consumes:
- type: http
namespace: snowflake
baseUri: "https://nordstrom.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: sap
baseUri: "https://nordstrom-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: entities
path: "/A_BusinessPartner"
operations:
- name: get-data
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
operations:
- name: send-message
method: POST
Retrieves product inventory levels from the Nordstrom inventory system by SKU, returning available quantity, warehouse location, and reorder status.
naftiko: "0.5"
info:
label: "Product Inventory Lookup"
description: "Retrieves product inventory levels from the Nordstrom inventory system by SKU, returning available quantity, warehouse location, and reorder status."
tags:
- retail
- inventory
- oracle-cloud
capability:
exposes:
- type: mcp
namespace: inventory
port: 8080
tools:
- name: get-product-inventory
description: "Look up product inventory by SKU. Returns quantity, location, and reorder status."
inputParameters:
- name: sku
in: body
type: string
description: "The product SKU."
call: "oracle.get-inventory"
with:
sku: "{{sku}}"
outputParameters:
- name: quantity
type: string
mapping: "$.data.available_quantity"
- name: warehouse
type: string
mapping: "$.data.warehouse_location"
- name: reorder_status
type: string
mapping: "$.data.reorder_status"
consumes:
- type: http
namespace: oracle
baseUri: "https://nordstrom.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: bearer
token: "$secrets.oracle_cloud_token"
resources:
- name: inventory
path: "/inventoryBalances?q=SKU={{sku}}"
inputParameters:
- name: sku
in: query
operations:
- name: get-inventory
method: GET
Orchestrates qbr report generator for Nordstrom across analytics, snowflake, salesforce.
naftiko: "0.5"
info:
label: "Qbr Report Generator"
description: "Orchestrates qbr report generator for Nordstrom across analytics, snowflake, salesforce."
tags:
- analytics
- snowflake
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: finance-ops
port: 8080
tools:
- name: qbr-report-generator
description: "Orchestrates qbr report generator for Nordstrom across analytics, snowflake, salesforce."
inputParameters:
- name: store_id
type: string
description: "Store or entity identifier."
- name: date
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: query-data
type: call
call: snowflake.run-query
with:
statement: "SELECT * FROM QBR_REPORT_GENERATOR"
- name: get-sf
type: call
call: salesforce.query
with:
q: "SELECT Id FROM Account"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "ops-{{store_id}}"
text: "Qbr Report Generator done."
consumes:
- type: http
namespace: snowflake
baseUri: "https://nordstrom.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: salesforce
baseUri: "https://nordstrom.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: query
path: "/query"
operations:
- name: query
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
operations:
- name: send-message
method: POST
Orchestrates recall response pipeline for Nordstrom across inventory, sap, snowflake.
naftiko: "0.5"
info:
label: "Recall Response Pipeline"
description: "Orchestrates recall response pipeline for Nordstrom across inventory, sap, snowflake."
tags:
- inventory
- sap
- snowflake
- salesforce
capability:
exposes:
- type: mcp
namespace: product-safety
port: 8080
tools:
- name: recall-response-pipeline
description: "Orchestrates recall response pipeline for Nordstrom across inventory, sap, snowflake."
inputParameters:
- name: store_id
type: string
description: "Store or entity identifier."
- name: date
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: query-data
type: call
call: snowflake.run-query
with:
statement: "SELECT * FROM RECALL_RESPONSE_PIPELINE"
- name: check-erp
type: call
call: sap.get-data
with:
entity: "{{store_id}}"
- name: get-sf
type: call
call: salesforce.query
with:
q: "SELECT Id FROM Account"
consumes:
- type: http
namespace: snowflake
baseUri: "https://nordstrom.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: sap
baseUri: "https://nordstrom-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: entities
path: "/A_BusinessPartner"
operations:
- name: get-data
method: GET
- type: http
namespace: salesforce
baseUri: "https://nordstrom.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: query
path: "/query"
operations:
- name: query
method: GET
Orchestrates remodel coordination for Nordstrom across store-ops, sap, servicenow.
naftiko: "0.5"
info:
label: "Remodel Coordination"
description: "Orchestrates remodel coordination for Nordstrom across store-ops, sap, servicenow."
tags:
- store-ops
- sap
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: construction
port: 8080
tools:
- name: remodel-coordination
description: "Orchestrates remodel coordination for Nordstrom across store-ops, sap, servicenow."
inputParameters:
- name: store_id
type: string
description: "Store or entity identifier."
- name: date
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: check-erp
type: call
call: sap.get-data
with:
entity: "{{store_id}}"
- name: create-ticket
type: call
call: servicenow.create-incident
with:
short_description: "Remodel Coordination — {{store_id}}"
category: "store-ops"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "ops-{{store_id}}"
text: "Remodel Coordination done."
consumes:
- type: http
namespace: sap
baseUri: "https://nordstrom-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: entities
path: "/A_BusinessPartner"
operations:
- name: get-data
method: GET
- type: http
namespace: servicenow
baseUri: "https://nordstrom.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: channels
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
operations:
- name: send-message
method: POST
Processes a customer return by validating the order in Salesforce, initiating the refund via Mastercard, updating inventory in Oracle, and sending a return confirmation email via Adobe Campaign.
naftiko: "0.5"
info:
label: "Returns Processing Orchestrator"
description: "Processes a customer return by validating the order in Salesforce, initiating the refund via Mastercard, updating inventory in Oracle, and sending a return confirmation email via Adobe Campaign."
tags:
- e-commerce
- returns
- salesforce
- mastercard
- oracle-cloud
- adobe-campaign
capability:
exposes:
- type: mcp
namespace: returns
port: 8080
tools:
- name: process-return
description: "Given an order number, return reason, and items, validate, refund, restock, and confirm."
inputParameters:
- name: order_number
in: body
type: string
description: "The original order number."
- name: return_reason
in: body
type: string
description: "Reason for return."
- name: items
in: body
type: string
description: "JSON array of items being returned."
steps:
- name: validate-order
type: call
call: "salesforce.get-order"
with:
order_number: "{{order_number}}"
- name: process-refund
type: call
call: "mastercard.process-refund"
with:
order_id: "{{order_number}}"
amount: "{{validate-order.total_amount}}"
- name: restock-inventory
type: call
call: "oracle.restock-items"
with:
items: "{{items}}"
- name: send-confirmation
type: call
call: "adobe-campaign.trigger-email"
with:
template: "return_confirmation"
recipient_email: "{{validate-order.customer_email}}"
order_number: "{{order_number}}"
refund_amount: "{{process-refund.refund_amount}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://nordstrom.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: orders
path: "/sobjects/Order/{{order_number}}"
inputParameters:
- name: order_number
in: path
operations:
- name: get-order
method: GET
- type: http
namespace: mastercard
baseUri: "https://gateway.mastercard.com/api/rest/version/73"
authentication:
type: basic
username: "$secrets.mastercard_merchant_id"
password: "$secrets.mastercard_api_password"
resources:
- name: refunds
path: "/merchant/{{merchant_id}}/order/{{order_id}}/transaction/refund"
inputParameters:
- name: merchant_id
in: path
- name: order_id
in: path
operations:
- name: process-refund
method: PUT
- type: http
namespace: oracle
baseUri: "https://nordstrom.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: bearer
token: "$secrets.oracle_cloud_token"
resources:
- name: restock
path: "/inventoryTransactions"
operations:
- name: restock-items
method: POST
- type: http
namespace: adobe-campaign
baseUri: "https://mc.adobe.io/nordstrom/campaign"
authentication:
type: bearer
token: "$secrets.adobe_campaign_token"
resources:
- name: email-triggers
path: "/profileAndServicesExt/aemTriggerEvent"
operations:
- name: trigger-email
method: POST
Looks up a Salesforce case by ID for Nordstrom.
naftiko: "0.5"
info:
label: "Salesforce Case Status Lookup"
description: "Looks up a Salesforce case by ID for Nordstrom."
tags:
- crm
- salesforce
- customer-service
capability:
exposes:
- type: mcp
namespace: crm
port: 8080
tools:
- name: get-case-status
description: "Look up Salesforce case status."
inputParameters:
- name: case_id
type: string
description: "Salesforce case ID."
call: salesforce.get-case
with:
case_id: "{{case_id}}"
outputParameters:
- name: status
type: string
mapping: "$.Status"
- name: priority
type: string
mapping: "$.Priority"
consumes:
- type: http
namespace: salesforce
baseUri: "https://nordstrom.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/sobjects/Case/{{case_id}}"
inputParameters:
- name: case_id
in: path
operations:
- name: get-case
method: GET
Searches contacts for Nordstrom.
naftiko: "0.5"
info:
label: "Salesforce Contact Search"
description: "Searches contacts for Nordstrom."
tags:
- crm
- salesforce
- customer-service
capability:
exposes:
- type: mcp
namespace: crm
port: 8080
tools:
- name: search-contacts
description: "Search contacts."
inputParameters:
- name: email
type: string
description: "Email."
call: salesforce.search
with:
email: "{{email}}"
outputParameters:
- name: name
type: string
mapping: "$.Name"
consumes:
- type: http
namespace: salesforce
baseUri: "https://nordstrom.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: contacts
path: "/parameterizedSearch/?q={{email}}&sobject=Contact"
inputParameters:
- name: email
in: query
operations:
- name: search
method: GET
Retrieves a Salesforce lead by ID, returning status, source, and owner.
naftiko: "0.5"
info:
label: "Salesforce Lead Status Lookup"
description: "Retrieves a Salesforce lead by ID, returning status, source, and owner."
tags:
- sales
- salesforce
- crm
capability:
exposes:
- type: mcp
namespace: sales
port: 8080
tools:
- name: get-lead-status
description: "Look up a Salesforce lead by ID."
inputParameters:
- name: lead_id
in: body
type: string
description: "The Salesforce lead ID."
call: "salesforce.get-lead"
with:
lead_id: "{{lead_id}}"
outputParameters:
- name: status
type: string
mapping: "$.Status"
- name: source
type: string
mapping: "$.LeadSource"
- name: owner
type: string
mapping: "$.Owner.Name"
consumes:
- type: http
namespace: salesforce
baseUri: "https://nordstrom.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: leads
path: "/sobjects/Lead/{{lead_id}}"
inputParameters:
- name: lead_id
in: path
operations:
- name: get-lead
method: GET
Checks SAP material availability for Nordstrom.
naftiko: "0.5"
info:
label: "SAP Material Availability"
description: "Checks SAP material availability for Nordstrom."
tags:
- inventory
- sap
- supply-chain
capability:
exposes:
- type: mcp
namespace: erp
port: 8080
tools:
- name: check-material
description: "Check material availability."
inputParameters:
- name: material
type: string
description: "Material."
- name: plant
type: string
description: "Plant."
call: sap.get-stock
with:
material: "{{material}}"
plant: "{{plant}}"
outputParameters:
- name: on_hand
type: number
mapping: "$.d.Quantity"
consumes:
- type: http
namespace: sap
baseUri: "https://nordstrom-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: stock
path: "/A_MatlStkInAcctMod"
operations:
- name: get-stock
method: GET
Gets PO items for Nordstrom.
naftiko: "0.5"
info:
label: "SAP PO Items"
description: "Gets PO items for Nordstrom."
tags:
- procurement
- sap
- supply-chain
capability:
exposes:
- type: mcp
namespace: erp
port: 8080
tools:
- name: get-po-items
description: "Get PO items."
inputParameters:
- name: po
type: string
description: "PO."
call: sap.get-items
with:
po: "{{po}}"
outputParameters:
- name: items
type: array
mapping: "$.d.results"
consumes:
- type: http
namespace: sap
baseUri: "https://nordstrom-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: items
path: "/A_PurchaseOrder('{{po}}')/to_PurchaseOrderItem"
inputParameters:
- name: po
in: path
operations:
- name: get-items
method: GET
Looks up SAP vendor for Nordstrom.
naftiko: "0.5"
info:
label: "SAP Vendor Lookup"
description: "Looks up SAP vendor for Nordstrom."
tags:
- procurement
- sap
- supply-chain
capability:
exposes:
- type: mcp
namespace: erp
port: 8080
tools:
- name: get-vendor
description: "Look up vendor."
inputParameters:
- name: vendor
type: string
description: "Vendor number."
call: sap.get-vendor
with:
vendor: "{{vendor}}"
outputParameters:
- name: name
type: string
mapping: "$.d.SupplierName"
consumes:
- type: http
namespace: sap
baseUri: "https://nordstrom-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: suppliers
path: "/A_Supplier('{{vendor}}')"
inputParameters:
- name: vendor
in: path
operations:
- name: get-vendor
method: GET
Optimizes seasonal markdowns by pulling sell-through rates from Teradata, running pricing models in Azure ML, updating prices in Oracle, and notifying store managers via Microsoft Teams.
naftiko: "0.5"
info:
label: "Seasonal Markdown Optimization Pipeline"
description: "Optimizes seasonal markdowns by pulling sell-through rates from Teradata, running pricing models in Azure ML, updating prices in Oracle, and notifying store managers via Microsoft Teams."
tags:
- retail
- pricing
- teradata
- azure-machine-learning
- oracle-cloud
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pricing-optimization
port: 8080
tools:
- name: optimize-markdowns
description: "Given a product category and target sell-through, analyze data, optimize prices, update systems, and notify."
inputParameters:
- name: category
in: body
type: string
description: "The product category."
- name: target_sellthrough
in: body
type: string
description: "Target sell-through percentage."
steps:
- name: get-sellthrough
type: call
call: "teradata.query-sellthrough"
with:
category: "{{category}}"
- name: optimize-pricing
type: call
call: "azureml.predict-optimal-markdown"
with:
sellthrough_data: "{{get-sellthrough.results}}"
target: "{{target_sellthrough}}"
- name: update-prices
type: call
call: "oracle.update-pricing"
with:
category: "{{category}}"
markdown_data: "{{optimize-pricing.recommendations}}"
- name: notify-managers
type: call
call: "msteams.send-message"
with:
channel_id: "merchandising-alerts"
text: "Markdown optimization for {{category}}: {{optimize-pricing.items_updated}} items updated. Average markdown: {{optimize-pricing.avg_markdown_pct}}%. Target sellthrough: {{target_sellthrough}}%."
consumes:
- type: http
namespace: teradata
baseUri: "https://nordstrom-analytics.teradata.com/api/v1"
authentication:
type: bearer
token: "$secrets.teradata_token"
resources:
- name: sellthrough
path: "/query"
operations:
- name: query-sellthrough
method: POST
- type: http
namespace: azureml
baseUri: "https://nordstrom-ml.eastus.inference.ml.azure.com"
authentication:
type: bearer
token: "$secrets.azureml_token"
resources:
- name: scoring
path: "/score"
operations:
- name: predict-optimal-markdown
method: POST
- type: http
namespace: oracle
baseUri: "https://nordstrom.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: bearer
token: "$secrets.oracle_cloud_token"
resources:
- name: pricing
path: "/priceLists"
operations:
- name: update-pricing
method: PATCH
- 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: send-message
method: POST
Orchestrates seasonal promotion setup for Nordstrom across e-commerce, sap, snowflake.
naftiko: "0.5"
info:
label: "Seasonal Promotion Setup"
description: "Orchestrates seasonal promotion setup for Nordstrom across e-commerce, sap, snowflake."
tags:
- e-commerce
- sap
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: merchandising
port: 8080
tools:
- name: seasonal-promotion-setup
description: "Orchestrates seasonal promotion setup for Nordstrom across e-commerce, sap, snowflake."
inputParameters:
- name: store_id
type: string
description: "Store or entity identifier."
- name: date
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: query-data
type: call
call: snowflake.run-query
with:
statement: "SELECT * FROM SEASONAL_PROMOTION_SETUP"
- name: check-erp
type: call
call: sap.get-data
with:
entity: "{{store_id}}"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "ops-{{store_id}}"
text: "Seasonal Promotion Setup done."
consumes:
- type: http
namespace: snowflake
baseUri: "https://nordstrom.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: sap
baseUri: "https://nordstrom-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: entities
path: "/A_BusinessPartner"
operations:
- name: get-data
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
operations:
- name: send-message
method: POST
Orchestrates security incident handler for Nordstrom across security, servicenow, datadog.
naftiko: "0.5"
info:
label: "Security Incident Handler"
description: "Orchestrates security incident handler for Nordstrom across security, servicenow, datadog."
tags:
- security
- servicenow
- datadog
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: security-ops
port: 8080
tools:
- name: security-incident-handler
description: "Orchestrates security incident handler for Nordstrom across security, servicenow, datadog."
inputParameters:
- name: store_id
type: string
description: "Store or entity identifier."
- name: date
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: create-ticket
type: call
call: servicenow.create-incident
with:
short_description: "Security Incident Handler — {{store_id}}"
category: "security"
- name: check-health
type: call
call: datadog.get-monitor
with:
monitor_id: "store-{{store_id}}"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "ops-{{store_id}}"
text: "Security Incident Handler done."
consumes:
- type: http
namespace: servicenow
baseUri: "https://nordstrom.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: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: monitors
path: "/monitor/{{monitor_id}}"
inputParameters:
- name: monitor_id
in: path
operations:
- name: get-monitor
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
operations:
- name: send-message
method: POST
Checks change request for Nordstrom.
naftiko: "0.5"
info:
label: "ServiceNow Change Status"
description: "Checks change request for Nordstrom."
tags:
- itsm
- servicenow
- infrastructure
capability:
exposes:
- type: mcp
namespace: itsm
port: 8080
tools:
- name: get-change
description: "Look up change."
inputParameters:
- name: change
type: string
description: "Change number."
call: servicenow.get-change
with:
change: "{{change}}"
outputParameters:
- name: state
type: string
mapping: "$.result.state"
consumes:
- type: http
namespace: servicenow
baseUri: "https://nordstrom.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: changes
path: "/table/change_request?sysparm_query=number={{change}}"
inputParameters:
- name: change
in: query
operations:
- name: get-change
method: GET
Retrieves ServiceNow incident details for Nordstrom.
naftiko: "0.5"
info:
label: "ServiceNow Incident Detail"
description: "Retrieves ServiceNow incident details for Nordstrom."
tags:
- itsm
- servicenow
- store-ops
capability:
exposes:
- type: mcp
namespace: itsm
port: 8080
tools:
- name: get-incident-detail
description: "Look up ServiceNow incident."
inputParameters:
- name: incident_number
type: string
description: "Incident number."
call: servicenow.get-incident
with:
incident_number: "{{incident_number}}"
outputParameters:
- name: state
type: string
mapping: "$.result.state"
- name: priority
type: string
mapping: "$.result.priority"
consumes:
- type: http
namespace: servicenow
baseUri: "https://nordstrom.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: query
operations:
- name: get-incident
method: GET
Retrieves a ServiceNow incident by number and returns the current state, assignee, and priority.
naftiko: "0.5"
info:
label: "ServiceNow Incident Status"
description: "Retrieves a ServiceNow incident by number and returns the current state, assignee, and priority."
tags:
- it-operations
- servicenow
capability:
exposes:
- type: mcp
namespace: it-ops
port: 8080
tools:
- name: get-incident-status
description: "Look up a ServiceNow incident by number."
inputParameters:
- name: incident_number
in: body
type: string
description: "The ServiceNow incident number."
call: "servicenow.get-incident"
with:
number: "{{incident_number}}"
outputParameters:
- name: state
type: string
mapping: "$.result[0].state"
- name: assigned_to
type: string
mapping: "$.result[0].assigned_to.display_value"
- name: priority
type: string
mapping: "$.result[0].priority"
consumes:
- type: http
namespace: servicenow
baseUri: "https://nordstrom.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={{number}}"
inputParameters:
- name: number
in: query
operations:
- name: get-incident
method: GET
Orchestrates shipment tracking pipeline for Nordstrom across supply-chain, sap, snowflake.
naftiko: "0.5"
info:
label: "Shipment Tracking Pipeline"
description: "Orchestrates shipment tracking pipeline for Nordstrom across supply-chain, sap, snowflake."
tags:
- supply-chain
- sap
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: logistics
port: 8080
tools:
- name: shipment-tracking-pipeline
description: "Orchestrates shipment tracking pipeline for Nordstrom across supply-chain, sap, snowflake."
inputParameters:
- name: store_id
type: string
description: "Store or entity identifier."
- name: date
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: query-data
type: call
call: snowflake.run-query
with:
statement: "SELECT * FROM SHIPMENT_TRACKING_PIPELINE"
- name: check-erp
type: call
call: sap.get-data
with:
entity: "{{store_id}}"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "ops-{{store_id}}"
text: "Shipment Tracking Pipeline done."
consumes:
- type: http
namespace: snowflake
baseUri: "https://nordstrom.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: sap
baseUri: "https://nordstrom-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: entities
path: "/A_BusinessPartner"
operations:
- name: get-data
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
operations:
- name: send-message
method: POST
Orchestrates shrinkage investigation for Nordstrom across store-ops, snowflake, servicenow.
naftiko: "0.5"
info:
label: "Shrinkage Investigation"
description: "Orchestrates shrinkage investigation for Nordstrom across store-ops, snowflake, servicenow."
tags:
- store-ops
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: loss-prevention
port: 8080
tools:
- name: shrinkage-investigation
description: "Orchestrates shrinkage investigation for Nordstrom across store-ops, snowflake, servicenow."
inputParameters:
- name: store_id
type: string
description: "Store or entity identifier."
- name: date
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: query-data
type: call
call: snowflake.run-query
with:
statement: "SELECT * FROM SHRINKAGE_INVESTIGATION"
- name: create-ticket
type: call
call: servicenow.create-incident
with:
short_description: "Shrinkage Investigation — {{store_id}}"
category: "store-ops"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "ops-{{store_id}}"
text: "Shrinkage Investigation done."
consumes:
- type: http
namespace: snowflake
baseUri: "https://nordstrom.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://nordstrom.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: channels
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
operations:
- name: send-message
method: POST
Orchestrates site incident response for Nordstrom across e-commerce, datadog, servicenow.
naftiko: "0.5"
info:
label: "Site Incident Response"
description: "Orchestrates site incident response for Nordstrom across e-commerce, datadog, servicenow."
tags:
- e-commerce
- datadog
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: platform-ops
port: 8080
tools:
- name: site-incident-response
description: "Orchestrates site incident response for Nordstrom across e-commerce, datadog, servicenow."
inputParameters:
- name: store_id
type: string
description: "Store or entity identifier."
- name: date
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: create-ticket
type: call
call: servicenow.create-incident
with:
short_description: "Site Incident Response — {{store_id}}"
category: "e-commerce"
- name: check-health
type: call
call: datadog.get-monitor
with:
monitor_id: "store-{{store_id}}"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "ops-{{store_id}}"
text: "Site Incident Response done."
consumes:
- type: http
namespace: servicenow
baseUri: "https://nordstrom.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: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: monitors
path: "/monitor/{{monitor_id}}"
inputParameters:
- name: monitor_id
in: path
operations:
- name: get-monitor
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
operations:
- name: send-message
method: POST
Sends notifications to Nordstrom Slack channels for internal team communications and alerts.
naftiko: "0.5"
info:
label: "Slack Internal Communications"
description: "Sends notifications to Nordstrom Slack channels for internal team communications and alerts."
tags:
- collaboration
- slack
- notifications
capability:
exposes:
- type: mcp
namespace: notifications
port: 8080
tools:
- name: send-slack-notification
description: "Send a message to a Slack channel."
inputParameters:
- name: channel
in: body
type: string
description: "The Slack channel."
- name: message
in: body
type: string
description: "The message text."
call: "slack.post-message"
with:
channel: "{{channel}}"
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_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Executes a customer analytics query in Snowflake, returning customer segments, lifetime value metrics, and churn indicators.
naftiko: "0.5"
info:
label: "Snowflake Customer Analytics Query"
description: "Executes a customer analytics query in Snowflake, returning customer segments, lifetime value metrics, and churn indicators."
tags:
- analytics
- snowflake
- customer-analytics
capability:
exposes:
- type: mcp
namespace: customer-analytics
port: 8080
tools:
- name: run-customer-analytics
description: "Execute a Snowflake customer analytics query."
inputParameters:
- name: query_name
in: body
type: string
description: "The predefined query name."
- name: parameters
in: body
type: string
description: "Query parameters as JSON."
call: "snowflake.execute-query"
with:
query_name: "{{query_name}}"
parameters: "{{parameters}}"
outputParameters:
- name: row_count
type: string
mapping: "$.resultSetMetaData.numRows"
- name: data
type: array
mapping: "$.data"
consumes:
- type: http
namespace: snowflake
baseUri: "https://nordstrom.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
Queries customer segments for Nordstrom.
naftiko: "0.5"
info:
label: "Snowflake Customer Segments"
description: "Queries customer segments for Nordstrom."
tags:
- analytics
- snowflake
- loyalty
capability:
exposes:
- type: mcp
namespace: analytics
port: 8080
tools:
- name: get-segments
description: "Query segments."
inputParameters:
- name: segment
type: string
description: "Segment."
call: snowflake.run-query
with:
segment: "{{segment}}"
outputParameters:
- name: count
type: integer
mapping: "$.data[0].COUNT"
- name: spend
type: number
mapping: "$.data[0].AVG_SPEND"
consumes:
- type: http
namespace: snowflake
baseUri: "https://nordstrom.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
Queries inventory for Nordstrom.
naftiko: "0.5"
info:
label: "Snowflake Inventory Query"
description: "Queries inventory for Nordstrom."
tags:
- inventory
- snowflake
- supply-chain
capability:
exposes:
- type: mcp
namespace: analytics
port: 8080
tools:
- name: query-inv
description: "Query inventory."
inputParameters:
- name: loc
type: string
description: "Location."
call: snowflake.run-query
with:
loc: "{{loc}}"
outputParameters:
- name: units
type: integer
mapping: "$.data[0].UNITS"
consumes:
- type: http
namespace: snowflake
baseUri: "https://nordstrom.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
Queries promo data for Nordstrom.
naftiko: "0.5"
info:
label: "Snowflake Promo Performance"
description: "Queries promo data for Nordstrom."
tags:
- analytics
- snowflake
- e-commerce
capability:
exposes:
- type: mcp
namespace: analytics
port: 8080
tools:
- name: get-promo
description: "Query promos."
inputParameters:
- name: promo
type: string
description: "Promo ID."
call: snowflake.run-query
with:
promo: "{{promo}}"
outputParameters:
- name: redemptions
type: integer
mapping: "$.data[0].REDEMPTIONS"
consumes:
- type: http
namespace: snowflake
baseUri: "https://nordstrom.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
Queries Snowflake sales data for Nordstrom.
naftiko: "0.5"
info:
label: "Snowflake Sales Query"
description: "Queries Snowflake sales data for Nordstrom."
tags:
- analytics
- snowflake
- store-ops
capability:
exposes:
- type: mcp
namespace: analytics
port: 8080
tools:
- name: query-sales
description: "Query sales data."
inputParameters:
- name: store_id
type: string
description: "Store ID."
- name: period
type: string
description: "Period."
call: snowflake.run-query
with:
store_id: "{{store_id}}"
period: "{{period}}"
outputParameters:
- name: revenue
type: number
mapping: "$.data[0].REVENUE"
- name: count
type: integer
mapping: "$.data[0].TXN_COUNT"
consumes:
- type: http
namespace: snowflake
baseUri: "https://nordstrom.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
Retrieves a Square point-of-sale transaction by payment ID, returning amount, status, card brand, and timestamp.
naftiko: "0.5"
info:
label: "Square POS Transaction Lookup"
description: "Retrieves a Square point-of-sale transaction by payment ID, returning amount, status, card brand, and timestamp."
tags:
- retail
- point-of-sale
- square
capability:
exposes:
- type: mcp
namespace: pos
port: 8080
tools:
- name: get-pos-transaction
description: "Look up a Square POS transaction by payment ID."
inputParameters:
- name: payment_id
in: body
type: string
description: "The Square payment identifier."
call: "square.get-payment"
with:
payment_id: "{{payment_id}}"
outputParameters:
- name: amount
type: string
mapping: "$.payment.amount_money.amount"
- name: status
type: string
mapping: "$.payment.status"
- name: card_brand
type: string
mapping: "$.payment.card_details.card.card_brand"
consumes:
- type: http
namespace: square
baseUri: "https://connect.squareup.com/v2"
authentication:
type: bearer
token: "$secrets.square_token"
resources:
- name: payments
path: "/payments/{{payment_id}}"
inputParameters:
- name: payment_id
in: path
operations:
- name: get-payment
method: GET
Orchestrates staffing gap alerts for Nordstrom across store-ops, workday, snowflake.
naftiko: "0.5"
info:
label: "Staffing Gap Alerts"
description: "Orchestrates staffing gap alerts for Nordstrom across store-ops, workday, snowflake."
tags:
- store-ops
- workday
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: workforce
port: 8080
tools:
- name: staffing-gap-alerts
description: "Orchestrates staffing gap alerts for Nordstrom across store-ops, workday, snowflake."
inputParameters:
- name: store_id
type: string
description: "Store or entity identifier."
- name: date
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: query-data
type: call
call: snowflake.run-query
with:
statement: "SELECT * FROM STAFFING_GAP_ALERTS"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "ops-{{store_id}}"
text: "Staffing Gap Alerts done."
- name: get-hr
type: call
call: workday.get-workers
with:
store: "{{store_id}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://nordstrom.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
operations:
- name: send-message
method: POST
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/nordstrom/workers"
operations:
- name: get-workers
method: GET
Manages store associate schedules by pulling staffing needs from Oracle, checking employee availability in Workday, generating optimal schedules, and posting assignments to Microsoft Teams.
naftiko: "0.5"
info:
label: "Store Associate Schedule Manager"
description: "Manages store associate schedules by pulling staffing needs from Oracle, checking employee availability in Workday, generating optimal schedules, and posting assignments to Microsoft Teams."
tags:
- retail
- scheduling
- oracle-cloud
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: store-scheduling
port: 8080
tools:
- name: generate-store-schedule
description: "Given a store ID and week, pull staffing needs, check availability, and publish the schedule."
inputParameters:
- name: store_id
in: body
type: string
description: "The store identifier."
- name: week_start
in: body
type: string
description: "The week start date in YYYY-MM-DD format."
steps:
- name: get-staffing-needs
type: call
call: "oracle.get-staffing-forecast"
with:
store_id: "{{store_id}}"
week: "{{week_start}}"
- name: check-availability
type: call
call: "workday.get-store-availability"
with:
store_id: "{{store_id}}"
week: "{{week_start}}"
- name: post-schedule
type: call
call: "msteams.send-message"
with:
channel_id: "store-{{store_id}}-schedule"
text: "Schedule for week of {{week_start}}: Staffing need: {{get-staffing-needs.total_hours}} hours. Available associates: {{check-availability.available_count}}. Coverage: {{check-availability.coverage_pct}}%."
consumes:
- type: http
namespace: oracle
baseUri: "https://nordstrom.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: bearer
token: "$secrets.oracle_cloud_token"
resources:
- name: staffing
path: "/staffingForecasts"
operations:
- name: get-staffing-forecast
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: availability
path: "/workers/availability"
operations:
- name: get-store-availability
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: send-message
method: POST
Orchestrates store inventory replenishment pipeline for Nordstrom across inventory, snowflake, sap.
naftiko: "0.5"
info:
label: "Store Inventory Replenishment Pipeline"
description: "Orchestrates store inventory replenishment pipeline for Nordstrom across inventory, snowflake, sap."
tags:
- inventory
- snowflake
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: inventory-ops
port: 8080
tools:
- name: store-inventory-replenishment-pipeline
description: "Orchestrates store inventory replenishment pipeline for Nordstrom across inventory, snowflake, sap."
inputParameters:
- name: store_id
type: string
description: "Store or entity identifier."
- name: date
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: query-data
type: call
call: snowflake.run-query
with:
statement: "SELECT * FROM STORE_INVENTORY_REPLENISHMENT_PIPELINE"
- name: check-erp
type: call
call: sap.get-data
with:
entity: "{{store_id}}"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "ops-{{store_id}}"
text: "Store Inventory Replenishment Pipeline done."
consumes:
- type: http
namespace: snowflake
baseUri: "https://nordstrom.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: sap
baseUri: "https://nordstrom-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: entities
path: "/A_BusinessPartner"
operations:
- name: get-data
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
operations:
- name: send-message
method: POST
Orchestrates store opening readiness check for Nordstrom across store-ops, datadog, workday.
naftiko: "0.5"
info:
label: "Store Opening Readiness Check"
description: "Orchestrates store opening readiness check for Nordstrom across store-ops, datadog, workday."
tags:
- store-ops
- datadog
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: store-ops
port: 8080
tools:
- name: store-opening-readiness-check
description: "Orchestrates store opening readiness check for Nordstrom across store-ops, datadog, workday."
inputParameters:
- name: store_id
type: string
description: "Store or entity identifier."
- name: date
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: check-health
type: call
call: datadog.get-monitor
with:
monitor_id: "store-{{store_id}}"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "ops-{{store_id}}"
text: "Store Opening Readiness Check done."
- name: get-hr
type: call
call: workday.get-workers
with:
store: "{{store_id}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: monitors
path: "/monitor/{{monitor_id}}"
inputParameters:
- name: monitor_id
in: path
operations:
- name: get-monitor
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
operations:
- name: send-message
method: POST
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/nordstrom/workers"
operations:
- name: get-workers
method: GET
Orchestrates store safety audit pipeline for Nordstrom across store-ops, servicenow, workday.
naftiko: "0.5"
info:
label: "Store Safety Audit Pipeline"
description: "Orchestrates store safety audit pipeline for Nordstrom across store-ops, servicenow, workday."
tags:
- store-ops
- servicenow
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: safety-ops
port: 8080
tools:
- name: store-safety-audit-pipeline
description: "Orchestrates store safety audit pipeline for Nordstrom across store-ops, servicenow, workday."
inputParameters:
- name: store_id
type: string
description: "Store or entity identifier."
- name: date
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: create-ticket
type: call
call: servicenow.create-incident
with:
short_description: "Store Safety Audit Pipeline — {{store_id}}"
category: "store-ops"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "ops-{{store_id}}"
text: "Store Safety Audit Pipeline done."
- name: get-hr
type: call
call: workday.get-workers
with:
store: "{{store_id}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://nordstrom.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: channels
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
operations:
- name: send-message
method: POST
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/nordstrom/workers"
operations:
- name: get-workers
method: GET
Orchestrates supplier onboarding flow for Nordstrom across supply-chain, sap, servicenow.
naftiko: "0.5"
info:
label: "Supplier Onboarding Flow"
description: "Orchestrates supplier onboarding flow for Nordstrom across supply-chain, sap, servicenow."
tags:
- supply-chain
- sap
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: procurement-ops
port: 8080
tools:
- name: supplier-onboarding-flow
description: "Orchestrates supplier onboarding flow for Nordstrom across supply-chain, sap, servicenow."
inputParameters:
- name: store_id
type: string
description: "Store or entity identifier."
- name: date
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: check-erp
type: call
call: sap.get-data
with:
entity: "{{store_id}}"
- name: create-ticket
type: call
call: servicenow.create-incident
with:
short_description: "Supplier Onboarding Flow — {{store_id}}"
category: "supply-chain"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "ops-{{store_id}}"
text: "Supplier Onboarding Flow done."
consumes:
- type: http
namespace: sap
baseUri: "https://nordstrom-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: entities
path: "/A_BusinessPartner"
operations:
- name: get-data
method: GET
- type: http
namespace: servicenow
baseUri: "https://nordstrom.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: channels
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
operations:
- name: send-message
method: POST
Orchestrates supply chain delay handler for Nordstrom across supply-chain, sap, servicenow.
naftiko: "0.5"
info:
label: "Supply Chain Delay Handler"
description: "Orchestrates supply chain delay handler for Nordstrom across supply-chain, sap, servicenow."
tags:
- supply-chain
- sap
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: supply-chain-ops
port: 8080
tools:
- name: supply-chain-delay-handler
description: "Orchestrates supply chain delay handler for Nordstrom across supply-chain, sap, servicenow."
inputParameters:
- name: store_id
type: string
description: "Store or entity identifier."
- name: date
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: check-erp
type: call
call: sap.get-data
with:
entity: "{{store_id}}"
- name: create-ticket
type: call
call: servicenow.create-incident
with:
short_description: "Supply Chain Delay Handler — {{store_id}}"
category: "supply-chain"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "ops-{{store_id}}"
text: "Supply Chain Delay Handler done."
consumes:
- type: http
namespace: sap
baseUri: "https://nordstrom-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: entities
path: "/A_BusinessPartner"
operations:
- name: get-data
method: GET
- type: http
namespace: servicenow
baseUri: "https://nordstrom.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: channels
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
operations:
- name: send-message
method: POST
Generates demand forecasts by pulling sales history from Teradata, running the ML forecast model in Azure Machine Learning, and publishing results to SharePoint for the merchandising team.
naftiko: "0.5"
info:
label: "Supply Chain Demand Forecast Pipeline"
description: "Generates demand forecasts by pulling sales history from Teradata, running the ML forecast model in Azure Machine Learning, and publishing results to SharePoint for the merchandising team."
tags:
- supply-chain
- forecasting
- teradata
- azure-machine-learning
- sharepoint
capability:
exposes:
- type: mcp
namespace: demand-forecast
port: 8080
tools:
- name: generate-demand-forecast
description: "Given a product category and forecast horizon, pull sales history, run the forecast model, and publish results."
inputParameters:
- name: category
in: body
type: string
description: "The product category."
- name: horizon_weeks
in: body
type: string
description: "Forecast horizon in weeks."
steps:
- name: get-sales-history
type: call
call: "teradata.query-sales"
with:
category: "{{category}}"
- name: run-forecast
type: call
call: "azureml.predict-demand"
with:
sales_data: "{{get-sales-history.results}}"
horizon: "{{horizon_weeks}}"
- name: publish-forecast
type: call
call: "sharepoint.upload-file"
with:
site_id: "merchandising_site"
folder_path: "DemandForecasts/{{category}}"
file_name: "forecast_{{horizon_weeks}}wk.json"
content: "{{run-forecast.forecast_data}}"
consumes:
- type: http
namespace: teradata
baseUri: "https://nordstrom-analytics.teradata.com/api/v1"
authentication:
type: bearer
token: "$secrets.teradata_token"
resources:
- name: queries
path: "/query"
operations:
- name: query-sales
method: POST
- type: http
namespace: azureml
baseUri: "https://nordstrom-ml.eastus.inference.ml.azure.com"
authentication:
type: bearer
token: "$secrets.azureml_token"
resources:
- name: scoring
path: "/score"
operations:
- name: predict-demand
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}}/{{file_name}}:/content"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
- name: file_name
in: path
operations:
- name: upload-file
method: PUT
When an order is placed, validates inventory in Oracle, assigns to the nearest fulfillment center, creates a shipping label via the logistics API, and notifies the warehouse team in Microsoft Teams.
naftiko: "0.5"
info:
label: "Supply Chain Order Fulfillment Orchestrator"
description: "When an order is placed, validates inventory in Oracle, assigns to the nearest fulfillment center, creates a shipping label via the logistics API, and notifies the warehouse team in Microsoft Teams."
tags:
- supply-chain
- fulfillment
- oracle-cloud
- microsoft-teams
- logistics
capability:
exposes:
- type: mcp
namespace: fulfillment
port: 8080
tools:
- name: fulfill-order
description: "Given an order ID and SKU list, validate inventory, assign fulfillment center, create shipping, and notify warehouse."
inputParameters:
- name: order_id
in: body
type: string
description: "The order identifier."
- name: sku_list
in: body
type: string
description: "Comma-separated list of SKUs."
- name: customer_zip
in: body
type: string
description: "Customer shipping ZIP code."
steps:
- name: validate-inventory
type: call
call: "oracle.check-inventory"
with:
skus: "{{sku_list}}"
- name: assign-fulfillment
type: call
call: "oracle.assign-warehouse"
with:
skus: "{{sku_list}}"
zip: "{{customer_zip}}"
- name: create-shipment
type: call
call: "logistics.create-shipping-label"
with:
order_id: "{{order_id}}"
warehouse: "{{assign-fulfillment.warehouse_id}}"
destination_zip: "{{customer_zip}}"
- name: notify-warehouse
type: call
call: "msteams.send-message"
with:
channel_id: "warehouse-ops"
text: "New fulfillment order: {{order_id}}. Warehouse: {{assign-fulfillment.warehouse_id}}. SKUs: {{sku_list}}. Shipping label: {{create-shipment.tracking_number}}."
consumes:
- type: http
namespace: oracle
baseUri: "https://nordstrom.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: bearer
token: "$secrets.oracle_cloud_token"
resources:
- name: inventory-check
path: "/inventoryBalances"
operations:
- name: check-inventory
method: POST
- name: warehouse-assignment
path: "/fulfillmentCenters/assign"
operations:
- name: assign-warehouse
method: POST
- type: http
namespace: logistics
baseUri: "https://logistics.nordstrom.com/api/v2"
authentication:
type: bearer
token: "$secrets.logistics_token"
resources:
- name: shipments
path: "/shipments"
operations:
- name: create-shipping-label
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: send-message
method: POST
Retrieves Tableau dashboard metadata for Nordstrom business reporting.
naftiko: "0.5"
info:
label: "Tableau Reporting Dashboard Lookup"
description: "Retrieves Tableau dashboard metadata for Nordstrom business reporting."
tags:
- analytics
- tableau
- reporting
capability:
exposes:
- type: mcp
namespace: bi-reporting
port: 8080
tools:
- name: get-tableau-dashboard
description: "Look up a Tableau workbook by ID."
inputParameters:
- name: workbook_id
in: body
type: string
description: "The Tableau workbook identifier."
call: "tableau.get-workbook"
with:
workbook_id: "{{workbook_id}}"
outputParameters:
- name: name
type: string
mapping: "$.workbook.name"
- name: view_count
type: string
mapping: "$.workbook.viewCount"
- name: updated_at
type: string
mapping: "$.workbook.updatedAt"
consumes:
- type: http
namespace: tableau
baseUri: "https://nordstrom.online.tableau.com/api/3.21"
authentication:
type: bearer
token: "$secrets.tableau_token"
resources:
- name: workbooks
path: "/sites/{{site_id}}/workbooks/{{workbook_id}}"
inputParameters:
- name: site_id
in: path
- name: workbook_id
in: path
operations:
- name: get-workbook
method: GET
Sends Teams notification for Nordstrom.
naftiko: "0.5"
info:
label: "Teams Notification"
description: "Sends Teams notification for Nordstrom."
tags:
- communication
- microsoft-teams
- store-ops
capability:
exposes:
- type: mcp
namespace: messaging
port: 8080
tools:
- name: send-notif
description: "Send notification."
inputParameters:
- name: channel
type: string
description: "Channel."
- name: text
type: string
description: "Message."
call: msteams.send
with:
channel: "{{channel}}"
text: "{{text}}"
outputParameters:
- name: id
type: string
mapping: "$.id"
consumes:
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{team_id}}/channels/{{channel}}/messages"
operations:
- name: send
method: POST
Executes a sales analytics query against Teradata, returning department revenue, units sold, and average selling price.
naftiko: "0.5"
info:
label: "Teradata Sales Analytics Query"
description: "Executes a sales analytics query against Teradata, returning department revenue, units sold, and average selling price."
tags:
- analytics
- teradata
- sales
capability:
exposes:
- type: mcp
namespace: sales-analytics
port: 8080
tools:
- name: query-sales-analytics
description: "Run a Teradata sales analytics query by department and date range."
inputParameters:
- name: department
in: body
type: string
description: "The merchandise department."
- name: start_date
in: body
type: string
description: "Start date in YYYY-MM-DD."
- name: end_date
in: body
type: string
description: "End date in YYYY-MM-DD."
call: "teradata.query-sales"
with:
department: "{{department}}"
start_date: "{{start_date}}"
end_date: "{{end_date}}"
outputParameters:
- name: total_revenue
type: string
mapping: "$.results[0].total_revenue"
- name: units_sold
type: string
mapping: "$.results[0].units_sold"
- name: avg_selling_price
type: string
mapping: "$.results[0].avg_price"
consumes:
- type: http
namespace: teradata
baseUri: "https://nordstrom-analytics.teradata.com/api/v1"
authentication:
type: bearer
token: "$secrets.teradata_token"
resources:
- name: queries
path: "/query"
operations:
- name: query-sales
method: POST
Orchestrates vendor invoice matching pipeline for Nordstrom across procurement, sap, servicenow.
naftiko: "0.5"
info:
label: "Vendor Invoice Matching Pipeline"
description: "Orchestrates vendor invoice matching pipeline for Nordstrom across procurement, sap, servicenow."
tags:
- procurement
- sap
- servicenow
- snowflake
capability:
exposes:
- type: mcp
namespace: finance-ops
port: 8080
tools:
- name: vendor-invoice-matching-pipeline
description: "Orchestrates vendor invoice matching pipeline for Nordstrom across procurement, sap, servicenow."
inputParameters:
- name: store_id
type: string
description: "Store or entity identifier."
- name: date
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: query-data
type: call
call: snowflake.run-query
with:
statement: "SELECT * FROM VENDOR_INVOICE_MATCHING_PIPELINE"
- name: check-erp
type: call
call: sap.get-data
with:
entity: "{{store_id}}"
- name: create-ticket
type: call
call: servicenow.create-incident
with:
short_description: "Vendor Invoice Matching Pipeline — {{store_id}}"
category: "procurement"
consumes:
- type: http
namespace: snowflake
baseUri: "https://nordstrom.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: sap
baseUri: "https://nordstrom-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: entities
path: "/A_BusinessPartner"
operations:
- name: get-data
method: GET
- type: http
namespace: servicenow
baseUri: "https://nordstrom.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
Orchestrates vendor performance scorecard for Nordstrom across supply-chain, sap, snowflake.
naftiko: "0.5"
info:
label: "Vendor Performance Scorecard"
description: "Orchestrates vendor performance scorecard for Nordstrom across supply-chain, sap, snowflake."
tags:
- supply-chain
- sap
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: procurement-ops
port: 8080
tools:
- name: vendor-performance-scorecard
description: "Orchestrates vendor performance scorecard for Nordstrom across supply-chain, sap, snowflake."
inputParameters:
- name: store_id
type: string
description: "Store or entity identifier."
- name: date
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: query-data
type: call
call: snowflake.run-query
with:
statement: "SELECT * FROM VENDOR_PERFORMANCE_SCORECARD"
- name: check-erp
type: call
call: sap.get-data
with:
entity: "{{store_id}}"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "ops-{{store_id}}"
text: "Vendor Performance Scorecard done."
consumes:
- type: http
namespace: snowflake
baseUri: "https://nordstrom.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: sap
baseUri: "https://nordstrom-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: entities
path: "/A_BusinessPartner"
operations:
- name: get-data
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
operations:
- name: send-message
method: POST
Retrieves a vendor purchase order from Oracle Cloud by PO number, returning status, vendor name, total value, and delivery date.
naftiko: "0.5"
info:
label: "Vendor Purchase Order Status"
description: "Retrieves a vendor purchase order from Oracle Cloud by PO number, returning status, vendor name, total value, and delivery date."
tags:
- supply-chain
- procurement
- oracle-cloud
capability:
exposes:
- type: mcp
namespace: procurement
port: 8080
tools:
- name: get-purchase-order
description: "Look up an Oracle Cloud purchase order by PO number."
inputParameters:
- name: po_number
in: body
type: string
description: "The purchase order number."
call: "oracle.get-po"
with:
po_number: "{{po_number}}"
outputParameters:
- name: status
type: string
mapping: "$.Status"
- name: vendor
type: string
mapping: "$.Supplier"
- name: total_value
type: string
mapping: "$.TotalAmount"
- name: delivery_date
type: string
mapping: "$.NeedByDate"
consumes:
- type: http
namespace: oracle
baseUri: "https://nordstrom.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: bearer
token: "$secrets.oracle_cloud_token"
resources:
- name: purchase-orders
path: "/purchaseOrders/{{po_number}}"
inputParameters:
- name: po_number
in: path
operations:
- name: get-po
method: GET
Orchestrates warehouse capacity planner for Nordstrom across supply-chain, snowflake, sap.
naftiko: "0.5"
info:
label: "Warehouse Capacity Planner"
description: "Orchestrates warehouse capacity planner for Nordstrom across supply-chain, snowflake, sap."
tags:
- supply-chain
- snowflake
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: logistics
port: 8080
tools:
- name: warehouse-capacity-planner
description: "Orchestrates warehouse capacity planner for Nordstrom across supply-chain, snowflake, sap."
inputParameters:
- name: store_id
type: string
description: "Store or entity identifier."
- name: date
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: query-data
type: call
call: snowflake.run-query
with:
statement: "SELECT * FROM WAREHOUSE_CAPACITY_PLANNER"
- name: check-erp
type: call
call: sap.get-data
with:
entity: "{{store_id}}"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "ops-{{store_id}}"
text: "Warehouse Capacity Planner done."
consumes:
- type: http
namespace: snowflake
baseUri: "https://nordstrom.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: sap
baseUri: "https://nordstrom-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: entities
path: "/A_BusinessPartner"
operations:
- name: get-data
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
operations:
- name: send-message
method: POST
Manages compensation reviews by pulling employee performance data from Workday, market benchmarks from Oracle, and notifying HR leaders via Microsoft Teams.
naftiko: "0.5"
info:
label: "Workday Compensation Review Orchestrator"
description: "Manages compensation reviews by pulling employee performance data from Workday, market benchmarks from Oracle, and notifying HR leaders via Microsoft Teams."
tags:
- hr
- compensation
- workday
- oracle-cloud
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-compensation
port: 8080
tools:
- name: initiate-comp-review
description: "Given a department and review cycle, pull performance data, benchmarks, and notify HR."
inputParameters:
- name: department
in: body
type: string
description: "The department name."
- name: review_cycle
in: body
type: string
description: "The review cycle (e.g., 2025-annual)."
steps:
- name: get-performance
type: call
call: "workday.get-department-reviews"
with:
department: "{{department}}"
cycle: "{{review_cycle}}"
- name: get-benchmarks
type: call
call: "oracle.get-market-benchmarks"
with:
department: "{{department}}"
- name: notify-hr
type: call
call: "msteams.send-message"
with:
channel_id: "hr-compensation"
text: "Comp review ready for {{department}} ({{review_cycle}}). Employees: {{get-performance.count}}. Avg performance: {{get-performance.avg_rating}}. Market midpoint: {{get-benchmarks.market_midpoint}}."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: reviews
path: "/performanceReviews"
operations:
- name: get-department-reviews
method: POST
- type: http
namespace: oracle
baseUri: "https://nordstrom.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: bearer
token: "$secrets.oracle_cloud_token"
resources:
- name: benchmarks
path: "/compensationBenchmarks"
operations:
- name: get-market-benchmarks
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: send-message
method: POST
Searches the Nordstrom Workday tenant for an employee by worker ID and returns profile details.
naftiko: "0.5"
info:
label: "Workday Employee Directory Lookup"
description: "Searches the Nordstrom Workday tenant for an employee by worker ID and returns profile details."
tags:
- hr
- workday
- employee-directory
capability:
exposes:
- type: mcp
namespace: hr
port: 8080
tools:
- name: lookup-employee
description: "Look up an employee in Workday by worker ID."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID."
call: "workday.get-worker"
with:
worker_id: "{{worker_id}}"
outputParameters:
- name: full_name
type: string
mapping: "$.Worker.Worker_Data.Personal_Data.Name_Data.Legal_Name.Name_Detail_Data.Full_Name"
- name: title
type: string
mapping: "$.Worker.Worker_Data.Employment_Data.Worker_Job_Data.Position_Data.Business_Title"
- name: department
type: string
mapping: "$.Worker.Worker_Data.Employment_Data.Worker_Job_Data.Position_Data.Business_Site_Summary.Name"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
Retrieves employee profile from Workday for Nordstrom.
naftiko: "0.5"
info:
label: "Workday Employee Directory"
description: "Retrieves employee profile from Workday for Nordstrom."
tags:
- hr
- workday
- store-ops
capability:
exposes:
- type: mcp
namespace: hr
port: 8080
tools:
- name: get-employee-dir
description: "Look up Workday employee."
inputParameters:
- name: worker_id
type: string
description: "Workday worker ID."
call: workday.get-worker
with:
worker_id: "{{worker_id}}"
outputParameters:
- name: name
type: string
mapping: "$.worker.name.formatted"
- name: title
type: string
mapping: "$.worker.position.title"
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: "/nordstrom/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
Gets headcount for Nordstrom.
naftiko: "0.5"
info:
label: "Workday Headcount"
description: "Gets headcount for Nordstrom."
tags:
- hr
- workday
- store-ops
capability:
exposes:
- type: mcp
namespace: hr
port: 8080
tools:
- name: get-hc
description: "Get headcount."
inputParameters:
- name: dept
type: string
description: "Department."
call: workday.get-hc
with:
dept: "{{dept}}"
outputParameters:
- name: total
type: integer
mapping: "$.headcount.total"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: hc
path: "/nordstrom/headcount"
operations:
- name: get-hc
method: GET
Retrieves PTO balance for Nordstrom.
naftiko: "0.5"
info:
label: "Workday PTO Balance"
description: "Retrieves PTO balance for Nordstrom."
tags:
- hr
- workday
- store-ops
capability:
exposes:
- type: mcp
namespace: hr
port: 8080
tools:
- name: get-pto
description: "Check PTO balance."
inputParameters:
- name: worker_id
type: string
description: "Worker ID."
call: workday.get-pto
with:
worker_id: "{{worker_id}}"
outputParameters:
- name: available
type: number
mapping: "$.timeOff.available"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: time-off
path: "/nordstrom/workers/{{worker_id}}/timeOff"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-pto
method: GET
Retrieves a Zendesk support ticket by ID, returning subject, status, priority, and latest comment.
naftiko: "0.5"
info:
label: "Zendesk Customer Support Ticket Lookup"
description: "Retrieves a Zendesk support ticket by ID, returning subject, status, priority, and latest comment."
tags:
- customer-service
- zendesk
capability:
exposes:
- type: mcp
namespace: customer-support
port: 8080
tools:
- name: get-support-ticket
description: "Look up a Zendesk support ticket by ID."
inputParameters:
- name: ticket_id
in: body
type: string
description: "The Zendesk ticket identifier."
call: "zendesk.get-ticket"
with:
ticket_id: "{{ticket_id}}"
outputParameters:
- name: subject
type: string
mapping: "$.ticket.subject"
- name: status
type: string
mapping: "$.ticket.status"
- name: priority
type: string
mapping: "$.ticket.priority"
consumes:
- type: http
namespace: zendesk
baseUri: "https://nordstrom.zendesk.com/api/v2"
authentication:
type: bearer
token: "$secrets.zendesk_token"
resources:
- name: tickets
path: "/tickets/{{ticket_id}}"
inputParameters:
- name: ticket_id
in: path
operations:
- name: get-ticket
method: GET