Macys Capabilities

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

Sort
Expand

Orchestrates app release pipeline for Macy's across devops, github, datadog.

naftiko: "0.5"
info:
  label: "App Release Pipeline"
  description: "Orchestrates app release pipeline for Macy's 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 Macy's 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: "macys/{{store_id}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://macys.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

When an employee separation is processed in Workday, deactivates Okta SSO, disables Microsoft 365, and notifies the store manager via Teams.

naftiko: "0.5"
info:
  label: "Associate Offboarding Workflow"
  description: "When an employee separation is processed in Workday, deactivates Okta SSO, disables Microsoft 365, and notifies the store manager via Teams."
  tags:
    - hr
    - offboarding
    - workday
    - okta
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-offboarding
      port: 8080
      tools:
        - name: trigger-offboarding
          description: "Given a Workday employee ID and last day, deactivate Okta SSO, disable Microsoft 365 account, and notify the manager via Teams that offboarding is complete."
          inputParameters:
            - name: employee_id
              type: string
              description: "Workday worker ID of the departing associate."
            - name: last_day
              type: string
              description: "Last working day in YYYY-MM-DD format."
          steps:
            - name: get-worker
              type: call
              call: workday.get-worker
              with:
                worker_id: "{{employee_id}}"
            - name: deactivate-okta
              type: call
              call: okta.deactivate-user
              with:
                userId: "{{get-worker.work_email}}"
            - name: disable-m365
              type: call
              call: msgraph.update-user
              with:
                user_id: "{{get-worker.work_email}}"
                accountEnabled: "false"
            - name: notify-manager
              type: call
              call: msteams.send-message
              with:
                recipient_upn: "{{get-worker.manager_email}}"
                text: "Offboarding completed for {{get-worker.full_name}} (last day: {{last_day}}). All system access has been revoked."
  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: "/macys/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: okta
      baseUri: "https://macys.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: users
          path: "/users/{{userId}}/lifecycle/deactivate"
          inputParameters:
            - name: userId
              in: path
          operations:
            - name: deactivate-user
              method: POST
    - type: http
      namespace: msgraph
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: users
          path: "/users/{{user_id}}"
          inputParameters:
            - name: user_id
              in: path
          operations:
            - name: update-user
              method: PATCH
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: chats
          path: "/chats"
          operations:
            - name: send-message
              method: POST

Orchestrates associate onboarding flow for Macy's across hr, workday, servicenow.

naftiko: "0.5"
info:
  label: "Associate Onboarding Flow"
  description: "Orchestrates associate onboarding flow for Macy's 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 Macy's 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://macys.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: "/macys/workers"
          operations:
            - name: get-workers
              method: GET

Orchestrates benefits enrollment pipeline for Macy's across hr, workday, servicenow.

naftiko: "0.5"
info:
  label: "Benefits Enrollment Pipeline"
  description: "Orchestrates benefits enrollment pipeline for Macy's 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 Macy's 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://macys.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: "/macys/workers"
          operations:
            - name: get-workers
              method: GET

Orchestrates catalog sync pipeline for Macy's across inventory, sap, snowflake.

naftiko: "0.5"
info:
  label: "Catalog Sync Pipeline"
  description: "Orchestrates catalog sync pipeline for Macy's 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 Macy's 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://macys.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://macys-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 Macy's across loyalty, snowflake, salesforce.

naftiko: "0.5"
info:
  label: "Churn Prevention Pipeline"
  description: "Orchestrates churn prevention pipeline for Macy's 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 Macy's 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://macys.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://macys.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

On a GitHub Actions pipeline failure, creates a Jira bug, posts a Datadog event, and alerts the engineering Teams channel with full context.

naftiko: "0.5"
info:
  label: "CI/CD Pipeline Failure Response"
  description: "On a GitHub Actions pipeline failure, creates a Jira bug, posts a Datadog event, and alerts the engineering Teams channel with full context."
  tags:
    - devops
    - cicd
    - github
    - jira
    - datadog
capability:
  exposes:
    - type: mcp
      namespace: devops
      port: 8080
      tools:
        - name: handle-pipeline-failure
          description: "Given a GitHub Actions failure event, create a Jira bug, post a Datadog deployment event marker, and alert the engineering Teams channel with the failure context."
          inputParameters:
            - name: repo
              type: string
              description: "GitHub repository full name (org/repo)."
            - name: branch
              type: string
              description: "Branch where the failure occurred."
            - name: workflow_run_id
              type: string
              description: "GitHub Actions workflow run ID."
            - name: commit_sha
              type: string
              description: "Commit SHA that triggered the run."
          steps:
            - name: create-bug
              type: call
              call: jira.create-issue
              with:
                project_key: "ENG"
                issuetype: "Bug"
                summary: "[CI Failure] {{repo}} / {{branch}}"
                description: "Run {{workflow_run_id}} failed on commit {{commit_sha}}"
            - name: post-event
              type: call
              call: datadog.create-event
              with:
                title: "CI failure: {{repo}}"
                text: "Branch {{branch}} pipeline failed. Jira: {{create-bug.key}}"
                alert_type: "error"
            - name: alert-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "engineering-alerts"
                text: "Pipeline failure: {{repo}} | Branch: {{branch}} | Jira: {{create-bug.key}} | Run: {{workflow_run_id}}"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://macys.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: events
          path: "/events"
          operations:
            - name: create-event
              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/engineering/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Detects AWS spend anomalies above a threshold and creates a Jira cost-tracking task with a Datadog warning event.

naftiko: "0.5"
info:
  label: "Cloud Cost Anomaly Detection"
  description: "Detects AWS spend anomalies above a threshold and creates a Jira cost-tracking task with a Datadog warning event."
  tags:
    - cloud
    - finops
    - aws
    - datadog
    - jira
capability:
  exposes:
    - type: mcp
      namespace: cloud-finops
      port: 8080
      tools:
        - name: handle-cost-anomaly
          description: "Given an AWS account ID and spend threshold, query Cost Explorer for anomalies, open a Jira task, and post a Datadog warning event. Use when AWS budget alerts trigger."
          inputParameters:
            - name: account_id
              type: string
              description: "AWS account ID to check for cost anomalies."
            - name: threshold_usd
              type: number
              description: "Anomaly threshold in USD."
            - name: date_from
              type: string
              description: "Lookback period start date in YYYY-MM-DD format."
          steps:
            - name: get-anomalies
              type: call
              call: aws-cost.get-anomalies
              with:
                accountId: "{{account_id}}"
                threshold: "{{threshold_usd}}"
                startDate: "{{date_from}}"
            - name: create-task
              type: call
              call: jira.create-issue
              with:
                project_key: "CLOUD"
                issuetype: "Task"
                summary: "AWS cost anomaly: account {{account_id}}"
                description: "{{get-anomalies.summary}} exceeded {{threshold_usd}} USD"
            - name: post-event
              type: call
              call: datadog.create-event
              with:
                title: "Cost anomaly: {{account_id}}"
                text: "Spend above {{threshold_usd}} USD. Jira: {{create-task.key}}"
                alert_type: "warning"
  consumes:
    - type: http
      namespace: aws-cost
      baseUri: "https://ce.us-east-1.amazonaws.com"
      authentication:
        type: bearer
        token: "$secrets.aws_cost_explorer_token"
      resources:
        - name: anomalies
          path: "/GetAnomalies"
          operations:
            - name: get-anomalies
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://macys.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: events
          path: "/events"
          operations:
            - name: create-event
              method: POST

Orchestrates compliance review pipeline for Macy's across compliance, servicenow, snowflake.

naftiko: "0.5"
info:
  label: "Compliance Review Pipeline"
  description: "Orchestrates compliance review pipeline for Macy's 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 Macy's 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://macys.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://macys.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 contract renewal alerts for Macy's across procurement, sap, servicenow.

naftiko: "0.5"
info:
  label: "Contract Renewal Alerts"
  description: "Orchestrates contract renewal alerts for Macy's 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 Macy's 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://macys-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://macys.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 Macy's across infrastructure, snowflake, servicenow.

naftiko: "0.5"
info:
  label: "Cost Optimization Pipeline"
  description: "Orchestrates cost optimization pipeline for Macy's 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 Macy's 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://macys.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://macys.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

Uses Anthropic Claude to classify and summarize a Salesforce Service Cloud case, then routes it to the appropriate ServiceNow queue based on category.

naftiko: "0.5"
info:
  label: "Customer Case Triage with AI"
  description: "Uses Anthropic Claude to classify and summarize a Salesforce Service Cloud case, then routes it to the appropriate ServiceNow queue based on category."
  tags:
    - customer-support
    - ai
    - salesforce
    - servicenow
    - anthropic
capability:
  exposes:
    - type: mcp
      namespace: cx-triage
      port: 8080
      tools:
        - name: triage-customer-case
          description: "Given a Salesforce Service Cloud case ID, fetch case details, use Anthropic Claude to classify severity and category, then create a routed ServiceNow incident with the AI summary."
          inputParameters:
            - name: case_id
              type: string
              description: "Salesforce Service Cloud case record ID."
          steps:
            - name: get-case
              type: call
              call: salesforce.get-case
              with:
                case_id: "{{case_id}}"
            - name: classify-case
              type: call
              call: anthropic.create-message
              with:
                model: "claude-3-5-sonnet-20241022"
                prompt: "Classify this retail customer complaint by severity (low/medium/high) and category (return, delivery, product, billing). Case: {{get-case.Description}}"
            - name: create-incident
              type: call
              call: servicenow.create-incident
              with:
                short_description: "{{get-case.Subject}}"
                description: "AI Classification: {{classify-case.content}} | Original: {{get-case.Description}}"
                category: "customer_experience"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://macys.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
    - type: http
      namespace: anthropic
      baseUri: "https://api.anthropic.com/v1"
      authentication:
        type: apikey
        key: "x-api-key"
        value: "$secrets.anthropic_api_key"
        placement: header
      resources:
        - name: messages
          path: "/messages"
          operations:
            - name: create-message
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://macys.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 customer feedback analysis for Macy's across customer-service, salesforce, snowflake.

naftiko: "0.5"
info:
  label: "Customer Feedback Analysis"
  description: "Orchestrates customer feedback analysis for Macy's 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 Macy's 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://macys.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://macys.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 Macy's across customer-service, salesforce, snowflake.

naftiko: "0.5"
info:
  label: "Customer Order Resolution Workflow"
  description: "Orchestrates customer order resolution workflow for Macy's 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 Macy's 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://macys.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://macys.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://macys.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 customer refunds for Macy's by looking up Salesforce orders, issuing SAP credit memos, and creating ServiceNow confirmation tickets.

naftiko: "0.5"
info:
  label: "Customer Refund Processing"
  description: "Processes customer refunds for Macy's by looking up Salesforce orders, issuing SAP credit memos, and creating ServiceNow confirmation tickets."
  tags:
    - e-commerce
    - salesforce
    - sap
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: customer-ops
      port: 8080
      tools:
        - name: customer-refund-processing
          description: "Processes customer refunds for Macy's by looking up Salesforce orders, issuing SAP credit memos."
          inputParameters:
            - name: order_id
              type: string
              description: "Order identifier."
            - name: reason
              type: string
              description: "Refund reason."
          steps:
            - name: get-order
              type: call
              call: salesforce.get-order
              with:
                order_id: "{{order_id}}"
            - name: issue-credit
              type: call
              call: sap.create-credit-memo
              with:
                order_ref: "{{order_id}}"
                reason: "{{reason}}"
            - name: create-ticket
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Refund processed: {{order_id}}"
                category: "e-commerce"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://macys.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: orders
          path: "/sobjects/Order/{{order_id}}"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: get-order
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://macys-s4.sap.com/sap/opu/odata/sap/API_CREDIT_MEMO_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: credit-memos
          path: "/A_CreditMemoRequest"
          operations:
            - name: create-credit-memo
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://macys.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 cx survey pipeline for Macy's across customer-service, salesforce, snowflake.

naftiko: "0.5"
info:
  label: "Cx Survey Pipeline"
  description: "Orchestrates cx survey pipeline for Macy's 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 Macy's 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://macys.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://macys.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 Macy's across store-ops, snowflake, datadog.

naftiko: "0.5"
info:
  label: "Daily Ops Report"
  description: "Orchestrates daily ops report for Macy's 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 Macy's 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://macys.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

Checks Datadog monitor status for Macy's.

naftiko: "0.5"
info:
  label: "Datadog Monitor Health"
  description: "Checks Datadog monitor status for Macy's."
  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

When a Datadog critical monitor fires for a production service, creates a ServiceNow P1 incident and notifies the on-call engineering team via Teams.

naftiko: "0.5"
info:
  label: "Datadog Production Alert to ServiceNow"
  description: "When a Datadog critical monitor fires for a production service, creates a ServiceNow P1 incident and notifies the on-call engineering team via Teams."
  tags:
    - itsm
    - observability
    - datadog
    - servicenow
    - incident-response
capability:
  exposes:
    - type: mcp
      namespace: ops-triage
      port: 8080
      tools:
        - name: handle-production-alert
          description: "Given a Datadog monitor ID and affected service, retrieve the monitor state, create a ServiceNow P1 incident, and post to the on-call Teams channel."
          inputParameters:
            - name: monitor_id
              type: string
              description: "Datadog monitor ID that triggered the alert."
            - name: affected_service
              type: string
              description: "Name of the affected application or service."
            - name: severity
              type: string
              description: "Alert severity: critical or warning."
          steps:
            - name: get-monitor
              type: call
              call: datadog.get-monitor
              with:
                monitor_id: "{{monitor_id}}"
            - name: create-incident
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Production alert: {{affected_service}} — {{severity}}"
                urgency: "1"
                impact: "1"
                description: "Monitor {{monitor_id}}: {{get-monitor.message}}"
            - name: notify-oncall
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "on-call-engineering"
                text: "P1 Alert: {{affected_service}} ({{severity}}) | ServiceNow: {{create-incident.number}} | Monitor: {{monitor_id}}"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: monitors
          path: "/monitor/{{monitor_id}}"
          inputParameters:
            - name: monitor_id
              in: path
          operations:
            - name: get-monitor
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://macys.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/oncall/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Checks synthetic test for Macy's.

naftiko: "0.5"
info:
  label: "Datadog Synthetic Test"
  description: "Checks synthetic test for Macy's."
  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

Orchestrates emergency notification pipeline for Macy's across store-ops, workday, microsoft-teams.

naftiko: "0.5"
info:
  label: "Emergency Notification Pipeline"
  description: "Orchestrates emergency notification pipeline for Macy's 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 Macy's 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://macys.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: "/macys/workers"
          operations:
            - name: get-workers
              method: GET

Orchestrates employee promotion workflow for Macy's across hr, workday, servicenow.

naftiko: "0.5"
info:
  label: "Employee Promotion Workflow"
  description: "Orchestrates employee promotion workflow for Macy's 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 Macy's 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://macys.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: "/macys/workers"
          operations:
            - name: get-workers
              method: GET

Processes employee transfers for Macy's by updating Workday records, adjusting ServiceNow access, and notifying managers via Teams.

naftiko: "0.5"
info:
  label: "Employee Transfer Processing"
  description: "Processes employee transfers for Macy's by updating Workday records, adjusting ServiceNow access, and notifying managers via Teams."
  tags:
    - hr
    - workday
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-ops
      port: 8080
      tools:
        - name: employee-transfer-processing
          description: "Processes employee transfers for Macy's by updating Workday records, adjusting ServiceNow access."
          inputParameters:
            - name: worker_id
              type: string
              description: "Workday worker ID."
            - name: new_store
              type: string
              description: "New store assignment."
          steps:
            - name: get-worker
              type: call
              call: workday.get-worker
              with:
                worker_id: "{{worker_id}}"
            - name: update-access
              type: call
              call: servicenow.create-task
              with:
                short_description: "Transfer access update: {{worker_id}} to Store {{new_store}}"
                assignment_group: "IT_Access"
            - name: notify-manager
              type: call
              call: msteams.send-message
              with:
                channel_id: "store-{{new_store}}-ops"
                text: "Employee transfer: {{get-worker.full_name}} transferring to Store {{new_store}}."
  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: "/macys/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://macys.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/sc_task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          operations:
            - name: send-message
              method: POST

Orchestrates energy monitoring pipeline for Macy's across store-ops, snowflake, sap.

naftiko: "0.5"
info:
  label: "Energy Monitoring Pipeline"
  description: "Orchestrates energy monitoring pipeline for Macy's 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 Macy's 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://macys.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://macys-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 Macy's across store-ops, snowflake, sap.

naftiko: "0.5"
info:
  label: "Eod Reconciliation"
  description: "Orchestrates eod reconciliation for Macy's 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 Macy's 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://macys.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://macys-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://macys.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 gift card inquiry handler for Macy's across e-commerce, salesforce, snowflake.

naftiko: "0.5"
info:
  label: "Gift Card Inquiry Handler"
  description: "Orchestrates gift card inquiry handler for Macy's 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 Macy's 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://macys.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://macys.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://macys.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 Macy's.

naftiko: "0.5"
info:
  label: "GitHub Repository Info"
  description: "Retrieves GitHub repo info for Macy's."
  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 critical Dependabot alerts from GitHub repositories and creates Jira security issues for each critical vulnerability found.

naftiko: "0.5"
info:
  label: "GitHub Repository Security Scan"
  description: "Retrieves critical Dependabot alerts from GitHub repositories and creates Jira security issues for each critical vulnerability found."
  tags:
    - security
    - devops
    - github
    - jira
    - vulnerability-management
capability:
  exposes:
    - type: mcp
      namespace: security-ops
      port: 8080
      tools:
        - name: scan-repo-vulnerabilities
          description: "Given a GitHub repository, list all critical Dependabot alerts and create a Jira security issue for each critical finding. Use during weekly security review cycles."
          inputParameters:
            - name: repo_owner
              type: string
              description: "GitHub organization or owner name."
            - name: repo_name
              type: string
              description: "GitHub repository name."
          steps:
            - name: get-alerts
              type: call
              call: github.list-dependabot-alerts
              with:
                owner: "{{repo_owner}}"
                repo: "{{repo_name}}"
                severity: "critical"
            - name: create-security-issue
              type: call
              call: jira.create-issue
              with:
                project_key: "SEC"
                issuetype: "Bug"
                summary: "Critical vulnerabilities: {{repo_owner}}/{{repo_name}}"
                description: "{{get-alerts.count}} critical Dependabot alerts. Repo: https://github.com/{{repo_owner}}/{{repo_name}}"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: dependabot-alerts
          path: "/repos/{{owner}}/{{repo}}/dependabot/alerts"
          inputParameters:
            - name: owner
              in: path
            - name: repo
              in: path
            - name: severity
              in: query
          operations:
            - name: list-dependabot-alerts
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://macys.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

Checks workflow for Macy's.

naftiko: "0.5"
info:
  label: "GitHub Workflow Status"
  description: "Checks workflow for Macy's."
  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

Orchestrates inventory audit pipeline for Macy's across inventory, sap, snowflake.

naftiko: "0.5"
info:
  label: "Inventory Audit Pipeline"
  description: "Orchestrates inventory audit pipeline for Macy's 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 Macy's 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://macys.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://macys-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://macys.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

Manages inventory write-offs for Macy's by creating SAP adjustments, logging in Snowflake, and creating ServiceNow audit records.

naftiko: "0.5"
info:
  label: "Inventory Write-Off Pipeline"
  description: "Manages inventory write-offs for Macy's by creating SAP adjustments, logging in Snowflake, and creating ServiceNow audit records."
  tags:
    - inventory
    - sap
    - snowflake
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: inventory-ops
      port: 8080
      tools:
        - name: inventory-write-off-pipeline
          description: "Manages inventory write-offs for Macy's by creating SAP adjustments and logging in Snowflake."
          inputParameters:
            - name: store_id
              type: string
              description: "Store identifier."
            - name: reason
              type: string
              description: "Write-off reason."
          steps:
            - name: create-adjustment
              type: call
              call: sap.post-adjustment
              with:
                plant: "{{store_id}}"
                reason: "{{reason}}"
            - name: log-writeoff
              type: call
              call: snowflake.run-query
              with:
                statement: "INSERT INTO INVENTORY_WRITEOFFS VALUES ('{{store_id}}', '{{reason}}', CURRENT_TIMESTAMP())"
            - name: create-audit
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Inventory write-off: Store {{store_id}} — {{reason}}"
                category: "inventory"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://macys-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_DOCUMENT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: adjustments
          path: "/A_MaterialDocumentHeader"
          operations:
            - name: post-adjustment
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://macys.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://macys.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

Submits a vendor invoice to SAP Ariba for three-way match, creates an approval task in ServiceNow, and notifies the approver via Teams.

naftiko: "0.5"
info:
  label: "Invoice Approval Workflow"
  description: "Submits a vendor invoice to SAP Ariba for three-way match, creates an approval task in ServiceNow, and notifies the approver via Teams."
  tags:
    - finance
    - procurement
    - sap-ariba
    - servicenow
    - approval
capability:
  exposes:
    - type: mcp
      namespace: ap-ops
      port: 8080
      tools:
        - name: process-vendor-invoice
          description: "Given a vendor invoice number, PO reference, and approver UPN, submit to SAP Ariba for matching, create a ServiceNow approval task, and notify the approver via Teams."
          inputParameters:
            - name: invoice_number
              type: string
              description: "Vendor invoice number."
            - name: vendor_id
              type: string
              description: "SAP vendor ID."
            - name: amount
              type: number
              description: "Invoice total amount."
            - name: approver_upn
              type: string
              description: "UPN of the finance approver."
          steps:
            - name: submit-invoice
              type: call
              call: sap-ariba.create-invoice
              with:
                invoiceNumber: "{{invoice_number}}"
                vendorId: "{{vendor_id}}"
                totalAmount: "{{amount}}"
            - name: create-approval-task
              type: call
              call: servicenow.create-task
              with:
                short_description: "Approve invoice: {{invoice_number}}"
                assigned_to: "{{approver_upn}}"
                description: "Ariba invoice ID: {{submit-invoice.invoiceId}} | Amount: {{amount}}"
            - name: notify-approver
              type: call
              call: msteams.send-message
              with:
                recipient_upn: "{{approver_upn}}"
                text: "Invoice {{invoice_number}} requires your approval. ServiceNow task: {{create-approval-task.number}}"
  consumes:
    - type: http
      namespace: sap-ariba
      baseUri: "https://openapi.ariba.com/api/invoice/v1"
      authentication:
        type: bearer
        token: "$secrets.ariba_token"
      resources:
        - name: invoices
          path: "/invoices"
          operations:
            - name: create-invoice
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://macys.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/sc_task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: chats
          path: "/chats"
          operations:
            - name: send-message
              method: POST

Orchestrates it incident escalation for Macy's across infrastructure, datadog, servicenow.

naftiko: "0.5"
info:
  label: "It Incident Escalation"
  description: "Orchestrates it incident escalation for Macy's 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 Macy's 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://macys.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

Summarizes completed Jira sprint story points and posts a velocity digest to the engineering Teams channel.

naftiko: "0.5"
info:
  label: "Jira Sprint Velocity Digest"
  description: "Summarizes completed Jira sprint story points and posts a velocity digest to the engineering Teams channel."
  tags:
    - devops
    - project-management
    - jira
    - microsoft-teams
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: agile-reporting
      port: 8080
      tools:
        - name: digest-sprint-velocity
          description: "Given a Jira board ID and sprint ID, retrieve completed issues and story points, then post a sprint velocity summary to the engineering Teams channel."
          inputParameters:
            - name: board_id
              type: string
              description: "Jira board ID."
            - name: sprint_id
              type: string
              description: "Jira sprint ID to summarize."
            - name: teams_channel_id
              type: string
              description: "Engineering Teams channel ID."
          steps:
            - name: get-sprint-issues
              type: call
              call: jira.get-sprint-issues
              with:
                boardId: "{{board_id}}"
                sprintId: "{{sprint_id}}"
            - name: post-digest
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "{{teams_channel_id}}"
                text: "Sprint {{sprint_id}} complete — {{get-sprint-issues.totalPoints}} story points across {{get-sprint-issues.issueCount}} issues."
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://macys.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: sprint-issues
          path: "/board/{{boardId}}/sprint/{{sprintId}}/issue"
          inputParameters:
            - name: boardId
              in: path
            - name: sprintId
              in: path
          operations:
            - name: get-sprint-issues
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/engineering/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Orchestrates labor schedule optimizer for Macy's across store-ops, snowflake, workday.

naftiko: "0.5"
info:
  label: "Labor Schedule Optimizer"
  description: "Orchestrates labor schedule optimizer for Macy's 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 Macy's 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://macys.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: "/macys/workers"
          operations:
            - name: get-workers
              method: GET

Publishes a LinkedIn brand post for a Macy's campaign page and logs the post ID back to the Salesforce campaign record for attribution.

naftiko: "0.5"
info:
  label: "LinkedIn Brand Post Publishing"
  description: "Publishes a LinkedIn brand post for a Macy's campaign page and logs the post ID back to the Salesforce campaign record for attribution."
  tags:
    - marketing
    - social
    - linkedin
    - salesforce
    - content
capability:
  exposes:
    - type: mcp
      namespace: social-publishing
      port: 8080
      tools:
        - name: publish-linkedin-post
          description: "Given LinkedIn org URN, post copy, and a Salesforce campaign ID, publish the post to the brand LinkedIn page and log the post ID to the campaign record."
          inputParameters:
            - name: org_urn
              type: string
              description: "LinkedIn organization URN for the brand page."
            - name: post_text
              type: string
              description: "Post text copy to publish."
            - name: campaign_id
              type: string
              description: "Salesforce campaign record ID for attribution tracking."
          steps:
            - name: publish-post
              type: call
              call: linkedin.create-post
              with:
                author: "{{org_urn}}"
                commentary: "{{post_text}}"
            - name: update-campaign
              type: call
              call: salesforce.update-campaign
              with:
                campaign_id: "{{campaign_id}}"
                LinkedIn_Post_ID__c: "{{publish-post.id}}"
  consumes:
    - type: http
      namespace: linkedin
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: posts
          path: "/posts"
          operations:
            - name: create-post
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://macys.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: campaigns
          path: "/sobjects/Campaign/{{campaign_id}}"
          inputParameters:
            - name: campaign_id
              in: path
          operations:
            - name: update-campaign
              method: PATCH

Orchestrates loyalty enrollment pipeline for Macy's across loyalty, salesforce, snowflake.

naftiko: "0.5"
info:
  label: "Loyalty Enrollment Pipeline"
  description: "Orchestrates loyalty enrollment pipeline for Macy's 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 Macy's 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://macys.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://macys.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 Macy's across loyalty, salesforce, snowflake.

naftiko: "0.5"
info:
  label: "Loyalty Points Reconciliation"
  description: "Orchestrates loyalty points reconciliation for Macy's 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 Macy's 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://macys.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://macys.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://macys.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 maintenance request workflow for Macy's across store-ops, servicenow, sap.

naftiko: "0.5"
info:
  label: "Maintenance Request Workflow"
  description: "Orchestrates maintenance request workflow for Macy's 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 Macy's 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://macys-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://macys.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 Macy's across e-commerce, snowflake, sap.

naftiko: "0.5"
info:
  label: "Markdown Optimization Pipeline"
  description: "Orchestrates markdown optimization pipeline for Macy's 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 Macy's 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://macys.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://macys-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

Aggregates email and digital campaign performance metrics from Salesforce Marketing Cloud and posts a daily digest to the marketing Teams channel.

naftiko: "0.5"
info:
  label: "Marketing Campaign Performance Digest"
  description: "Aggregates email and digital campaign performance metrics from Salesforce Marketing Cloud and posts a daily digest to the marketing Teams channel."
  tags:
    - marketing
    - reporting
    - salesforce
    - microsoft-teams
    - digest
capability:
  exposes:
    - type: mcp
      namespace: marketing-reporting
      port: 8080
      tools:
        - name: digest-campaign-performance
          description: "Fetch digital campaign performance metrics from Salesforce Marketing Cloud for a date range and post a formatted summary to the marketing Teams channel."
          inputParameters:
            - name: date_from
              type: string
              description: "Start date for the reporting period in YYYY-MM-DD format."
            - name: date_to
              type: string
              description: "End date for the reporting period in YYYY-MM-DD format."
            - name: teams_channel_id
              type: string
              description: "Teams channel ID for the marketing team."
          steps:
            - name: get-campaigns
              type: call
              call: sfmc.list-campaigns
              with:
                dateFrom: "{{date_from}}"
                dateTo: "{{date_to}}"
            - name: post-digest
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "{{teams_channel_id}}"
                text: "Marketing Campaign Digest ({{date_from}} to {{date_to}}): {{get-campaigns.summary}}"
  consumes:
    - type: http
      namespace: sfmc
      baseUri: "https://api.salesforce.com/marketing/v1"
      authentication:
        type: bearer
        token: "$secrets.sfmc_token"
      resources:
        - name: campaigns
          path: "/campaigns"
          inputParameters:
            - name: dateFrom
              in: query
            - name: dateTo
              in: query
          operations:
            - name: list-campaigns
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/marketing/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Orchestrates marketing roi tracker for Macy's across marketing, snowflake, salesforce.

naftiko: "0.5"
info:
  label: "Marketing Roi Tracker"
  description: "Orchestrates marketing roi tracker for Macy's 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 Macy's 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://macys.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://macys.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 Meta Ads Manager campaign performance metrics for a given Macy's campaign ID and date range for paid social reporting.

naftiko: "0.5"
info:
  label: "Meta Retail Ad Performance Lookup"
  description: "Retrieves Meta Ads Manager campaign performance metrics for a given Macy's campaign ID and date range for paid social reporting."
  tags:
    - marketing
    - social
    - meta
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: meta-ads
      port: 8080
      tools:
        - name: get-meta-campaign-insights
          description: "Fetch Meta Ads campaign insights including impressions, reach, clicks, and spend for a given campaign and date range. Use for weekly paid social performance reviews."
          inputParameters:
            - name: campaign_id
              type: string
              description: "Meta Ads campaign ID."
            - name: date_from
              type: string
              description: "Start date in YYYY-MM-DD format."
            - name: date_to
              type: string
              description: "End date in YYYY-MM-DD format."
          call: meta.get-campaign-insights
          with:
            campaign_id: "{{campaign_id}}"
            time_range_since: "{{date_from}}"
            time_range_until: "{{date_to}}"
          outputParameters:
            - name: impressions
              type: string
              mapping: "$.data[0].impressions"
            - name: reach
              type: string
              mapping: "$.data[0].reach"
            - name: clicks
              type: string
              mapping: "$.data[0].clicks"
            - name: spend
              type: string
              mapping: "$.data[0].spend"
  consumes:
    - type: http
      namespace: meta
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.meta_token"
      resources:
        - name: campaign-insights
          path: "/{{campaign_id}}/insights"
          inputParameters:
            - name: campaign_id
              in: path
            - name: time_range_since
              in: query
            - name: time_range_until
              in: query
          operations:
            - name: get-campaign-insights
              method: GET

When a new associate is created in Workday, opens a ServiceNow onboarding ticket, provisions a Microsoft 365 account, and sends a Teams welcome message to the new hire.

naftiko: "0.5"
info:
  label: "New Associate Onboarding Orchestrator"
  description: "When a new associate is created in Workday, opens a ServiceNow onboarding ticket, provisions a Microsoft 365 account, and sends a Teams welcome message to the new hire."
  tags:
    - hr
    - onboarding
    - workday
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-onboarding
      port: 8080
      tools:
        - name: trigger-onboarding
          description: "Given a Workday employee ID and store or department assignment, create a ServiceNow onboarding ticket, provision a Microsoft 365 account, and send a Teams welcome message."
          inputParameters:
            - name: employee_id
              type: string
              description: "Workday worker ID for the new associate."
            - name: location
              type: string
              description: "Store number or department name the associate is assigned to."
            - name: start_date
              type: string
              description: "Employment start date in YYYY-MM-DD format."
          steps:
            - name: get-worker
              type: call
              call: workday.get-worker
              with:
                worker_id: "{{employee_id}}"
            - name: create-ticket
              type: call
              call: servicenow.create-incident
              with:
                short_description: "New associate onboarding: {{get-worker.full_name}} — {{location}}"
                category: "hr_onboarding"
                assignment_group: "IT_Onboarding"
            - name: provision-m365
              type: call
              call: msgraph.create-user
              with:
                displayName: "{{get-worker.full_name}}"
                mail: "{{get-worker.work_email}}"
                officeLocation: "{{location}}"
            - name: send-welcome
              type: call
              call: msteams.send-message
              with:
                recipient_upn: "{{get-worker.work_email}}"
                text: "Welcome to Macy's, {{get-worker.first_name}}! Your onboarding ticket is {{create-ticket.number}}. We're excited to have you on the team."
  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: "/macys/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://macys.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: msgraph
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: users
          path: "/users"
          operations:
            - name: create-user
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: chats
          path: "/chats"
          operations:
            - name: send-message
              method: POST

Orchestrates offboarding pipeline for Macy's across hr, workday, servicenow.

naftiko: "0.5"
info:
  label: "Offboarding Pipeline"
  description: "Orchestrates offboarding pipeline for Macy's 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 Macy's 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://macys.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: "/macys/workers"
          operations:
            - name: get-workers
              method: GET

When a ServiceNow access request is approved, provisions the user's Okta group membership and resolves the ticket.

naftiko: "0.5"
info:
  label: "Okta Access Provisioning"
  description: "When a ServiceNow access request is approved, provisions the user's Okta group membership and resolves the ticket."
  tags:
    - identity
    - security
    - okta
    - servicenow
    - access-management
capability:
  exposes:
    - type: mcp
      namespace: identity-ops
      port: 8080
      tools:
        - name: provision-user-access
          description: "Given an approved ServiceNow access request, add the user to the specified Okta group, resolve the ticket, and confirm access via Teams."
          inputParameters:
            - name: snow_ticket_id
              type: string
              description: "ServiceNow request ticket sys_id."
            - name: user_email
              type: string
              description: "User email address to provision access for."
            - name: okta_group_id
              type: string
              description: "Okta group ID to assign the user to."
          steps:
            - name: add-to-group
              type: call
              call: okta.add-user-to-group
              with:
                groupId: "{{okta_group_id}}"
                userId: "{{user_email}}"
            - name: resolve-ticket
              type: call
              call: servicenow.update-request
              with:
                sys_id: "{{snow_ticket_id}}"
                state: "3"
                close_notes: "Access provisioned to Okta group {{okta_group_id}}"
            - name: confirm-user
              type: call
              call: msteams.send-message
              with:
                recipient_upn: "{{user_email}}"
                text: "Access granted: you have been added to the requested system group ({{okta_group_id}})."
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://macys.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: group-members
          path: "/groups/{{groupId}}/users/{{userId}}"
          inputParameters:
            - name: groupId
              in: path
            - name: userId
              in: path
          operations:
            - name: add-user-to-group
              method: PUT
    - type: http
      namespace: servicenow
      baseUri: "https://macys.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: requests
          path: "/table/sc_request/{{sys_id}}"
          inputParameters:
            - name: sys_id
              in: path
          operations:
            - name: update-request
              method: PATCH
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: chats
          path: "/chats"
          operations:
            - name: send-message
              method: POST

Orchestrates payment processing pipeline for Macy's across procurement, sap, snowflake.

naftiko: "0.5"
info:
  label: "Payment Processing Pipeline"
  description: "Orchestrates payment processing pipeline for Macy's 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 Macy's 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://macys.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://macys-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://macys.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 current headcount by department and cost center from Workday for payroll planning and workforce cost reporting.

naftiko: "0.5"
info:
  label: "Payroll Headcount Snapshot"
  description: "Retrieves current headcount by department and cost center from Workday for payroll planning and workforce cost reporting."
  tags:
    - hr
    - finance
    - payroll
    - workday
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: hr-finance
      port: 8080
      tools:
        - name: get-headcount-by-department
          description: "Return active associates grouped by department and cost center. Use for headcount planning, payroll cost analysis, and store staffing reports."
          call: workday.headcount-export
          outputParameters:
            - name: employees
              type: array
              mapping: "$.data"
              items:
                - name: employee_id
                  type: string
                  mapping: "$.id"
                - name: full_name
                  type: string
                  mapping: "$.fullName"
                - name: department
                  type: string
                  mapping: "$.department"
                - name: cost_center
                  type: string
                  mapping: "$.costCenter"
  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-export
          path: "/macys/workers"
          operations:
            - name: headcount-export
              method: GET

Triggers Power BI refresh for Macy's.

naftiko: "0.5"
info:
  label: "Power BI Refresh"
  description: "Triggers Power BI refresh for Macy's."
  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 the retail sales dashboard and notifies the merchandising team when the latest data is available.

naftiko: "0.5"
info:
  label: "Power BI Retail Dashboard Refresh"
  description: "Triggers a Power BI dataset refresh for the retail sales dashboard and notifies the merchandising team when the latest data is available."
  tags:
    - data
    - analytics
    - power-bi
    - reporting
    - retail
capability:
  exposes:
    - type: mcp
      namespace: bi-reporting
      port: 8080
      tools:
        - name: refresh-retail-sales-dashboard
          description: "Trigger a Power BI dataset refresh for the retail sales dashboard. Notify the merchandising Teams channel when the refresh is initiated."
          inputParameters:
            - name: workspace_id
              type: string
              description: "Power BI workspace ID."
            - name: dataset_id
              type: string
              description: "Power BI retail sales dataset ID."
            - name: teams_channel_id
              type: string
              description: "Merchandising Teams channel ID."
          steps:
            - name: trigger-refresh
              type: call
              call: powerbi.trigger-refresh
              with:
                workspaceId: "{{workspace_id}}"
                datasetId: "{{dataset_id}}"
            - name: notify-merchandising
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "{{teams_channel_id}}"
                text: "Retail sales dashboard refresh triggered. Latest store and online sales data will be available shortly."
  consumes:
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: dataset-refreshes
          path: "/groups/{{workspaceId}}/datasets/{{datasetId}}/refreshes"
          inputParameters:
            - name: workspaceId
              in: path
            - name: datasetId
              in: path
          operations:
            - name: trigger-refresh
              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/merchandising/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Orchestrates price change pipeline for Macy's across e-commerce, sap, snowflake.

naftiko: "0.5"
info:
  label: "Price Change Pipeline"
  description: "Orchestrates price change pipeline for Macy's 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 Macy's 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://macys.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://macys-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 qbr report generator for Macy's across analytics, snowflake, salesforce.

naftiko: "0.5"
info:
  label: "Qbr Report Generator"
  description: "Orchestrates qbr report generator for Macy's 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 Macy's 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://macys.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://macys.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

Responds to product quality alerts for Macy's by checking SAP inventory, creating ServiceNow cases, and notifying supply chain via Teams.

naftiko: "0.5"
info:
  label: "Quality Alert Response"
  description: "Responds to product quality alerts for Macy's by checking SAP inventory, creating ServiceNow cases, and notifying supply chain via Teams."
  tags:
    - supply-chain
    - sap
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: product-safety
      port: 8080
      tools:
        - name: quality-alert-response
          description: "Responds to product quality alerts for Macy's by checking SAP inventory and creating ServiceNow cases."
          inputParameters:
            - name: sku
              type: string
              description: "Product SKU."
            - name: alert_type
              type: string
              description: "Quality alert type."
          steps:
            - name: check-inventory
              type: call
              call: sap.get-stock
              with:
                material: "{{sku}}"
            - name: create-case
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Quality alert: {{sku}} — {{alert_type}}"
                category: "supply-chain"
                priority: "2"
            - name: notify-team
              type: call
              call: msteams.send-message
              with:
                channel_id: "quality-assurance"
                text: "Quality alert for SKU {{sku}}: {{alert_type}}. Case: {{create-case.number}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://macys-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
    - type: http
      namespace: servicenow
      baseUri: "https://macys.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 recall response pipeline for Macy's across inventory, sap, snowflake.

naftiko: "0.5"
info:
  label: "Recall Response Pipeline"
  description: "Orchestrates recall response pipeline for Macy's 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 Macy's 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://macys.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://macys-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://macys.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 Macy's across store-ops, sap, servicenow.

naftiko: "0.5"
info:
  label: "Remodel Coordination"
  description: "Orchestrates remodel coordination for Macy's 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 Macy's 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://macys-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://macys.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

Looks up a Salesforce case by ID for Macy's.

naftiko: "0.5"
info:
  label: "Salesforce Case Status Lookup"
  description: "Looks up a Salesforce case by ID for Macy's."
  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://macys.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 Macy's.

naftiko: "0.5"
info:
  label: "Salesforce Contact Search"
  description: "Searches contacts for Macy's."
  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://macys.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

Looks up a Salesforce customer account by ID and returns account details including contact, loyalty tier, and order history summary.

naftiko: "0.5"
info:
  label: "Salesforce Customer Account Lookup"
  description: "Looks up a Salesforce customer account by ID and returns account details including contact, loyalty tier, and order history summary."
  tags:
    - crm
    - sales
    - salesforce
    - customer-service
capability:
  exposes:
    - type: mcp
      namespace: crm
      port: 8080
      tools:
        - name: get-customer-account
          description: "Look up a Salesforce customer account by ID. Returns name, loyalty tier, primary contact email, and lifetime value. Use for customer service lookup and order support workflows."
          inputParameters:
            - name: account_id
              type: string
              description: "Salesforce account record ID (18-character)."
          call: salesforce.get-account
          with:
            account_id: "{{account_id}}"
          outputParameters:
            - name: name
              type: string
              mapping: "$.Name"
            - name: loyalty_tier
              type: string
              mapping: "$.Loyalty_Tier__c"
            - name: email
              type: string
              mapping: "$.PersonEmail"
            - name: lifetime_value
              type: string
              mapping: "$.LifetimeValue__c"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://macys.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{account_id}}"
          inputParameters:
            - name: account_id
              in: path
          operations:
            - name: get-account
              method: GET

When a Salesforce opportunity reaches Closed Won, updates the SAP cost center allocation and sends a win notification to the sales leadership Teams channel.

naftiko: "0.5"
info:
  label: "Salesforce Opportunity Won Sync"
  description: "When a Salesforce opportunity reaches Closed Won, updates the SAP cost center allocation and sends a win notification to the sales leadership Teams channel."
  tags:
    - crm
    - sales
    - salesforce
    - sap
    - finance
capability:
  exposes:
    - type: mcp
      namespace: sales-ops
      port: 8080
      tools:
        - name: sync-opportunity-close
          description: "Given a Closed Won Salesforce opportunity ID, fetch the opportunity, update the SAP cost center allocation for the revenue, and post a win announcement to the sales Teams channel."
          inputParameters:
            - name: opportunity_id
              type: string
              description: "Salesforce opportunity record ID."
            - name: teams_channel_id
              type: string
              description: "Sales leadership Teams channel ID."
          steps:
            - name: get-opportunity
              type: call
              call: salesforce.get-opportunity
              with:
                opportunity_id: "{{opportunity_id}}"
            - name: update-cost-center
              type: call
              call: sap.update-cost-center
              with:
                costCenter: "{{get-opportunity.CostCenter__c}}"
                amount: "{{get-opportunity.Amount}}"
            - name: post-win
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "{{teams_channel_id}}"
                text: "Closed Won: {{get-opportunity.Name}} — ${{get-opportunity.Amount}} {{get-opportunity.CurrencyIsoCode}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://macys.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity/{{opportunity_id}}"
          inputParameters:
            - name: opportunity_id
              in: path
          operations:
            - name: get-opportunity
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://macys-s4.sap.com/sap/opu/odata/sap/YY1_COSTCENTERACTUALS_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: cost-centers
          path: "/CostCenters('{{costCenter}}')"
          inputParameters:
            - name: costCenter
              in: path
          operations:
            - name: update-cost-center
              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/sales/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Extracts cost center budget vs. actuals from SAP S/4HANA and pushes variance rows to Power BI for finance reporting.

naftiko: "0.5"
info:
  label: "SAP Budget Variance Report"
  description: "Extracts cost center budget vs. actuals from SAP S/4HANA and pushes variance rows to Power BI for finance reporting."
  tags:
    - finance
    - erp
    - sap
    - power-bi
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: finance-reporting
      port: 8080
      tools:
        - name: publish-budget-variance
          description: "Given a fiscal period and cost center, extract budget vs. actuals from SAP S/4HANA and push the variance data to the Power BI finance dashboard dataset."
          inputParameters:
            - name: fiscal_period
              type: string
              description: "Fiscal period in YYYYMM format (e.g., 202603)."
            - name: cost_center
              type: string
              description: "SAP cost center code."
          steps:
            - name: get-actuals
              type: call
              call: sap.get-cost-center-actuals
              with:
                fiscalPeriod: "{{fiscal_period}}"
                costCenter: "{{cost_center}}"
            - name: push-to-powerbi
              type: call
              call: powerbi.push-rows
              with:
                datasetId: "$secrets.powerbi_finance_dataset_id"
                tableName: "BudgetVariance"
                rows: "{{get-actuals.rows}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://macys-s4.sap.com/sap/opu/odata/sap/YY1_COSTCENTERACTUALS_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: cost-center-actuals
          path: "/CostCenterActuals"
          inputParameters:
            - name: fiscalPeriod
              in: query
            - name: costCenter
              in: query
          operations:
            - name: get-cost-center-actuals
              method: GET
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: dataset-rows
          path: "/datasets/{{datasetId}}/tables/{{tableName}}/rows"
          inputParameters:
            - name: datasetId
              in: path
            - name: tableName
              in: path
          operations:
            - name: push-rows
              method: POST

Retrieves pending expense reports from SAP Concur and routes high-value reports to the manager for approval via Teams.

naftiko: "0.5"
info:
  label: "SAP Concur Expense Report Review"
  description: "Retrieves pending expense reports from SAP Concur and routes high-value reports to the manager for approval via Teams."
  tags:
    - finance
    - expense-management
    - sap-concur
    - microsoft-teams
    - approval
capability:
  exposes:
    - type: mcp
      namespace: expense-ops
      port: 8080
      tools:
        - name: review-pending-expenses
          description: "Retrieve all pending expense reports from SAP Concur for a given cost center. Notify the manager via Teams for reports above the policy threshold."
          inputParameters:
            - name: cost_center
              type: string
              description: "Cost center code to retrieve pending reports for."
            - name: threshold_usd
              type: number
              description: "Dollar threshold above which manager approval is required."
          steps:
            - name: get-reports
              type: call
              call: concur.list-expense-reports
              with:
                costCenter: "{{cost_center}}"
                approvalStatus: "pending"
            - name: notify-manager
              type: call
              call: msteams.send-message
              with:
                recipient_upn: "{{get-reports.managerEmail}}"
                text: "Expense reports pending for cost center {{cost_center}} — reports above ${{threshold_usd}} require your approval."
  consumes:
    - type: http
      namespace: concur
      baseUri: "https://www.concursolutions.com/api/v3.0"
      authentication:
        type: bearer
        token: "$secrets.concur_token"
      resources:
        - name: expense-reports
          path: "/expense/reports"
          inputParameters:
            - name: costCenter
              in: query
            - name: approvalStatus
              in: query
          operations:
            - name: list-expense-reports
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: chats
          path: "/chats"
          operations:
            - name: send-message
              method: POST

Checks SAP material availability for Macy's.

naftiko: "0.5"
info:
  label: "SAP Material Availability"
  description: "Checks SAP material availability for Macy's."
  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://macys-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 Macy's.

naftiko: "0.5"
info:
  label: "SAP PO Items"
  description: "Gets PO items for Macy's."
  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://macys-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 a SAP S/4HANA purchase order by number and returns status, vendor, and total value for procurement visibility.

naftiko: "0.5"
info:
  label: "SAP Purchase Order Lookup"
  description: "Looks up a SAP S/4HANA purchase order by number and returns status, vendor, and total value for procurement visibility."
  tags:
    - finance
    - procurement
    - sap
    - erp
capability:
  exposes:
    - type: mcp
      namespace: erp
      port: 8080
      tools:
        - name: get-purchase-order
          description: "Look up an SAP purchase order by PO number. Returns approval status, vendor name, total amount, and currency. Use for procurement tracking and AP workflows."
          inputParameters:
            - name: po_number
              type: string
              description: "SAP purchase order number (10-digit numeric string)."
          call: sap.get-po
          with:
            po_number: "{{po_number}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.d.OverallStatus"
            - name: vendor
              type: string
              mapping: "$.d.Supplier.CompanyName"
            - name: total_value
              type: string
              mapping: "$.d.TotalAmount"
            - name: currency
              type: string
              mapping: "$.d.TransactionCurrency"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://macys-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: purchase-orders
          path: "/A_PurchaseOrder('{{po_number}}')"
          inputParameters:
            - name: po_number
              in: path
          operations:
            - name: get-po
              method: GET

Looks up SAP vendor for Macy's.

naftiko: "0.5"
info:
  label: "SAP Vendor Lookup"
  description: "Looks up SAP vendor for Macy's."
  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://macys-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

Plans seasonal hiring for Macy's by analyzing Snowflake traffic forecasts, creating Workday requisitions, and posting updates to Teams.

naftiko: "0.5"
info:
  label: "Seasonal Hiring Workflow"
  description: "Plans seasonal hiring for Macy's by analyzing Snowflake traffic forecasts, creating Workday requisitions, and posting updates to Teams."
  tags:
    - hr
    - snowflake
    - workday
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: workforce
      port: 8080
      tools:
        - name: seasonal-hiring-workflow
          description: "Plans seasonal hiring for Macy's by analyzing Snowflake forecasts and creating Workday requisitions."
          inputParameters:
            - name: store_id
              type: string
              description: "Store identifier."
            - name: season
              type: string
              description: "Season (e.g., holiday-2026)."
          steps:
            - name: get-forecast
              type: call
              call: snowflake.run-query
              with:
                statement: "SELECT projected_traffic, required_headcount FROM SEASONAL_FORECAST WHERE store='{{store_id}}' AND season='{{season}}'"
            - name: create-requisitions
              type: call
              call: workday.create-job-req
              with:
                store: "{{store_id}}"
                type: "seasonal"
            - name: notify
              type: call
              call: msteams.send-message
              with:
                channel_id: "hr-recruiting"
                text: "Seasonal hiring initiated for Store {{store_id}} — {{season}}."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://macys.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: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: requisitions
          path: "/macys/jobRequisitions"
          operations:
            - name: create-job-req
              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 seasonal promotion setup for Macy's across e-commerce, sap, snowflake.

naftiko: "0.5"
info:
  label: "Seasonal Promotion Setup"
  description: "Orchestrates seasonal promotion setup for Macy's 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 Macy's 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://macys.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://macys-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 Macy's across security, servicenow, datadog.

naftiko: "0.5"
info:
  label: "Security Incident Handler"
  description: "Orchestrates security incident handler for Macy's 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 Macy's 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://macys.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

Creates a ServiceNow change request for a planned system change, routes to the CAB, and notifies the requester via Teams.

naftiko: "0.5"
info:
  label: "ServiceNow Change Request Workflow"
  description: "Creates a ServiceNow change request for a planned system change, routes to the CAB, and notifies the requester via Teams."
  tags:
    - itsm
    - change-management
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: itsm
      port: 8080
      tools:
        - name: submit-change-request
          description: "Given a change description, risk level, and scheduled date, create a ServiceNow change request assigned to the CAB and notify the requester via Teams."
          inputParameters:
            - name: short_description
              type: string
              description: "Brief description of the planned change."
            - name: risk
              type: string
              description: "Risk level: low, medium, or high."
            - name: implementation_date
              type: string
              description: "Planned change date in YYYY-MM-DD format."
            - name: requester_upn
              type: string
              description: "UPN of the change requester."
          steps:
            - name: create-change
              type: call
              call: servicenow.create-change
              with:
                short_description: "{{short_description}}"
                risk: "{{risk}}"
                start_date: "{{implementation_date}}"
                assignment_group: "CAB"
            - name: notify-requester
              type: call
              call: msteams.send-message
              with:
                recipient_upn: "{{requester_upn}}"
                text: "Change request {{create-change.number}} submitted to CAB. Risk: {{risk}}, Date: {{implementation_date}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://macys.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: changes
          path: "/table/change_request"
          operations:
            - name: create-change
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: chats
          path: "/chats"
          operations:
            - name: send-message
              method: POST

Checks change request for Macy's.

naftiko: "0.5"
info:
  label: "ServiceNow Change Status"
  description: "Checks change request for Macy's."
  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://macys.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 Macy's.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Detail"
  description: "Retrieves ServiceNow incident details for Macy's."
  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://macys.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

Orchestrates shipment tracking pipeline for Macy's across supply-chain, sap, snowflake.

naftiko: "0.5"
info:
  label: "Shipment Tracking Pipeline"
  description: "Orchestrates shipment tracking pipeline for Macy's 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 Macy's 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://macys.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://macys-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 Macy's across store-ops, snowflake, servicenow.

naftiko: "0.5"
info:
  label: "Shrinkage Investigation"
  description: "Orchestrates shrinkage investigation for Macy's 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 Macy's 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://macys.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://macys.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 Macy's across e-commerce, datadog, servicenow.

naftiko: "0.5"
info:
  label: "Site Incident Response"
  description: "Orchestrates site incident response for Macy's 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 Macy's 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://macys.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

Queries customer segments for Macy's.

naftiko: "0.5"
info:
  label: "Snowflake Customer Segments"
  description: "Queries customer segments for Macy's."
  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://macys.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 Macy's.

naftiko: "0.5"
info:
  label: "Snowflake Inventory Query"
  description: "Queries inventory for Macy's."
  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://macys.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 Macy's.

naftiko: "0.5"
info:
  label: "Snowflake Promo Performance"
  description: "Queries promo data for Macy's."
  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://macys.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST

Monitors Snowflake data pipeline task completions for retail analytics and creates a Jira issue when failure counts exceed a threshold.

naftiko: "0.5"
info:
  label: "Snowflake Retail Analytics Pipeline Health"
  description: "Monitors Snowflake data pipeline task completions for retail analytics and creates a Jira issue when failure counts exceed a threshold."
  tags:
    - data
    - analytics
    - snowflake
    - jira
    - monitoring
capability:
  exposes:
    - type: mcp
      namespace: data-ops
      port: 8080
      tools:
        - name: check-analytics-pipeline-health
          description: "Query Snowflake task history for the retail analytics database over the past N hours. If failures exceed the threshold, create a Jira issue and alert the data engineering Teams channel."
          inputParameters:
            - name: database
              type: string
              description: "Snowflake database name (e.g., RETAIL_DW)."
            - name: hours_back
              type: integer
              description: "Number of hours to look back for failures."
            - name: failure_threshold
              type: integer
              description: "Failure count above which an alert fires."
          steps:
            - name: get-task-history
              type: call
              call: snowflake.query-task-history
              with:
                database: "{{database}}"
                hoursBack: "{{hours_back}}"
            - name: create-issue
              type: call
              call: jira.create-issue
              with:
                project_key: "DATA"
                issuetype: "Bug"
                summary: "Snowflake failures in {{database}}"
                description: "{{get-task-history.failureCount}} task failures in last {{hours_back}}h"
            - name: alert-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "data-engineering"
                text: "Pipeline alert: {{get-task-history.failureCount}} failures in {{database}} (last {{hours_back}}h). Jira: {{create-issue.key}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://macys.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: task-history
          path: "/databases/{{database}}/schemas/information_schema/tasks"
          inputParameters:
            - name: database
              in: path
          operations:
            - name: query-task-history
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://macys.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/data/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Queries Snowflake sales data for Macy's.

naftiko: "0.5"
info:
  label: "Snowflake Sales Query"
  description: "Queries Snowflake sales data for Macy's."
  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://macys.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST

Orchestrates staffing gap alerts for Macy's across store-ops, workday, snowflake.

naftiko: "0.5"
info:
  label: "Staffing Gap Alerts"
  description: "Orchestrates staffing gap alerts for Macy's 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 Macy's 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://macys.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: "/macys/workers"
          operations:
            - name: get-workers
              method: GET

Orchestrates store inventory replenishment pipeline for Macy's across inventory, snowflake, sap.

naftiko: "0.5"
info:
  label: "Store Inventory Replenishment Pipeline"
  description: "Orchestrates store inventory replenishment pipeline for Macy's 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 Macy's 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://macys.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://macys-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 Macy's across store-ops, datadog, workday.

naftiko: "0.5"
info:
  label: "Store Opening Readiness Check"
  description: "Orchestrates store opening readiness check for Macy's 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 Macy's 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: "/macys/workers"
          operations:
            - name: get-workers
              method: GET

Orchestrates store safety audit pipeline for Macy's across store-ops, servicenow, workday.

naftiko: "0.5"
info:
  label: "Store Safety Audit Pipeline"
  description: "Orchestrates store safety audit pipeline for Macy's 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 Macy's 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://macys.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: "/macys/workers"
          operations:
            - name: get-workers
              method: GET

Manages store signage updates for Macy's by creating ServiceNow print requests, checking SAP material availability, and notifying visual merchandising via Teams.

naftiko: "0.5"
info:
  label: "Store Signage Management"
  description: "Manages store signage updates for Macy's by creating ServiceNow print requests, checking SAP material availability, and notifying visual merchandising via Teams."
  tags:
    - store-ops
    - servicenow
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: merchandising
      port: 8080
      tools:
        - name: store-signage-management
          description: "Manages store signage updates for Macy's by creating ServiceNow print requests and SAP checks."
          inputParameters:
            - name: store_id
              type: string
              description: "Store identifier."
            - name: signage_type
              type: string
              description: "Signage type."
          steps:
            - name: create-request
              type: call
              call: servicenow.create-task
              with:
                short_description: "Signage update: {{signage_type}} — Store {{store_id}}"
                assignment_group: "Visual_Merchandising"
            - name: check-materials
              type: call
              call: sap.get-stock
              with:
                material: "{{signage_type}}"
                plant: "{{store_id}}"
            - name: notify
              type: call
              call: msteams.send-message
              with:
                channel_id: "visual-merchandising"
                text: "Signage request for Store {{store_id}}: {{signage_type}}. Task: {{create-request.number}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://macys.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/sc_task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://macys-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
    - 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

Monitors store HVAC temperatures for Macy's by checking Datadog IoT sensors, creating ServiceNow maintenance tickets, and notifying facilities via Teams.

naftiko: "0.5"
info:
  label: "Store Temperature Monitoring"
  description: "Monitors store HVAC temperatures for Macy's by checking Datadog IoT sensors, creating ServiceNow maintenance tickets, and notifying facilities via Teams."
  tags:
    - store-ops
    - datadog
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: facilities
      port: 8080
      tools:
        - name: store-temperature-monitoring
          description: "Monitors store HVAC temperatures for Macy's by checking Datadog IoT sensors, creating ServiceNow maintenance tickets."
          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: create-ticket
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Store Temperature Monitoring — {{store_id}}"
                category: "store-ops"
            - name: notify
              type: call
              call: msteams.send-message
              with:
                channel_id: "ops-{{store_id}}"
                text: "Store Temperature Monitoring done."
  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: servicenow
      baseUri: "https://macys.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 supplier onboarding flow for Macy's across supply-chain, sap, servicenow.

naftiko: "0.5"
info:
  label: "Supplier Onboarding Flow"
  description: "Orchestrates supplier onboarding flow for Macy's 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 Macy's 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://macys-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://macys.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 Macy's across supply-chain, sap, servicenow.

naftiko: "0.5"
info:
  label: "Supply Chain Delay Handler"
  description: "Orchestrates supply chain delay handler for Macy's 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 Macy's 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://macys-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://macys.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

Sends Teams notification for Macy's.

naftiko: "0.5"
info:
  label: "Teams Notification"
  description: "Sends Teams notification for Macy's."
  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

Triggers a Terraform Cloud workspace run for e-commerce infrastructure changes and notifies the DevOps team via Teams with a Jira tracking task.

naftiko: "0.5"
info:
  label: "Terraform Infrastructure Run"
  description: "Triggers a Terraform Cloud workspace run for e-commerce infrastructure changes and notifies the DevOps team via Teams with a Jira tracking task."
  tags:
    - cloud
    - devops
    - terraform
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: infra-ops
      port: 8080
      tools:
        - name: trigger-infrastructure-run
          description: "Given a Terraform workspace ID and change description, trigger an infrastructure plan-and-apply run, create a Jira tracking task, and notify the DevOps Teams channel."
          inputParameters:
            - name: workspace_id
              type: string
              description: "Terraform Cloud workspace ID."
            - name: change_description
              type: string
              description: "Description of the infrastructure change."
            - name: teams_channel_id
              type: string
              description: "DevOps Teams channel ID."
          steps:
            - name: create-run
              type: call
              call: terraform.create-run
              with:
                workspaceId: "{{workspace_id}}"
                message: "{{change_description}}"
            - name: create-task
              type: call
              call: jira.create-issue
              with:
                project_key: "INFRA"
                issuetype: "Task"
                summary: "Terraform: {{change_description}}"
                description: "Workspace {{workspace_id}} | Run: {{create-run.runId}}"
            - name: notify-devops
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "{{teams_channel_id}}"
                text: "Terraform run triggered: {{change_description}} | Workspace: {{workspace_id}} | Jira: {{create-task.key}}"
  consumes:
    - type: http
      namespace: terraform
      baseUri: "https://app.terraform.io/api/v2"
      authentication:
        type: bearer
        token: "$secrets.terraform_token"
      resources:
        - name: runs
          path: "/runs"
          operations:
            - name: create-run
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://macys.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/devops/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Checks vendor contract compliance for Macy's by pulling SAP contract data, analyzing Snowflake spend, and creating ServiceNow audit tickets.

naftiko: "0.5"
info:
  label: "Vendor Contract Compliance"
  description: "Checks vendor contract compliance for Macy's by pulling SAP contract data, analyzing Snowflake spend, and creating ServiceNow audit tickets."
  tags:
    - procurement
    - sap
    - snowflake
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: procurement-ops
      port: 8080
      tools:
        - name: vendor-contract-compliance
          description: "Checks vendor contract compliance for Macy's by pulling SAP contract data and Snowflake spend analysis."
          inputParameters:
            - name: vendor_id
              type: string
              description: "Vendor identifier."
            - name: period
              type: string
              description: "Review period."
          steps:
            - name: get-contract
              type: call
              call: sap.get-contract
              with:
                vendor: "{{vendor_id}}"
            - name: analyze-spend
              type: call
              call: snowflake.run-query
              with:
                statement: "SELECT total_spend, compliance_pct FROM VENDOR_COMPLIANCE WHERE vendor='{{vendor_id}}' AND period='{{period}}'"
            - name: create-audit
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Vendor compliance review: {{vendor_id}}"
                category: "procurement"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://macys-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: contracts
          path: "/A_Supplier('{{vendor}}')"
          inputParameters:
            - name: vendor
              in: path
          operations:
            - name: get-contract
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://macys.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://macys.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 invoice matching pipeline for Macy's across procurement, sap, servicenow.

naftiko: "0.5"
info:
  label: "Vendor Invoice Matching Pipeline"
  description: "Orchestrates vendor invoice matching pipeline for Macy's 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 Macy's 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://macys.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://macys-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://macys.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 Macy's across supply-chain, sap, snowflake.

naftiko: "0.5"
info:
  label: "Vendor Performance Scorecard"
  description: "Orchestrates vendor performance scorecard for Macy's 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 Macy's 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://macys.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://macys-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 VIP customer outreach for Macy's by pulling Salesforce profiles, analyzing Snowflake purchase patterns, and notifying stylists via Teams.

naftiko: "0.5"
info:
  label: "VIP Customer Outreach"
  description: "Manages VIP customer outreach for Macy's by pulling Salesforce profiles, analyzing Snowflake purchase patterns, and notifying stylists via Teams."
  tags:
    - loyalty
    - salesforce
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: loyalty-ops
      port: 8080
      tools:
        - name: vip-customer-outreach
          description: "Manages VIP customer outreach for Macy's by pulling Salesforce profiles and Snowflake purchase patterns."
          inputParameters:
            - name: tier
              type: string
              description: "Loyalty tier to target."
          steps:
            - name: get-vips
              type: call
              call: salesforce.query
              with:
                q: "SELECT Id, Name FROM Contact WHERE Loyalty_Tier__c='{{tier}}'"
            - name: get-patterns
              type: call
              call: snowflake.run-query
              with:
                statement: "SELECT customer_id, preferred_category FROM VIP_PATTERNS WHERE tier='{{tier}}'"
            - name: notify-stylists
              type: call
              call: msteams.send-message
              with:
                channel_id: "personal-shopping"
                text: "VIP outreach list ready for {{tier}} tier customers."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://macys.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: snowflake
      baseUri: "https://macys.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

Orchestrates warehouse capacity planner for Macy's across supply-chain, snowflake, sap.

naftiko: "0.5"
info:
  label: "Warehouse Capacity Planner"
  description: "Orchestrates warehouse capacity planner for Macy's 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 Macy's 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://macys.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://macys-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

Generates weekly sales digests for Macy's by pulling Snowflake analytics, Salesforce pipeline data, and posting summaries to Teams.

naftiko: "0.5"
info:
  label: "Weekly Sales Digest Pipeline"
  description: "Generates weekly sales digests for Macy's by pulling Snowflake analytics, Salesforce pipeline data, and posting summaries to Teams."
  tags:
    - analytics
    - snowflake
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: analytics
      port: 8080
      tools:
        - name: weekly-sales-digest-pipeline
          description: "Generates weekly sales digests for Macy's by pulling Snowflake analytics and Salesforce pipeline data."
          inputParameters:
            - name: week_start
              type: string
              description: "Week start date."
          steps:
            - name: get-sales
              type: call
              call: snowflake.run-query
              with:
                statement: "SELECT store, total_sales, yoy_growth FROM WEEKLY_SALES WHERE week='{{week_start}}'"
            - name: get-pipeline
              type: call
              call: salesforce.query
              with:
                q: "SELECT SUM(Amount) FROM Opportunity WHERE CloseDate >= {{week_start}}"
            - name: post-digest
              type: call
              call: msteams.send-message
              with:
                channel_id: "executive-updates"
                text: "Weekly sales digest for {{week_start}} posted."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://macys.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://macys.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 employee profile from Workday for Macy's.

naftiko: "0.5"
info:
  label: "Workday Employee Directory"
  description: "Retrieves employee profile from Workday for Macy's."
  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: "/macys/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET

Gets headcount for Macy's.

naftiko: "0.5"
info:
  label: "Workday Headcount"
  description: "Gets headcount for Macy's."
  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: "/macys/headcount"
          operations:
            - name: get-hc
              method: GET

Creates a job requisition in Workday when headcount is approved and opens a Jira ticket for the talent acquisition team.

naftiko: "0.5"
info:
  label: "Workday Open Position Requisition"
  description: "Creates a job requisition in Workday when headcount is approved and opens a Jira ticket for the talent acquisition team."
  tags:
    - hr
    - recruiting
    - workday
    - jira
capability:
  exposes:
    - type: mcp
      namespace: talent-acquisition
      port: 8080
      tools:
        - name: open-job-requisition
          description: "Given a job title, department, and hiring manager Workday ID, create a Workday job requisition and a matching Jira task in the TA project for sourcing tracking."
          inputParameters:
            - name: job_title
              type: string
              description: "Job title for the open position."
            - name: department
              type: string
              description: "Department requesting the headcount."
            - name: hiring_manager_id
              type: string
              description: "Workday worker ID of the hiring manager."
          steps:
            - name: create-requisition
              type: call
              call: workday.create-job-requisition
              with:
                jobTitle: "{{job_title}}"
                department: "{{department}}"
                hiringManagerId: "{{hiring_manager_id}}"
            - name: create-ta-ticket
              type: call
              call: jira.create-issue
              with:
                project_key: "TA"
                issuetype: "Task"
                summary: "Recruit: {{job_title}} — {{department}}"
                description: "Workday requisition: {{create-requisition.requisitionId}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: job-requisitions
          path: "/macys/jobRequisitions"
          operations:
            - name: create-job-requisition
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://macys.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

Retrieves PTO balance for Macy's.

naftiko: "0.5"
info:
  label: "Workday PTO Balance"
  description: "Retrieves PTO balance for Macy's."
  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: "/macys/workers/{{worker_id}}/timeOff"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-pto
              method: GET

When an associate changes roles in Workday, updates Okta group memberships to reflect the new role and notifies the employee via Teams.

naftiko: "0.5"
info:
  label: "Workday Role Change Access Sync"
  description: "When an associate changes roles in Workday, updates Okta group memberships to reflect the new role and notifies the employee via Teams."
  tags:
    - hr
    - identity
    - workday
    - okta
    - access-management
capability:
  exposes:
    - type: mcp
      namespace: hr-identity
      port: 8080
      tools:
        - name: sync-role-change
          description: "Given a Workday employee ID, new role, and Okta group IDs, remove the user from the old role group, add to the new role group, and send a Teams notification to the employee."
          inputParameters:
            - name: employee_id
              type: string
              description: "Workday worker ID of the employee."
            - name: new_role
              type: string
              description: "New job role or title."
            - name: okta_new_group_id
              type: string
              description: "Okta group ID for the new role."
            - name: okta_old_group_id
              type: string
              description: "Okta group ID for the previous role."
          steps:
            - name: get-worker
              type: call
              call: workday.get-worker
              with:
                worker_id: "{{employee_id}}"
            - name: remove-old-group
              type: call
              call: okta.remove-user-from-group
              with:
                groupId: "{{okta_old_group_id}}"
                userId: "{{get-worker.work_email}}"
            - name: add-new-group
              type: call
              call: okta.add-user-to-group
              with:
                groupId: "{{okta_new_group_id}}"
                userId: "{{get-worker.work_email}}"
            - name: notify-employee
              type: call
              call: msteams.send-message
              with:
                recipient_upn: "{{get-worker.work_email}}"
                text: "Your role has been updated to {{new_role}}. Your system access has been adjusted accordingly."
  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: "/macys/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: okta
      baseUri: "https://macys.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: group-members
          path: "/groups/{{groupId}}/users/{{userId}}"
          inputParameters:
            - name: groupId
              in: path
            - name: userId
              in: path
          operations:
            - name: remove-user-from-group
              method: DELETE
            - name: add-user-to-group
              method: PUT
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: chats
          path: "/chats"
          operations:
            - name: send-message
              method: POST