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