Nordstrom Capabilities

Naftiko 0.5 capability definitions for Nordstrom - 115 capabilities showing integration workflows and service orchestrations.

Sort
Expand

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