Walmart Capabilities
Naftiko 0.5 capability definitions for Walmart - 100 capabilities showing integration workflows and service orchestrations.
When ad spend exceeds budget threshold, fetches Google Analytics campaign data, logs the anomaly in Snowflake, and alerts the marketing team via Slack.
naftiko: "0.5"
info:
label: "Ad Campaign Spend Anomaly Responder"
description: "When ad spend exceeds budget threshold, fetches Google Analytics campaign data, logs the anomaly in Snowflake, and alerts the marketing team via Slack."
tags:
- marketing
- google-analytics
- snowflake
- slack
- advertising
capability:
exposes:
- type: mcp
namespace: ad-ops
port: 8080
tools:
- name: handle-spend-anomaly
description: "Given a campaign ID and current spend, check against budget threshold, log anomaly, and notify marketing. Use when automated spend monitoring detects overruns."
inputParameters:
- name: campaign_id
in: body
type: string
description: "Ad campaign identifier."
- name: current_spend
in: body
type: string
description: "Current spend amount."
- name: budget_limit
in: body
type: string
description: "Budget limit."
steps:
- name: log-anomaly
type: call
call: snowflake.execute-statement
with:
statement: "INSERT INTO MARKETING.SPEND_ANOMALIES (campaign_id, current_spend, budget_limit, overage, detected_at) VALUES ('{{campaign_id}}', {{current_spend}}, {{budget_limit}}, {{current_spend}} - {{budget_limit}}, CURRENT_TIMESTAMP())"
- name: alert-marketing
type: call
call: slack.post-message
with:
channel: "marketing-alerts"
text: "Ad spend anomaly: Campaign {{campaign_id}} at ${{current_spend}} (budget: ${{budget_limit}}). Overage detected. Review immediately."
consumes:
- type: http
namespace: snowflake
baseUri: "https://walmart.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Retrieves an Adobe Analytics segment definition by ID for marketing analysis review.
naftiko: "0.5"
info:
label: "Adobe Analytics Segment Lookup"
description: "Retrieves an Adobe Analytics segment definition by ID for marketing analysis review."
tags:
- marketing
- adobe-analytics
- segmentation
capability:
exposes:
- type: mcp
namespace: marketing
port: 8080
tools:
- name: get-segment
description: "Given an Adobe Analytics segment ID, return its name, definition criteria, and owner. Use for marketing campaign audience reviews."
inputParameters:
- name: segment_id
in: body
type: string
description: "Adobe Analytics segment ID."
call: adobe-analytics.get-segment
with:
segment_id: "{{segment_id}}"
outputParameters:
- name: name
type: string
mapping: "$.name"
- name: definition
type: object
mapping: "$.definition"
consumes:
- type: http
namespace: adobe-analytics
baseUri: "https://analytics.adobe.io/api/walmart"
authentication:
type: bearer
token: "$secrets.adobe_analytics_token"
resources:
- name: segments
path: "/segments/{{segment_id}}"
inputParameters:
- name: segment_id
in: path
operations:
- name: get-segment
method: GET
When Adobe Analytics detects a significant traffic drop, queries Snowflake for correlated data, creates a Jira investigation ticket, and alerts the digital team via Slack.
naftiko: "0.5"
info:
label: "Adobe Analytics Traffic Drop Investigation"
description: "When Adobe Analytics detects a significant traffic drop, queries Snowflake for correlated data, creates a Jira investigation ticket, and alerts the digital team via Slack."
tags:
- analytics
- adobe-analytics
- snowflake
- jira
- slack
- e-commerce
capability:
exposes:
- type: mcp
namespace: digital-ops
port: 8080
tools:
- name: investigate-traffic-drop
description: "Given a report suite and date range, query Adobe Analytics and Snowflake for traffic patterns, create a Jira ticket, and alert the digital team. Use when web traffic drops exceed threshold."
inputParameters:
- name: report_suite
in: body
type: string
description: "Adobe Analytics report suite ID."
- name: drop_date
in: body
type: string
description: "Date of the traffic drop in YYYY-MM-DD."
- name: drop_percentage
in: body
type: string
description: "Percentage drop observed."
steps:
- name: query-correlated-data
type: call
call: snowflake.execute-statement
with:
statement: "SELECT channel, SUM(sessions) as sessions, SUM(orders) as orders FROM DIGITAL.WEB_ANALYTICS WHERE report_date = '{{drop_date}}' GROUP BY channel ORDER BY sessions DESC"
- name: create-investigation
type: call
call: jira.create-issue
with:
project: DIGITAL
issue_type: Task
summary: "Traffic drop: {{drop_percentage}}% on {{drop_date}}"
description: "Report suite: {{report_suite}}. Channel breakdown: {{query-correlated-data.results}}."
- name: alert-digital-team
type: call
call: slack.post-message
with:
channel: "digital-alerts"
text: "Traffic drop of {{drop_percentage}}% detected on {{drop_date}} for {{report_suite}}. Jira: {{create-investigation.key}}."
consumes:
- type: http
namespace: snowflake
baseUri: "https://walmart.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: jira
baseUri: "https://walmart.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: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Pulls weekly site traffic metrics from Adobe Analytics and publishes a summary report to the e-commerce Slack channel for stakeholder visibility.
naftiko: "0.5"
info:
label: "Adobe Analytics Weekly Traffic Digest"
description: "Pulls weekly site traffic metrics from Adobe Analytics and publishes a summary report to the e-commerce Slack channel for stakeholder visibility."
tags:
- marketing
- analytics
- adobe-analytics
- slack
- e-commerce
- reporting
capability:
exposes:
- type: mcp
namespace: ecomm-analytics
port: 8080
tools:
- name: digest-site-traffic
description: "Given a date range, retrieve weekly traffic metrics from Adobe Analytics and post a digest to the e-commerce Slack channel. Use for Monday morning stakeholder traffic reports."
inputParameters:
- name: start_date
in: body
type: string
description: "Report start date in YYYY-MM-DD format."
- name: end_date
in: body
type: string
description: "Report end date in YYYY-MM-DD format."
- name: report_suite_id
in: body
type: string
description: "Adobe Analytics report suite ID (e.g. walmart-us-prod)."
steps:
- name: get-traffic-report
type: call
call: adobe-analytics.run-report
with:
rsid: "{{report_suite_id}}"
start_date: "{{start_date}}"
end_date: "{{end_date}}"
- name: post-digest
type: call
call: slack-ecomm.post-message
with:
channel: "ecommerce-analytics"
text: "Weekly traffic digest ({{start_date}} to {{end_date}}): Visits={{get-traffic-report.visits}}, PageViews={{get-traffic-report.pageViews}}, Revenue={{get-traffic-report.revenue}}"
consumes:
- type: http
namespace: adobe-analytics
baseUri: "https://analytics.adobe.io/api"
authentication:
type: bearer
token: "$secrets.adobe_analytics_token"
resources:
- name: reports
path: "/{{company_id}}/reports"
inputParameters:
- name: company_id
in: path
operations:
- name: run-report
method: POST
- type: http
namespace: slack-ecomm
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a separation is recorded in Workday, revokes Okta access, closes ServiceNow assets, and posts a Slack notification to the HR operations channel.
naftiko: "0.5"
info:
label: "Associate Offboarding Workflow"
description: "When a separation is recorded in Workday, revokes Okta access, closes ServiceNow assets, and posts a Slack notification to the HR operations channel."
tags:
- hr
- offboarding
- workday
- servicenow
- slack
capability:
exposes:
- type: mcp
namespace: hr-offboarding
port: 8080
tools:
- name: trigger-associate-offboarding
description: "Given a Workday employee ID and separation date, revoke system access via ServiceNow and notify the HR operations Slack channel. Invoke when an associate's employment ends."
inputParameters:
- name: workday_employee_id
in: body
type: string
description: "The Workday worker ID of the departing associate."
- name: separation_date
in: body
type: string
description: "Last working day in ISO 8601 format (YYYY-MM-DD)."
- name: separation_reason
in: body
type: string
description: "Reason code for separation (e.g. voluntary, involuntary, retirement)."
steps:
- name: get-worker
type: call
call: workday-lookup.get-worker
with:
worker_id: "{{workday_employee_id}}"
- name: create-offboarding-task
type: call
call: servicenow-offboard.create-task
with:
category: hr_offboarding
short_description: "Offboarding: {{get-worker.full_name}} — effective {{separation_date}}"
assigned_group: IT_Access_Management
- name: notify-hr-ops
type: call
call: slack-hr.post-message
with:
channel: "hr-operations"
text: "Offboarding initiated for {{get-worker.full_name}} ({{workday_employee_id}}). Separation date: {{separation_date}}. Reason: {{separation_reason}}. ServiceNow task: {{create-offboarding-task.number}}"
consumes:
- type: http
namespace: workday-lookup
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/walmart/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow-offboard
baseUri: "https://walmart.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: slack-hr
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Provisions a new Azure resource group and tags it according to Walmart's FinOps tagging policy, then registers the resource in the ServiceNow CMDB.
naftiko: "0.5"
info:
label: "Azure Cloud Resource Provisioning"
description: "Provisions a new Azure resource group and tags it according to Walmart's FinOps tagging policy, then registers the resource in the ServiceNow CMDB."
tags:
- cloud
- azure
- servicenow
- finops
- provisioning
capability:
exposes:
- type: mcp
namespace: cloud-provisioning
port: 8080
tools:
- name: provision-azure-resource-group
description: "Given a resource group name, Azure region, and cost center, create the resource group with standard Walmart FinOps tags and register it in the ServiceNow CMDB. Use when teams request new Azure environments."
inputParameters:
- name: resource_group_name
in: body
type: string
description: "Name for the new Azure resource group (e.g. wmt-supply-chain-prod-rg)."
- name: location
in: body
type: string
description: "Azure region (e.g. eastus2, westus2)."
- name: cost_center
in: body
type: string
description: "Walmart cost center code for FinOps tagging."
- name: environment
in: body
type: string
description: "Environment type: prod, staging, dev."
steps:
- name: create-resource-group
type: call
call: azure-mgmt.create-resource-group
with:
name: "{{resource_group_name}}"
location: "{{location}}"
cost_center: "{{cost_center}}"
environment: "{{environment}}"
- name: register-cmdb
type: call
call: servicenow-cmdb.create-ci
with:
name: "{{resource_group_name}}"
category: cloud
short_description: "Azure resource group {{resource_group_name}} in {{location}}"
environment: "{{environment}}"
consumes:
- type: http
namespace: azure-mgmt
baseUri: "https://management.azure.com/subscriptions"
authentication:
type: bearer
token: "$secrets.azure_mgmt_token"
resources:
- name: resource-groups
path: "/{{subscription_id}}/resourcegroups/{{resource_group_name}}"
inputParameters:
- name: subscription_id
in: path
- name: resource_group_name
in: path
operations:
- name: create-resource-group
method: PUT
- type: http
namespace: servicenow-cmdb
baseUri: "https://walmart.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: configuration-items
path: "/table/cmdb_ci_cloud_service"
operations:
- name: create-ci
method: POST
When an Azure DevOps build pipeline fails, creates a Jira bug ticket with build logs and notifies the development team via Slack.
naftiko: "0.5"
info:
label: "Azure DevOps Build Failure to Jira"
description: "When an Azure DevOps build pipeline fails, creates a Jira bug ticket with build logs and notifies the development team via Slack."
tags:
- devops
- azure-devops
- jira
- slack
- ci-cd
capability:
exposes:
- type: mcp
namespace: build-ops
port: 8080
tools:
- name: handle-build-failure
description: "Given an Azure DevOps build ID and project, fetch build details, create a Jira bug, and notify the dev team. Use when CI/CD pipelines fail."
inputParameters:
- name: project
in: body
type: string
description: "Azure DevOps project name."
- name: build_id
in: body
type: string
description: "Azure DevOps build ID."
steps:
- name: get-build
type: call
call: azuredevops.get-build
with:
project: "{{project}}"
build_id: "{{build_id}}"
- name: create-bug
type: call
call: jira.create-issue
with:
project: DEV
issue_type: Bug
summary: "Build failure: {{get-build.definition_name}} #{{build_id}}"
description: "Branch: {{get-build.source_branch}}. Triggered by: {{get-build.requested_by}}. Error: {{get-build.error_message}}."
- name: notify-team
type: call
call: slack.post-message
with:
channel: "dev-builds"
text: "Build failure: {{get-build.definition_name}} #{{build_id}} on {{get-build.source_branch}}. Jira: {{create-bug.key}}."
consumes:
- type: http
namespace: azuredevops
baseUri: "https://dev.azure.com/walmart"
authentication:
type: basic
username: "$secrets.azdo_user"
password: "$secrets.azdo_pat"
resources:
- name: builds
path: "/{{project}}/_apis/build/builds/{{build_id}}?api-version=7.0"
inputParameters:
- name: project
in: path
- name: build_id
in: path
operations:
- name: get-build
method: GET
- type: http
namespace: jira
baseUri: "https://walmart.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: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Checks the health status of an Azure resource by resource ID and returns availability state and summary.
naftiko: "0.5"
info:
label: "Azure Resource Health Check"
description: "Checks the health status of an Azure resource by resource ID and returns availability state and summary."
tags:
- cloud
- azure
- infrastructure
capability:
exposes:
- type: mcp
namespace: cloud-ops
port: 8080
tools:
- name: check-resource-health
description: "Given an Azure resource ID, return the current availability status and health summary. Use for cloud infrastructure health monitoring."
inputParameters:
- name: resource_id
in: body
type: string
description: "Full Azure resource ID path."
call: azure.get-health
with:
resource_id: "{{resource_id}}"
outputParameters:
- name: availability_state
type: string
mapping: "$.properties.availabilityState"
- name: summary
type: string
mapping: "$.properties.summary"
consumes:
- type: http
namespace: azure
baseUri: "https://management.azure.com"
authentication:
type: bearer
token: "$secrets.azure_token"
resources:
- name: resource-health
path: "/{{resource_id}}/providers/Microsoft.ResourceHealth/availabilityStatuses/current?api-version=2023-07-01"
inputParameters:
- name: resource_id
in: path
operations:
- name: get-health
method: GET
When a GitHub Actions pipeline fails on a protected branch, creates a Jira bug, posts a Datadog event marker, and alerts the engineering Slack channel.
naftiko: "0.5"
info:
label: "CI/CD Pipeline Failure Response"
description: "When a GitHub Actions pipeline fails on a protected branch, creates a Jira bug, posts a Datadog event marker, and alerts the engineering Slack channel."
tags:
- devops
- cicd
- github
- jira
- datadog
- slack
- incident-response
capability:
exposes:
- type: mcp
namespace: devops-ops
port: 8080
tools:
- name: handle-pipeline-failure
description: "Given a failed GitHub Actions workflow run, create a Jira bug, post a Datadog deployment event, and alert the engineering Slack channel. Invoke on protected-branch pipeline failures."
inputParameters:
- name: repo
in: body
type: string
description: "GitHub repository in owner/repo format (e.g. walmart/supply-chain-api)."
- name: workflow_run_id
in: body
type: string
description: "GitHub Actions workflow run ID that failed."
- name: branch
in: body
type: string
description: "Branch name where the failure occurred (e.g. main)."
- name: commit_sha
in: body
type: string
description: "Full commit SHA associated with the failed run."
steps:
- name: get-run-details
type: call
call: github.get-workflow-run
with:
repo: "{{repo}}"
run_id: "{{workflow_run_id}}"
- name: create-jira-bug
type: call
call: jira.create-issue
with:
project_key: ENG
issuetype: Bug
summary: "[CI Failure] {{repo}} / {{branch}} — {{get-run-details.name}}"
description: "Workflow: {{get-run-details.name}}\nBranch: {{branch}}\nCommit: {{commit_sha}}\nURL: {{get-run-details.html_url}}"
- name: post-datadog-event
type: call
call: datadog.create-event
with:
title: "CI Failure: {{repo}} on {{branch}}"
text: "Workflow {{get-run-details.name}} failed. Jira: {{create-jira-bug.key}}"
alert_type: error
- name: alert-slack
type: call
call: slack-eng.post-message
with:
channel: "engineering-alerts"
text: "Pipeline failure: {{repo}} | Branch: {{branch}} | Commit: {{commit_sha}} | Jira: {{create-jira-bug.key}} | Run: {{get-run-details.html_url}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: workflow-runs
path: "/repos/{{repo}}/actions/runs/{{run_id}}"
inputParameters:
- name: repo
in: path
- name: run_id
in: path
operations:
- name: get-workflow-run
method: GET
- type: http
namespace: jira
baseUri: "https://walmart.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_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: slack-eng
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When AWS cost anomaly is detected, retrieves cost breakdown from CloudWatch, creates a Jira investigation ticket, and alerts the FinOps Slack channel.
naftiko: "0.5"
info:
label: "Cloud Cost Spike Investigation"
description: "When AWS cost anomaly is detected, retrieves cost breakdown from CloudWatch, creates a Jira investigation ticket, and alerts the FinOps Slack channel."
tags:
- cloud
- finops
- aws
- jira
- slack
capability:
exposes:
- type: mcp
namespace: finops
port: 8080
tools:
- name: investigate-cost-spike
description: "Given an AWS account ID and anomaly date, fetch the cost breakdown, open a Jira ticket, and notify FinOps. Use when daily cloud spend exceeds threshold."
inputParameters:
- name: aws_account_id
in: body
type: string
description: "AWS account ID."
- name: anomaly_date
in: body
type: string
description: "Date of the cost anomaly in YYYY-MM-DD."
steps:
- name: get-cost-data
type: call
call: aws-ce.get-cost
with:
account_id: "{{aws_account_id}}"
start_date: "{{anomaly_date}}"
- name: create-investigation
type: call
call: jira.create-issue
with:
project: FINOPS
issue_type: Task
summary: "Cost anomaly: AWS account {{aws_account_id}} on {{anomaly_date}}"
description: "Total spend: {{get-cost-data.total_cost}}. Top service: {{get-cost-data.top_service}}."
- name: alert-finops
type: call
call: slack.post-message
with:
channel: "finops-alerts"
text: "Cost spike detected in AWS account {{aws_account_id}} on {{anomaly_date}}. Spend: {{get-cost-data.total_cost}}. Jira: {{create-investigation.key}}."
consumes:
- type: http
namespace: aws-ce
baseUri: "https://ce.us-east-1.amazonaws.com"
authentication:
type: aws-sigv4
accessKeyId: "$secrets.aws_access_key"
secretAccessKey: "$secrets.aws_secret_key"
resources:
- name: cost-explorer
path: "/"
operations:
- name: get-cost
method: POST
- type: http
namespace: jira
baseUri: "https://walmart.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: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a Coupa contract approaches expiration, notifies the procurement lead via Microsoft Teams and creates a ServiceNow renewal task.
naftiko: "0.5"
info:
label: "Coupa Contract Renewal Workflow"
description: "When a Coupa contract approaches expiration, notifies the procurement lead via Microsoft Teams and creates a ServiceNow renewal task."
tags:
- procurement
- coupa
- microsoft-teams
- servicenow
- contracts
capability:
exposes:
- type: mcp
namespace: contract-ops
port: 8080
tools:
- name: process-contract-renewal
description: "Given a Coupa contract ID, check expiration date, notify the procurement lead, and create a renewal task. Use for automated contract lifecycle management."
inputParameters:
- name: contract_id
in: body
type: string
description: "Coupa contract ID."
steps:
- name: get-contract
type: call
call: coupa.get-contract
with:
contract_id: "{{contract_id}}"
- name: create-renewal-task
type: call
call: servicenow.create-request
with:
category: procurement
short_description: "Contract renewal: {{get-contract.supplier_name}} — expires {{get-contract.end_date}}"
description: "Contract value: {{get-contract.total_value}}. Auto-renew: {{get-contract.auto_renew}}."
- name: notify-procurement
type: call
call: msteams.send-message
with:
recipient_upn: "{{get-contract.owner_email}}"
text: "Contract {{contract_id}} with {{get-contract.supplier_name}} expires {{get-contract.end_date}}. Renewal task: {{create-renewal-task.number}}."
consumes:
- type: http
namespace: coupa
baseUri: "https://walmart.coupahost.com/api"
authentication:
type: bearer
token: "$secrets.coupa_token"
resources:
- name: contracts
path: "/contracts/{{contract_id}}"
inputParameters:
- name: contract_id
in: path
operations:
- name: get-contract
method: GET
- type: http
namespace: servicenow
baseUri: "https://walmart.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: requests
path: "/table/sc_request"
operations:
- name: create-request
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chats
path: "/users/{{recipient_upn}}/chats"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
When a Coupa invoice is pending approval, retrieves invoice details, checks SAP budget availability, and routes a Microsoft Teams approval card to the responsible cost center owner.
naftiko: "0.5"
info:
label: "Coupa Invoice Approval Workflow"
description: "When a Coupa invoice is pending approval, retrieves invoice details, checks SAP budget availability, and routes a Microsoft Teams approval card to the responsible cost center owner."
tags:
- procurement
- finance
- coupa
- sap
- microsoft-teams
- approval
capability:
exposes:
- type: mcp
namespace: invoice-approval
port: 8080
tools:
- name: route-invoice-for-approval
description: "Given a Coupa invoice ID, retrieve invoice details, validate SAP budget headroom, and send an approval card in Microsoft Teams to the cost center owner. Invoke when invoices enter the pending approval queue."
inputParameters:
- name: invoice_id
in: body
type: string
description: "Coupa invoice ID requiring approval."
- name: approver_upn
in: body
type: string
description: "Microsoft UPN of the cost center owner who should approve the invoice."
steps:
- name: get-invoice
type: call
call: coupa.get-invoice
with:
invoice_id: "{{invoice_id}}"
- name: check-budget
type: call
call: sap-budget.get-cost-center
with:
cost_center: "{{get-invoice.cost_center}}"
- name: send-approval-card
type: call
call: msteams-approval.send-message
with:
recipient_upn: "{{approver_upn}}"
text: "Invoice {{invoice_id}} from {{get-invoice.supplier_name}} for {{get-invoice.total_amount}} {{get-invoice.currency}} requires your approval. Budget available: {{check-budget.available_amount}}."
consumes:
- type: http
namespace: coupa
baseUri: "https://walmart.coupahost.com/api"
authentication:
type: apikey
key: "X-COUPA-API-KEY"
value: "$secrets.coupa_api_key"
placement: header
resources:
- name: invoices
path: "/invoices/{{invoice_id}}"
inputParameters:
- name: invoice_id
in: path
operations:
- name: get-invoice
method: GET
- type: http
namespace: sap-budget
baseUri: "https://walmart-s4.sap.com/sap/opu/odata/sap/ZFI_COST_CENTER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: cost-centers
path: "/CostCenterSet('{{cost_center}}')"
inputParameters:
- name: cost_center
in: path
operations:
- name: get-cost-center
method: GET
- type: http
namespace: msteams-approval
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{upn}}/chats"
inputParameters:
- name: upn
in: path
operations:
- name: send-message
method: POST
When a customer complaint is received, creates a Salesforce case, looks up the order in SAP, and initiates a refund workflow notification via Slack.
naftiko: "0.5"
info:
label: "Customer Complaint to Case and Refund"
description: "When a customer complaint is received, creates a Salesforce case, looks up the order in SAP, and initiates a refund workflow notification via Slack."
tags:
- customer-service
- salesforce
- sap
- slack
- refund
capability:
exposes:
- type: mcp
namespace: customer-ops
port: 8080
tools:
- name: process-customer-complaint
description: "Given a customer email and order number, create a Salesforce case, look up the SAP order, and notify the refund team. Use for customer complaint resolution."
inputParameters:
- name: customer_email
in: body
type: string
description: "Customer email address."
- name: order_number
in: body
type: string
description: "SAP sales order number."
- name: complaint_description
in: body
type: string
description: "Description of the customer complaint."
steps:
- name: lookup-order
type: call
call: sap.get-sales-order
with:
order_number: "{{order_number}}"
- name: create-case
type: call
call: salesforce.create-case
with:
subject: "Complaint: Order {{order_number}}"
description: "{{complaint_description}}"
contact_email: "{{customer_email}}"
priority: High
- name: notify-refund-team
type: call
call: slack.post-message
with:
channel: "customer-refunds"
text: "New complaint case {{create-case.case_number}} for order {{order_number}} ({{lookup-order.total_value}}). Customer: {{customer_email}}."
consumes:
- type: http
namespace: sap
baseUri: "https://walmart-s4.sap.com/sap/opu/odata/sap/API_SALES_ORDER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: sales-orders
path: "/A_SalesOrder('{{order_number}}')"
inputParameters:
- name: order_number
in: path
operations:
- name: get-sales-order
method: GET
- type: http
namespace: salesforce
baseUri: "https://walmart.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/sobjects/Case"
operations:
- name: create-case
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Queries Databricks for ML model performance metrics, compares against baseline thresholds, and posts an alert to the data science Slack channel if drift is detected.
naftiko: "0.5"
info:
label: "Databricks ML Model Performance Report"
description: "Queries Databricks for ML model performance metrics, compares against baseline thresholds, and posts an alert to the data science Slack channel if drift is detected."
tags:
- ai
- data
- databricks
- slack
- model-monitoring
capability:
exposes:
- type: mcp
namespace: ml-ops
port: 8080
tools:
- name: check-model-drift
description: "Given a Databricks model name and version, retrieve recent inference metrics and check for performance drift against a baseline. Post results to the data-science Slack channel. Use for scheduled model health checks."
inputParameters:
- name: model_name
in: body
type: string
description: "Registered model name in the Databricks MLflow registry (e.g. demand-forecast-v2)."
- name: model_version
in: body
type: string
description: "Model version to evaluate (e.g. 3)."
- name: drift_threshold
in: body
type: number
description: "Acceptable drift threshold as a decimal (e.g. 0.05 for 5%)."
steps:
- name: get-model-metrics
type: call
call: databricks.get-model-version
with:
name: "{{model_name}}"
version: "{{model_version}}"
- name: notify-data-science
type: call
call: slack-ds.post-message
with:
channel: "data-science"
text: "Model health check: {{model_name}} v{{model_version}} | Status: {{get-model-metrics.current_stage}} | Drift threshold: {{drift_threshold}}"
consumes:
- type: http
namespace: databricks
baseUri: "https://walmart.azuredatabricks.net/api/2.1"
authentication:
type: bearer
token: "$secrets.databricks_token"
resources:
- name: model-versions
path: "/mlflow/model-versions/get"
inputParameters:
- name: name
in: query
- name: version
in: query
operations:
- name: get-model-version
method: GET
- type: http
namespace: slack-ds
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a Databricks ML model shows prediction drift, logs the event in Snowflake, creates a Jira ticket for the data science team, and alerts via Slack.
naftiko: "0.5"
info:
label: "Databricks Model Drift Alert Handler"
description: "When a Databricks ML model shows prediction drift, logs the event in Snowflake, creates a Jira ticket for the data science team, and alerts via Slack."
tags:
- data-science
- databricks
- snowflake
- jira
- slack
capability:
exposes:
- type: mcp
namespace: ml-ops
port: 8080
tools:
- name: handle-model-drift
description: "Given a Databricks model name and drift score, log to Snowflake, create a Jira ticket, and alert data science. Use when model monitoring detects performance degradation."
inputParameters:
- name: model_name
in: body
type: string
description: "Databricks registered model name."
- name: drift_score
in: body
type: string
description: "Model drift score (0-1)."
steps:
- name: log-drift-event
type: call
call: snowflake.execute-statement
with:
statement: "INSERT INTO ML_OPS.MODEL_DRIFT_LOG (model_name, drift_score, detected_at) VALUES ('{{model_name}}', {{drift_score}}, CURRENT_TIMESTAMP())"
- name: create-ticket
type: call
call: jira.create-issue
with:
project: MLOPS
issue_type: Task
summary: "Model drift: {{model_name}} — score {{drift_score}}"
description: "Model {{model_name}} drift score exceeded threshold at {{drift_score}}. Retrain or investigate."
- name: alert-team
type: call
call: slack.post-message
with:
channel: "data-science-alerts"
text: "Model drift detected: {{model_name}} score {{drift_score}}. Jira: {{create-ticket.key}}."
consumes:
- type: http
namespace: snowflake
baseUri: "https://walmart.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: jira
baseUri: "https://walmart.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: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When Datadog fires a high-severity alert for a production service, creates a ServiceNow P1 incident and posts an alert summary to the on-call Slack channel.
naftiko: "0.5"
info:
label: "Datadog Alert to ServiceNow Incident"
description: "When Datadog fires a high-severity alert for a production service, creates a ServiceNow P1 incident and posts an alert summary to the on-call Slack channel."
tags:
- itsm
- observability
- datadog
- servicenow
- slack
- incident-response
capability:
exposes:
- type: mcp
namespace: incident-ops
port: 8080
tools:
- name: handle-datadog-alert
description: "Given a Datadog alert ID and severity, create a ServiceNow incident and notify the on-call Slack channel. Invoke when production monitoring alerts fire at P1 or P2 severity."
inputParameters:
- name: alert_id
in: body
type: string
description: "Datadog alert/monitor ID that triggered."
- name: alert_title
in: body
type: string
description: "Human-readable title of the Datadog alert."
- name: severity
in: body
type: string
description: "Severity level: P1 or P2."
- name: service_name
in: body
type: string
description: "Name of the affected service or host."
steps:
- name: create-incident
type: call
call: servicenow-incident.create-incident
with:
category: application
impact: "{{severity}}"
urgency: 1
short_description: "[{{severity}}] {{alert_title}} — {{service_name}}"
description: "Datadog alert {{alert_id}} fired for service {{service_name}}. Severity: {{severity}}."
- name: notify-oncall
type: call
call: slack-oncall.post-message
with:
channel: "oncall-alerts"
text: "{{severity}} Incident created: {{alert_title}} | Service: {{service_name}} | ServiceNow: {{create-incident.number}} | Datadog Alert: {{alert_id}}"
consumes:
- type: http
namespace: servicenow-incident
baseUri: "https://walmart.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: slack-oncall
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When Datadog APM detects a latency spike, creates a Jira bug ticket with trace details and alerts the on-call Slack channel.
naftiko: "0.5"
info:
label: "Datadog APM Latency to Jira Bug"
description: "When Datadog APM detects a latency spike, creates a Jira bug ticket with trace details and alerts the on-call Slack channel."
tags:
- observability
- datadog
- jira
- slack
- performance
capability:
exposes:
- type: mcp
namespace: perf-ops
port: 8080
tools:
- name: handle-latency-spike
description: "Given a Datadog trace ID and service name, fetch the trace details, create a Jira bug, and notify the on-call channel. Use when APM latency thresholds are breached."
inputParameters:
- name: trace_id
in: body
type: string
description: "Datadog trace ID."
- name: service_name
in: body
type: string
description: "Affected service name."
- name: p99_latency_ms
in: body
type: string
description: "Observed P99 latency in milliseconds."
steps:
- name: get-trace
type: call
call: datadog.get-trace
with:
trace_id: "{{trace_id}}"
- name: create-bug
type: call
call: jira.create-issue
with:
project: PERF
issue_type: Bug
summary: "Latency spike: {{service_name}} P99={{p99_latency_ms}}ms"
description: "Datadog trace {{trace_id}} shows P99 latency of {{p99_latency_ms}}ms for {{service_name}}. Root span: {{get-trace.root_span}}."
- name: alert-oncall
type: call
call: slack.post-message
with:
channel: "oncall-alerts"
text: "Latency spike on {{service_name}}: P99={{p99_latency_ms}}ms. Jira: {{create-bug.key}}. Trace: {{trace_id}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v2"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
resources:
- name: traces
path: "/traces/{{trace_id}}"
inputParameters:
- name: trace_id
in: path
operations:
- name: get-trace
method: GET
- type: http
namespace: jira
baseUri: "https://walmart.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: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Checks the current status of a Datadog monitor by ID and returns the monitor name, overall state, and last triggered timestamp.
naftiko: "0.5"
info:
label: "Datadog Monitor Status Check"
description: "Checks the current status of a Datadog monitor by ID and returns the monitor name, overall state, and last triggered timestamp."
tags:
- observability
- datadog
- monitoring
capability:
exposes:
- type: mcp
namespace: monitoring
port: 8080
tools:
- name: get-monitor-status
description: "Given a Datadog monitor ID, return the monitor name, overall status, and last triggered time. Use for observability health checks."
inputParameters:
- name: monitor_id
in: body
type: string
description: "Numeric Datadog monitor ID."
call: datadog.get-monitor
with:
monitor_id: "{{monitor_id}}"
outputParameters:
- name: name
type: string
mapping: "$.name"
- name: overall_state
type: string
mapping: "$.overall_state"
- name: last_triggered
type: string
mapping: "$.overall_state_modified"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
resources:
- name: monitors
path: "/monitor/{{monitor_id}}"
inputParameters:
- name: monitor_id
in: path
operations:
- name: get-monitor
method: GET
Monitors Datadog SLO burn rates for critical retail APIs and triggers a Slack alert with context when the burn rate exceeds the warning threshold.
naftiko: "0.5"
info:
label: "Datadog SLO Burn Rate Alert"
description: "Monitors Datadog SLO burn rates for critical retail APIs and triggers a Slack alert with context when the burn rate exceeds the warning threshold."
tags:
- observability
- datadog
- slack
- slo
- reliability
capability:
exposes:
- type: mcp
namespace: reliability-ops
port: 8080
tools:
- name: check-slo-burn-rate
description: "Given a Datadog SLO ID and burn rate threshold, retrieve current burn rate and post an alert to the reliability Slack channel if the threshold is breached. Use for proactive SLO management on critical retail APIs."
inputParameters:
- name: slo_id
in: body
type: string
description: "Datadog SLO ID to check (32-character hex string)."
- name: burn_rate_threshold
in: body
type: number
description: "Burn rate threshold above which to alert (e.g. 2.0 for 2x)."
steps:
- name: get-slo-history
type: call
call: datadog-slo.get-slo-history
with:
slo_id: "{{slo_id}}"
- name: post-burn-alert
type: call
call: slack-reliability.post-message
with:
channel: "reliability-eng"
text: "SLO burn rate alert: SLO {{slo_id}} has burn rate {{get-slo-history.overall.burn_rate_alert}} (threshold: {{burn_rate_threshold}}). Current SLI: {{get-slo-history.overall.sli_value}}."
consumes:
- type: http
namespace: datadog-slo
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: slo-history
path: "/slo/{{slo_id}}/history"
inputParameters:
- name: slo_id
in: path
operations:
- name: get-slo-history
method: GET
- type: http
namespace: slack-reliability
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Queries Snowflake demand forecast data, identifies SKUs below safety stock, and creates replenishment purchase orders in SAP with a notification to the supply chain Slack channel.
naftiko: "0.5"
info:
label: "Demand Forecast to Replenishment Order"
description: "Queries Snowflake demand forecast data, identifies SKUs below safety stock, and creates replenishment purchase orders in SAP with a notification to the supply chain Slack channel."
tags:
- supply-chain
- snowflake
- sap
- slack
- replenishment
capability:
exposes:
- type: mcp
namespace: replenishment
port: 8080
tools:
- name: trigger-replenishment
description: "Given a distribution center code and category, check forecasted demand against current stock in Snowflake, create SAP POs for low-stock items, and notify supply chain. Use for automated replenishment cycles."
inputParameters:
- name: dc_code
in: body
type: string
description: "Distribution center code."
- name: category
in: body
type: string
description: "Product category."
steps:
- name: get-low-stock-items
type: call
call: snowflake.execute-statement
with:
statement: "SELECT sku, on_hand_qty, forecasted_demand, reorder_qty FROM SUPPLY_CHAIN.REPLENISHMENT_VIEW WHERE dc_code = '{{dc_code}}' AND category = '{{category}}' AND on_hand_qty < safety_stock"
- name: create-po
type: call
call: sap.create-purchase-order
with:
items: "{{get-low-stock-items.results}}"
dc_code: "{{dc_code}}"
- name: notify-supply-chain
type: call
call: slack.post-message
with:
channel: "supply-chain-ops"
text: "Replenishment triggered for DC {{dc_code}}, category {{category}}: {{get-low-stock-items.row_count}} SKUs below safety stock. PO: {{create-po.po_number}}."
consumes:
- type: http
namespace: snowflake
baseUri: "https://walmart.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: sap
baseUri: "https://walmart-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"
operations:
- name: create-purchase-order
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When Dynatrace detects CPU or memory saturation, creates a ServiceNow problem ticket and triggers an auto-scaling workflow notification via Slack.
naftiko: "0.5"
info:
label: "Dynatrace Resource Saturation Handler"
description: "When Dynatrace detects CPU or memory saturation, creates a ServiceNow problem ticket and triggers an auto-scaling workflow notification via Slack."
tags:
- observability
- dynatrace
- servicenow
- slack
- auto-scaling
capability:
exposes:
- type: mcp
namespace: capacity-ops
port: 8080
tools:
- name: handle-resource-saturation
description: "Given a Dynatrace problem ID, fetch affected entities, create a ServiceNow problem ticket, and notify the capacity team. Use when host resources exceed saturation thresholds."
inputParameters:
- name: problem_id
in: body
type: string
description: "Dynatrace problem ID."
steps:
- name: get-problem
type: call
call: dynatrace.get-problem
with:
problem_id: "{{problem_id}}"
- name: create-problem-ticket
type: call
call: servicenow.create-problem
with:
short_description: "Resource saturation: {{get-problem.title}}"
description: "Affected entities: {{get-problem.affected_entities}}. Impact: {{get-problem.impact_level}}. Root cause: {{get-problem.root_cause}}."
- name: notify-capacity
type: call
call: slack.post-message
with:
channel: "capacity-alerts"
text: "Resource saturation: {{get-problem.title}}. Impact: {{get-problem.impact_level}}. ServiceNow: {{create-problem-ticket.number}}."
consumes:
- type: http
namespace: dynatrace
baseUri: "https://walmart.live.dynatrace.com/api/v2"
authentication:
type: bearer
token: "$secrets.dynatrace_token"
resources:
- name: problems
path: "/problems/{{problem_id}}"
inputParameters:
- name: problem_id
in: path
operations:
- name: get-problem
method: GET
- type: http
namespace: servicenow
baseUri: "https://walmart.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: problems
path: "/table/problem"
operations:
- name: create-problem
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Looks up an e-commerce order in SAP, checks shipment tracking status, and updates the Salesforce case with delivery information.
naftiko: "0.5"
info:
label: "E-Commerce Order Fulfillment Tracker"
description: "Looks up an e-commerce order in SAP, checks shipment tracking status, and updates the Salesforce case with delivery information."
tags:
- e-commerce
- sap
- salesforce
- fulfillment
capability:
exposes:
- type: mcp
namespace: fulfillment
port: 8080
tools:
- name: track-order-fulfillment
description: "Given an order number and Salesforce case ID, look up the SAP shipment status and update the customer case. Use for customer inquiries about order delivery."
inputParameters:
- name: order_number
in: body
type: string
description: "SAP sales order number."
- name: case_id
in: body
type: string
description: "Salesforce case ID."
steps:
- name: get-order
type: call
call: sap.get-sales-order
with:
order_number: "{{order_number}}"
- name: update-case
type: call
call: salesforce.update-case
with:
case_id: "{{case_id}}"
comment: "Order {{order_number}} status: {{get-order.delivery_status}}. Tracking: {{get-order.tracking_number}}. ETA: {{get-order.estimated_delivery}}."
consumes:
- type: http
namespace: sap
baseUri: "https://walmart-s4.sap.com/sap/opu/odata/sap/API_SALES_ORDER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: sales-orders
path: "/A_SalesOrder('{{order_number}}')"
inputParameters:
- name: order_number
in: path
operations:
- name: get-sales-order
method: GET
- type: http
namespace: salesforce
baseUri: "https://walmart.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: update-case
method: PATCH
When a pull request is opened in GitHub, triggers a Datadog security scan check and posts a compliance summary comment back to the PR before merge is allowed.
naftiko: "0.5"
info:
label: "GitHub PR Security Scan Gating"
description: "When a pull request is opened in GitHub, triggers a Datadog security scan check and posts a compliance summary comment back to the PR before merge is allowed."
tags:
- devops
- security
- github
- datadog
- devsecops
capability:
exposes:
- type: mcp
namespace: security-gate
port: 8080
tools:
- name: gate-pr-security-scan
description: "Given a GitHub PR number and repository, check Datadog security scan results and post a compliance summary as a PR comment. Invoke on every pull request opened event."
inputParameters:
- name: repo
in: body
type: string
description: "GitHub repository in owner/repo format."
- name: pr_number
in: body
type: integer
description: "Pull request number to evaluate."
- name: commit_sha
in: body
type: string
description: "Head commit SHA of the pull request."
steps:
- name: get-pr
type: call
call: github-pr.get-pull-request
with:
repo: "{{repo}}"
pull_number: "{{pr_number}}"
- name: post-pr-comment
type: call
call: github-pr.create-comment
with:
repo: "{{repo}}"
issue_number: "{{pr_number}}"
body: "Security scan initiated for commit {{commit_sha}}. Results will be posted when complete. PR: {{get-pr.title}}"
consumes:
- type: http
namespace: github-pr
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: pull-requests
path: "/repos/{{repo}}/pulls/{{pull_number}}"
inputParameters:
- name: repo
in: path
- name: pull_number
in: path
operations:
- name: get-pull-request
method: GET
- name: comments
path: "/repos/{{repo}}/issues/{{issue_number}}/comments"
inputParameters:
- name: repo
in: path
- name: issue_number
in: path
operations:
- name: create-comment
method: POST
When a GitHub release is published, creates a ServiceNow change request and posts the release notes to the engineering Slack channel.
naftiko: "0.5"
info:
label: "GitHub Release to ServiceNow Change Request"
description: "When a GitHub release is published, creates a ServiceNow change request and posts the release notes to the engineering Slack channel."
tags:
- devops
- github
- servicenow
- slack
- change-management
capability:
exposes:
- type: mcp
namespace: release-ops
port: 8080
tools:
- name: process-github-release
description: "Given a GitHub repository and release tag, fetch the release details, create a ServiceNow change request, and notify the engineering channel. Use for production release tracking."
inputParameters:
- name: repo_name
in: body
type: string
description: "GitHub repository in org/repo format."
- name: release_tag
in: body
type: string
description: "Release tag (e.g. v2.1.0)."
steps:
- name: get-release
type: call
call: github.get-release
with:
repo_name: "{{repo_name}}"
tag: "{{release_tag}}"
- name: create-change-request
type: call
call: servicenow.create-change
with:
short_description: "Production release {{release_tag}} for {{repo_name}}"
description: "{{get-release.body}}"
category: software
type: standard
- name: notify-engineering
type: call
call: slack.post-message
with:
channel: "engineering-releases"
text: "Release {{release_tag}} for {{repo_name}} published. Change request: {{create-change-request.number}}. Notes: {{get-release.body}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: releases
path: "/repos/{{repo_name}}/releases/tags/{{tag}}"
inputParameters:
- name: repo_name
in: path
- name: tag
in: path
operations:
- name: get-release
method: GET
- type: http
namespace: servicenow
baseUri: "https://walmart.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: change-requests
path: "/table/change_request"
operations:
- name: create-change
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Looks up a GitHub repository and returns its description, default branch, open issue count, and last push date.
naftiko: "0.5"
info:
label: "GitHub Repository Info"
description: "Looks up a GitHub repository and returns its description, default branch, open issue count, and last push date."
tags:
- devops
- github
- repository
capability:
exposes:
- type: mcp
namespace: devops
port: 8080
tools:
- name: get-repo-info
description: "Given an org and repo name, return the repository description, default branch, open issues count, and last push timestamp. Use for engineering portfolio reviews."
inputParameters:
- name: repo_name
in: body
type: string
description: "Full repository name in org/repo format."
call: github.get-repo
with:
repo_name: "{{repo_name}}"
outputParameters:
- name: description
type: string
mapping: "$.description"
- name: default_branch
type: string
mapping: "$.default_branch"
- name: open_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_name}}"
inputParameters:
- name: repo_name
in: path
operations:
- name: get-repo
method: GET
Scans GitHub repositories for open Dependabot security alerts, aggregates findings by severity, and posts a weekly digest to the security Slack channel.
naftiko: "0.5"
info:
label: "GitHub Repository Security Advisory Digest"
description: "Scans GitHub repositories for open Dependabot security alerts, aggregates findings by severity, and posts a weekly digest to the security Slack channel."
tags:
- devops
- security
- github
- slack
- devsecops
capability:
exposes:
- type: mcp
namespace: security-advisory
port: 8080
tools:
- name: digest-security-advisories
description: "Given a GitHub organization name, retrieve all open Dependabot alerts grouped by severity and post a weekly digest to the security Slack channel. Use for weekly security hygiene reporting."
inputParameters:
- name: github_org
in: body
type: string
description: "GitHub organization name to scan (e.g. walmart)."
- name: severity_filter
in: body
type: string
description: "Minimum severity to include: critical, high, medium, low."
steps:
- name: get-alerts
type: call
call: github-security.list-org-alerts
with:
org: "{{github_org}}"
severity: "{{severity_filter}}"
- name: post-digest
type: call
call: slack-security.post-message
with:
channel: "security-advisories"
text: "Weekly security advisory digest for {{github_org}}: {{get-alerts.total_count}} open alerts (Critical: {{get-alerts.critical_count}}, High: {{get-alerts.high_count}}). Review in GitHub Security tab."
consumes:
- type: http
namespace: github-security
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: org-alerts
path: "/orgs/{{org}}/dependabot/alerts"
inputParameters:
- name: org
in: path
- name: severity
in: query
operations:
- name: list-org-alerts
method: GET
- type: http
namespace: slack-security
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Fetches Google Analytics e-commerce conversion data, stores results in Snowflake, and posts a conversion summary to the digital marketing Slack channel.
naftiko: "0.5"
info:
label: "Google Analytics E-Commerce Conversion Report"
description: "Fetches Google Analytics e-commerce conversion data, stores results in Snowflake, and posts a conversion summary to the digital marketing Slack channel."
tags:
- analytics
- google-analytics
- snowflake
- slack
- e-commerce
capability:
exposes:
- type: mcp
namespace: ecom-analytics
port: 8080
tools:
- name: generate-conversion-report
description: "Given a date range and property ID, fetch GA4 e-commerce data, load to Snowflake, and post summary to marketing. Use for weekly conversion rate reporting."
inputParameters:
- name: property_id
in: body
type: string
description: "Google Analytics 4 property ID."
- name: start_date
in: body
type: string
description: "Start date in YYYY-MM-DD."
- name: end_date
in: body
type: string
description: "End date in YYYY-MM-DD."
steps:
- name: get-conversion-data
type: call
call: ga4.run-report
with:
property_id: "{{property_id}}"
date_range_start: "{{start_date}}"
date_range_end: "{{end_date}}"
- name: load-to-snowflake
type: call
call: snowflake.execute-statement
with:
statement: "INSERT INTO DIGITAL.GA_CONVERSIONS (property_id, period_start, period_end, sessions, transactions, conversion_rate, revenue) VALUES ('{{property_id}}', '{{start_date}}', '{{end_date}}', {{get-conversion-data.sessions}}, {{get-conversion-data.transactions}}, {{get-conversion-data.conversion_rate}}, {{get-conversion-data.revenue}})"
- name: post-summary
type: call
call: slack.post-message
with:
channel: "digital-marketing"
text: "E-commerce conversion report ({{start_date}} to {{end_date}}): {{get-conversion-data.sessions}} sessions, {{get-conversion-data.conversion_rate}}% CVR, ${{get-conversion-data.revenue}} revenue."
consumes:
- type: http
namespace: ga4
baseUri: "https://analyticsdata.googleapis.com/v1beta"
authentication:
type: bearer
token: "$secrets.google_analytics_token"
resources:
- name: reports
path: "/properties/{{property_id}}:runReport"
inputParameters:
- name: property_id
in: path
operations:
- name: run-report
method: POST
- type: http
namespace: snowflake
baseUri: "https://walmart.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Detects Google Cloud billing anomalies above a spend threshold and notifies the FinOps Slack channel with a cost breakdown and recommended actions.
naftiko: "0.5"
info:
label: "Google Cloud Cost Anomaly Responder"
description: "Detects Google Cloud billing anomalies above a spend threshold and notifies the FinOps Slack channel with a cost breakdown and recommended actions."
tags:
- cloud
- finops
- google-cloud
- slack
- cost-management
capability:
exposes:
- type: mcp
namespace: cloud-finops
port: 8080
tools:
- name: respond-to-cost-anomaly
description: "Given a GCP billing account ID and anomaly threshold in USD, retrieve daily cost data and post an anomaly report to the FinOps Slack channel. Use when automated billing alerts fire above acceptable variance."
inputParameters:
- name: billing_account_id
in: body
type: string
description: "Google Cloud billing account ID (e.g. 01234A-56789B-CDEF00)."
- name: threshold_usd
in: body
type: number
description: "Daily spend threshold in USD above which to alert."
steps:
- name: get-billing-data
type: call
call: gcp-billing.get-billing-info
with:
billing_account_id: "{{billing_account_id}}"
- name: post-anomaly-report
type: call
call: slack-finops.post-message
with:
channel: "cloud-finops"
text: "GCP cost anomaly: Billing account {{billing_account_id}} exceeded threshold of ${{threshold_usd}}. Current period cost: {{get-billing-data.cost}}. Top project: {{get-billing-data.top_project}}."
consumes:
- type: http
namespace: gcp-billing
baseUri: "https://cloudbilling.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.gcp_token"
resources:
- name: billing-accounts
path: "/billingAccounts/{{billing_account_id}}"
inputParameters:
- name: billing_account_id
in: path
operations:
- name: get-billing-info
method: GET
- type: http
namespace: slack-finops
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Checks grocery pickup order readiness in SAP, updates the customer record in Salesforce, and sends a pickup notification via Microsoft Teams to the store fulfillment team.
naftiko: "0.5"
info:
label: "Grocery Pickup Order Status Notifier"
description: "Checks grocery pickup order readiness in SAP, updates the customer record in Salesforce, and sends a pickup notification via Microsoft Teams to the store fulfillment team."
tags:
- e-commerce
- grocery
- sap
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: grocery-ops
port: 8080
tools:
- name: notify-pickup-ready
description: "Given an order number and store number, check SAP fulfillment status, update Salesforce, and notify the store team. Use when grocery pickup orders are ready for customer collection."
inputParameters:
- name: order_number
in: body
type: string
description: "Grocery pickup order number."
- name: store_number
in: body
type: string
description: "Store number."
steps:
- name: get-order-status
type: call
call: sap.get-order-status
with:
order_number: "{{order_number}}"
- name: update-customer-record
type: call
call: salesforce.update-order
with:
order_number: "{{order_number}}"
status: "{{get-order-status.fulfillment_status}}"
- name: notify-store-team
type: call
call: msteams.send-channel-message
with:
team_id: grocery-fulfillment
channel: store-{{store_number}}
text: "Pickup order {{order_number}} is {{get-order-status.fulfillment_status}}. Items: {{get-order-status.item_count}}. Customer ETA: {{get-order-status.pickup_window}}."
consumes:
- type: http
namespace: sap
baseUri: "https://walmart-s4.sap.com/sap/opu/odata/sap/API_SALES_ORDER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: orders
path: "/A_SalesOrder('{{order_number}}')"
inputParameters:
- name: order_number
in: path
operations:
- name: get-order-status
method: GET
- type: http
namespace: salesforce
baseUri: "https://walmart.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: orders
path: "/sobjects/Order/{{order_number}}"
inputParameters:
- name: order_number
in: path
operations:
- name: update-order
method: PATCH
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel
in: path
operations:
- name: send-channel-message
method: POST
When a new HubSpot contact meets lead scoring criteria, creates a Salesforce lead and notifies the sales team via Slack.
naftiko: "0.5"
info:
label: "HubSpot Contact to Salesforce Lead Sync"
description: "When a new HubSpot contact meets lead scoring criteria, creates a Salesforce lead and notifies the sales team via Slack."
tags:
- marketing
- hubspot
- salesforce
- slack
- lead-management
capability:
exposes:
- type: mcp
namespace: lead-ops
port: 8080
tools:
- name: sync-hubspot-lead
description: "Given a HubSpot contact ID, fetch contact details, create a Salesforce lead, and notify sales. Use when marketing-qualified leads are identified."
inputParameters:
- name: contact_id
in: body
type: string
description: "HubSpot contact ID."
steps:
- name: get-contact
type: call
call: hubspot.get-contact
with:
contact_id: "{{contact_id}}"
- name: create-lead
type: call
call: salesforce.create-lead
with:
first_name: "{{get-contact.firstname}}"
last_name: "{{get-contact.lastname}}"
email: "{{get-contact.email}}"
company: "{{get-contact.company}}"
lead_source: HubSpot
- name: notify-sales
type: call
call: slack.post-message
with:
channel: "sales-leads"
text: "New MQL from HubSpot: {{get-contact.firstname}} {{get-contact.lastname}} at {{get-contact.company}}. Salesforce lead: {{create-lead.id}}."
consumes:
- type: http
namespace: hubspot
baseUri: "https://api.hubapi.com"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: contacts
path: "/crm/v3/objects/contacts/{{contact_id}}"
inputParameters:
- name: contact_id
in: path
operations:
- name: get-contact
method: GET
- type: http
namespace: salesforce
baseUri: "https://walmart.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: leads
path: "/sobjects/Lead"
operations:
- name: create-lead
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Retrieves a Jira issue by key and returns its summary, status, assignee, and priority.
naftiko: "0.5"
info:
label: "Jira Issue Lookup"
description: "Retrieves a Jira issue by key and returns its summary, status, assignee, and priority."
tags:
- devops
- jira
- issue-tracking
capability:
exposes:
- type: mcp
namespace: issue-tracking
port: 8080
tools:
- name: get-issue
description: "Given a Jira issue key, return its summary, status, assignee, priority, and sprint. Use for engineering standup preparation and issue triage."
inputParameters:
- name: issue_key
in: body
type: string
description: "Jira issue key (e.g. PROJ-1234)."
call: jira.get-issue
with:
issue_key: "{{issue_key}}"
outputParameters:
- name: summary
type: string
mapping: "$.fields.summary"
- name: status
type: string
mapping: "$.fields.status.name"
- name: assignee
type: string
mapping: "$.fields.assignee.displayName"
consumes:
- type: http
namespace: jira
baseUri: "https://walmart.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue/{{issue_key}}"
inputParameters:
- name: issue_key
in: path
operations:
- name: get-issue
method: GET
Retrieves completed sprint data from Jira, calculates velocity metrics, and publishes the summary to the engineering Confluence space and Slack channel.
naftiko: "0.5"
info:
label: "Jira Sprint Velocity Report"
description: "Retrieves completed sprint data from Jira, calculates velocity metrics, and publishes the summary to the engineering Confluence space and Slack channel."
tags:
- devops
- jira
- slack
- reporting
- agile
capability:
exposes:
- type: mcp
namespace: agile-reporting
port: 8080
tools:
- name: publish-sprint-velocity
description: "Given a Jira board ID and sprint ID, retrieve completed sprint story points, compute velocity, and post the report to the engineering Slack channel. Use after each sprint close to track team throughput."
inputParameters:
- name: board_id
in: body
type: string
description: "Jira board ID (numeric string)."
- name: sprint_id
in: body
type: string
description: "Jira sprint ID for the completed sprint."
steps:
- name: get-sprint
type: call
call: jira-sprint.get-sprint
with:
sprint_id: "{{sprint_id}}"
- name: get-issues
type: call
call: jira-sprint.search-issues
with:
jql: "sprint = {{sprint_id}} AND status = Done"
- name: post-velocity
type: call
call: slack-agile.post-message
with:
channel: "engineering-sprints"
text: "Sprint {{get-sprint.name}} closed. Issues completed: {{get-issues.total}}. Goal: {{get-sprint.goal}}"
consumes:
- type: http
namespace: jira-sprint
baseUri: "https://walmart.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: sprints
path: "/sprint/{{sprint_id}}"
inputParameters:
- name: sprint_id
in: path
operations:
- name: get-sprint
method: GET
- name: issues
path: "/search"
inputParameters:
- name: jql
in: query
operations:
- name: search-issues
method: GET
- type: http
namespace: slack-agile
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Checks Kafka consumer group lag for critical supply chain topics and posts an alert to the data infrastructure Slack channel when lag exceeds acceptable thresholds.
naftiko: "0.5"
info:
label: "Kafka Consumer Lag Monitor"
description: "Checks Kafka consumer group lag for critical supply chain topics and posts an alert to the data infrastructure Slack channel when lag exceeds acceptable thresholds."
tags:
- data
- kafka
- slack
- monitoring
- supply-chain
capability:
exposes:
- type: mcp
namespace: kafka-ops
port: 8080
tools:
- name: check-consumer-lag
description: "Given a Kafka consumer group ID and maximum allowed lag, check current consumer lag via the Kafka Admin API and alert the data-infrastructure Slack channel if the lag threshold is exceeded. Use for supply chain event streaming health checks."
inputParameters:
- name: consumer_group_id
in: body
type: string
description: "Kafka consumer group ID to monitor (e.g. supply-chain-inventory-consumer)."
- name: max_lag_threshold
in: body
type: integer
description: "Maximum allowable consumer lag in messages before alerting."
steps:
- name: get-consumer-lag
type: call
call: kafka-admin.get-consumer-group
with:
group_id: "{{consumer_group_id}}"
- name: post-lag-alert
type: call
call: slack-infra.post-message
with:
channel: "data-infrastructure"
text: "Kafka consumer lag alert: Group {{consumer_group_id}} has lag {{get-consumer-lag.total_lag}} (max allowed: {{max_lag_threshold}}). Topic: {{get-consumer-lag.max_lag_topic}}."
consumes:
- type: http
namespace: kafka-admin
baseUri: "https://walmart-kafka-admin.internal/v3"
authentication:
type: bearer
token: "$secrets.kafka_admin_token"
resources:
- name: consumer-groups
path: "/clusters/{{cluster_id}}/consumer-groups/{{group_id}}"
inputParameters:
- name: cluster_id
in: path
- name: group_id
in: path
operations:
- name: get-consumer-group
method: GET
- type: http
namespace: slack-infra
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Checks Kubernetes deployment rollout status via the cluster API and posts a summary to the platform engineering Slack channel, creating a ServiceNow change task if rollout fails.
naftiko: "0.5"
info:
label: "Kubernetes Deployment Rollout Monitor"
description: "Checks Kubernetes deployment rollout status via the cluster API and posts a summary to the platform engineering Slack channel, creating a ServiceNow change task if rollout fails."
tags:
- devops
- kubernetes
- servicenow
- slack
- cloud
capability:
exposes:
- type: mcp
namespace: platform-ops
port: 8080
tools:
- name: monitor-deployment-rollout
description: "Given a Kubernetes namespace and deployment name, retrieve rollout status and notify the platform-eng Slack channel. If the rollout is degraded, create a ServiceNow change task. Use after deployments to production clusters."
inputParameters:
- name: namespace
in: body
type: string
description: "Kubernetes namespace where the deployment lives (e.g. supply-chain-prod)."
- name: deployment_name
in: body
type: string
description: "Name of the Kubernetes deployment to monitor."
steps:
- name: get-deployment-status
type: call
call: k8s.get-deployment
with:
namespace: "{{namespace}}"
name: "{{deployment_name}}"
- name: create-change-task
type: call
call: servicenow-change.create-change
with:
short_description: "Rollout issue: {{deployment_name}} in {{namespace}}"
category: software
description: "Deployment {{deployment_name}} in namespace {{namespace}} is degraded. Available replicas: {{get-deployment-status.available_replicas}}"
- name: notify-platform
type: call
call: slack-platform.post-message
with:
channel: "platform-engineering"
text: "Rollout status for {{deployment_name}} ({{namespace}}): Ready={{get-deployment-status.ready_replicas}}/{{get-deployment-status.desired_replicas}}. Change task: {{create-change-task.number}}"
consumes:
- type: http
namespace: k8s
baseUri: "https://walmart-k8s-api.internal/apis/apps/v1"
authentication:
type: bearer
token: "$secrets.k8s_service_account_token"
resources:
- name: deployments
path: "/namespaces/{{namespace}}/deployments/{{name}}"
inputParameters:
- name: namespace
in: path
- name: name
in: path
operations:
- name: get-deployment
method: GET
- type: http
namespace: servicenow-change
baseUri: "https://walmart.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: slack-platform
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a Kubernetes pod enters CrashLoopBackOff, collects pod logs via Datadog, creates a ServiceNow incident, and pages the on-call engineer via PagerDuty.
naftiko: "0.5"
info:
label: "Kubernetes Pod CrashLoop Responder"
description: "When a Kubernetes pod enters CrashLoopBackOff, collects pod logs via Datadog, creates a ServiceNow incident, and pages the on-call engineer via PagerDuty."
tags:
- infrastructure
- kubernetes
- datadog
- servicenow
- pagerduty
capability:
exposes:
- type: mcp
namespace: k8s-ops
port: 8080
tools:
- name: handle-crashloop
description: "Given a namespace, pod name, and cluster, collect recent logs, create an incident, and page on-call. Use when Kubernetes pods enter CrashLoopBackOff."
inputParameters:
- name: namespace
in: body
type: string
description: "Kubernetes namespace."
- name: pod_name
in: body
type: string
description: "Name of the crashing pod."
- name: cluster
in: body
type: string
description: "Kubernetes cluster name."
steps:
- name: get-pod-logs
type: call
call: datadog.search-logs
with:
query: "kube_namespace:{{namespace}} pod_name:{{pod_name}} cluster_name:{{cluster}}"
time_range: "15m"
- name: create-incident
type: call
call: servicenow.create-incident
with:
category: infrastructure
urgency: 1
short_description: "CrashLoopBackOff: {{pod_name}} in {{namespace}}/{{cluster}}"
description: "Recent logs: {{get-pod-logs.summary}}."
- name: page-oncall
type: call
call: pagerduty.create-incident
with:
service_id: "{{cluster}}-k8s"
title: "CrashLoopBackOff: {{pod_name}} in {{namespace}}"
urgency: high
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v2"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
resources:
- name: logs
path: "/logs/events/search"
operations:
- name: search-logs
method: POST
- type: http
namespace: servicenow
baseUri: "https://walmart.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: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
Fetches LinkedIn job posting analytics, syncs metrics to Snowflake, and sends a weekly summary to the talent acquisition Microsoft Teams channel.
naftiko: "0.5"
info:
label: "LinkedIn Job Posting Performance Sync"
description: "Fetches LinkedIn job posting analytics, syncs metrics to Snowflake, and sends a weekly summary to the talent acquisition Microsoft Teams channel."
tags:
- recruiting
- linkedin
- snowflake
- microsoft-teams
- analytics
capability:
exposes:
- type: mcp
namespace: talent-analytics
port: 8080
tools:
- name: sync-job-posting-metrics
description: "Given a date range, fetch LinkedIn job posting performance, load into Snowflake, and post a summary to talent acquisition. Use for weekly recruiting pipeline reviews."
inputParameters:
- name: start_date
in: body
type: string
description: "Start date in YYYY-MM-DD."
- name: end_date
in: body
type: string
description: "End date in YYYY-MM-DD."
steps:
- name: get-linkedin-metrics
type: call
call: linkedin.get-job-analytics
with:
start_date: "{{start_date}}"
end_date: "{{end_date}}"
- name: load-to-snowflake
type: call
call: snowflake.execute-statement
with:
statement: "INSERT INTO HR.LINKEDIN_JOB_METRICS (period_start, period_end, views, applies, quality_applies) VALUES ('{{start_date}}', '{{end_date}}', {{get-linkedin-metrics.views}}, {{get-linkedin-metrics.applies}}, {{get-linkedin-metrics.quality_applies}})"
- name: post-summary
type: call
call: msteams.send-channel-message
with:
team_id: talent-acquisition
channel: analytics
text: "LinkedIn job posting metrics for {{start_date}} to {{end_date}}: {{get-linkedin-metrics.views}} views, {{get-linkedin-metrics.applies}} applies, {{get-linkedin-metrics.quality_applies}} quality applies."
consumes:
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: job-analytics
path: "/jobAnalytics"
operations:
- name: get-job-analytics
method: GET
- type: http
namespace: snowflake
baseUri: "https://walmart.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel
in: path
operations:
- name: send-channel-message
method: POST
Publishes a new job requisition from Workday to LinkedIn Jobs and logs the posting record in Salesforce for recruiting pipeline tracking.
naftiko: "0.5"
info:
label: "LinkedIn Job Posting Sync"
description: "Publishes a new job requisition from Workday to LinkedIn Jobs and logs the posting record in Salesforce for recruiting pipeline tracking."
tags:
- hr
- recruiting
- workday
- linkedin
- salesforce
capability:
exposes:
- type: mcp
namespace: recruiting
port: 8080
tools:
- name: publish-job-to-linkedin
description: "Given a Workday job requisition ID, retrieve job details, post the opening to LinkedIn Jobs, and log the external posting record in Salesforce. Use when a requisition is approved and ready to advertise."
inputParameters:
- name: requisition_id
in: body
type: string
description: "Workday job requisition ID (e.g. JR-00045678)."
- name: linkedin_organization_id
in: body
type: string
description: "LinkedIn organization ID for the Walmart company page."
steps:
- name: get-requisition
type: call
call: workday-jobs.get-job-requisition
with:
requisition_id: "{{requisition_id}}"
- name: post-to-linkedin
type: call
call: linkedin.create-job-posting
with:
organization_id: "{{linkedin_organization_id}}"
title: "{{get-requisition.job_title}}"
description: "{{get-requisition.job_description}}"
location: "{{get-requisition.location}}"
- name: log-in-salesforce
type: call
call: salesforce-recruiting.create-record
with:
object_type: Job_Posting__c
requisition_id: "{{requisition_id}}"
linkedin_posting_id: "{{post-to-linkedin.id}}"
consumes:
- type: http
namespace: workday-jobs
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: job-requisitions
path: "/walmart/jobRequisitions/{{requisition_id}}"
inputParameters:
- name: requisition_id
in: path
operations:
- name: get-job-requisition
method: GET
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: job-postings
path: "/jobPostings"
operations:
- name: create-job-posting
method: POST
- type: http
namespace: salesforce-recruiting
baseUri: "https://walmart.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: records
path: "/sobjects/{{object_type}}"
inputParameters:
- name: object_type
in: path
operations:
- name: create-record
method: POST
Pulls weekly campaign performance metrics from Marketo, writes a summary record to Snowflake, and publishes a digest to the marketing Slack channel.
naftiko: "0.5"
info:
label: "Marketo Campaign Performance Digest"
description: "Pulls weekly campaign performance metrics from Marketo, writes a summary record to Snowflake, and publishes a digest to the marketing Slack channel."
tags:
- marketing
- marketo
- snowflake
- slack
- reporting
capability:
exposes:
- type: mcp
namespace: marketing-reporting
port: 8080
tools:
- name: digest-campaign-performance
description: "Given a Marketo program ID and date range, retrieve email performance metrics, persist the summary to Snowflake, and post a digest to the marketing Slack channel. Use for weekly marketing performance reviews."
inputParameters:
- name: program_id
in: body
type: string
description: "Marketo program ID for the campaign to analyze."
- name: start_date
in: body
type: string
description: "Reporting period start date in ISO 8601 format (YYYY-MM-DD)."
- name: end_date
in: body
type: string
description: "Reporting period end date in ISO 8601 format (YYYY-MM-DD)."
steps:
- name: get-campaign-stats
type: call
call: marketo.get-program-stats
with:
program_id: "{{program_id}}"
start_date: "{{start_date}}"
end_date: "{{end_date}}"
- name: write-snowflake-summary
type: call
call: snowflake.insert-row
with:
table: "MARKETING.CAMPAIGN_PERFORMANCE"
program_id: "{{program_id}}"
sent: "{{get-campaign-stats.sent}}"
opens: "{{get-campaign-stats.opens}}"
clicks: "{{get-campaign-stats.clicks}}"
- name: post-digest
type: call
call: slack-marketing.post-message
with:
channel: "marketing-analytics"
text: "Campaign digest ({{start_date}} to {{end_date}}): Sent={{get-campaign-stats.sent}}, Opens={{get-campaign-stats.opens}}, Clicks={{get-campaign-stats.clicks}}, Unsubscribes={{get-campaign-stats.unsubscribes}}."
consumes:
- type: http
namespace: marketo
baseUri: "https://walmart.mktorest.com/rest/v1"
authentication:
type: bearer
token: "$secrets.marketo_token"
resources:
- name: program-stats
path: "/stats/usage/daybyprogram.json"
inputParameters:
- name: program_id
in: query
- name: start_date
in: query
- name: end_date
in: query
operations:
- name: get-program-stats
method: GET
- type: http
namespace: snowflake
baseUri: "https://walmart.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: insert-row
method: POST
- type: http
namespace: slack-marketing
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Fetches Marketo email campaign performance metrics, loads them into Snowflake for analysis, and posts a summary to the marketing Slack channel.
naftiko: "0.5"
info:
label: "Marketo Email Campaign to Snowflake Analytics"
description: "Fetches Marketo email campaign performance metrics, loads them into Snowflake for analysis, and posts a summary to the marketing Slack channel."
tags:
- marketing
- marketo
- snowflake
- slack
- analytics
capability:
exposes:
- type: mcp
namespace: marketing-analytics
port: 8080
tools:
- name: sync-campaign-metrics
description: "Given a Marketo campaign ID, fetch email performance metrics, insert into Snowflake, and post a summary to marketing. Use for campaign ROI analysis."
inputParameters:
- name: campaign_id
in: body
type: string
description: "Marketo email campaign ID."
steps:
- name: get-campaign-stats
type: call
call: marketo.get-campaign-stats
with:
campaign_id: "{{campaign_id}}"
- name: load-to-snowflake
type: call
call: snowflake.execute-statement
with:
statement: "INSERT INTO MARKETING.CAMPAIGN_METRICS (campaign_id, sends, opens, clicks, open_rate, click_rate) VALUES ('{{campaign_id}}', {{get-campaign-stats.sends}}, {{get-campaign-stats.opens}}, {{get-campaign-stats.clicks}}, {{get-campaign-stats.open_rate}}, {{get-campaign-stats.click_rate}})"
- name: post-summary
type: call
call: slack.post-message
with:
channel: "marketing-analytics"
text: "Campaign {{campaign_id}} results: {{get-campaign-stats.sends}} sent, {{get-campaign-stats.open_rate}}% open rate, {{get-campaign-stats.click_rate}}% CTR."
consumes:
- type: http
namespace: marketo
baseUri: "https://walmart.mktorest.com/rest"
authentication:
type: bearer
token: "$secrets.marketo_token"
resources:
- name: campaigns
path: "/v1/campaigns/{{campaign_id}}/stats.json"
inputParameters:
- name: campaign_id
in: path
operations:
- name: get-campaign-stats
method: GET
- type: http
namespace: snowflake
baseUri: "https://walmart.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Lists all channels within a Microsoft Teams team for directory and communication purposes.
naftiko: "0.5"
info:
label: "Microsoft Teams Channel List"
description: "Lists all channels within a Microsoft Teams team for directory and communication purposes."
tags:
- communication
- microsoft-teams
- collaboration
capability:
exposes:
- type: mcp
namespace: collaboration
port: 8080
tools:
- name: list-channels
description: "Given a Microsoft Teams team ID, return all channels with their names, descriptions, and membership types. Use for team communication directory lookups."
inputParameters:
- name: team_id
in: body
type: string
description: "Microsoft Teams team ID."
call: msteams.list-channels
with:
team_id: "{{team_id}}"
outputParameters:
- name: channels
type: array
mapping: "$.value"
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"
inputParameters:
- name: team_id
in: path
operations:
- name: list-channels
method: GET
When a new associate is created in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint folder, and sends a Microsoft Teams welcome message with first-day instructions.
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 SharePoint folder, and sends a Microsoft Teams welcome message with first-day instructions."
tags:
- hr
- onboarding
- workday
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-onboarding
port: 8080
tools:
- name: trigger-associate-onboarding
description: "Given a Workday employee ID and start date, orchestrate the full onboarding sequence across ServiceNow, Microsoft Teams, and SharePoint. Invoke when a new retail or corporate associate begins employment."
inputParameters:
- name: workday_employee_id
in: body
type: string
description: "The Workday worker ID for the new associate."
- name: start_date
in: body
type: string
description: "Associate start date in ISO 8601 format (YYYY-MM-DD)."
- name: store_number
in: body
type: string
description: "Walmart store or facility number the associate is assigned to."
steps:
- name: get-worker
type: call
call: workday.get-worker
with:
worker_id: "{{workday_employee_id}}"
- name: open-onboarding-ticket
type: call
call: servicenow.create-incident
with:
category: hr_onboarding
short_description: "New associate onboarding: {{get-worker.full_name}} — Store {{store_number}}"
assigned_group: IT_Onboarding
- name: send-welcome-message
type: call
call: msteams.send-message
with:
recipient_upn: "{{get-worker.work_email}}"
text: "Welcome to Walmart, {{get-worker.first_name}}! Your onboarding ticket is {{open-onboarding-ticket.number}}. Your start date is {{start_date}}."
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: "/walmart/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://walmart.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: chats
path: "/users/{{upn}}/chats"
inputParameters:
- name: upn
in: path
operations:
- name: send-message
method: POST
When New Relic detects an error rate spike post-deployment, triggers a GitHub Actions rollback workflow and creates a ServiceNow incident.
naftiko: "0.5"
info:
label: "New Relic Error Rate to Rollback Trigger"
description: "When New Relic detects an error rate spike post-deployment, triggers a GitHub Actions rollback workflow and creates a ServiceNow incident."
tags:
- devops
- new-relic
- github
- servicenow
- deployment
capability:
exposes:
- type: mcp
namespace: deploy-ops
port: 8080
tools:
- name: handle-error-rate-spike
description: "Given a New Relic application ID and error threshold, check current error rate, trigger rollback if exceeded, and create an incident. Use for post-deployment error monitoring."
inputParameters:
- name: app_id
in: body
type: string
description: "New Relic application ID."
- name: repo_name
in: body
type: string
description: "GitHub repository for rollback."
- name: previous_sha
in: body
type: string
description: "Git SHA to roll back to."
steps:
- name: get-error-rate
type: call
call: newrelic.get-app-metrics
with:
app_id: "{{app_id}}"
- name: trigger-rollback
type: call
call: github.dispatch-workflow
with:
repo: "{{repo_name}}"
workflow: rollback.yml
ref: main
inputs_sha: "{{previous_sha}}"
- name: create-incident
type: call
call: servicenow.create-incident
with:
category: deployment
urgency: 1
short_description: "Auto-rollback triggered: {{repo_name}} — error rate {{get-error-rate.error_percentage}}%"
description: "Rolling back to {{previous_sha}}. New Relic app: {{app_id}}."
consumes:
- type: http
namespace: newrelic
baseUri: "https://api.newrelic.com/v2"
authentication:
type: apiKey
key: "$secrets.newrelic_api_key"
resources:
- name: applications
path: "/applications/{{app_id}}/metrics/data.json"
inputParameters:
- name: app_id
in: path
operations:
- name: get-app-metrics
method: GET
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: workflows
path: "/repos/{{repo}}/actions/workflows/{{workflow}}/dispatches"
inputParameters:
- name: repo
in: path
- name: workflow
in: path
operations:
- name: dispatch-workflow
method: POST
- type: http
namespace: servicenow
baseUri: "https://walmart.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
When a new vendor is approved, creates the vendor master in SAP, opens a ServiceNow onboarding ticket, and notifies procurement via Slack.
naftiko: "0.5"
info:
label: "New Vendor Onboarding Orchestrator"
description: "When a new vendor is approved, creates the vendor master in SAP, opens a ServiceNow onboarding ticket, and notifies procurement via Slack."
tags:
- procurement
- sap
- servicenow
- slack
- vendor-management
capability:
exposes:
- type: mcp
namespace: vendor-ops
port: 8080
tools:
- name: onboard-new-vendor
description: "Given vendor details, create the SAP vendor master record, open a ServiceNow onboarding ticket, and notify the procurement channel. Use when new suppliers are approved."
inputParameters:
- name: vendor_name
in: body
type: string
description: "Legal name of the vendor."
- name: vendor_tax_id
in: body
type: string
description: "Vendor tax identification number."
- name: category
in: body
type: string
description: "Vendor category (e.g. grocery, apparel, electronics)."
steps:
- name: create-vendor-master
type: call
call: sap.create-vendor
with:
vendor_name: "{{vendor_name}}"
tax_id: "{{vendor_tax_id}}"
account_group: "{{category}}"
- name: open-onboarding-ticket
type: call
call: servicenow.create-request
with:
category: vendor_onboarding
short_description: "New vendor onboarding: {{vendor_name}}"
description: "SAP vendor ID: {{create-vendor-master.vendor_id}}. Category: {{category}}."
- name: notify-procurement
type: call
call: slack.post-message
with:
channel: "procurement-onboarding"
text: "New vendor {{vendor_name}} onboarded. SAP ID: {{create-vendor-master.vendor_id}}. ServiceNow: {{open-onboarding-ticket.number}}."
consumes:
- type: http
namespace: sap
baseUri: "https://walmart-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"
operations:
- name: create-vendor
method: POST
- type: http
namespace: servicenow
baseUri: "https://walmart.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: requests
path: "/table/sc_request"
operations:
- name: create-request
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When Okta detects a suspicious login event, creates a security incident in ServiceNow, suspends the user session, and alerts the SOC Slack channel.
naftiko: "0.5"
info:
label: "Okta Suspicious Login to Security Incident"
description: "When Okta detects a suspicious login event, creates a security incident in ServiceNow, suspends the user session, and alerts the SOC Slack channel."
tags:
- security
- okta
- servicenow
- slack
- threat-detection
capability:
exposes:
- type: mcp
namespace: threat-response
port: 8080
tools:
- name: handle-suspicious-login
description: "Given an Okta event ID and user login, fetch event details, create a security incident, suspend sessions, and alert SOC. Use when Okta threat intelligence flags suspicious activity."
inputParameters:
- name: event_id
in: body
type: string
description: "Okta system log event ID."
- name: user_login
in: body
type: string
description: "Affected user login email."
steps:
- name: get-event
type: call
call: okta.get-event
with:
event_id: "{{event_id}}"
- name: suspend-sessions
type: call
call: okta.clear-sessions
with:
user_login: "{{user_login}}"
- name: create-security-incident
type: call
call: servicenow.create-incident
with:
category: security
urgency: 1
short_description: "Suspicious login: {{user_login}} from {{get-event.client_ip}}"
description: "Event: {{event_id}}. Location: {{get-event.geo_location}}. Reason: {{get-event.outcome_reason}}."
- name: alert-soc
type: call
call: slack.post-message
with:
channel: "soc-alerts"
text: "Suspicious login for {{user_login}} from {{get-event.client_ip}} ({{get-event.geo_location}}). Sessions cleared. Incident: {{create-security-incident.number}}."
consumes:
- type: http
namespace: okta
baseUri: "https://walmart.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_token"
resources:
- name: events
path: "/logs?filter=uuid+eq+\"{{event_id}}\""
inputParameters:
- name: event_id
in: query
operations:
- name: get-event
method: GET
- name: sessions
path: "/users/{{user_login}}/sessions"
inputParameters:
- name: user_login
in: path
operations:
- name: clear-sessions
method: DELETE
- type: http
namespace: servicenow
baseUri: "https://walmart.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: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Looks up an Okta user by login email and returns their profile, status, and group memberships.
naftiko: "0.5"
info:
label: "Okta User Profile Lookup"
description: "Looks up an Okta user by login email and returns their profile, status, and group memberships."
tags:
- security
- okta
- identity
capability:
exposes:
- type: mcp
namespace: identity
port: 8080
tools:
- name: get-user-profile
description: "Given an Okta user login email, return the user profile, account status, and last login time. Use for identity verification and access management."
inputParameters:
- name: user_login
in: body
type: string
description: "User login email address."
call: okta.get-user
with:
user_login: "{{user_login}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: display_name
type: string
mapping: "$.profile.displayName"
consumes:
- type: http
namespace: okta
baseUri: "https://walmart.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_token"
resources:
- name: users
path: "/users/{{user_login}}"
inputParameters:
- name: user_login
in: path
operations:
- name: get-user
method: GET
Retrieves the current on-call engineer for a PagerDuty schedule.
naftiko: "0.5"
info:
label: "PagerDuty On-Call Schedule Lookup"
description: "Retrieves the current on-call engineer for a PagerDuty schedule."
tags:
- operations
- pagerduty
- on-call
capability:
exposes:
- type: mcp
namespace: operations
port: 8080
tools:
- name: get-oncall
description: "Given a PagerDuty schedule ID, return the current on-call user name, email, and shift end time. Use for incident escalation routing."
inputParameters:
- name: schedule_id
in: body
type: string
description: "PagerDuty schedule ID."
call: pagerduty.get-oncall
with:
schedule_id: "{{schedule_id}}"
outputParameters:
- name: user_name
type: string
mapping: "$.schedule.final_schedule.rendered_schedule_entries[0].user.summary"
- name: user_email
type: string
mapping: "$.schedule.final_schedule.rendered_schedule_entries[0].user.email"
consumes:
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: schedules
path: "/schedules/{{schedule_id}}"
inputParameters:
- name: schedule_id
in: path
operations:
- name: get-oncall
method: GET
Looks up prescription fulfillment status in SAP, updates the customer case in Salesforce, and sends a patient notification via Microsoft Teams.
naftiko: "0.5"
info:
label: "Pharmacy Prescription Fulfillment Tracker"
description: "Looks up prescription fulfillment status in SAP, updates the customer case in Salesforce, and sends a patient notification via Microsoft Teams."
tags:
- pharmacy
- sap
- salesforce
- microsoft-teams
- healthcare
capability:
exposes:
- type: mcp
namespace: pharmacy-ops
port: 8080
tools:
- name: track-prescription
description: "Given a prescription ID and Salesforce case ID, look up fulfillment status in SAP, update the case, and notify the pharmacy team. Use for prescription inquiry resolution."
inputParameters:
- name: prescription_id
in: body
type: string
description: "Pharmacy prescription ID."
- name: case_id
in: body
type: string
description: "Salesforce case ID."
- name: store_number
in: body
type: string
description: "Store number."
steps:
- name: get-fulfillment-status
type: call
call: sap.get-prescription
with:
prescription_id: "{{prescription_id}}"
- name: update-case
type: call
call: salesforce.update-case
with:
case_id: "{{case_id}}"
comment: "Prescription {{prescription_id}} status: {{get-fulfillment-status.status}}. Ready at Store {{store_number}}: {{get-fulfillment-status.ready_date}}."
- name: notify-pharmacy
type: call
call: msteams.send-channel-message
with:
team_id: pharmacy-ops
channel: store-{{store_number}}
text: "Prescription {{prescription_id}} update: {{get-fulfillment-status.status}}. Case: {{case_id}}."
consumes:
- type: http
namespace: sap
baseUri: "https://walmart-s4.sap.com/sap/opu/odata/sap/API_PHARMACY_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: prescriptions
path: "/A_Prescription('{{prescription_id}}')"
inputParameters:
- name: prescription_id
in: path
operations:
- name: get-prescription
method: GET
- type: http
namespace: salesforce
baseUri: "https://walmart.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: update-case
method: PATCH
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel
in: path
operations:
- name: send-channel-message
method: POST
Checks the latest refresh status for a Power BI dataset including start time, end time, and result.
naftiko: "0.5"
info:
label: "Power BI Dataset Refresh Status"
description: "Checks the latest refresh status for a Power BI dataset including start time, end time, and result."
tags:
- analytics
- power-bi
- reporting
capability:
exposes:
- type: mcp
namespace: analytics
port: 8080
tools:
- name: get-refresh-status
description: "Given a Power BI dataset ID, return the latest refresh status, start time, end time, and any error messages. Use for BI pipeline monitoring."
inputParameters:
- name: dataset_id
in: body
type: string
description: "Power BI dataset GUID."
call: power-bi.get-refresh
with:
dataset_id: "{{dataset_id}}"
outputParameters:
- name: status
type: string
mapping: "$.value[0].status"
- name: start_time
type: string
mapping: "$.value[0].startTime"
consumes:
- type: http
namespace: power-bi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets/{{dataset_id}}/refreshes?$top=1"
inputParameters:
- name: dataset_id
in: path
operations:
- name: get-refresh
method: GET
Triggers a Power BI dataset refresh for a specified workspace and dataset, then posts the refresh status to the analytics Slack channel.
naftiko: "0.5"
info:
label: "Power BI Report Refresh Trigger"
description: "Triggers a Power BI dataset refresh for a specified workspace and dataset, then posts the refresh status to the analytics Slack channel."
tags:
- data
- analytics
- power-bi
- slack
- reporting
capability:
exposes:
- type: mcp
namespace: bi-reporting
port: 8080
tools:
- name: trigger-report-refresh
description: "Given a Power BI workspace ID and dataset ID, trigger a dataset refresh and post the result to the analytics Slack channel. Use to refresh dashboards after ETL completion."
inputParameters:
- name: workspace_id
in: body
type: string
description: "Power BI workspace (group) ID containing the dataset."
- name: dataset_id
in: body
type: string
description: "Power BI dataset ID to refresh."
steps:
- name: refresh-dataset
type: call
call: powerbi.trigger-refresh
with:
group_id: "{{workspace_id}}"
dataset_id: "{{dataset_id}}"
- name: notify-analytics
type: call
call: slack-analytics.post-message
with:
channel: "analytics-ops"
text: "Power BI dataset refresh triggered for dataset {{dataset_id}} in workspace {{workspace_id}}. Status: {{refresh-dataset.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: "/groups/{{group_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: group_id
in: path
- name: dataset_id
in: path
operations:
- name: trigger-refresh
method: POST
- type: http
namespace: slack-analytics
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a product recall is initiated, queries SAP for affected stores, creates a Salesforce case for tracking, and broadcasts the recall to store managers via Microsoft Teams.
naftiko: "0.5"
info:
label: "Product Recall Notification Orchestrator"
description: "When a product recall is initiated, queries SAP for affected stores, creates a Salesforce case for tracking, and broadcasts the recall to store managers via Microsoft Teams."
tags:
- compliance
- sap
- salesforce
- microsoft-teams
- product-safety
capability:
exposes:
- type: mcp
namespace: product-safety
port: 8080
tools:
- name: process-product-recall
description: "Given a material number and recall reason, find affected stores in SAP, create a Salesforce tracking case, and notify store managers. Use when product safety recalls are issued."
inputParameters:
- name: material_number
in: body
type: string
description: "SAP material number of the recalled product."
- name: recall_reason
in: body
type: string
description: "Reason for the recall."
steps:
- name: get-affected-stores
type: call
call: sap.get-stock-by-plant
with:
material_number: "{{material_number}}"
- name: create-recall-case
type: call
call: salesforce.create-case
with:
subject: "Product recall: {{material_number}}"
description: "{{recall_reason}}. Affected stores: {{get-affected-stores.plant_count}}."
priority: Critical
- name: notify-store-managers
type: call
call: msteams.send-channel-message
with:
team_id: store-managers
channel: recalls
text: "PRODUCT RECALL: Material {{material_number}}. Reason: {{recall_reason}}. {{get-affected-stores.plant_count}} stores affected. Pull from shelves immediately. Case: {{create-recall-case.case_number}}."
consumes:
- type: http
namespace: sap
baseUri: "https://walmart-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?$filter=Material eq '{{material_number}}'"
inputParameters:
- name: material_number
in: query
operations:
- name: get-stock-by-plant
method: GET
- type: http
namespace: salesforce
baseUri: "https://walmart.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/sobjects/Case"
operations:
- name: create-case
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel
in: path
operations:
- name: send-channel-message
method: POST
Queries Snowflake for compliance metrics, generates a report in SharePoint, and distributes it to the compliance team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Quarterly Compliance Audit Report Generator"
description: "Queries Snowflake for compliance metrics, generates a report in SharePoint, and distributes it to the compliance team via Microsoft Teams."
tags:
- compliance
- snowflake
- sharepoint
- microsoft-teams
- reporting
capability:
exposes:
- type: mcp
namespace: compliance
port: 8080
tools:
- name: generate-compliance-report
description: "Given a fiscal quarter and year, query compliance metrics from Snowflake, create a SharePoint report, and notify the compliance team. Use for quarterly SOX and regulatory reviews."
inputParameters:
- name: fiscal_quarter
in: body
type: string
description: "Fiscal quarter (e.g. Q1, Q2, Q3, Q4)."
- name: fiscal_year
in: body
type: string
description: "Fiscal year (e.g. 2026)."
steps:
- name: query-metrics
type: call
call: snowflake.execute-statement
with:
statement: "SELECT control_area, pass_count, fail_count, pass_rate FROM COMPLIANCE.QUARTERLY_METRICS WHERE fiscal_quarter = '{{fiscal_quarter}}' AND fiscal_year = '{{fiscal_year}}'"
- name: create-report
type: call
call: sharepoint.create-document
with:
site: "compliance-docs"
name: "Compliance-Report-{{fiscal_quarter}}-{{fiscal_year}}.xlsx"
data: "{{query-metrics.results}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: compliance-team
channel: general
text: "Quarterly compliance report for {{fiscal_quarter}} {{fiscal_year}} is available: {{create-report.web_url}}."
consumes:
- type: http
namespace: snowflake
baseUri: "https://walmart.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: documents
path: "/sites/walmart.sharepoint.com/drive/root:/{{name}}:/content"
inputParameters:
- name: name
in: path
operations:
- name: create-document
method: PUT
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel
in: path
operations:
- name: send-channel-message
method: POST
Retrieves a Salesforce account by ID and returns company name, industry, annual revenue, and account owner.
naftiko: "0.5"
info:
label: "Salesforce Account Lookup"
description: "Retrieves a Salesforce account by ID and returns company name, industry, annual revenue, and account owner."
tags:
- sales
- salesforce
- account
capability:
exposes:
- type: mcp
namespace: sales
port: 8080
tools:
- name: get-account
description: "Given a Salesforce account ID, return the company name, industry, annual revenue, and account owner. Use for sales team account reviews."
inputParameters:
- name: account_id
in: body
type: string
description: "Salesforce 18-character account ID."
call: salesforce.get-account
with:
account_id: "{{account_id}}"
outputParameters:
- name: name
type: string
mapping: "$.Name"
- name: industry
type: string
mapping: "$.Industry"
- name: annual_revenue
type: string
mapping: "$.AnnualRevenue"
consumes:
- type: http
namespace: salesforce
baseUri: "https://walmart.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 service case is escalated to priority 1, creates a linked ServiceNow incident and notifies the customer success Slack channel with full case context.
naftiko: "0.5"
info:
label: "Salesforce Case Escalation to ServiceNow"
description: "When a Salesforce service case is escalated to priority 1, creates a linked ServiceNow incident and notifies the customer success Slack channel with full case context."
tags:
- customer-support
- salesforce
- servicenow
- slack
- escalation
capability:
exposes:
- type: mcp
namespace: customer-support
port: 8080
tools:
- name: escalate-salesforce-case
description: "Given a Salesforce case ID, retrieve case details, create a linked ServiceNow P1 incident, and notify the customer-success Slack channel. Invoke when a Salesforce case priority is set to Critical."
inputParameters:
- name: case_id
in: body
type: string
description: "Salesforce case ID to escalate (18-character ID)."
steps:
- name: get-case
type: call
call: salesforce-cases.get-case
with:
case_id: "{{case_id}}"
- name: create-incident
type: call
call: servicenow-support.create-incident
with:
category: customer_support
impact: 1
urgency: 1
short_description: "Escalated case: {{get-case.subject}}"
description: "Salesforce case {{case_id}}: {{get-case.description}}\nAccount: {{get-case.account_name}}\nContact: {{get-case.contact_name}}"
- name: notify-cs
type: call
call: slack-cs.post-message
with:
channel: "customer-success"
text: "P1 case escalated: {{get-case.subject}} | Account: {{get-case.account_name}} | ServiceNow: {{create-incident.number}} | Salesforce: {{case_id}}"
consumes:
- type: http
namespace: salesforce-cases
baseUri: "https://walmart.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: servicenow-support
baseUri: "https://walmart.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: slack-cs
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Converts a qualified Salesforce lead into an opportunity, enriches it with Snowflake account intelligence, and notifies the assigned sales rep via Slack.
naftiko: "0.5"
info:
label: "Salesforce Lead-to-Opportunity Sync"
description: "Converts a qualified Salesforce lead into an opportunity, enriches it with Snowflake account intelligence, and notifies the assigned sales rep via Slack."
tags:
- sales
- crm
- salesforce
- snowflake
- slack
capability:
exposes:
- type: mcp
namespace: crm-sales
port: 8080
tools:
- name: convert-lead-to-opportunity
description: "Given a Salesforce lead ID, convert it to an opportunity, enrich with Snowflake account data, and notify the assigned rep in Slack. Use when a lead reaches the qualified stage."
inputParameters:
- name: lead_id
in: body
type: string
description: "Salesforce lead ID to convert (18-character Salesforce ID)."
- name: opportunity_stage
in: body
type: string
description: "Initial opportunity stage (e.g. Prospecting, Qualification)."
steps:
- name: get-lead
type: call
call: salesforce-leads.get-lead
with:
lead_id: "{{lead_id}}"
- name: create-opportunity
type: call
call: salesforce-opps.create-opportunity
with:
name: "{{get-lead.company}} — {{get-lead.last_name}}"
stage: "{{opportunity_stage}}"
account_id: "{{get-lead.converted_account_id}}"
- name: notify-rep
type: call
call: slack-sales.post-message
with:
channel: "sales-notifications"
text: "New opportunity created: {{create-opportunity.name}} ({{create-opportunity.id}}). Owner: {{get-lead.owner_name}}."
consumes:
- type: http
namespace: salesforce-leads
baseUri: "https://walmart.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: leads
path: "/sobjects/Lead/{{lead_id}}"
inputParameters:
- name: lead_id
in: path
operations:
- name: get-lead
method: GET
- type: http
namespace: salesforce-opps
baseUri: "https://walmart.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity"
operations:
- name: create-opportunity
method: POST
- type: http
namespace: slack-sales
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a Salesforce opportunity is closed-won, creates a corresponding sales order in SAP and sends a confirmation to the account owner via Microsoft Teams.
naftiko: "0.5"
info:
label: "Salesforce Opportunity Close to SAP Order"
description: "When a Salesforce opportunity is closed-won, creates a corresponding sales order in SAP and sends a confirmation to the account owner via Microsoft Teams."
tags:
- sales
- salesforce
- sap
- microsoft-teams
- order-management
capability:
exposes:
- type: mcp
namespace: sales-ops
port: 8080
tools:
- name: sync-closed-opportunity
description: "Given a Salesforce opportunity ID, fetch the closed-won deal details, create a SAP sales order, and notify the account owner in Teams. Use when deals close to trigger downstream fulfillment."
inputParameters:
- name: opportunity_id
in: body
type: string
description: "Salesforce opportunity ID."
steps:
- name: get-opportunity
type: call
call: salesforce.get-opportunity
with:
opportunity_id: "{{opportunity_id}}"
- name: create-sales-order
type: call
call: sap.create-order
with:
customer_id: "{{get-opportunity.account_id}}"
amount: "{{get-opportunity.amount}}"
currency: "{{get-opportunity.currency}}"
- name: notify-owner
type: call
call: msteams.send-message
with:
recipient_upn: "{{get-opportunity.owner_email}}"
text: "Deal {{get-opportunity.name}} closed! SAP order {{create-sales-order.order_number}} created for {{get-opportunity.amount}} {{get-opportunity.currency}}."
consumes:
- type: http
namespace: salesforce
baseUri: "https://walmart.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://walmart-s4.sap.com/sap/opu/odata/sap/API_SALES_ORDER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: sales-orders
path: "/A_SalesOrder"
operations:
- name: create-order
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chats
path: "/users/{{recipient_upn}}/chats"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
When an SAP Ariba RFQ response period closes, compiles bid summaries into Snowflake, creates a Jira evaluation task, and notifies the sourcing team via Slack.
naftiko: "0.5"
info:
label: "SAP Ariba RFQ Evaluation Workflow"
description: "When an SAP Ariba RFQ response period closes, compiles bid summaries into Snowflake, creates a Jira evaluation task, and notifies the sourcing team via Slack."
tags:
- procurement
- sap-ariba
- snowflake
- jira
- slack
- sourcing
capability:
exposes:
- type: mcp
namespace: sourcing
port: 8080
tools:
- name: evaluate-rfq-responses
description: "Given an Ariba RFQ event ID, compile bid data, create an evaluation task, and notify sourcing. Use when RFQ response periods close."
inputParameters:
- name: rfq_event_id
in: body
type: string
description: "SAP Ariba sourcing event ID."
steps:
- name: get-bids
type: call
call: ariba.get-event-bids
with:
event_id: "{{rfq_event_id}}"
- name: load-bids
type: call
call: snowflake.execute-statement
with:
statement: "INSERT INTO PROCUREMENT.RFQ_BIDS (event_id, supplier_count, avg_bid, lowest_bid) VALUES ('{{rfq_event_id}}', {{get-bids.supplier_count}}, {{get-bids.avg_bid}}, {{get-bids.lowest_bid}})"
- name: create-evaluation-task
type: call
call: jira.create-issue
with:
project: PROC
issue_type: Task
summary: "RFQ evaluation: {{rfq_event_id}} — {{get-bids.supplier_count}} bids received"
- name: notify-sourcing
type: call
call: slack.post-message
with:
channel: "sourcing-team"
text: "RFQ {{rfq_event_id}} closed: {{get-bids.supplier_count}} bids. Lowest: ${{get-bids.lowest_bid}}. Evaluation task: {{create-evaluation-task.key}}."
consumes:
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/sourcing/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: events
path: "/events/{{event_id}}/bids"
inputParameters:
- name: event_id
in: path
operations:
- name: get-event-bids
method: GET
- type: http
namespace: snowflake
baseUri: "https://walmart.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: jira
baseUri: "https://walmart.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: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a SAP delivery is delayed past threshold, creates a ServiceNow incident and notifies the logistics team via Slack with alternative routing options.
naftiko: "0.5"
info:
label: "SAP Delivery Delay Escalation"
description: "When a SAP delivery is delayed past threshold, creates a ServiceNow incident and notifies the logistics team via Slack with alternative routing options."
tags:
- logistics
- sap
- servicenow
- slack
- supply-chain
capability:
exposes:
- type: mcp
namespace: logistics
port: 8080
tools:
- name: escalate-delivery-delay
description: "Given a SAP delivery number, check the delay duration, create a ServiceNow incident, and alert logistics. Use when deliveries exceed SLA thresholds."
inputParameters:
- name: delivery_number
in: body
type: string
description: "SAP delivery document number."
steps:
- name: get-delivery
type: call
call: sap.get-delivery
with:
delivery_number: "{{delivery_number}}"
- name: create-incident
type: call
call: servicenow.create-incident
with:
category: logistics
urgency: 2
short_description: "Delivery delay: {{delivery_number}} — {{get-delivery.delay_days}} days late"
description: "Destination: {{get-delivery.ship_to}}. Original ETA: {{get-delivery.planned_date}}. Carrier: {{get-delivery.carrier}}."
- name: notify-logistics
type: call
call: slack.post-message
with:
channel: "logistics-ops"
text: "Delivery {{delivery_number}} delayed {{get-delivery.delay_days}} days. Carrier: {{get-delivery.carrier}}. Incident: {{create-incident.number}}."
consumes:
- type: http
namespace: sap
baseUri: "https://walmart-s4.sap.com/sap/opu/odata/sap/API_OUTBOUND_DELIVERY_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: deliveries
path: "/A_OutbDeliveryHeader('{{delivery_number}}')"
inputParameters:
- name: delivery_number
in: path
operations:
- name: get-delivery
method: GET
- type: http
namespace: servicenow
baseUri: "https://walmart.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: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Queries SAP for period-close task status, aggregates results in Snowflake, and posts a readiness summary to the finance Microsoft Teams channel.
naftiko: "0.5"
info:
label: "SAP Financial Close Readiness Dashboard"
description: "Queries SAP for period-close task status, aggregates results in Snowflake, and posts a readiness summary to the finance Microsoft Teams channel."
tags:
- finance
- sap
- snowflake
- microsoft-teams
- period-close
capability:
exposes:
- type: mcp
namespace: finance-ops
port: 8080
tools:
- name: check-close-readiness
description: "Given a fiscal period and company code, query SAP close tasks, aggregate in Snowflake, and post a readiness report. Use during month-end and quarter-end close cycles."
inputParameters:
- name: fiscal_period
in: body
type: string
description: "Fiscal period (e.g. 2026-03)."
- name: company_code
in: body
type: string
description: "SAP company code."
steps:
- name: get-close-tasks
type: call
call: sap.get-close-tasks
with:
fiscal_period: "{{fiscal_period}}"
company_code: "{{company_code}}"
- name: aggregate-status
type: call
call: snowflake.execute-statement
with:
statement: "SELECT task_category, COUNT(*) as total, SUM(CASE WHEN status='COMPLETE' THEN 1 ELSE 0 END) as completed FROM FINANCE.CLOSE_TASKS WHERE fiscal_period = '{{fiscal_period}}' AND company_code = '{{company_code}}' GROUP BY task_category"
- name: post-readiness
type: call
call: msteams.send-channel-message
with:
team_id: finance-team
channel: period-close
text: "Close readiness for {{fiscal_period}} ({{company_code}}): {{aggregate-status.results}}. Overall completion: {{aggregate-status.completion_pct}}%."
consumes:
- type: http
namespace: sap
baseUri: "https://walmart-s4.sap.com/sap/opu/odata/sap/API_FINANCIALPERIODCLOSE"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: close-tasks
path: "/A_FinPeriodCloseTask"
operations:
- name: get-close-tasks
method: GET
- type: http
namespace: snowflake
baseUri: "https://walmart.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel
in: path
operations:
- name: send-channel-message
method: POST
When a goods receipt is posted in SAP, updates the Snowflake inventory table and notifies the warehouse Slack channel of the stock adjustment.
naftiko: "0.5"
info:
label: "SAP Goods Receipt to Inventory Update"
description: "When a goods receipt is posted in SAP, updates the Snowflake inventory table and notifies the warehouse Slack channel of the stock adjustment."
tags:
- supply-chain
- sap
- snowflake
- slack
- inventory
capability:
exposes:
- type: mcp
namespace: warehouse-ops
port: 8080
tools:
- name: process-goods-receipt
description: "Given a SAP goods receipt document number, fetch receipt details from SAP, update the Snowflake inventory snapshot, and notify the warehouse team via Slack. Use when new shipments arrive at distribution centers."
inputParameters:
- name: gr_document
in: body
type: string
description: "SAP goods receipt document number."
- name: dc_code
in: body
type: string
description: "Distribution center code."
steps:
- name: get-receipt
type: call
call: sap.get-goods-receipt
with:
gr_document: "{{gr_document}}"
- name: update-inventory
type: call
call: snowflake.execute-statement
with:
statement: "UPDATE SUPPLY_CHAIN.INVENTORY SET on_hand_qty = on_hand_qty + {{get-receipt.quantity}} WHERE sku = '{{get-receipt.material}}' AND dc_code = '{{dc_code}}'"
- name: notify-warehouse
type: call
call: slack.post-message
with:
channel: "warehouse-{{dc_code}}"
text: "Goods receipt {{gr_document}} processed: {{get-receipt.quantity}} units of {{get-receipt.material}} received at DC {{dc_code}}."
consumes:
- type: http
namespace: sap
baseUri: "https://walmart-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_DOCUMENT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: material-documents
path: "/A_MaterialDocumentHeader('{{gr_document}}')"
inputParameters:
- name: gr_document
in: path
operations:
- name: get-goods-receipt
method: GET
- type: http
namespace: snowflake
baseUri: "https://walmart.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Validates a SAP supplier invoice against the purchase order and goods receipt, logs discrepancies in Snowflake, and escalates mismatches to the AP team via Slack.
naftiko: "0.5"
info:
label: "SAP Invoice Three-Way Match Validator"
description: "Validates a SAP supplier invoice against the purchase order and goods receipt, logs discrepancies in Snowflake, and escalates mismatches to the AP team via Slack."
tags:
- finance
- sap
- snowflake
- slack
- accounts-payable
capability:
exposes:
- type: mcp
namespace: ap-ops
port: 8080
tools:
- name: validate-three-way-match
description: "Given a SAP invoice number, validate against PO and GR, log results in Snowflake, and escalate mismatches. Use for accounts payable processing."
inputParameters:
- name: invoice_number
in: body
type: string
description: "SAP invoice document number."
steps:
- name: get-invoice
type: call
call: sap.get-invoice
with:
invoice_number: "{{invoice_number}}"
- name: get-po
type: call
call: sap.get-po
with:
po_number: "{{get-invoice.po_number}}"
- name: log-match-result
type: call
call: snowflake.execute-statement
with:
statement: "INSERT INTO FINANCE.THREE_WAY_MATCH_LOG (invoice_number, po_number, match_status, variance) VALUES ('{{invoice_number}}', '{{get-invoice.po_number}}', '{{get-invoice.match_status}}', {{get-invoice.variance_amount}})"
- name: escalate-mismatch
type: call
call: slack.post-message
with:
channel: "accounts-payable"
text: "Three-way match result for invoice {{invoice_number}}: {{get-invoice.match_status}}. PO: {{get-invoice.po_number}}. Variance: {{get-invoice.variance_amount}}."
consumes:
- type: http
namespace: sap
baseUri: "https://walmart-s4.sap.com/sap/opu/odata/sap/API_SUPPLIERINVOICE_PROCESS_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: invoices
path: "/A_SupplierInvoice('{{invoice_number}}')"
inputParameters:
- name: invoice_number
in: path
operations:
- name: get-invoice
method: GET
- name: purchase-orders
path: "/A_PurchaseOrder('{{po_number}}')"
inputParameters:
- name: po_number
in: path
operations:
- name: get-po
method: GET
- type: http
namespace: snowflake
baseUri: "https://walmart.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Retrieves SAP material master data by material number including description, unit of measure, and material group.
naftiko: "0.5"
info:
label: "SAP Material Master Lookup"
description: "Retrieves SAP material master data by material number including description, unit of measure, and material group."
tags:
- supply-chain
- sap
- material
capability:
exposes:
- type: mcp
namespace: supply-chain
port: 8080
tools:
- name: get-material
description: "Given a SAP material number, return the material description, base unit of measure, material group, and gross weight. Use for product data lookups."
inputParameters:
- name: material_number
in: body
type: string
description: "SAP material number."
call: sap-product.get-material
with:
material_number: "{{material_number}}"
outputParameters:
- name: description
type: string
mapping: "$.d.ProductDescription"
- name: base_unit
type: string
mapping: "$.d.BaseUnit"
- name: material_group
type: string
mapping: "$.d.ProductGroup"
consumes:
- type: http
namespace: sap-product
baseUri: "https://walmart-s4.sap.com/sap/opu/odata/sap/API_PRODUCT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: products
path: "/A_Product('{{material_number}}')"
inputParameters:
- name: material_number
in: path
operations:
- name: get-material
method: GET
Queries SAP for open items that would block period close, posts a readiness checklist to the finance Slack channel, and creates a ServiceNow task for each blocking item found.
naftiko: "0.5"
info:
label: "SAP Period Close Readiness Check"
description: "Queries SAP for open items that would block period close, posts a readiness checklist to the finance Slack channel, and creates a ServiceNow task for each blocking item found."
tags:
- finance
- sap
- servicenow
- slack
- period-close
capability:
exposes:
- type: mcp
namespace: finance-close
port: 8080
tools:
- name: check-period-close-readiness
description: "Given a SAP company code and fiscal period, check for open purchase orders, unposted journals, and GR/IR mismatches that block period close. Create ServiceNow tasks for blockers and post a readiness summary to the finance Slack channel."
inputParameters:
- name: company_code
in: body
type: string
description: "SAP company code (e.g. 1000 for Walmart US)."
- name: fiscal_period
in: body
type: string
description: "Fiscal period in YYYYMM format (e.g. 202503)."
steps:
- name: check-open-items
type: call
call: sap-close.get-open-items
with:
company_code: "{{company_code}}"
fiscal_period: "{{fiscal_period}}"
- name: create-blocker-task
type: call
call: servicenow-finance.create-task
with:
category: finance_period_close
short_description: "Period close blocker: {{company_code}} — {{fiscal_period}}"
description: "Open items found preventing period close: {{check-open-items.open_count}} items totaling {{check-open-items.total_amount}}"
- name: post-readiness-summary
type: call
call: slack-finance.post-message
with:
channel: "finance-close"
text: "Period close readiness for {{company_code}} / {{fiscal_period}}: {{check-open-items.open_count}} blocking items. ServiceNow: {{create-blocker-task.number}}"
consumes:
- type: http
namespace: sap-close
baseUri: "https://walmart-s4.sap.com/sap/opu/odata/sap/ZFI_PERIOD_CLOSE_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: open-items
path: "/OpenItemSet"
inputParameters:
- name: company_code
in: query
- name: fiscal_period
in: query
operations:
- name: get-open-items
method: GET
- type: http
namespace: servicenow-finance
baseUri: "https://walmart.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: slack-finance
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Creates a SAP plant maintenance work order, assigns it to the facilities team in ServiceNow, and sends notification to the building operations Microsoft Teams channel.
naftiko: "0.5"
info:
label: "SAP Plant Maintenance Work Order"
description: "Creates a SAP plant maintenance work order, assigns it to the facilities team in ServiceNow, and sends notification to the building operations Microsoft Teams channel."
tags:
- facilities
- sap
- servicenow
- microsoft-teams
- maintenance
capability:
exposes:
- type: mcp
namespace: facilities
port: 8080
tools:
- name: create-maintenance-order
description: "Given equipment ID, issue type, and store number, create a SAP maintenance order, a ServiceNow task, and notify building ops. Use for store equipment maintenance requests."
inputParameters:
- name: equipment_id
in: body
type: string
description: "SAP equipment ID."
- name: issue_type
in: body
type: string
description: "Maintenance issue type (e.g. HVAC, electrical, plumbing)."
- name: store_number
in: body
type: string
description: "Store number."
steps:
- name: create-work-order
type: call
call: sap.create-maintenance-order
with:
equipment: "{{equipment_id}}"
order_type: "{{issue_type}}"
plant: "{{store_number}}"
- name: create-task
type: call
call: servicenow.create-task
with:
category: facilities
short_description: "Maintenance: {{issue_type}} at Store {{store_number}}"
description: "SAP work order: {{create-work-order.order_number}}. Equipment: {{equipment_id}}."
- name: notify-building-ops
type: call
call: msteams.send-channel-message
with:
team_id: building-operations
channel: maintenance
text: "Maintenance order created for Store {{store_number}}: {{issue_type}}. SAP: {{create-work-order.order_number}}. ServiceNow: {{create-task.number}}."
consumes:
- type: http
namespace: sap
baseUri: "https://walmart-s4.sap.com/sap/opu/odata/sap/API_MAINTENANCEORDER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: orders
path: "/MaintenanceOrder"
operations:
- name: create-maintenance-order
method: POST
- type: http
namespace: servicenow
baseUri: "https://walmart.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/task"
operations:
- name: create-task
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel
in: path
operations:
- name: send-channel-message
method: POST
Looks up a SAP purchase order by PO number and returns header status, supplier name, total value, and open line items for procurement review.
naftiko: "0.5"
info:
label: "SAP Purchase Order Lookup"
description: "Looks up a SAP purchase order by PO number and returns header status, supplier name, total value, and open line items for procurement review."
tags:
- procurement
- finance
- sap
- purchase-order
capability:
exposes:
- type: mcp
namespace: procurement
port: 8080
tools:
- name: get-purchase-order
description: "Given a SAP PO number, return header status, supplier details, total value, currency, and open line items. Use for procurement tracking and accounts payable review."
inputParameters:
- name: po_number
in: body
type: string
description: "SAP purchase order number (e.g. 4500012345)."
call: sap.get-po
with:
po_number: "{{po_number}}"
outputParameters:
- name: status
type: string
mapping: "$.d.OverallStatus"
- name: supplier
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://walmart-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
Retrieves vendor master data from SAP by vendor number including name, payment terms, and account group.
naftiko: "0.5"
info:
label: "SAP Vendor Master Lookup"
description: "Retrieves vendor master data from SAP by vendor number including name, payment terms, and account group."
tags:
- procurement
- sap
- vendor
capability:
exposes:
- type: mcp
namespace: procurement
port: 8080
tools:
- name: get-vendor
description: "Given a SAP vendor number, return the vendor name, payment terms, account group, and address. Use for supplier verification during procurement."
inputParameters:
- name: vendor_id
in: body
type: string
description: "SAP vendor number (e.g. 0001000100)."
call: sap.get-vendor
with:
vendor_id: "{{vendor_id}}"
outputParameters:
- name: vendor_name
type: string
mapping: "$.d.SupplierName"
- name: payment_terms
type: string
mapping: "$.d.PaymentTerms"
consumes:
- type: http
namespace: sap
baseUri: "https://walmart-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_id}}')"
inputParameters:
- name: vendor_id
in: path
operations:
- name: get-vendor
method: GET
Queries Snowflake for historical seasonal demand patterns, creates job requisitions in Workday for peak staffing, and notifies regional HR via Microsoft Teams.
naftiko: "0.5"
info:
label: "Seasonal Workforce Planning Orchestrator"
description: "Queries Snowflake for historical seasonal demand patterns, creates job requisitions in Workday for peak staffing, and notifies regional HR via Microsoft Teams."
tags:
- hr
- workforce-planning
- snowflake
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: workforce-planning
port: 8080
tools:
- name: plan-seasonal-hiring
description: "Given a region and season, query historical demand from Snowflake, calculate staffing needs, create Workday requisitions, and notify HR. Use for seasonal workforce ramp-ups."
inputParameters:
- name: region
in: body
type: string
description: "Region code (e.g. US-SOUTH)."
- name: season
in: body
type: string
description: "Season name (e.g. holiday, back-to-school)."
steps:
- name: get-demand-forecast
type: call
call: snowflake.execute-statement
with:
statement: "SELECT store_id, AVG(peak_headcount) as avg_peak, MAX(peak_headcount) as max_peak FROM HR.SEASONAL_DEMAND WHERE region = '{{region}}' AND season = '{{season}}' GROUP BY store_id"
- name: create-requisitions
type: call
call: workday.create-requisition
with:
region: "{{region}}"
job_profile: "Seasonal Associate"
positions_needed: "{{get-demand-forecast.total_positions}}"
- name: notify-hr
type: call
call: msteams.send-channel-message
with:
team_id: regional-hr
channel: "{{region}}"
text: "Seasonal hiring plan for {{region}} ({{season}}): {{get-demand-forecast.total_positions}} positions needed. Requisitions created in Workday."
consumes:
- type: http
namespace: snowflake
baseUri: "https://walmart.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
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: "/walmart/jobRequisitions"
operations:
- name: create-requisition
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel
in: path
operations:
- name: send-channel-message
method: POST
When a GitHub security advisory is detected, creates a Jira remediation ticket, assigns it based on CODEOWNERS, and posts to the security Slack channel.
naftiko: "0.5"
info:
label: "Security Vulnerability Remediation Tracker"
description: "When a GitHub security advisory is detected, creates a Jira remediation ticket, assigns it based on CODEOWNERS, and posts to the security Slack channel."
tags:
- security
- github
- jira
- slack
- vulnerability
capability:
exposes:
- type: mcp
namespace: security-ops
port: 8080
tools:
- name: track-vulnerability-remediation
description: "Given a GitHub repository and advisory ID, fetch advisory details, create a Jira ticket, and notify the security channel. Use when Dependabot or CodeQL alerts fire."
inputParameters:
- name: repo_name
in: body
type: string
description: "GitHub repository in org/repo format."
- name: advisory_id
in: body
type: string
description: "GitHub security advisory ID."
steps:
- name: get-advisory
type: call
call: github.get-advisory
with:
repo_name: "{{repo_name}}"
advisory_id: "{{advisory_id}}"
- name: create-remediation-ticket
type: call
call: jira.create-issue
with:
project: SEC
issue_type: Bug
summary: "Security: {{get-advisory.severity}} — {{get-advisory.summary}} in {{repo_name}}"
description: "Advisory: {{advisory_id}}. CVE: {{get-advisory.cve_id}}. Affected package: {{get-advisory.package}}."
priority: "{{get-advisory.severity}}"
- name: notify-security
type: call
call: slack.post-message
with:
channel: "security-alerts"
text: "{{get-advisory.severity}} vulnerability in {{repo_name}}: {{get-advisory.summary}}. Jira: {{create-remediation-ticket.key}}."
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: advisories
path: "/repos/{{repo_name}}/security-advisories/{{advisory_id}}"
inputParameters:
- name: repo_name
in: path
- name: advisory_id
in: path
operations:
- name: get-advisory
method: GET
- type: http
namespace: jira
baseUri: "https://walmart.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: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Submits a ServiceNow change request for infrastructure changes, retrieves the approval status, and notifies the requester via Microsoft Teams when the change is approved or rejected.
naftiko: "0.5"
info:
label: "ServiceNow Change Management Approval"
description: "Submits a ServiceNow change request for infrastructure changes, retrieves the approval status, and notifies the requester via Microsoft Teams when the change is approved or rejected."
tags:
- itsm
- servicenow
- microsoft-teams
- change-management
- approval
capability:
exposes:
- type: mcp
namespace: change-management
port: 8080
tools:
- name: submit-change-request
description: "Given change details, submit a ServiceNow change request and notify the requester in Microsoft Teams when the approval decision is made. Use for planned infrastructure and application changes."
inputParameters:
- name: short_description
in: body
type: string
description: "Brief description of the proposed change."
- name: description
in: body
type: string
description: "Detailed description of the change, impact, and rollback plan."
- name: scheduled_start
in: body
type: string
description: "Scheduled start time for the change in ISO 8601 format."
- name: requester_upn
in: body
type: string
description: "Microsoft UPN of the change requester."
steps:
- name: create-change
type: call
call: servicenow-cr.create-change
with:
short_description: "{{short_description}}"
description: "{{description}}"
start_date: "{{scheduled_start}}"
type: normal
- name: notify-requester
type: call
call: msteams-change.send-message
with:
recipient_upn: "{{requester_upn}}"
text: "Your change request has been submitted. Change number: {{create-change.number}}. Scheduled: {{scheduled_start}}. Monitor status in ServiceNow."
consumes:
- type: http
namespace: servicenow-cr
baseUri: "https://walmart.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-change
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chats
path: "/users/{{upn}}/chats"
inputParameters:
- name: upn
in: path
operations:
- name: send-message
method: POST
Retrieves a ServiceNow incident by number and returns status, priority, assigned group, and resolution notes.
naftiko: "0.5"
info:
label: "ServiceNow Incident Lookup"
description: "Retrieves a ServiceNow incident by number and returns status, priority, assigned group, and resolution notes."
tags:
- itsm
- servicenow
- incident
capability:
exposes:
- type: mcp
namespace: itsm
port: 8080
tools:
- name: get-incident
description: "Given a ServiceNow incident number, return its current state, priority, assignment group, and resolution notes. Use for incident status checks."
inputParameters:
- name: incident_number
in: body
type: string
description: "ServiceNow incident number (e.g. INC0012345)."
call: servicenow.get-incident
with:
incident_number: "{{incident_number}}"
outputParameters:
- name: state
type: string
mapping: "$.result[0].state"
- name: priority
type: string
mapping: "$.result[0].priority"
- name: assigned_to
type: string
mapping: "$.result[0].assigned_to.display_value"
consumes:
- type: http
namespace: servicenow
baseUri: "https://walmart.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
When a ServiceNow incident approaches SLA breach, escalates to the manager, pages on-call via PagerDuty, and posts an alert to the operations Slack channel.
naftiko: "0.5"
info:
label: "ServiceNow SLA Breach Escalation"
description: "When a ServiceNow incident approaches SLA breach, escalates to the manager, pages on-call via PagerDuty, and posts an alert to the operations Slack channel."
tags:
- itsm
- servicenow
- pagerduty
- slack
- sla
capability:
exposes:
- type: mcp
namespace: sla-mgmt
port: 8080
tools:
- name: escalate-sla-breach
description: "Given a ServiceNow incident number, check SLA status, page on-call, and notify ops. Use when incidents are at risk of breaching SLA targets."
inputParameters:
- name: incident_number
in: body
type: string
description: "ServiceNow incident number."
steps:
- name: get-incident
type: call
call: servicenow.get-incident
with:
incident_number: "{{incident_number}}"
- name: page-oncall
type: call
call: pagerduty.create-incident
with:
service_id: "{{get-incident.assignment_group}}"
title: "SLA breach risk: {{incident_number}} — {{get-incident.short_description}}"
urgency: high
- name: notify-ops
type: call
call: slack.post-message
with:
channel: "ops-escalations"
text: "SLA breach imminent: {{incident_number}} ({{get-incident.priority}}). Time remaining: {{get-incident.sla_remaining}}. On-call paged."
consumes:
- type: http
namespace: servicenow
baseUri: "https://walmart.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
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Searches SharePoint for documents matching a keyword query and returns file names, paths, and last modified dates.
naftiko: "0.5"
info:
label: "SharePoint Document Search"
description: "Searches SharePoint for documents matching a keyword query and returns file names, paths, and last modified dates."
tags:
- knowledge
- sharepoint
- document-management
capability:
exposes:
- type: mcp
namespace: documents
port: 8080
tools:
- name: search-documents
description: "Given a search keyword, return matching SharePoint documents with file name, path, author, and last modified date. Use for document discovery and knowledge management."
inputParameters:
- name: search_query
in: body
type: string
description: "Keyword search query for SharePoint documents."
call: sharepoint.search-docs
with:
search_query: "{{search_query}}"
outputParameters:
- name: results
type: array
mapping: "$.value"
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: search
path: "/sites/walmart.sharepoint.com/drive/root/search(q='{{search_query}}')"
inputParameters:
- name: search_query
in: query
operations:
- name: search-docs
method: GET
Retrieves the last 20 messages from a Slack channel for quick context gathering.
naftiko: "0.5"
info:
label: "Slack Channel History Lookup"
description: "Retrieves the last 20 messages from a Slack channel for quick context gathering."
tags:
- communication
- slack
- messaging
capability:
exposes:
- type: mcp
namespace: messaging
port: 8080
tools:
- name: get-channel-history
description: "Given a Slack channel ID, return the last 20 messages including sender and timestamp. Use when summarizing recent channel activity."
inputParameters:
- name: channel_id
in: body
type: string
description: "Slack channel ID (e.g. C01ABCDEF)."
call: slack.get-history
with:
channel_id: "{{channel_id}}"
outputParameters:
- name: messages
type: array
mapping: "$.messages"
consumes:
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: conversations
path: "/conversations.history?channel={{channel_id}}&limit=20"
inputParameters:
- name: channel_id
in: query
operations:
- name: get-history
method: GET
Queries Snowflake for failed or stalled data pipeline jobs, posts a health summary to the data engineering Slack channel, and creates a Jira task for any failures.
naftiko: "0.5"
info:
label: "Snowflake Data Pipeline Health Check"
description: "Queries Snowflake for failed or stalled data pipeline jobs, posts a health summary to the data engineering Slack channel, and creates a Jira task for any failures."
tags:
- data
- analytics
- snowflake
- jira
- slack
- monitoring
capability:
exposes:
- type: mcp
namespace: data-ops
port: 8080
tools:
- name: check-pipeline-health
description: "Query Snowflake task history for failed or stalled jobs in the last N hours, create Jira tasks for failures, and post a health summary to the data-engineering Slack channel. Use for scheduled pipeline monitoring."
inputParameters:
- name: lookback_hours
in: body
type: integer
description: "Number of hours of task history to inspect (e.g. 24)."
- name: schema
in: body
type: string
description: "Snowflake schema to check pipeline health for (e.g. RETAIL.ETL)."
steps:
- name: query-task-history
type: call
call: snowflake-query.execute-statement
with:
statement: "SELECT name, state, error_message FROM TABLE(INFORMATION_SCHEMA.TASK_HISTORY(SCHEDULED_TIME_RANGE_START=>DATEADD('hour', -{{lookback_hours}}, CURRENT_TIMESTAMP()))) WHERE STATE = 'FAILED'"
- name: create-failure-task
type: call
call: jira-data.create-issue
with:
project_key: DATA
issuetype: Task
summary: "Pipeline failures detected in {{schema}} — last {{lookback_hours}}h"
description: "Snowflake task failures:\n{{query-task-history.results}}"
- name: post-health-summary
type: call
call: slack-data.post-message
with:
channel: "data-engineering"
text: "Pipeline health check for {{schema}}: {{query-task-history.row_count}} failures in last {{lookback_hours}}h. Jira: {{create-failure-task.key}}"
consumes:
- type: http
namespace: snowflake-query
baseUri: "https://walmart.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: jira-data
baseUri: "https://walmart.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack-data
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When Snowflake data quality checks fail, creates a Jira ticket for the data engineering team and posts the failure details to the data-ops Slack channel.
naftiko: "0.5"
info:
label: "Snowflake Data Quality Alert to Jira"
description: "When Snowflake data quality checks fail, creates a Jira ticket for the data engineering team and posts the failure details to the data-ops Slack channel."
tags:
- data-engineering
- snowflake
- jira
- slack
- data-quality
capability:
exposes:
- type: mcp
namespace: data-quality
port: 8080
tools:
- name: handle-dq-failure
description: "Given a Snowflake table name and check type, query the failure details, create a Jira ticket, and notify data ops. Use when scheduled data quality checks fail."
inputParameters:
- name: table_name
in: body
type: string
description: "Fully qualified Snowflake table name."
- name: check_type
in: body
type: string
description: "Data quality check type (e.g. null_check, freshness, row_count)."
steps:
- name: get-failure-details
type: call
call: snowflake.execute-statement
with:
statement: "SELECT check_name, expected_value, actual_value, checked_at FROM DATA_OPS.DQ_RESULTS WHERE table_name = '{{table_name}}' AND check_type = '{{check_type}}' AND status = 'FAIL' ORDER BY checked_at DESC LIMIT 5"
- name: create-ticket
type: call
call: jira.create-issue
with:
project: DATA
issue_type: Bug
summary: "DQ failure: {{check_type}} on {{table_name}}"
description: "Latest failures: {{get-failure-details.results}}."
- name: notify-data-ops
type: call
call: slack.post-message
with:
channel: "data-ops-alerts"
text: "Data quality {{check_type}} failed on {{table_name}}. Jira: {{create-ticket.key}}."
consumes:
- type: http
namespace: snowflake
baseUri: "https://walmart.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: jira
baseUri: "https://walmart.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: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a Snowflake task fails, queries the error details, creates a Jira ticket for the data engineering team, and alerts the data-ops Slack channel.
naftiko: "0.5"
info:
label: "Snowflake ETL Pipeline Failure Handler"
description: "When a Snowflake task fails, queries the error details, creates a Jira ticket for the data engineering team, and alerts the data-ops Slack channel."
tags:
- data-engineering
- snowflake
- jira
- slack
- etl
capability:
exposes:
- type: mcp
namespace: data-ops
port: 8080
tools:
- name: handle-etl-failure
description: "Given a Snowflake task name and run ID, query the error details, create a Jira ticket, and notify data ops. Use when scheduled ETL pipelines fail."
inputParameters:
- name: task_name
in: body
type: string
description: "Snowflake task fully qualified name."
- name: run_id
in: body
type: string
description: "Task run ID."
steps:
- name: get-error-details
type: call
call: snowflake.execute-statement
with:
statement: "SELECT error_code, error_message, query_text FROM TABLE(INFORMATION_SCHEMA.TASK_HISTORY(TASK_NAME=>'{{task_name}}', RESULT_LIMIT=>1)) WHERE state = 'FAILED'"
- name: create-ticket
type: call
call: jira.create-issue
with:
project: DATA
issue_type: Bug
summary: "ETL failure: {{task_name}}"
description: "Run ID: {{run_id}}. Error: {{get-error-details.error_message}}. Query: {{get-error-details.query_text}}."
- name: notify-data-ops
type: call
call: slack.post-message
with:
channel: "data-ops-alerts"
text: "ETL pipeline {{task_name}} failed. Error: {{get-error-details.error_message}}. Jira: {{create-ticket.key}}."
consumes:
- type: http
namespace: snowflake
baseUri: "https://walmart.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: jira
baseUri: "https://walmart.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: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Queries Snowflake for current inventory levels by SKU and distribution center.
naftiko: "0.5"
info:
label: "Snowflake Inventory Level Query"
description: "Queries Snowflake for current inventory levels by SKU and distribution center."
tags:
- supply-chain
- snowflake
- inventory
capability:
exposes:
- type: mcp
namespace: inventory
port: 8080
tools:
- name: query-inventory
description: "Given a SKU and distribution center code, return current on-hand quantity, in-transit units, and days-of-supply. Use for replenishment planning."
inputParameters:
- name: sku
in: body
type: string
description: "Product SKU identifier."
- name: dc_code
in: body
type: string
description: "Distribution center code."
call: snowflake.execute-query
with:
statement: "SELECT sku, on_hand_qty, in_transit_qty, days_of_supply FROM SUPPLY_CHAIN.INVENTORY WHERE sku = '{{sku}}' AND dc_code = '{{dc_code}}'"
outputParameters:
- name: on_hand_qty
type: integer
mapping: "$.data[0][1]"
- name: in_transit_qty
type: integer
mapping: "$.data[0][2]"
consumes:
- type: http
namespace: snowflake
baseUri: "https://walmart.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
Queries Snowflake for daily retail sales performance by store and department, then publishes the snapshot to the sales operations Slack channel for leadership review.
naftiko: "0.5"
info:
label: "Snowflake Retail Sales Snapshot"
description: "Queries Snowflake for daily retail sales performance by store and department, then publishes the snapshot to the sales operations Slack channel for leadership review."
tags:
- data
- analytics
- snowflake
- slack
- retail
- reporting
capability:
exposes:
- type: mcp
namespace: sales-reporting
port: 8080
tools:
- name: publish-sales-snapshot
description: "Given a reporting date and region, query Snowflake for daily sales totals by store and department and post a summary to the sales-ops Slack channel. Use for daily morning sales stand-ups."
inputParameters:
- name: report_date
in: body
type: string
description: "Sales date to report on in YYYY-MM-DD format."
- name: region
in: body
type: string
description: "Walmart region code (e.g. US-SOUTH, US-NORTH)."
steps:
- name: query-sales
type: call
call: snowflake-sales.execute-statement
with:
statement: "SELECT store_id, department, SUM(net_sales) as total_sales FROM RETAIL.DAILY_SALES WHERE sale_date = '{{report_date}}' AND region = '{{region}}' GROUP BY store_id, department ORDER BY total_sales DESC LIMIT 20"
- name: post-snapshot
type: call
call: slack-sales-ops.post-message
with:
channel: "sales-operations"
text: "Daily sales snapshot for {{region}} on {{report_date}}: Top {{query-sales.row_count}} store-department combos reported. Total: {{query-sales.grand_total}}."
consumes:
- type: http
namespace: snowflake-sales
baseUri: "https://walmart.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: slack-sales-ops
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When Splunk detects a log anomaly pattern, creates a ServiceNow incident with log context and notifies the security operations Slack channel.
naftiko: "0.5"
info:
label: "Splunk Log Anomaly to Incident"
description: "When Splunk detects a log anomaly pattern, creates a ServiceNow incident with log context and notifies the security operations Slack channel."
tags:
- security
- splunk
- servicenow
- slack
- logging
capability:
exposes:
- type: mcp
namespace: soc
port: 8080
tools:
- name: handle-log-anomaly
description: "Given a Splunk search ID and anomaly type, fetch log results, create a ServiceNow incident, and alert SecOps. Use when Splunk correlation rules trigger."
inputParameters:
- name: search_id
in: body
type: string
description: "Splunk search job ID."
- name: anomaly_type
in: body
type: string
description: "Type of anomaly detected."
steps:
- name: get-search-results
type: call
call: splunk.get-results
with:
search_id: "{{search_id}}"
- name: create-incident
type: call
call: servicenow.create-incident
with:
category: security
urgency: 2
short_description: "Log anomaly: {{anomaly_type}}"
description: "Splunk search {{search_id}} detected {{anomaly_type}}. Event count: {{get-search-results.event_count}}. Source: {{get-search-results.source}}."
- name: alert-secops
type: call
call: slack.post-message
with:
channel: "secops-alerts"
text: "Log anomaly detected: {{anomaly_type}}. Events: {{get-search-results.event_count}}. Incident: {{create-incident.number}}."
consumes:
- type: http
namespace: splunk
baseUri: "https://splunk.walmart.com:8089/services"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: search-results
path: "/search/jobs/{{search_id}}/results"
inputParameters:
- name: search_id
in: path
operations:
- name: get-results
method: GET
- type: http
namespace: servicenow
baseUri: "https://walmart.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: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When Splunk detects a high-severity security event, creates a ServiceNow security incident, enriches it with asset context, and notifies the SecOps Slack channel.
naftiko: "0.5"
info:
label: "Splunk Security Incident Triage"
description: "When Splunk detects a high-severity security event, creates a ServiceNow security incident, enriches it with asset context, and notifies the SecOps Slack channel."
tags:
- security
- splunk
- servicenow
- slack
- secops
- incident-response
capability:
exposes:
- type: mcp
namespace: secops
port: 8080
tools:
- name: triage-security-event
description: "Given a Splunk notable event ID and severity, create a ServiceNow security incident and alert the SecOps Slack channel. Invoke on high or critical Splunk ES notable events."
inputParameters:
- name: event_id
in: body
type: string
description: "Splunk notable event ID from Enterprise Security."
- name: severity
in: body
type: string
description: "Event severity: critical, high, medium."
- name: source_ip
in: body
type: string
description: "Source IP address associated with the security event."
- name: description
in: body
type: string
description: "Human-readable description of the security event."
steps:
- name: create-security-incident
type: call
call: servicenow-sec.create-incident
with:
category: security
subcategory: intrusion_detection
impact: "{{severity}}"
short_description: "Security event: {{description}} from {{source_ip}}"
description: "Splunk event {{event_id}}: {{description}}. Source IP: {{source_ip}}. Severity: {{severity}}."
- name: notify-secops
type: call
call: slack-secops.post-message
with:
channel: "security-ops"
text: "Security incident created: {{description}} | Source: {{source_ip}} | Severity: {{severity}} | ServiceNow: {{create-security-incident.number}} | Splunk event: {{event_id}}"
consumes:
- type: http
namespace: servicenow-sec
baseUri: "https://walmart.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/sn_si_incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: slack-secops
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a store reports an IT outage, creates a P1 ServiceNow incident, pages the on-call engineer via PagerDuty, and notifies the store ops Slack channel.
naftiko: "0.5"
info:
label: "Store IT Outage Response Orchestrator"
description: "When a store reports an IT outage, creates a P1 ServiceNow incident, pages the on-call engineer via PagerDuty, and notifies the store ops Slack channel."
tags:
- operations
- servicenow
- pagerduty
- slack
- retail
capability:
exposes:
- type: mcp
namespace: store-ops
port: 8080
tools:
- name: handle-store-outage
description: "Given a store number, affected system, and impact description, create a P1 incident, page on-call, and notify store ops. Use for critical store IT failures."
inputParameters:
- name: store_number
in: body
type: string
description: "Walmart store number."
- name: affected_system
in: body
type: string
description: "Affected system (e.g. POS, self-checkout, pharmacy)."
- name: impact
in: body
type: string
description: "Description of the business impact."
steps:
- name: create-p1-incident
type: call
call: servicenow.create-incident
with:
category: store_systems
urgency: 1
impact: 1
short_description: "[P1] Store {{store_number}} — {{affected_system}} outage"
description: "{{impact}}"
- name: page-oncall
type: call
call: pagerduty.create-incident
with:
service_id: store-systems
title: "Store {{store_number}} {{affected_system}} outage"
urgency: high
- name: notify-store-ops
type: call
call: slack.post-message
with:
channel: "store-ops-critical"
text: "P1 outage at Store {{store_number}}: {{affected_system}}. Incident: {{create-p1-incident.number}}. On-call paged."
consumes:
- type: http
namespace: servicenow
baseUri: "https://walmart.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: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a markdown request is submitted, validates inventory levels in Snowflake, creates an approval request in ServiceNow, and notifies the category manager via Microsoft Teams.
naftiko: "0.5"
info:
label: "Store Markdown Approval Workflow"
description: "When a markdown request is submitted, validates inventory levels in Snowflake, creates an approval request in ServiceNow, and notifies the category manager via Microsoft Teams."
tags:
- merchandising
- snowflake
- servicenow
- microsoft-teams
- pricing
capability:
exposes:
- type: mcp
namespace: markdown-ops
port: 8080
tools:
- name: submit-markdown-request
description: "Given a SKU, proposed markdown percentage, and store list, validate inventory, create approval request, and notify category manager. Use for clearance and seasonal markdowns."
inputParameters:
- name: sku
in: body
type: string
description: "Product SKU."
- name: markdown_pct
in: body
type: string
description: "Proposed markdown percentage."
- name: category_manager_email
in: body
type: string
description: "Category manager email."
steps:
- name: check-inventory
type: call
call: snowflake.execute-statement
with:
statement: "SELECT SUM(on_hand_qty) as total_qty, AVG(days_of_supply) as avg_dos FROM SUPPLY_CHAIN.INVENTORY WHERE sku = '{{sku}}'"
- name: create-approval
type: call
call: servicenow.create-request
with:
category: merchandising
short_description: "Markdown approval: {{sku}} — {{markdown_pct}}% off"
description: "Current inventory: {{check-inventory.total_qty}} units, {{check-inventory.avg_dos}} days of supply."
- name: notify-manager
type: call
call: msteams.send-message
with:
recipient_upn: "{{category_manager_email}}"
text: "Markdown request for SKU {{sku}} at {{markdown_pct}}% off. Inventory: {{check-inventory.total_qty}} units. Approval: {{create-approval.number}}."
consumes:
- type: http
namespace: snowflake
baseUri: "https://walmart.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: servicenow
baseUri: "https://walmart.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: requests
path: "/table/sc_request"
operations:
- name: create-request
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chats
path: "/users/{{recipient_upn}}/chats"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
When a price change is approved in SAP, updates the product catalog in Snowflake and sends a notification to the merchandising Slack channel.
naftiko: "0.5"
info:
label: "Store Price Change Propagation"
description: "When a price change is approved in SAP, updates the product catalog in Snowflake and sends a notification to the merchandising Slack channel."
tags:
- merchandising
- sap
- snowflake
- slack
- pricing
capability:
exposes:
- type: mcp
namespace: merchandising
port: 8080
tools:
- name: propagate-price-change
description: "Given a SAP material number and new price, update the Snowflake product catalog and notify merchandising. Use when pricing adjustments are approved by category managers."
inputParameters:
- name: material_number
in: body
type: string
description: "SAP material number."
- name: new_price
in: body
type: string
description: "New retail price."
- name: effective_date
in: body
type: string
description: "Price effective date in YYYY-MM-DD format."
steps:
- name: get-material
type: call
call: sap.get-material
with:
material_number: "{{material_number}}"
- name: update-catalog
type: call
call: snowflake.execute-statement
with:
statement: "UPDATE RETAIL.PRODUCT_CATALOG SET retail_price = {{new_price}}, price_effective_date = '{{effective_date}}' WHERE material_number = '{{material_number}}'"
- name: notify-merchandising
type: call
call: slack.post-message
with:
channel: "merchandising-pricing"
text: "Price change for {{get-material.description}} ({{material_number}}): new price ${{new_price}} effective {{effective_date}}."
consumes:
- type: http
namespace: sap
baseUri: "https://walmart-s4.sap.com/sap/opu/odata/sap/API_PRODUCT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: products
path: "/A_Product('{{material_number}}')"
inputParameters:
- name: material_number
in: path
operations:
- name: get-material
method: GET
- type: http
namespace: snowflake
baseUri: "https://walmart.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Generates a scoped Tableau embedded view token for a specified user and workbook, enabling secure analytics embedding in Walmart's internal portals.
naftiko: "0.5"
info:
label: "Tableau Dashboard Embed Token Generator"
description: "Generates a scoped Tableau embedded view token for a specified user and workbook, enabling secure analytics embedding in Walmart's internal portals."
tags:
- data
- analytics
- tableau
- reporting
capability:
exposes:
- type: mcp
namespace: tableau-embed
port: 8080
tools:
- name: get-tableau-embed-token
description: "Given a Tableau site, workbook name, and user email, generate a scoped embed token for use in internal portal iframes. Returns the token and embed URL."
inputParameters:
- name: site_id
in: body
type: string
description: "Tableau site ID (e.g. walmart-analytics)."
- name: workbook_name
in: body
type: string
description: "Name of the Tableau workbook to embed."
- name: user_email
in: body
type: string
description: "Email of the user requesting the embedded view."
steps:
- name: get-workbook
type: call
call: tableau.get-workbook
with:
site_id: "{{site_id}}"
workbook_name: "{{workbook_name}}"
- name: generate-token
type: call
call: tableau.create-embed-token
with:
site_id: "{{site_id}}"
workbook_id: "{{get-workbook.id}}"
user: "{{user_email}}"
consumes:
- type: http
namespace: tableau
baseUri: "https://prod-useast-a.online.tableau.com/api/3.21"
authentication:
type: apikey
key: "X-Tableau-Auth"
value: "$secrets.tableau_token"
placement: header
resources:
- name: workbooks
path: "/sites/{{site_id}}/workbooks"
inputParameters:
- name: site_id
in: path
operations:
- name: get-workbook
method: GET
- name: embed-tokens
path: "/sites/{{site_id}}/embeddingtoken/generate"
inputParameters:
- name: site_id
in: path
operations:
- name: create-embed-token
method: POST
Lists all workbooks in a Tableau site filtered by project name for dashboard discovery.
naftiko: "0.5"
info:
label: "Tableau Workbook List"
description: "Lists all workbooks in a Tableau site filtered by project name for dashboard discovery."
tags:
- analytics
- tableau
- reporting
capability:
exposes:
- type: mcp
namespace: analytics
port: 8080
tools:
- name: list-workbooks
description: "Given a Tableau project name, return all workbooks with their IDs, names, and last updated timestamps. Use for analytics asset discovery."
inputParameters:
- name: project_name
in: body
type: string
description: "Tableau project name to filter by."
call: tableau.list-workbooks
with:
project_name: "{{project_name}}"
outputParameters:
- name: workbooks
type: array
mapping: "$.workbooks.workbook"
consumes:
- type: http
namespace: tableau
baseUri: "https://tableau.walmart.com/api/3.21"
authentication:
type: bearer
token: "$secrets.tableau_token"
resources:
- name: workbooks
path: "/sites/{{site_id}}/workbooks"
operations:
- name: list-workbooks
method: GET
Detects Terraform state drift, creates a GitHub pull request with the fix, and alerts the platform engineering Slack channel.
naftiko: "0.5"
info:
label: "Terraform Drift Detection and Remediation"
description: "Detects Terraform state drift, creates a GitHub pull request with the fix, and alerts the platform engineering Slack channel."
tags:
- infrastructure
- terraform
- github
- slack
- cloud
capability:
exposes:
- type: mcp
namespace: platform-eng
port: 8080
tools:
- name: handle-terraform-drift
description: "Given a Terraform workspace and drift details, create a remediation PR in GitHub and notify platform engineering. Use when Terraform plan detects configuration drift."
inputParameters:
- name: workspace
in: body
type: string
description: "Terraform workspace name."
- name: resource_address
in: body
type: string
description: "Terraform resource address with drift."
- name: drift_summary
in: body
type: string
description: "Summary of the detected drift."
steps:
- name: create-branch
type: call
call: github.create-branch
with:
repo: "walmart/infrastructure"
branch: "fix/drift-{{workspace}}-{{resource_address}}"
- name: create-pr
type: call
call: github.create-pr
with:
repo: "walmart/infrastructure"
head: "fix/drift-{{workspace}}-{{resource_address}}"
base: main
title: "Fix drift: {{resource_address}} in {{workspace}}"
body: "{{drift_summary}}"
- name: notify-platform
type: call
call: slack.post-message
with:
channel: "platform-engineering"
text: "Terraform drift detected in {{workspace}}: {{resource_address}}. PR: {{create-pr.html_url}}."
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: branches
path: "/repos/{{repo}}/git/refs"
inputParameters:
- name: repo
in: path
operations:
- name: create-branch
method: POST
- name: pulls
path: "/repos/{{repo}}/pulls"
inputParameters:
- name: repo
in: path
operations:
- name: create-pr
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a SAP invoice has a price discrepancy, creates a Jira ticket for the procurement team and notifies the buyer via Microsoft Teams.
naftiko: "0.5"
info:
label: "Vendor Invoice Discrepancy Handler"
description: "When a SAP invoice has a price discrepancy, creates a Jira ticket for the procurement team and notifies the buyer via Microsoft Teams."
tags:
- procurement
- finance
- sap
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: procurement-ops
port: 8080
tools:
- name: handle-invoice-discrepancy
description: "Given a SAP invoice number, fetch the discrepancy details, create a Jira ticket for resolution, and notify the assigned buyer via Teams. Use when three-way match failures occur."
inputParameters:
- name: invoice_number
in: body
type: string
description: "SAP invoice document number."
- name: buyer_email
in: body
type: string
description: "Email of the responsible buyer."
steps:
- name: get-invoice
type: call
call: sap.get-invoice
with:
invoice_number: "{{invoice_number}}"
- name: create-ticket
type: call
call: jira.create-issue
with:
project: PROC
issue_type: Task
summary: "Invoice discrepancy: {{invoice_number}} — variance {{get-invoice.variance_amount}}"
description: "Vendor: {{get-invoice.vendor_name}}. PO: {{get-invoice.po_number}}. Variance: {{get-invoice.variance_amount}}."
- name: notify-buyer
type: call
call: msteams.send-message
with:
recipient_upn: "{{buyer_email}}"
text: "Invoice {{invoice_number}} has a discrepancy of {{get-invoice.variance_amount}}. Jira ticket: {{create-ticket.key}}. Please review."
consumes:
- type: http
namespace: sap
baseUri: "https://walmart-s4.sap.com/sap/opu/odata/sap/API_SUPPLIERINVOICE_PROCESS_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: invoices
path: "/A_SupplierInvoice('{{invoice_number}}')"
inputParameters:
- name: invoice_number
in: path
operations:
- name: get-invoice
method: GET
- type: http
namespace: jira
baseUri: "https://walmart.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: chats
path: "/users/{{recipient_upn}}/chats"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Queries Snowflake for weekly store sales and foot traffic metrics, generates a summary, and posts it to the regional leadership Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Weekly Store Performance Digest"
description: "Queries Snowflake for weekly store sales and foot traffic metrics, generates a summary, and posts it to the regional leadership Microsoft Teams channel."
tags:
- analytics
- retail
- snowflake
- microsoft-teams
- reporting
capability:
exposes:
- type: mcp
namespace: retail-reporting
port: 8080
tools:
- name: publish-store-performance
description: "Given a region code and week ending date, query Snowflake for store performance data and send a digest to the regional Teams channel. Use for weekly leadership reviews."
inputParameters:
- name: region
in: body
type: string
description: "Region code (e.g. US-SOUTH)."
- name: week_ending
in: body
type: string
description: "Week ending date in YYYY-MM-DD format."
steps:
- name: query-performance
type: call
call: snowflake.execute-statement
with:
statement: "SELECT store_id, SUM(net_sales) as total_sales, SUM(transactions) as total_txns, AVG(basket_size) as avg_basket FROM RETAIL.WEEKLY_STORE_METRICS WHERE region = '{{region}}' AND week_ending = '{{week_ending}}' GROUP BY store_id ORDER BY total_sales DESC LIMIT 25"
- name: post-digest
type: call
call: msteams.send-channel-message
with:
team_id: "{{region}}-leadership"
channel: "store-performance"
text: "Weekly performance for {{region}} ending {{week_ending}}: {{query-performance.row_count}} stores reported. Top store sales: {{query-performance.top_sales}}."
consumes:
- type: http
namespace: snowflake
baseUri: "https://walmart.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel
in: path
operations:
- name: send-channel-message
method: POST
Queries Workday for associates who have not completed benefits enrollment, sends reminders via Microsoft Teams, and updates a tracking spreadsheet in SharePoint.
naftiko: "0.5"
info:
label: "Workday Benefits Enrollment Reminder"
description: "Queries Workday for associates who have not completed benefits enrollment, sends reminders via Microsoft Teams, and updates a tracking spreadsheet in SharePoint."
tags:
- hr
- workday
- microsoft-teams
- sharepoint
- benefits
capability:
exposes:
- type: mcp
namespace: hr-benefits
port: 8080
tools:
- name: send-enrollment-reminders
description: "Given an enrollment deadline date, find incomplete enrollments in Workday, send Teams reminders, and update the SharePoint tracker. Use during open enrollment periods."
inputParameters:
- name: enrollment_deadline
in: body
type: string
description: "Enrollment deadline date in YYYY-MM-DD format."
steps:
- name: get-pending-enrollments
type: call
call: workday.get-pending-enrollments
with:
deadline: "{{enrollment_deadline}}"
- name: send-reminders
type: call
call: msteams.send-message
with:
recipient_upn: "{{get-pending-enrollments.employee_emails}}"
text: "Reminder: Your benefits enrollment is due by {{enrollment_deadline}}. Please complete your selections in Workday."
- name: update-tracker
type: call
call: sharepoint.update-list
with:
list_name: "Benefits Enrollment Tracker"
data: "{{get-pending-enrollments.summary}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: benefits
path: "/walmart/benefits/pendingEnrollments"
operations:
- name: get-pending-enrollments
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chats
path: "/users/{{recipient_upn}}/chats"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: lists
path: "/sites/walmart.sharepoint.com/lists/{{list_name}}/items"
inputParameters:
- name: list_name
in: path
operations:
- name: update-list
method: POST
Pulls merit increase proposals from Workday, validates against SAP budget allocations, and notifies HR business partners via Microsoft Teams with a review summary.
naftiko: "0.5"
info:
label: "Workday Compensation Review Sync"
description: "Pulls merit increase proposals from Workday, validates against SAP budget allocations, and notifies HR business partners via Microsoft Teams with a review summary."
tags:
- hr
- finance
- workday
- sap
- microsoft-teams
- compensation
capability:
exposes:
- type: mcp
namespace: hr-compensation
port: 8080
tools:
- name: sync-compensation-review
description: "Given a Workday compensation review cycle ID, retrieve merit proposals, check SAP budget availability for each cost center, and send a review summary to HR business partners in Microsoft Teams."
inputParameters:
- name: review_cycle_id
in: body
type: string
description: "Workday compensation review cycle ID."
- name: review_period
in: body
type: string
description: "Human-readable review period label (e.g. 2025 Annual Merit)."
steps:
- name: get-proposals
type: call
call: workday-comp.get-comp-review
with:
cycle_id: "{{review_cycle_id}}"
- name: notify-hrbp
type: call
call: msteams-comp.send-message
with:
channel_id: "$secrets.teams_hr_channel_id"
text: "Compensation review cycle {{review_period}} has {{get-proposals.total_count}} proposals totaling {{get-proposals.total_increase_amount}}. Please review in Workday."
consumes:
- type: http
namespace: workday-comp
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: comp-reviews
path: "/walmart/compensationReviewCycles/{{cycle_id}}"
inputParameters:
- name: cycle_id
in: path
operations:
- name: get-comp-review
method: GET
- type: http
namespace: msteams-comp
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Looks up a Workday employee by worker ID and returns their name, department, job title, and manager for HR inquiries.
naftiko: "0.5"
info:
label: "Workday Employee Lookup"
description: "Looks up a Workday employee by worker ID and returns their name, department, job title, and manager for HR inquiries."
tags:
- hr
- workday
- employee
capability:
exposes:
- type: mcp
namespace: hr
port: 8080
tools:
- name: get-employee
description: "Given a Workday worker ID, return employee name, department, job title, location, and manager. Use for HR inquiries and people lookups."
inputParameters:
- name: worker_id
in: body
type: string
description: "Workday worker ID (e.g. WD-0012345)."
call: workday.get-worker
with:
worker_id: "{{worker_id}}"
outputParameters:
- name: full_name
type: string
mapping: "$.d.FullName"
- name: department
type: string
mapping: "$.d.Department"
- name: job_title
type: string
mapping: "$.d.JobTitle"
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: "/walmart/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
Returns current headcount by department and cost center from Workday for use in workforce planning and finance reporting.
naftiko: "0.5"
info:
label: "Workday Headcount Snapshot"
description: "Returns current headcount by department and cost center from Workday for use in workforce planning and finance reporting."
tags:
- hr
- reporting
- workday
- headcount
capability:
exposes:
- type: mcp
namespace: hr-reporting
port: 8080
tools:
- name: get-headcount-by-department
description: "Returns active associate headcount grouped by department and cost center from Workday. Use for workforce planning, finance budgeting, or store staffing analysis."
call: workday.get-headcount
outputParameters:
- name: workers
type: array
mapping: "$.data[*]"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: headcount
path: "/walmart/workers"
operations:
- name: get-headcount
method: GET
When a new job requisition is created in Workday, validates budget in SAP, creates a ServiceNow approval request, and notifies the hiring manager via Teams.
naftiko: "0.5"
info:
label: "Workday Job Requisition Approval Flow"
description: "When a new job requisition is created in Workday, validates budget in SAP, creates a ServiceNow approval request, and notifies the hiring manager via Teams."
tags:
- hr
- workday
- sap
- servicenow
- microsoft-teams
- recruiting
capability:
exposes:
- type: mcp
namespace: recruiting
port: 8080
tools:
- name: process-job-requisition
description: "Given a Workday job requisition ID, validate department budget in SAP, create a ServiceNow approval, and notify the hiring manager. Use when new headcount requests are submitted."
inputParameters:
- name: requisition_id
in: body
type: string
description: "Workday job requisition ID."
steps:
- name: get-requisition
type: call
call: workday.get-requisition
with:
requisition_id: "{{requisition_id}}"
- name: check-budget
type: call
call: sap.get-cost-center-budget
with:
cost_center: "{{get-requisition.cost_center}}"
- name: create-approval
type: call
call: servicenow.create-request
with:
category: hr_recruiting
short_description: "Job requisition approval: {{get-requisition.job_title}} — {{get-requisition.department}}"
description: "Budget remaining: {{check-budget.remaining_budget}}. Requested salary: {{get-requisition.target_salary}}."
- name: notify-hiring-manager
type: call
call: msteams.send-message
with:
recipient_upn: "{{get-requisition.hiring_manager_email}}"
text: "Your job requisition for {{get-requisition.job_title}} is submitted for approval. ServiceNow: {{create-approval.number}}. Budget available: {{check-budget.remaining_budget}}."
consumes:
- 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: "/walmart/jobRequisitions/{{requisition_id}}"
inputParameters:
- name: requisition_id
in: path
operations:
- name: get-requisition
method: GET
- type: http
namespace: sap
baseUri: "https://walmart-s4.sap.com/sap/opu/odata/sap/API_COSTCENTER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: cost-centers
path: "/A_CostCenter('{{cost_center}}')"
inputParameters:
- name: cost_center
in: path
operations:
- name: get-cost-center-budget
method: GET
- type: http
namespace: servicenow
baseUri: "https://walmart.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: requests
path: "/table/sc_request"
operations:
- name: create-request
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chats
path: "/users/{{recipient_upn}}/chats"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
When an organizational restructure occurs in Workday, updates Okta group assignments, syncs the org chart to SharePoint, and notifies affected managers via Microsoft Teams.
naftiko: "0.5"
info:
label: "Workday Organizational Change Sync"
description: "When an organizational restructure occurs in Workday, updates Okta group assignments, syncs the org chart to SharePoint, and notifies affected managers via Microsoft Teams."
tags:
- hr
- workday
- okta
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: org-mgmt
port: 8080
tools:
- name: sync-org-change
description: "Given a Workday supervisory org ID, fetch the updated structure, update Okta groups, sync to SharePoint, and notify managers. Use during organizational restructures."
inputParameters:
- name: org_id
in: body
type: string
description: "Workday supervisory organization ID."
steps:
- name: get-org-structure
type: call
call: workday.get-org
with:
org_id: "{{org_id}}"
- name: update-okta-groups
type: call
call: okta.sync-group-members
with:
group_name: "{{get-org-structure.org_name}}"
members: "{{get-org-structure.member_emails}}"
- name: update-org-chart
type: call
call: sharepoint.update-list
with:
list_name: "Organization Chart"
data: "{{get-org-structure.hierarchy}}"
- name: notify-managers
type: call
call: msteams.send-message
with:
recipient_upn: "{{get-org-structure.manager_email}}"
text: "Organizational change processed for {{get-org-structure.org_name}}. {{get-org-structure.member_count}} members updated. Okta groups and org chart synced."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: organizations
path: "/walmart/organizations/{{org_id}}"
inputParameters:
- name: org_id
in: path
operations:
- name: get-org
method: GET
- type: http
namespace: okta
baseUri: "https://walmart.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_token"
resources:
- name: groups
path: "/groups/{{group_name}}/users"
inputParameters:
- name: group_name
in: path
operations:
- name: sync-group-members
method: PUT
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: lists
path: "/sites/walmart.sharepoint.com/lists/{{list_name}}/items"
inputParameters:
- name: list_name
in: path
operations:
- name: update-list
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chats
path: "/users/{{recipient_upn}}/chats"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Compares Workday payroll run results with SAP cost center budgets, logs variances in Snowflake, and alerts the payroll team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Workday Payroll Variance Alert"
description: "Compares Workday payroll run results with SAP cost center budgets, logs variances in Snowflake, and alerts the payroll team via Microsoft Teams."
tags:
- finance
- hr
- workday
- sap
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: payroll-ops
port: 8080
tools:
- name: check-payroll-variance
description: "Given a pay period and company code, compare Workday payroll results with SAP budgets, log variances, and alert the payroll team. Use after each payroll run completes."
inputParameters:
- name: pay_period
in: body
type: string
description: "Pay period identifier (e.g. 2026-W13)."
- name: company_code
in: body
type: string
description: "SAP company code."
steps:
- name: get-payroll-results
type: call
call: workday.get-payroll-results
with:
pay_period: "{{pay_period}}"
- name: log-variance
type: call
call: snowflake.execute-statement
with:
statement: "INSERT INTO FINANCE.PAYROLL_VARIANCE (pay_period, company_code, total_payroll, budget, variance) SELECT '{{pay_period}}', '{{company_code}}', {{get-payroll-results.total_amount}}, budget_amount, {{get-payroll-results.total_amount}} - budget_amount FROM FINANCE.PAYROLL_BUDGETS WHERE company_code = '{{company_code}}'"
- name: alert-payroll
type: call
call: msteams.send-channel-message
with:
team_id: payroll-team
channel: variance-alerts
text: "Payroll variance for {{pay_period}}: Total payroll ${{get-payroll-results.total_amount}}. Review in Snowflake for details."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: payroll
path: "/walmart/payroll/results"
operations:
- name: get-payroll-results
method: GET
- type: http
namespace: snowflake
baseUri: "https://walmart.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel
in: path
operations:
- name: send-channel-message
method: POST
Kicks off an annual performance review cycle in Workday for a specified manager's direct reports and notifies each employee via Microsoft Teams with review instructions.
naftiko: "0.5"
info:
label: "Workday Performance Review Initiation"
description: "Kicks off an annual performance review cycle in Workday for a specified manager's direct reports and notifies each employee via Microsoft Teams with review instructions."
tags:
- hr
- performance
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-performance
port: 8080
tools:
- name: initiate-performance-review
description: "Given a manager's Workday ID and review cycle name, retrieve direct reports, and send each a Microsoft Teams notification with performance review instructions. Use to launch annual or mid-year review cycles."
inputParameters:
- name: manager_workday_id
in: body
type: string
description: "Workday ID of the manager whose direct reports should receive review notifications."
- name: review_cycle_name
in: body
type: string
description: "Name of the review cycle (e.g. 2025 Annual Performance Review)."
- name: due_date
in: body
type: string
description: "Review submission due date in ISO 8601 format."
steps:
- name: get-direct-reports
type: call
call: workday-perf.get-direct-reports
with:
manager_id: "{{manager_workday_id}}"
- name: notify-employees
type: call
call: msteams-perf.send-message
with:
recipient_upn: "{{get-direct-reports.work_email}}"
text: "Your {{review_cycle_name}} self-assessment is now open. Please complete your review in Workday by {{due_date}}."
consumes:
- type: http
namespace: workday-perf
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: direct-reports
path: "/walmart/workers/{{manager_id}}/directReports"
inputParameters:
- name: manager_id
in: path
operations:
- name: get-direct-reports
method: GET
- type: http
namespace: msteams-perf
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{upn}}/chats"
inputParameters:
- name: upn
in: path
operations:
- name: send-message
method: POST
When an associate is promoted in Workday, updates their Okta group memberships and notifies the IT team via ServiceNow for access provisioning.
naftiko: "0.5"
info:
label: "Workday Promotion to Okta Role Update"
description: "When an associate is promoted in Workday, updates their Okta group memberships and notifies the IT team via ServiceNow for access provisioning."
tags:
- hr
- security
- workday
- okta
- servicenow
capability:
exposes:
- type: mcp
namespace: access-mgmt
port: 8080
tools:
- name: sync-promotion-access
description: "Given a Workday worker ID, fetch the new role, update Okta group memberships, and create a ServiceNow access request. Use when employee promotions or role changes occur."
inputParameters:
- name: worker_id
in: body
type: string
description: "Workday worker ID."
steps:
- name: get-worker
type: call
call: workday.get-worker
with:
worker_id: "{{worker_id}}"
- name: update-okta-groups
type: call
call: okta.update-groups
with:
user_login: "{{get-worker.work_email}}"
new_groups: "{{get-worker.role_groups}}"
- name: create-access-request
type: call
call: servicenow.create-request
with:
category: access_management
short_description: "Access update for {{get-worker.full_name}} — new role: {{get-worker.job_title}}"
description: "Promoted to {{get-worker.job_title}} in {{get-worker.department}}. Okta groups updated."
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: "/walmart/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: okta
baseUri: "https://walmart.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_token"
resources:
- name: groups
path: "/users/{{user_login}}/groups"
inputParameters:
- name: user_login
in: path
operations:
- name: update-groups
method: PUT
- type: http
namespace: servicenow
baseUri: "https://walmart.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: requests
path: "/table/sc_request"
operations:
- name: create-request
method: POST
When an employee is terminated in Workday, deactivates their Okta account and creates a ServiceNow ticket for equipment retrieval.
naftiko: "0.5"
info:
label: "Workday Termination to Okta Deprovisioning"
description: "When an employee is terminated in Workday, deactivates their Okta account and creates a ServiceNow ticket for equipment retrieval."
tags:
- hr
- security
- workday
- okta
- servicenow
- offboarding
capability:
exposes:
- type: mcp
namespace: hr-offboarding
port: 8080
tools:
- name: process-termination
description: "Given a Workday worker ID and termination date, deactivate the employee Okta account and open a ServiceNow ticket for equipment return. Use when processing employee separations."
inputParameters:
- name: worker_id
in: body
type: string
description: "Workday worker ID of the terminated employee."
- name: termination_date
in: body
type: string
description: "Termination effective date in YYYY-MM-DD format."
steps:
- name: get-worker
type: call
call: workday.get-worker
with:
worker_id: "{{worker_id}}"
- name: deactivate-okta
type: call
call: okta.deactivate-user
with:
user_login: "{{get-worker.work_email}}"
- name: open-equipment-ticket
type: call
call: servicenow.create-incident
with:
category: hr_offboarding
short_description: "Equipment retrieval for {{get-worker.full_name}} — termination {{termination_date}}"
assigned_group: IT_Asset_Management
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: "/walmart/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: okta
baseUri: "https://walmart.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_token"
resources:
- name: users
path: "/users/{{user_login}}/lifecycle/deactivate"
inputParameters:
- name: user_login
in: path
operations:
- name: deactivate-user
method: POST
- type: http
namespace: servicenow
baseUri: "https://walmart.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
Retrieves the current PTO and sick leave balance for a Workday employee.
naftiko: "0.5"
info:
label: "Workday Time Off Balance Check"
description: "Retrieves the current PTO and sick leave balance for a Workday employee."
tags:
- hr
- workday
- time-off
capability:
exposes:
- type: mcp
namespace: hr
port: 8080
tools:
- name: get-time-off-balance
description: "Given a Workday worker ID, return the current PTO balance, sick leave balance, and next accrual date. Use for employee time-off inquiries."
inputParameters:
- name: worker_id
in: body
type: string
description: "Workday worker ID."
call: workday-pto.get-balance
with:
worker_id: "{{worker_id}}"
outputParameters:
- name: pto_balance
type: number
mapping: "$.timeOffBalance.ptoHours"
- name: sick_balance
type: number
mapping: "$.timeOffBalance.sickHours"
consumes:
- type: http
namespace: workday-pto
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: time-off
path: "/walmart/workers/{{worker_id}}/timeOffBalance"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-balance
method: GET
Retrieves details for a Zoom meeting by ID including topic, start time, duration, and participant count.
naftiko: "0.5"
info:
label: "Zoom Meeting Details Lookup"
description: "Retrieves details for a Zoom meeting by ID including topic, start time, duration, and participant count."
tags:
- communication
- zoom
- meetings
capability:
exposes:
- type: mcp
namespace: communication
port: 8080
tools:
- name: get-meeting-details
description: "Given a Zoom meeting ID, return the topic, start time, duration, host, and registrant count. Use for meeting audit and scheduling reviews."
inputParameters:
- name: meeting_id
in: body
type: string
description: "Zoom meeting ID."
call: zoom.get-meeting
with:
meeting_id: "{{meeting_id}}"
outputParameters:
- name: topic
type: string
mapping: "$.topic"
- name: start_time
type: string
mapping: "$.start_time"
- name: duration
type: integer
mapping: "$.duration"
consumes:
- type: http
namespace: zoom
baseUri: "https://api.zoom.us/v2"
authentication:
type: bearer
token: "$secrets.zoom_token"
resources:
- name: meetings
path: "/meetings/{{meeting_id}}"
inputParameters:
- name: meeting_id
in: path
operations:
- name: get-meeting
method: GET
Enriches a Salesforce lead with firmographic data from ZoomInfo and updates the lead record with company size, revenue, and industry details.
naftiko: "0.5"
info:
label: "ZoomInfo Lead Enrichment to Salesforce"
description: "Enriches a Salesforce lead with firmographic data from ZoomInfo and updates the lead record with company size, revenue, and industry details."
tags:
- sales
- zoominfo
- salesforce
- lead-enrichment
capability:
exposes:
- type: mcp
namespace: sales-enrichment
port: 8080
tools:
- name: enrich-lead
description: "Given a Salesforce lead ID, fetch the company domain, enrich via ZoomInfo, and update the Salesforce lead record. Use for new lead qualification."
inputParameters:
- name: lead_id
in: body
type: string
description: "Salesforce lead ID."
steps:
- name: get-lead
type: call
call: salesforce.get-lead
with:
lead_id: "{{lead_id}}"
- name: enrich-company
type: call
call: zoominfo.search-company
with:
domain: "{{get-lead.website}}"
- name: update-lead
type: call
call: salesforce.update-lead
with:
lead_id: "{{lead_id}}"
number_of_employees: "{{enrich-company.employee_count}}"
annual_revenue: "{{enrich-company.revenue}}"
industry: "{{enrich-company.industry}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://walmart.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: leads
path: "/sobjects/Lead/{{lead_id}}"
inputParameters:
- name: lead_id
in: path
operations:
- name: get-lead
method: GET
- name: update-lead
method: PATCH
- type: http
namespace: zoominfo
baseUri: "https://api.zoominfo.com"
authentication:
type: bearer
token: "$secrets.zoominfo_token"
resources:
- name: companies
path: "/search/company"
operations:
- name: search-company
method: POST