Trader Joe's Capabilities
Naftiko 0.5 capability definitions for Trader Joe's - 100 capabilities showing integration workflows and service orchestrations.
Initiates the annual budget planning cycle by creating budget tasks in SAP, opening a ServiceNow project for budget submissions, and notifying all department heads via Teams.
naftiko: "0.5"
info:
label: "Annual Budget Cycle Kickoff"
description: "Initiates the annual budget planning cycle by creating budget tasks in SAP, opening a ServiceNow project for budget submissions, and notifying all department heads via Teams."
tags:
- finance
- budgeting
- sap
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: finance-planning
port: 8080
tools:
- name: kickoff-budget-cycle
description: "Given a fiscal year, submission deadline, and list of department heads, create SAP budget planning records, open a ServiceNow coordination project, and notify all department heads via Teams."
inputParameters:
- name: fiscal_year
in: body
type: string
description: "The fiscal year being budgeted (e.g., FY2026)."
- name: submission_deadline
in: body
type: string
description: "Budget submission deadline in YYYY-MM-DD format."
- name: finance_channel_id
in: body
type: string
description: "Teams channel ID for the finance leadership group."
steps:
- name: create-servicenow-project
type: call
call: "servicenow-budget.create-task"
with:
short_description: "{{fiscal_year}} Budget Planning Coordination"
category: "finance_planning"
due_date: "{{submission_deadline}}"
assignment_group: "FP_And_A"
- name: notify-finance-leadership
type: call
call: "msteams-budget.post-channel-message"
with:
channel_id: "{{finance_channel_id}}"
text: "{{fiscal_year}} budget planning cycle has started. Submissions due {{submission_deadline}}. Planning task: {{create-servicenow-project.number}}. Please submit department budgets by the deadline."
consumes:
- type: http
namespace: servicenow-budget
baseUri: "https://traderjoes.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/sc_task"
operations:
- name: create-task
method: POST
- type: http
namespace: msteams-budget
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: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves Azure resource group costs.
naftiko: "0.5"
info:
label: "Azure Resource Cost Lookup"
description: "Retrieves Azure resource group costs."
tags:
- cloud
- azure
- finops
capability:
exposes:
- type: mcp
namespace: tj-ops
port: 8080
tools:
- name: azure_resource_cost_lookup
description: "Retrieves Azure resource group costs."
inputParameters:
- name: entity_id
type: string
description: "Primary identifier."
call: primary.get-azure
with:
entity_id: "{{entity_id}}"
outputParameters:
- name: result
type: string
mapping: "$.data"
consumes:
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
When open enrollment begins in Workday, sends personalized benefits enrollment reminders to all eligible associates via Microsoft Teams.
naftiko: "0.5"
info:
label: "Benefits Enrollment Notification"
description: "When open enrollment begins in Workday, sends personalized benefits enrollment reminders to all eligible associates via Microsoft Teams."
tags:
- hr
- benefits
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-benefits
port: 8080
tools:
- name: send-enrollment-reminders
description: "Given an open enrollment period, retrieve all eligible associates from Workday who have not yet completed enrollment, and send reminder messages via Teams."
inputParameters:
- name: enrollment_deadline
in: body
type: string
description: "Open enrollment deadline date in YYYY-MM-DD format."
- name: enrollment_url
in: body
type: string
description: "URL to the benefits enrollment portal."
steps:
- name: get-unenrolled
type: call
call: "workday-benefits.get-unenrolled-workers"
with:
enrollmentStatus: "not_started"
- name: send-reminders
type: call
call: "msteams-benefits.post-channel-message"
with:
channel_id: "all-associates"
text: "Benefits enrollment reminder: Open enrollment closes {{enrollment_deadline}}. Complete your elections at {{enrollment_url}}. Contact HR with questions."
consumes:
- type: http
namespace: workday-benefits
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers"
inputParameters:
- name: enrollmentStatus
in: query
operations:
- name: get-unenrolled-workers
method: GET
- type: http
namespace: msteams-benefits
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: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Submits an IT change request in ServiceNow for store system changes, routes for CAB approval, and notifies impacted stakeholders via Microsoft Teams.
naftiko: "0.5"
info:
label: "Change Management Request Workflow"
description: "Submits an IT change request in ServiceNow for store system changes, routes for CAB approval, and notifies impacted stakeholders via Microsoft Teams."
tags:
- itsm
- change-management
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: change-mgmt
port: 8080
tools:
- name: submit-change-request
description: "Given a change description, risk level, and affected stores, create a ServiceNow change request, assign it to the CAB group, and notify impacted store managers via Teams."
inputParameters:
- name: change_description
in: body
type: string
description: "Description of the proposed system change."
- name: risk_level
in: body
type: string
description: "Risk level of the change: low, medium, high."
- name: implementation_date
in: body
type: string
description: "Planned implementation date in YYYY-MM-DD format."
- name: affected_stores
in: body
type: string
description: "Comma-separated list of store numbers affected by this change."
steps:
- name: create-change
type: call
call: "servicenow-change.create-change"
with:
short_description: "{{change_description}}"
risk: "{{risk_level}}"
start_date: "{{implementation_date}}"
assignment_group: "CAB"
- name: notify-stakeholders
type: call
call: "msteams-change.post-channel-message"
with:
channel_id: "it-change-notifications"
text: "New change request {{create-change.number}}: {{change_description}}. Risk: {{risk_level}}. Implementation: {{implementation_date}}. Affected stores: {{affected_stores}}"
consumes:
- type: http
namespace: servicenow-change
baseUri: "https://traderjoes.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: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Queries Azure costs, identifies optimization opportunities, and posts recommendations to IT leadership.
naftiko: "0.5"
info:
label: "Cloud Cost Optimization Orchestration"
description: "Queries Azure costs, identifies optimization opportunities, and posts recommendations to IT leadership."
tags:
- cloud
- finops
- azure
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: tj-ops
port: 8080
tools:
- name: cloud_cost_optimization_orchestration
description: "Queries Azure costs, identifies optimization opportunities, and posts recommendations to IT leadership."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "Cloud Cost Optimization Orchestration: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "Cloud Cost Optimization Orchestration for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://traderjoes.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
Queries Workday for overdue training, creates ServiceNow ticket, and notifies managers.
naftiko: "0.5"
info:
label: "Compliance Training Overdue Alert"
description: "Queries Workday for overdue training, creates ServiceNow ticket, and notifies managers."
tags:
- hr
- compliance
- workday
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: tj-ops
port: 8080
tools:
- name: compliance_training_overdue_alert
description: "Queries Workday for overdue training, creates ServiceNow ticket, and notifies managers."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "Compliance Training Overdue Alert: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "Compliance Training Overdue Alert for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://traderjoes.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
Retrieves a Confluence wiki page by ID.
naftiko: "0.5"
info:
label: "Confluence Page Lookup"
description: "Retrieves a Confluence wiki page by ID."
tags:
- collaboration
- confluence
capability:
exposes:
- type: mcp
namespace: tj-ops
port: 8080
tools:
- name: confluence_page_lookup
description: "Retrieves a Confluence wiki page by ID."
inputParameters:
- name: entity_id
type: string
description: "Primary identifier."
call: primary.get-confluence
with:
entity_id: "{{entity_id}}"
outputParameters:
- name: result
type: string
mapping: "$.data"
consumes:
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
Reconciles SAP Concur travel expense reports against corporate card charges in SAP, flags discrepancies, and routes exceptions to the finance team for review.
naftiko: "0.5"
info:
label: "Corporate Travel Expense Reconciliation"
description: "Reconciles SAP Concur travel expense reports against corporate card charges in SAP, flags discrepancies, and routes exceptions to the finance team for review."
tags:
- finance
- travel
- sap-concur
- sap
capability:
exposes:
- type: mcp
namespace: travel-expense
port: 8080
tools:
- name: reconcile-travel-expenses
description: "Given a reporting period, retrieve all Concur expense reports and match against SAP corporate card transactions. Return a reconciliation summary with flagged discrepancies."
inputParameters:
- name: period_start
in: body
type: string
description: "Start of the reconciliation period in YYYY-MM-DD format."
- name: period_end
in: body
type: string
description: "End of the reconciliation period in YYYY-MM-DD format."
steps:
- name: get-expense-reports
type: call
call: "concur-recon.get-expense-reports"
with:
modifiedAfter: "{{period_start}}"
modifiedBefore: "{{period_end}}"
- name: get-card-transactions
type: call
call: "sap-recon.get-card-transactions"
with:
dateFrom: "{{period_start}}"
dateTo: "{{period_end}}"
consumes:
- type: http
namespace: concur-recon
baseUri: "https://www.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_token"
resources:
- name: expense-reports
path: "/expense/reports"
inputParameters:
- name: modifiedAfter
in: query
- name: modifiedBefore
in: query
operations:
- name: get-expense-reports
method: GET
- type: http
namespace: sap-recon
baseUri: "https://traderjoes-s4.sap.com/sap/opu/odata/sap/FI_CORPCARDTXN_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: card-transactions
path: "/A_CorporateCardTransaction"
inputParameters:
- name: dateFrom
in: query
- name: dateTo
in: query
operations:
- name: get-card-transactions
method: GET
Queries Snowflake for customer feedback patterns, uses AI to identify trends, and posts insights to ops leadership.
naftiko: "0.5"
info:
label: "Customer Feedback Trend Analysis"
description: "Queries Snowflake for customer feedback patterns, uses AI to identify trends, and posts insights to ops leadership."
tags:
- customer-experience
- snowflake
- anthropic
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: tj-ops
port: 8080
tools:
- name: customer_feedback_trend_analysis
description: "Queries Snowflake for customer feedback patterns, uses AI to identify trends, and posts insights to ops leadership."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "Customer Feedback Trend Analysis: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "Customer Feedback Trend Analysis for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://traderjoes.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
Queries daily sales data from Snowflake, generates a Power BI refresh, and distributes the report link to regional managers on Teams.
naftiko: "0.5"
info:
label: "Daily Store Sales Report Distribution"
description: "Queries daily sales data from Snowflake, generates a Power BI refresh, and distributes the report link to regional managers on Teams."
tags:
- analytics
- retail
- snowflake
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: retail-reporting
port: 8080
tools:
- name: distribute-daily-sales
description: "Given a region and date, query sales, refresh BI, and distribute."
inputParameters:
- name: region
in: body
type: string
description: "The region name."
- name: report_date
in: body
type: string
description: "The report date (YYYY-MM-DD)."
steps:
- name: get-sales
type: call
call: "snowflake.execute-query"
with:
statement: "SELECT store_id, SUM(total_sales) as sales, COUNT(DISTINCT transaction_id) as txns FROM RETAIL_DB.PUBLIC.SALES WHERE region='{{region}}' AND sale_date='{{report_date}}' GROUP BY store_id ORDER BY sales DESC"
- name: refresh-dashboard
type: call
call: "powerbi.refresh-dataset"
with:
dataset_id: "$secrets.powerbi_sales_dataset_id"
- name: notify-managers
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.teams_regional_channel"
text: "Daily Sales Report: {{region}} {{report_date}} | Dashboard refreshed. Top store: {{get-sales.top_store}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/regional/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
When a Snowflake ETL pipeline fails, creates Jira ticket and notifies data engineering.
naftiko: "0.5"
info:
label: "Data Pipeline Failure Recovery"
description: "When a Snowflake ETL pipeline fails, creates Jira ticket and notifies data engineering."
tags:
- data-engineering
- snowflake
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: tj-ops
port: 8080
tools:
- name: data_pipeline_failure_recovery
description: "When a Snowflake ETL pipeline fails, creates Jira ticket and notifies data engineering."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "Data Pipeline Failure Recovery: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "Data Pipeline Failure Recovery for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://traderjoes.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
When an employee submits a data privacy access request (DSAR), opens a ServiceNow compliance ticket, assigns to the privacy team, and notifies the requestor via Teams.
naftiko: "0.5"
info:
label: "Data Privacy Access Request"
description: "When an employee submits a data privacy access request (DSAR), opens a ServiceNow compliance ticket, assigns to the privacy team, and notifies the requestor via Teams."
tags:
- compliance
- data-privacy
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: privacy-compliance
port: 8080
tools:
- name: handle-privacy-request
description: "Given a requestor's employee ID and request type (access, deletion, correction), create a ServiceNow DSAR ticket with the appropriate SLA and notify the requestor via Teams."
inputParameters:
- name: employee_id
in: body
type: string
description: "The employee ID of the person submitting the data privacy request."
- name: request_type
in: body
type: string
description: "Type of privacy request: access, deletion, or correction."
- name: requestor_upn
in: body
type: string
description: "UPN of the requestor for Teams notification."
steps:
- name: create-dsar-ticket
type: call
call: "servicenow-privacy.create-task"
with:
short_description: "DSAR - {{request_type}} request for employee {{employee_id}}"
category: "data_privacy"
assignment_group: "Privacy_Team"
due_date: "30_days_from_now"
- name: notify-requestor
type: call
call: "msteams-privacy.send-message"
with:
recipient_upn: "{{requestor_upn}}"
text: "Your data privacy {{request_type}} request has been received. Ticket: {{create-dsar-ticket.number}}. You will receive a response within 30 days as required by applicable law."
consumes:
- type: http
namespace: servicenow-privacy
baseUri: "https://traderjoes.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/sc_task"
operations:
- name: create-task
method: POST
- type: http
namespace: msteams-privacy
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Retrieves a Datadog monitor status.
naftiko: "0.5"
info:
label: "Datadog Monitor Status Lookup"
description: "Retrieves a Datadog monitor status."
tags:
- observability
- datadog
capability:
exposes:
- type: mcp
namespace: tj-ops
port: 8080
tools:
- name: datadog_monitor_status_lookup
description: "Retrieves a Datadog monitor status."
inputParameters:
- name: entity_id
type: string
description: "Primary identifier."
call: primary.get-datadog
with:
entity_id: "{{entity_id}}"
outputParameters:
- name: result
type: string
mapping: "$.data"
consumes:
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
Monitors DC throughput via Snowflake, creates ServiceNow alerts for bottlenecks, and notifies logistics.
naftiko: "0.5"
info:
label: "Distribution Center Throughput Monitoring"
description: "Monitors DC throughput via Snowflake, creates ServiceNow alerts for bottlenecks, and notifies logistics."
tags:
- logistics
- distribution
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: tj-ops
port: 8080
tools:
- name: distribution_center_throughput_monitoring
description: "Monitors DC throughput via Snowflake, creates ServiceNow alerts for bottlenecks, and notifies logistics."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "Distribution Center Throughput Monitoring: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "Distribution Center Throughput Monitoring for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://traderjoes.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
When an employee departs, revokes Okta access, updates Workday, and notifies IT and HR.
naftiko: "0.5"
info:
label: "Employee Offboarding Workflow"
description: "When an employee departs, revokes Okta access, updates Workday, and notifies IT and HR."
tags:
- hr
- offboarding
- workday
- okta
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: tj-ops
port: 8080
tools:
- name: employee_offboarding_workflow
description: "When an employee departs, revokes Okta access, updates Workday, and notifies IT and HR."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "Employee Offboarding Workflow: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "Employee Offboarding Workflow for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://traderjoes.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
When a store associate receives a promotion or role change in Workday, updates their access profile in ServiceNow and notifies the store manager via Teams.
naftiko: "0.5"
info:
label: "Employee Role Change Workflow"
description: "When a store associate receives a promotion or role change in Workday, updates their access profile in ServiceNow and notifies the store manager via Teams."
tags:
- hr
- role-change
- workday
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-changes
port: 8080
tools:
- name: process-role-change
description: "Given an employee ID, new role, and effective date, update the employee's role in Workday, adjust their access profile in ServiceNow, and notify their manager via Teams."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday employee ID for the associate being promoted or changing roles."
- name: new_role
in: body
type: string
description: "The new job title or role name."
- name: effective_date
in: body
type: string
description: "Effective date of the role change in YYYY-MM-DD format."
steps:
- name: get-employee
type: call
call: "workday-role.get-worker"
with:
worker_id: "{{employee_id}}"
- name: update-access
type: call
call: "servicenow-role.create-request"
with:
short_description: "Access update for role change: {{get-employee.full_name}} to {{new_role}}"
category: "access_management"
due_date: "{{effective_date}}"
- name: notify-manager
type: call
call: "msteams-role.send-message"
with:
recipient_upn: "{{get-employee.manager_email}}"
text: "Role change approved: {{get-employee.full_name}} transitions to {{new_role}} on {{effective_date}}. Access request: {{update-access.number}}"
consumes:
- type: http
namespace: workday-role
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow-role
baseUri: "https://traderjoes.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-role
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Distributes associate engagement survey links via Microsoft Teams to all active store employees retrieved from Workday, tracking participation by store.
naftiko: "0.5"
info:
label: "Employee Survey Distribution"
description: "Distributes associate engagement survey links via Microsoft Teams to all active store employees retrieved from Workday, tracking participation by store."
tags:
- hr
- employee-engagement
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: employee-engagement
port: 8080
tools:
- name: distribute-survey
description: "Given a survey URL and store number, retrieve all active associates from Workday for that store and send them a personalized survey invitation via Teams."
inputParameters:
- name: survey_url
in: body
type: string
description: "The URL link to the employee engagement survey."
- name: store_number
in: body
type: string
description: "The store number to target for survey distribution."
- name: survey_name
in: body
type: string
description: "Name of the survey for messaging context (e.g., 2026 Annual Engagement Survey)."
steps:
- name: get-store-associates
type: call
call: "workday-survey.get-workers"
with:
costCenter: "{{store_number}}"
status: "active"
- name: send-survey-blast
type: call
call: "msteams-survey.post-channel-message"
with:
channel_id: "store-{{store_number}}-associates"
text: "Your voice matters! Please complete the {{survey_name}}: {{survey_url}}. This takes about 5 minutes and your feedback is confidential."
consumes:
- type: http
namespace: workday-survey
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers"
inputParameters:
- name: costCenter
in: query
- name: status
in: query
operations:
- name: get-workers
method: GET
- type: http
namespace: msteams-survey
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: channel_id
in: path
operations:
- name: post-channel-message
method: POST
When an employee expense report is submitted in SAP Concur, validates against policy thresholds and routes for manager approval via ServiceNow.
naftiko: "0.5"
info:
label: "Expense Report Approval"
description: "When an employee expense report is submitted in SAP Concur, validates against policy thresholds and routes for manager approval via ServiceNow."
tags:
- finance
- expense-management
- sap-concur
- servicenow
capability:
exposes:
- type: mcp
namespace: expense-mgmt
port: 8080
tools:
- name: process-expense-report
description: "Given a Concur expense report ID, retrieve the report details, check against policy limits, and create a ServiceNow approval task for the manager if thresholds are exceeded."
inputParameters:
- name: report_id
in: body
type: string
description: "The SAP Concur expense report ID."
- name: manager_email
in: body
type: string
description: "Email of the approving manager."
steps:
- name: get-report
type: call
call: "concur.get-expense-report"
with:
reportId: "{{report_id}}"
- name: create-approval
type: call
call: "servicenow-expense.create-task"
with:
short_description: "Expense approval: Report {{report_id}} - ${{get-report.total_amount}}"
assignment_group: "Finance_Approvals"
assigned_to: "{{manager_email}}"
consumes:
- type: http
namespace: concur
baseUri: "https://www.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_token"
resources:
- name: expense-reports
path: "/expense/reports/{{reportId}}"
inputParameters:
- name: reportId
in: path
operations:
- name: get-expense-report
method: GET
- type: http
namespace: servicenow-expense
baseUri: "https://traderjoes.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
Logs food safety audit results into SAP for quality record-keeping and creates a ServiceNow follow-up task for any critical findings that require corrective action.
naftiko: "0.5"
info:
label: "Food Safety Audit Tracking"
description: "Logs food safety audit results into SAP for quality record-keeping and creates a ServiceNow follow-up task for any critical findings that require corrective action."
tags:
- compliance
- food-safety
- sap
- servicenow
capability:
exposes:
- type: mcp
namespace: food-safety
port: 8080
tools:
- name: log-food-safety-audit
description: "Given a store number, audit date, and findings, record the audit in SAP quality management and create ServiceNow corrective action tasks for any critical failures."
inputParameters:
- name: store_number
in: body
type: string
description: "The store number that underwent the audit."
- name: audit_date
in: body
type: string
description: "Date of the food safety audit in YYYY-MM-DD format."
- name: score
in: body
type: integer
description: "Audit score out of 100."
- name: critical_findings
in: body
type: string
description: "Description of any critical findings requiring corrective action. Leave blank if none."
steps:
- name: log-quality-record
type: call
call: "sap-quality.create-quality-notification"
with:
plant: "{{store_number}}"
notification_date: "{{audit_date}}"
defect_description: "Food safety audit score: {{score}}/100. Findings: {{critical_findings}}"
- name: create-corrective-action
type: call
call: "servicenow-quality.create-task"
with:
short_description: "Corrective action required: Store {{store_number}} food safety audit {{audit_date}} - Score: {{score}}"
category: "food_safety"
priority: "2"
description: "Critical findings: {{critical_findings}}"
consumes:
- type: http
namespace: sap-quality
baseUri: "https://traderjoes-s4.sap.com/sap/opu/odata/sap/API_QUALITYNOTIFICATION_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: quality-notifications
path: "/A_QualityNotification"
operations:
- name: create-quality-notification
method: POST
- type: http
namespace: servicenow-quality
baseUri: "https://traderjoes.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
When a food safety inspection result is logged, stores results in Snowflake, creates corrective action tasks in ServiceNow, and notifies store management on Teams.
naftiko: "0.5"
info:
label: "Food Safety Inspection Result Workflow"
description: "When a food safety inspection result is logged, stores results in Snowflake, creates corrective action tasks in ServiceNow, and notifies store management on Teams."
tags:
- food-safety
- compliance
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: food-safety
port: 8080
tools:
- name: process-inspection-result
description: "Given inspection results, log, create actions, and notify."
inputParameters:
- name: store_id
in: body
type: string
description: "The store ID."
- name: inspection_score
in: body
type: string
description: "The inspection score."
- name: findings
in: body
type: string
description: "Inspection findings summary."
steps:
- name: log-result
type: call
call: "snowflake.execute-query"
with:
statement: "INSERT INTO COMPLIANCE_DB.PUBLIC.INSPECTIONS (store_id, score, findings, inspection_date) VALUES ('{{store_id}}', '{{inspection_score}}', '{{findings}}', CURRENT_DATE())"
- name: create-corrective-action
type: call
call: "servicenow.create-task"
with:
short_description: "Food safety corrective action: Store {{store_id}} — Score: {{inspection_score}}"
description: "{{findings}}"
assignment_group: "Store_Management"
- name: notify-management
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.teams_food_safety_channel"
text: "Inspection result: Store {{store_id}} | Score: {{inspection_score}} | Task: {{create-corrective-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://traderjoes.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/sc_task"
operations:
- name: create-task
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/food-safety/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Initiates month-end period close procedures in SAP, creates a ServiceNow checklist for the finance team, and notifies the controller via Teams when all steps are complete.
naftiko: "0.5"
info:
label: "General Ledger Period Close"
description: "Initiates month-end period close procedures in SAP, creates a ServiceNow checklist for the finance team, and notifies the controller via Teams when all steps are complete."
tags:
- finance
- period-close
- sap
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: finance-close
port: 8080
tools:
- name: initiate-period-close
description: "Given a fiscal period and year, open the period-close process in SAP, create a ServiceNow task checklist for the finance team, and notify the controller via Teams."
inputParameters:
- name: fiscal_period
in: body
type: string
description: "Fiscal period number (01-12)."
- name: fiscal_year
in: body
type: string
description: "Fiscal year (e.g., 2026)."
- name: controller_upn
in: body
type: string
description: "UPN of the financial controller to notify."
steps:
- name: open-period
type: call
call: "sap-close.open-fiscal-period"
with:
period: "{{fiscal_period}}"
year: "{{fiscal_year}}"
- name: create-checklist
type: call
call: "servicenow-close.create-task"
with:
short_description: "Period close checklist FY{{fiscal_year}}-P{{fiscal_period}}"
category: "finance_close"
assignment_group: "Finance_Accounting"
- name: notify-controller
type: call
call: "msteams-close.send-message"
with:
recipient_upn: "{{controller_upn}}"
text: "Period close initiated for FY{{fiscal_year}}-P{{fiscal_period}}. Finance checklist task: {{create-checklist.number}}. Please review and approve all journal entries by the close deadline."
consumes:
- type: http
namespace: sap-close
baseUri: "https://traderjoes-s4.sap.com/sap/opu/odata/sap/API_FISCALPERIOD_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: fiscal-periods
path: "/A_FiscalPeriod"
operations:
- name: open-fiscal-period
method: POST
- type: http
namespace: servicenow-close
baseUri: "https://traderjoes.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/sc_task"
operations:
- name: create-task
method: POST
- type: http
namespace: msteams-close
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
When Dependabot finds a vulnerability, creates Jira ticket and alerts security.
naftiko: "0.5"
info:
label: "GitHub Dependabot Vulnerability Triage"
description: "When Dependabot finds a vulnerability, creates Jira ticket and alerts security."
tags:
- security
- github
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: tj-ops
port: 8080
tools:
- name: github_dependabot_vulnerability_triage
description: "When Dependabot finds a vulnerability, creates Jira ticket and alerts security."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "GitHub Dependabot Vulnerability Triage: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "GitHub Dependabot Vulnerability Triage for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://traderjoes.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
Retrieves CI/CD status for a repository.
naftiko: "0.5"
info:
label: "GitHub Repository Status Lookup"
description: "Retrieves CI/CD status for a repository."
tags:
- devops
- github
capability:
exposes:
- type: mcp
namespace: tj-ops
port: 8080
tools:
- name: github_repository_status_lookup
description: "Retrieves CI/CD status for a repository."
inputParameters:
- name: entity_id
type: string
description: "Primary identifier."
call: primary.get-github
with:
entity_id: "{{entity_id}}"
outputParameters:
- name: result
type: string
mapping: "$.data"
consumes:
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
When a product's inventory falls below the reorder threshold in SAP, creates a purchase requisition and notifies the store's category buyer via Teams.
naftiko: "0.5"
info:
label: "Inventory Reorder Alert"
description: "When a product's inventory falls below the reorder threshold in SAP, creates a purchase requisition and notifies the store's category buyer via Teams."
tags:
- supply-chain
- inventory
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: inventory-mgmt
port: 8080
tools:
- name: trigger-reorder-alert
description: "Given a product SKU and store number with below-threshold inventory, create a SAP purchase requisition and notify the category buyer via Teams."
inputParameters:
- name: sku
in: body
type: string
description: "The product SKU with low inventory."
- name: store_number
in: body
type: string
description: "The store number where the inventory is low."
- name: current_quantity
in: body
type: integer
description: "Current on-hand quantity for the SKU."
- name: buyer_upn
in: body
type: string
description: "UPN of the category buyer to notify."
steps:
- name: create-requisition
type: call
call: "sap-inventory.create-purchase-requisition"
with:
material: "{{sku}}"
plant: "{{store_number}}"
quantity: "50"
- name: notify-buyer
type: call
call: "msteams-inventory.send-message"
with:
recipient_upn: "{{buyer_upn}}"
text: "Low inventory alert: SKU {{sku}} at Store {{store_number}} has {{current_quantity}} units remaining. Purchase requisition created: {{create-requisition.requisition_number}}"
consumes:
- type: http
namespace: sap-inventory
baseUri: "https://traderjoes-s4.sap.com/sap/opu/odata/sap/API_PURCHASEREQ_PROCESS_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: purchase-requisitions
path: "/A_PurchaseRequisitionHeader"
operations:
- name: create-purchase-requisition
method: POST
- type: http
namespace: msteams-inventory
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
When GitHub finds a vulnerability, creates Jira ticket, opens ServiceNow change request, and alerts security.
naftiko: "0.5"
info:
label: "IT Security Vulnerability Remediation"
description: "When GitHub finds a vulnerability, creates Jira ticket, opens ServiceNow change request, and alerts security."
tags:
- security
- github
- jira
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: tj-ops
port: 8080
tools:
- name: it_security_vulnerability_remediation
description: "When GitHub finds a vulnerability, creates Jira ticket, opens ServiceNow change request, and alerts security."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "IT Security Vulnerability Remediation: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "IT Security Vulnerability Remediation for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://traderjoes.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
Retrieves a Jira issue by key.
naftiko: "0.5"
info:
label: "Jira Issue Lookup"
description: "Retrieves a Jira issue by key."
tags:
- project-management
- jira
capability:
exposes:
- type: mcp
namespace: tj-ops
port: 8080
tools:
- name: jira_issue_lookup
description: "Retrieves a Jira issue by key."
inputParameters:
- name: entity_id
type: string
description: "Primary identifier."
call: primary.get-jira
with:
entity_id: "{{entity_id}}"
outputParameters:
- name: result
type: string
mapping: "$.data"
consumes:
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
When Datadog detects a deployment failure, creates ServiceNow incident and alerts platform team.
naftiko: "0.5"
info:
label: "Kubernetes Deployment Failure Alert"
description: "When Datadog detects a deployment failure, creates ServiceNow incident and alerts platform team."
tags:
- devops
- kubernetes
- datadog
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: tj-ops
port: 8080
tools:
- name: kubernetes_deployment_failure_alert
description: "When Datadog detects a deployment failure, creates ServiceNow incident and alerts platform team."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "Kubernetes Deployment Failure Alert: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "Kubernetes Deployment Failure Alert for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://traderjoes.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
Retrieves scheduled versus actual labor hours from ADP for a store and week, and flags any overtime or compliance violations for the store manager.
naftiko: "0.5"
info:
label: "Labor Scheduling Compliance Check"
description: "Retrieves scheduled versus actual labor hours from ADP for a store and week, and flags any overtime or compliance violations for the store manager."
tags:
- hr
- labor-compliance
- adp
- reporting
capability:
exposes:
- type: mcp
namespace: labor-compliance
port: 8080
tools:
- name: check-labor-compliance
description: "Given a store number and pay period dates, retrieve scheduled and actual hours from ADP, calculate overtime exposure, and return a compliance summary."
inputParameters:
- name: store_number
in: body
type: string
description: "The store number to audit for labor compliance."
- name: period_start
in: body
type: string
description: "Pay period start date in YYYY-MM-DD format."
- name: period_end
in: body
type: string
description: "Pay period end date in YYYY-MM-DD format."
call: "adp-labor.get-time-details"
with:
costCenter: "{{store_number}}"
startDate: "{{period_start}}"
endDate: "{{period_end}}"
outputParameters:
- name: total_scheduled_hours
type: number
mapping: "$.totalScheduledHours"
- name: total_actual_hours
type: number
mapping: "$.totalActualHours"
- name: overtime_hours
type: number
mapping: "$.overtimeHours"
- name: violations
type: array
mapping: "$.complianceViolations"
consumes:
- type: http
namespace: adp-labor
baseUri: "https://api.adp.com"
authentication:
type: bearer
token: "$secrets.adp_token"
resources:
- name: time-details
path: "/time/v2/workers/time-details"
inputParameters:
- name: costCenter
in: query
- name: startDate
in: query
- name: endDate
in: query
operations:
- name: get-time-details
method: GET
Pulls open positions from Workday, creates LinkedIn postings, and posts summary to talent team.
naftiko: "0.5"
info:
label: "LinkedIn Talent Acquisition Campaign"
description: "Pulls open positions from Workday, creates LinkedIn postings, and posts summary to talent team."
tags:
- hr
- talent-acquisition
- workday
- linkedin
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: tj-ops
port: 8080
tools:
- name: linkedin_talent_acquisition_campaign
description: "Pulls open positions from Workday, creates LinkedIn postings, and posts summary to talent team."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "LinkedIn Talent Acquisition Campaign: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "LinkedIn Talent Acquisition Campaign for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://traderjoes.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
Initiates annual performance review cycles in Workday for store managers, tracks completion, and sends reminders via Microsoft Teams for outstanding reviews.
naftiko: "0.5"
info:
label: "Manager Performance Review Workflow"
description: "Initiates annual performance review cycles in Workday for store managers, tracks completion, and sends reminders via Microsoft Teams for outstanding reviews."
tags:
- hr
- performance-management
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: performance-mgmt
port: 8080
tools:
- name: initiate-performance-reviews
description: "Given a review cycle name and due date, launch performance review templates in Workday for all store managers and post a kickoff notification to the management Teams channel."
inputParameters:
- name: review_cycle
in: body
type: string
description: "Name of the review cycle (e.g., 2026 Annual Review)."
- name: due_date
in: body
type: string
description: "Review submission deadline in YYYY-MM-DD format."
- name: management_channel_id
in: body
type: string
description: "Teams channel ID for the store management group."
steps:
- name: launch-review-cycle
type: call
call: "workday-perf.create-review-cycle"
with:
cycleName: "{{review_cycle}}"
dueDate: "{{due_date}}"
- name: notify-managers
type: call
call: "msteams-perf.post-channel-message"
with:
channel_id: "{{management_channel_id}}"
text: "{{review_cycle}} performance review cycle is now open. Complete your team reviews in Workday by {{due_date}}. Review cycle ID: {{launch-review-cycle.cycle_id}}"
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: review-cycles
path: "/performanceReviewCycles"
operations:
- name: create-review-cycle
method: POST
- type: http
namespace: msteams-perf
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: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Posts a message to a Microsoft Teams channel for automated notifications.
naftiko: "0.5"
info:
label: "Microsoft Teams Channel Message Post"
description: "Posts a message to a Microsoft Teams channel for automated notifications."
tags:
- communications
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: comms
port: 8080
tools:
- name: post-teams-message
description: "Send a message to a Teams channel."
inputParameters:
- name: team_id
in: body
type: string
description: "The Teams team ID."
- name: channel_id
in: body
type: string
description: "The channel ID."
- name: message_text
in: body
type: string
description: "The message content."
call: "msteams.post-channel-message"
with:
team_id: "{{team_id}}"
channel_id: "{{channel_id}}"
text: "{{message_text}}"
outputParameters:
- name: message_id
type: string
mapping: "$.id"
consumes:
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
When a new store associate is hired, provisions their Workday profile, opens a ServiceNow onboarding ticket, and sends a Microsoft Teams welcome message to their store manager.
naftiko: "0.5"
info:
label: "New Store Associate Onboarding"
description: "When a new store associate is hired, provisions their Workday profile, opens a ServiceNow onboarding ticket, and sends a Microsoft Teams welcome message to their store manager."
tags:
- hr
- onboarding
- workday
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-onboarding
port: 8080
tools:
- name: trigger-associate-onboarding
description: "Given a new hire's Workday employee ID and store number, orchestrate the full store associate onboarding sequence across ServiceNow and Microsoft Teams."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday employee ID for the new store associate."
- name: store_number
in: body
type: string
description: "The Trader Joe's store number where the associate will work."
- name: start_date
in: body
type: string
description: "The associate's first day in YYYY-MM-DD format."
steps:
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{employee_id}}"
- name: open-onboarding-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "New associate onboarding: {{get-employee.full_name}} - Store {{store_number}}"
category: "hr_onboarding"
assignment_group: "Store_IT_Support"
- name: notify-manager
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{get-employee.manager_email}}"
text: "New associate {{get-employee.first_name}} {{get-employee.last_name}} starts {{start_date}} at Store {{store_number}}. Onboarding ticket: {{open-onboarding-ticket.number}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://traderjoes.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: chat-messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
When a new store opening is planned, creates a structured onboarding project in ServiceNow covering IT provisioning, HR setup, and supplier onboarding milestones.
naftiko: "0.5"
info:
label: "New Store Opening Checklist"
description: "When a new store opening is planned, creates a structured onboarding project in ServiceNow covering IT provisioning, HR setup, and supplier onboarding milestones."
tags:
- operations
- store-opening
- servicenow
- workday
- sap
capability:
exposes:
- type: mcp
namespace: store-expansion
port: 8080
tools:
- name: initiate-store-opening
description: "Given a new store number, opening date, and region, create a ServiceNow project with milestone tasks for IT provisioning, HR hiring setup, and supplier onboarding."
inputParameters:
- name: store_number
in: body
type: string
description: "The new store number being opened."
- name: opening_date
in: body
type: string
description: "Planned store opening date in YYYY-MM-DD format."
- name: region
in: body
type: string
description: "Geographic region of the new store (e.g., Northeast, West Coast)."
steps:
- name: create-it-task
type: call
call: "servicenow-store.create-task"
with:
short_description: "IT provisioning for Store {{store_number}} opening {{opening_date}}"
category: "store_opening"
assignment_group: "Store_IT"
- name: create-hr-task
type: call
call: "servicenow-store.create-task"
with:
short_description: "HR setup and hiring for Store {{store_number}} - {{region}}"
category: "store_opening"
assignment_group: "HR_Talent_Acquisition"
- name: create-supplier-task
type: call
call: "servicenow-store.create-task"
with:
short_description: "Supplier onboarding for Store {{store_number}} - opening {{opening_date}}"
category: "store_opening"
assignment_group: "Procurement"
consumes:
- type: http
namespace: servicenow-store
baseUri: "https://traderjoes.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
Queries Okta for users without MFA, creates ServiceNow compliance ticket, and notifies IT security.
naftiko: "0.5"
info:
label: "Okta MFA Non-Compliance Escalation"
description: "Queries Okta for users without MFA, creates ServiceNow compliance ticket, and notifies IT security."
tags:
- security
- identity
- okta
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: tj-ops
port: 8080
tools:
- name: okta_mfa_non_compliance_escalation
description: "Queries Okta for users without MFA, creates ServiceNow compliance ticket, and notifies IT security."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "Okta MFA Non-Compliance Escalation: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "Okta MFA Non-Compliance Escalation for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://traderjoes.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
Retrieves Okta user status by email.
naftiko: "0.5"
info:
label: "Okta User Status Lookup"
description: "Retrieves Okta user status by email."
tags:
- identity
- okta
capability:
exposes:
- type: mcp
namespace: tj-ops
port: 8080
tools:
- name: okta_user_status_lookup
description: "Retrieves Okta user status by email."
inputParameters:
- name: entity_id
type: string
description: "Primary identifier."
call: primary.get-okta
with:
entity_id: "{{entity_id}}"
outputParameters:
- name: result
type: string
mapping: "$.data"
consumes:
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
Tracks organic certification deadlines in Jira, validates documentation in SharePoint, and notifies compliance.
naftiko: "0.5"
info:
label: "Organic Product Certification Tracking"
description: "Tracks organic certification deadlines in Jira, validates documentation in SharePoint, and notifies compliance."
tags:
- compliance
- organic
- jira
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: tj-ops
port: 8080
tools:
- name: organic_product_certification_tracking
description: "Tracks organic certification deadlines in Jira, validates documentation in SharePoint, and notifies compliance."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "Organic Product Certification Tracking: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "Organic Product Certification Tracking for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://traderjoes.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
Retrieves a PagerDuty incident by ID.
naftiko: "0.5"
info:
label: "PagerDuty Incident Lookup"
description: "Retrieves a PagerDuty incident by ID."
tags:
- itsm
- pagerduty
capability:
exposes:
- type: mcp
namespace: tj-ops
port: 8080
tools:
- name: pagerduty_incident_lookup
description: "Retrieves a PagerDuty incident by ID."
inputParameters:
- name: entity_id
type: string
description: "Primary identifier."
call: primary.get-pagerduty
with:
entity_id: "{{entity_id}}"
outputParameters:
- name: result
type: string
mapping: "$.data"
consumes:
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
Retrieves current store headcount by department and cost center from ADP for workforce planning and payroll reporting.
naftiko: "0.5"
info:
label: "Payroll Headcount Snapshot"
description: "Retrieves current store headcount by department and cost center from ADP for workforce planning and payroll reporting."
tags:
- hr
- payroll
- reporting
- adp
capability:
exposes:
- type: mcp
namespace: hr-reporting
port: 8080
tools:
- name: get-store-headcount
description: "Returns a list of active store associates grouped by store number and department with employment type. Use for payroll planning and labor cost analysis."
inputParameters:
- name: store_number
in: body
type: string
description: "The store number to retrieve headcount for. Leave blank to retrieve all stores."
call: "adp.get-workers"
with:
costCenter: "{{store_number}}"
outputParameters:
- name: workers
type: array
mapping: "$.workers"
- name: total_count
type: number
mapping: "$.totalCount"
consumes:
- type: http
namespace: adp
baseUri: "https://api.adp.com"
authentication:
type: bearer
token: "$secrets.adp_token"
resources:
- name: workers
path: "/hr/v2/workers"
inputParameters:
- name: costCenter
in: query
operations:
- name: get-workers
method: GET
Coordinates a point-of-sale system upgrade across stores by creating change requests in ServiceNow, scheduling maintenance windows, and notifying store managers via Teams.
naftiko: "0.5"
info:
label: "POS System Upgrade Coordination"
description: "Coordinates a point-of-sale system upgrade across stores by creating change requests in ServiceNow, scheduling maintenance windows, and notifying store managers via Teams."
tags:
- itsm
- pos-systems
- servicenow
- microsoft-teams
- change-management
capability:
exposes:
- type: mcp
namespace: pos-upgrades
port: 8080
tools:
- name: schedule-pos-upgrade
description: "Given a store number, upgrade version, and maintenance window, create a ServiceNow change request for the POS upgrade and notify the store manager of the scheduled downtime via Teams."
inputParameters:
- name: store_number
in: body
type: string
description: "The store number scheduled for POS upgrade."
- name: upgrade_version
in: body
type: string
description: "The POS software version being deployed."
- name: maintenance_window_start
in: body
type: string
description: "Start of the maintenance window in ISO 8601 format."
- name: maintenance_window_end
in: body
type: string
description: "End of the maintenance window in ISO 8601 format."
- name: store_manager_upn
in: body
type: string
description: "UPN of the store manager to notify."
steps:
- name: create-change-request
type: call
call: "servicenow-pos.create-change"
with:
short_description: "POS upgrade v{{upgrade_version}} at Store {{store_number}}"
category: "software_upgrade"
start_date: "{{maintenance_window_start}}"
end_date: "{{maintenance_window_end}}"
assignment_group: "Store_IT"
- name: notify-store-manager
type: call
call: "msteams-pos.send-message"
with:
recipient_upn: "{{store_manager_upn}}"
text: "POS system upgrade scheduled for Store {{store_number}}: {{maintenance_window_start}} to {{maintenance_window_end}}. Version: {{upgrade_version}}. Change request: {{create-change-request.number}}. POS systems will be unavailable during this window."
consumes:
- type: http
namespace: servicenow-pos
baseUri: "https://traderjoes.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-pos
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Checks the export status of a Power BI report for store analytics distribution.
naftiko: "0.5"
info:
label: "Power BI Report Status Check"
description: "Checks the export status of a Power BI report for store analytics distribution."
tags:
- analytics
- power-bi
capability:
exposes:
- type: mcp
namespace: bi-reporting
port: 8080
tools:
- name: get-export-status
description: "Check Power BI report export status."
inputParameters:
- name: group_id
in: body
type: string
description: "The workspace ID."
- name: report_id
in: body
type: string
description: "The report ID."
- name: export_id
in: body
type: string
description: "The export ID."
call: "powerbi.get-export"
with:
group_id: "{{group_id}}"
report_id: "{{report_id}}"
export_id: "{{export_id}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: exports
path: "/groups/{{group_id}}/reports/{{report_id}}/exports/{{export_id}}"
inputParameters:
- name: group_id
in: path
- name: report_id
in: path
- name: export_id
in: path
operations:
- name: get-export
method: GET
Tracks private label product development milestones in Jira, validates supplier readiness in SAP, and notifies the product team.
naftiko: "0.5"
info:
label: "Private Label Product Development Tracking"
description: "Tracks private label product development milestones in Jira, validates supplier readiness in SAP, and notifies the product team."
tags:
- product-development
- jira
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: tj-ops
port: 8080
tools:
- name: private_label_product_development_tracking
description: "Tracks private label product development milestones in Jira, validates supplier readiness in SAP, and notifies the product team."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "Private Label Product Development Tracking: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "Private Label Product Development Tracking for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://traderjoes.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
When a product recall is issued, creates a high-priority ServiceNow incident, notifies all store managers via Teams, and logs the event in SAP for compliance tracking.
naftiko: "0.5"
info:
label: "Product Recall Response Coordination"
description: "When a product recall is issued, creates a high-priority ServiceNow incident, notifies all store managers via Teams, and logs the event in SAP for compliance tracking."
tags:
- operations
- compliance
- product-recall
- servicenow
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: product-safety
port: 8080
tools:
- name: handle-product-recall
description: "Given a product UPC, recall reason, and severity, create a critical ServiceNow incident for all stores, log the recall in SAP, and broadcast notification to all store managers via Teams."
inputParameters:
- name: product_upc
in: body
type: string
description: "The UPC code of the recalled product."
- name: recall_reason
in: body
type: string
description: "The reason for the recall (e.g., contamination, labeling error, allergen mislabeling)."
- name: severity
in: body
type: string
description: "Recall severity: Class I (serious health hazard), Class II (remote health hazard), Class III (no health hazard)."
- name: supplier_name
in: body
type: string
description: "Name of the supplier issuing the recall."
steps:
- name: create-recall-incident
type: call
call: "servicenow-recall.create-incident"
with:
short_description: "PRODUCT RECALL: UPC {{product_upc}} - {{supplier_name}} - {{severity}}"
category: "food_safety"
priority: "1"
description: "Reason: {{recall_reason}}"
- name: log-sap-event
type: call
call: "sap-recall.create-quality-notification"
with:
upc: "{{product_upc}}"
defect_description: "{{recall_reason}}"
vendor_name: "{{supplier_name}}"
- name: broadcast-teams
type: call
call: "msteams-recall.post-channel-message"
with:
channel_id: "all-store-managers"
text: "URGENT PRODUCT RECALL: UPC {{product_upc}} ({{supplier_name}}) - {{severity}}. Reason: {{recall_reason}}. Remove from shelves immediately. Incident: {{create-recall-incident.number}}"
consumes:
- type: http
namespace: servicenow-recall
baseUri: "https://traderjoes.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: sap-recall
baseUri: "https://traderjoes-s4.sap.com/sap/opu/odata/sap/API_QUALITYNOTIFICATION_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: quality-notifications
path: "/A_QualityNotification"
operations:
- name: create-quality-notification
method: POST
- type: http
namespace: msteams-recall
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: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Looks up a SAP purchase order by PO number and returns vendor, status, and line item details for procurement verification.
naftiko: "0.5"
info:
label: "Purchase Order Lookup"
description: "Looks up a SAP purchase order by PO number and returns vendor, status, and line item details for procurement verification."
tags:
- finance
- procurement
- sap
capability:
exposes:
- type: mcp
namespace: procurement
port: 8080
tools:
- name: get-purchase-order
description: "Look up a SAP purchase order by PO number. Returns header status, vendor name, total value, and open line items. Use for procurement approvals and receiving verification."
inputParameters:
- name: po_number
in: body
type: string
description: "The 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: vendor
type: string
mapping: "$.d.Supplier.CompanyName"
- name: total_value
type: string
mapping: "$.d.TotalAmount"
- name: currency
type: string
mapping: "$.d.TransactionCurrency"
consumes:
- type: http
namespace: sap
baseUri: "https://traderjoes-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
Analyzes refrigeration telemetry from Snowflake, predicts failures, and creates SAP maintenance notifications.
naftiko: "0.5"
info:
label: "Refrigeration System Predictive Maintenance"
description: "Analyzes refrigeration telemetry from Snowflake, predicts failures, and creates SAP maintenance notifications."
tags:
- facilities
- refrigeration
- snowflake
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: tj-ops
port: 8080
tools:
- name: refrigeration_system_predictive_maintenance
description: "Analyzes refrigeration telemetry from Snowflake, predicts failures, and creates SAP maintenance notifications."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "Refrigeration System Predictive Maintenance: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "Refrigeration System Predictive Maintenance for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://traderjoes.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
Retrieves the status and terms of a supplier contract in SAP Ariba.
naftiko: "0.5"
info:
label: "SAP Ariba Contract Status Lookup"
description: "Retrieves the status and terms of a supplier contract in SAP Ariba."
tags:
- procurement
- sap-ariba
capability:
exposes:
- type: mcp
namespace: procurement
port: 8080
tools:
- name: get-contract-status
description: "Look up an Ariba contract by ID."
inputParameters:
- name: contract_id
in: body
type: string
description: "The contract ID."
call: "ariba.get-contract"
with:
contract_id: "{{contract_id}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/contract-management/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: contracts
path: "/contracts/{{contract_id}}"
inputParameters:
- name: contract_id
in: path
operations:
- name: get-contract
method: GET
Qualifies new food suppliers in SAP Ariba, runs food safety checks, and notifies the sourcing team.
naftiko: "0.5"
info:
label: "SAP Ariba New Supplier Qualification"
description: "Qualifies new food suppliers in SAP Ariba, runs food safety checks, and notifies the sourcing team."
tags:
- procurement
- food-safety
- sap-ariba
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: tj-ops
port: 8080
tools:
- name: sap_ariba_new_supplier_qualification
description: "Qualifies new food suppliers in SAP Ariba, runs food safety checks, and notifies the sourcing team."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "SAP Ariba New Supplier Qualification: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "SAP Ariba New Supplier Qualification for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://traderjoes.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
Retrieves SAP cost center details.
naftiko: "0.5"
info:
label: "SAP Cost Center Lookup"
description: "Retrieves SAP cost center details."
tags:
- finance
- sap
capability:
exposes:
- type: mcp
namespace: tj-ops
port: 8080
tools:
- name: sap_cost_center_lookup
description: "Retrieves SAP cost center details."
inputParameters:
- name: entity_id
type: string
description: "Primary identifier."
call: primary.get-sap
with:
entity_id: "{{entity_id}}"
outputParameters:
- name: result
type: string
mapping: "$.data"
consumes:
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
Retrieves general ledger account balance from SAP by company code and GL account.
naftiko: "0.5"
info:
label: "SAP GL Account Balance Lookup"
description: "Retrieves general ledger account balance from SAP by company code and GL account."
tags:
- finance
- sap
capability:
exposes:
- type: mcp
namespace: erp-finance
port: 8080
tools:
- name: get-gl-balance
description: "Look up GL account balance in SAP."
inputParameters:
- name: company_code
in: body
type: string
description: "The SAP company code."
- name: gl_account
in: body
type: string
description: "The GL account number."
call: "sap.get-gl-balance"
with:
company_code: "{{company_code}}"
gl_account: "{{gl_account}}"
outputParameters:
- name: net_balance
type: string
mapping: "$.d.Balance"
consumes:
- type: http
namespace: sap
baseUri: "https://traderjoes-s4.sap.com/sap/opu/odata/sap/API_GLACCOUNTBALANCE_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: gl-balances
path: "/A_GLAccountBalance(CompanyCode='{{company_code}}',GLAccount='{{gl_account}}')"
inputParameters:
- name: company_code
in: path
- name: gl_account
in: path
operations:
- name: get-gl-balance
method: GET
Compares intercompany balances across SAP company codes and creates a ServiceNow task for discrepancies.
naftiko: "0.5"
info:
label: "SAP Intercompany Reconciliation"
description: "Compares intercompany balances across SAP company codes and creates a ServiceNow task for discrepancies."
tags:
- finance
- sap
- servicenow
capability:
exposes:
- type: mcp
namespace: finance-recon
port: 8080
tools:
- name: reconcile-intercompany
description: "Given two company codes, compare balances and create task."
inputParameters:
- name: company_code_a
in: body
type: string
description: "First company code."
- name: company_code_b
in: body
type: string
description: "Second company code."
steps:
- name: get-balance-a
type: call
call: "sap.get-ic-balance"
with:
company_code: "{{company_code_a}}"
partner: "{{company_code_b}}"
- name: get-balance-b
type: call
call: "sap.get-ic-balance"
with:
company_code: "{{company_code_b}}"
partner: "{{company_code_a}}"
- name: create-task
type: call
call: "servicenow.create-task"
with:
short_description: "IC reconciliation: {{company_code_a}} vs {{company_code_b}}"
assignment_group: "Finance_IC"
consumes:
- type: http
namespace: sap
baseUri: "https://traderjoes-s4.sap.com/sap/opu/odata/sap/API_GLACCOUNTBALANCE_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: balances
path: "/A_GLAccountBalance"
operations:
- name: get-ic-balance
method: GET
- type: http
namespace: servicenow
baseUri: "https://traderjoes.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
When inventory shrink exceeds threshold at a store, pulls data from SAP, creates a Snowflake audit log, and creates a ServiceNow investigation task.
naftiko: "0.5"
info:
label: "SAP Inventory Shrink Investigation"
description: "When inventory shrink exceeds threshold at a store, pulls data from SAP, creates a Snowflake audit log, and creates a ServiceNow investigation task."
tags:
- loss-prevention
- sap
- snowflake
- servicenow
capability:
exposes:
- type: mcp
namespace: loss-prevention
port: 8080
tools:
- name: investigate-shrink
description: "Given a store and material with high shrink, investigate and log."
inputParameters:
- name: store_id
in: body
type: string
description: "The store ID."
- name: material_number
in: body
type: string
description: "The material number."
- name: shrink_amount
in: body
type: string
description: "The shrink dollar amount."
steps:
- name: get-material
type: call
call: "sap.get-material"
with:
material_number: "{{material_number}}"
- name: log-shrink
type: call
call: "snowflake.execute-query"
with:
statement: "INSERT INTO RETAIL_DB.PUBLIC.SHRINK_LOG (store_id, material, amount, logged_at) VALUES ('{{store_id}}', '{{material_number}}', '{{shrink_amount}}', CURRENT_TIMESTAMP())"
- name: create-investigation
type: call
call: "servicenow.create-task"
with:
short_description: "Shrink investigation: {{get-material.description}} at store {{store_id}} — ${{shrink_amount}}"
assignment_group: "Loss_Prevention"
consumes:
- type: http
namespace: sap
baseUri: "https://traderjoes-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: materials
path: "/A_Material('{{material_number}}')"
inputParameters:
- name: material_number
in: path
operations:
- name: get-material
method: GET
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://traderjoes.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
Retrieves product material master data from SAP by material number, returning description, unit of measure, and stock levels.
naftiko: "0.5"
info:
label: "SAP Material Master Lookup"
description: "Retrieves product material master data from SAP by material number, returning description, unit of measure, and stock levels."
tags:
- supply-chain
- sap
capability:
exposes:
- type: mcp
namespace: erp-materials
port: 8080
tools:
- name: get-material
description: "Look up a SAP material master record by number. Returns description and stock."
inputParameters:
- name: material_number
in: body
type: string
description: "The SAP material number."
call: "sap.get-material"
with:
material_number: "{{material_number}}"
outputParameters:
- name: description
type: string
mapping: "$.d.MaterialDescription"
- name: unrestricted_stock
type: string
mapping: "$.d.UnrestrictedStock"
consumes:
- type: http
namespace: sap
baseUri: "https://traderjoes-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: materials
path: "/A_Material('{{material_number}}')"
inputParameters:
- name: material_number
in: path
operations:
- name: get-material
method: GET
Runs SAP trial balance checks, creates a ServiceNow period close task, and posts status to the finance Teams channel.
naftiko: "0.5"
info:
label: "SAP Period Close Checklist Workflow"
description: "Runs SAP trial balance checks, creates a ServiceNow period close task, and posts status to the finance Teams channel."
tags:
- finance
- sap
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: finance-close
port: 8080
tools:
- name: run-period-close
description: "Given a company code and period, run close procedures."
inputParameters:
- name: company_code
in: body
type: string
description: "The SAP company code."
- name: fiscal_period
in: body
type: string
description: "The fiscal period."
steps:
- name: get-balance
type: call
call: "sap.get-trial-balance"
with:
company_code: "{{company_code}}"
period: "{{fiscal_period}}"
- name: create-task
type: call
call: "servicenow.create-task"
with:
short_description: "Period close: {{company_code}} — {{fiscal_period}}"
assignment_group: "Finance_Close"
- name: notify
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.teams_finance_channel"
text: "Period close: {{company_code}} {{fiscal_period}} | Variance: {{get-balance.variance}} | Task: {{create-task.number}}"
consumes:
- type: http
namespace: sap
baseUri: "https://traderjoes-s4.sap.com/sap/opu/odata/sap/API_GLACCOUNTBALANCE_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: balances
path: "/A_GLAccountBalance"
operations:
- name: get-trial-balance
method: GET
- type: http
namespace: servicenow
baseUri: "https://traderjoes.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/sc_task"
operations:
- name: create-task
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/finance/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves a maintenance order from SAP for store equipment tracking.
naftiko: "0.5"
info:
label: "SAP Plant Maintenance Order Lookup"
description: "Retrieves a maintenance order from SAP for store equipment tracking."
tags:
- operations
- sap
- maintenance
capability:
exposes:
- type: mcp
namespace: store-maintenance
port: 8080
tools:
- name: get-maintenance-order
description: "Look up a SAP maintenance order for store equipment."
inputParameters:
- name: order_number
in: body
type: string
description: "The maintenance order number."
call: "sap.get-pm-order"
with:
order_number: "{{order_number}}"
outputParameters:
- name: status
type: string
mapping: "$.d.OrderStatus"
- name: equipment
type: string
mapping: "$.d.Equipment"
consumes:
- type: http
namespace: sap
baseUri: "https://traderjoes-s4.sap.com/sap/opu/odata/sap/API_MAINTENANCEORDER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: orders
path: "/A_MaintenanceOrder('{{order_number}}')"
inputParameters:
- name: order_number
in: path
operations:
- name: get-pm-order
method: GET
Reconciles vendor payments between SAP and Snowflake, identifies discrepancies, and notifies AP team.
naftiko: "0.5"
info:
label: "SAP Vendor Payment Reconciliation"
description: "Reconciles vendor payments between SAP and Snowflake, identifies discrepancies, and notifies AP team."
tags:
- finance
- sap
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: tj-ops
port: 8080
tools:
- name: sap_vendor_payment_reconciliation
description: "Reconciles vendor payments between SAP and Snowflake, identifies discrepancies, and notifies AP team."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "SAP Vendor Payment Reconciliation: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "SAP Vendor Payment Reconciliation for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://traderjoes.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
Checks vendor invoice payment status in SAP, returning payment date and amount.
naftiko: "0.5"
info:
label: "SAP Vendor Payment Status Check"
description: "Checks vendor invoice payment status in SAP, returning payment date and amount."
tags:
- finance
- sap
- accounts-payable
capability:
exposes:
- type: mcp
namespace: erp-ap
port: 8080
tools:
- name: get-payment-status
description: "Check vendor payment status in SAP."
inputParameters:
- name: invoice_reference
in: body
type: string
description: "The invoice reference."
- name: company_code
in: body
type: string
description: "The company code."
call: "sap.get-payment"
with:
invoice_reference: "{{invoice_reference}}"
company_code: "{{company_code}}"
outputParameters:
- name: payment_date
type: string
mapping: "$.d.ClearingDate"
consumes:
- type: http
namespace: sap
baseUri: "https://traderjoes-s4.sap.com/sap/opu/odata/sap/API_SUPPLIERINVOICE_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: invoices
path: "/A_SupplierInvoice(SupplierInvoice='{{invoice_reference}}',CompanyCode='{{company_code}}')"
inputParameters:
- name: invoice_reference
in: path
- name: company_code
in: path
operations:
- name: get-payment
method: GET
Retrieves warehouse stock levels from SAP.
naftiko: "0.5"
info:
label: "SAP Warehouse Stock Overview"
description: "Retrieves warehouse stock levels from SAP."
tags:
- supply-chain
- sap
capability:
exposes:
- type: mcp
namespace: tj-ops
port: 8080
tools:
- name: sap_warehouse_stock_overview
description: "Retrieves warehouse stock levels from SAP."
inputParameters:
- name: entity_id
type: string
description: "Primary identifier."
call: primary.get-sap
with:
entity_id: "{{entity_id}}"
outputParameters:
- name: result
type: string
mapping: "$.data"
consumes:
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
Launches a seasonal hiring campaign by posting positions in Workday, tracking applicant volume, and notifying store managers of open requisitions via Teams.
naftiko: "0.5"
info:
label: "Seasonal Hiring Campaign Launch"
description: "Launches a seasonal hiring campaign by posting positions in Workday, tracking applicant volume, and notifying store managers of open requisitions via Teams."
tags:
- hr
- recruiting
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: talent-acquisition
port: 8080
tools:
- name: launch-seasonal-hiring
description: "Given a store number, number of positions, and hiring season, create job requisitions in Workday for each position and notify the store manager via Teams with the posting links."
inputParameters:
- name: store_number
in: body
type: string
description: "The store number that needs seasonal hires."
- name: position_count
in: body
type: integer
description: "Number of seasonal positions to open."
- name: season
in: body
type: string
description: "Hiring season (e.g., Summer 2026, Holiday 2026)."
- name: store_manager_upn
in: body
type: string
description: "UPN of the store manager to notify."
steps:
- name: create-requisition
type: call
call: "workday-recruiting.create-job-requisition"
with:
location: "Store_{{store_number}}"
job_title: "Store Associate - Seasonal"
headcount: "{{position_count}}"
hiring_reason: "{{season}} Seasonal Hiring"
- name: notify-store-manager
type: call
call: "msteams-recruiting.send-message"
with:
recipient_upn: "{{store_manager_upn}}"
text: "{{season}} hiring campaign launched for Store {{store_number}}: {{position_count}} positions posted. Requisition ID: {{create-requisition.requisition_id}}. Applications will begin routing to you for review."
consumes:
- type: http
namespace: workday-recruiting
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: job-requisitions
path: "/jobRequisitions"
operations:
- name: create-job-requisition
method: POST
- type: http
namespace: msteams-recruiting
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
When a new seasonal product is approved, creates SAP material master, generates store allocation plan in Snowflake, and notifies regional managers on Teams.
naftiko: "0.5"
info:
label: "Seasonal Product Launch Coordination"
description: "When a new seasonal product is approved, creates SAP material master, generates store allocation plan in Snowflake, and notifies regional managers on Teams."
tags:
- product-management
- retail
- sap
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: product-ops
port: 8080
tools:
- name: launch-seasonal-product
description: "Given product details, create SAP material, plan allocation, and notify."
inputParameters:
- name: product_name
in: body
type: string
description: "The new product name."
- name: category
in: body
type: string
description: "The product category."
- name: launch_date
in: body
type: string
description: "The launch date."
steps:
- name: create-material
type: call
call: "sap.create-material"
with:
description: "{{product_name}}"
category: "{{category}}"
- name: generate-allocation
type: call
call: "snowflake.execute-query"
with:
statement: "INSERT INTO RETAIL_DB.PUBLIC.ALLOCATION_PLAN (material_number, launch_date, status) VALUES ('{{create-material.material_number}}', '{{launch_date}}', 'PLANNED')"
- name: notify-regional
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.teams_regional_channel"
text: "New seasonal product: {{product_name}} | Material: {{create-material.material_number}} | Launch: {{launch_date}}"
consumes:
- type: http
namespace: sap
baseUri: "https://traderjoes-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: materials
path: "/A_Material"
operations:
- name: create-material
method: POST
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
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/regional/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves the current status and assigned group of a ServiceNow incident by number.
naftiko: "0.5"
info:
label: "ServiceNow Incident Status Lookup"
description: "Retrieves the current status and assigned group of a ServiceNow incident by number."
tags:
- itsm
- servicenow
capability:
exposes:
- type: mcp
namespace: itsm
port: 8080
tools:
- name: get-incident-status
description: "Look up a ServiceNow incident by number."
inputParameters:
- name: incident_number
in: body
type: string
description: "The incident number."
call: "servicenow.get-incident"
with:
incident_number: "{{incident_number}}"
outputParameters:
- name: state
type: string
mapping: "$.result.state"
- name: priority
type: string
mapping: "$.result.priority"
consumes:
- type: http
namespace: servicenow
baseUri: "https://traderjoes.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 ticket approaches SLA breach, escalates priority and notifies management on Teams.
naftiko: "0.5"
info:
label: "ServiceNow SLA Breach Escalation"
description: "When a ServiceNow ticket approaches SLA breach, escalates priority and notifies management on Teams."
tags:
- itsm
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: itsm-sla
port: 8080
tools:
- name: escalate-sla-breach
description: "Given an incident near SLA breach, escalate and notify."
inputParameters:
- name: incident_number
in: body
type: string
description: "The incident number."
steps:
- name: get-incident
type: call
call: "servicenow.get-incident"
with:
incident_number: "{{incident_number}}"
- name: escalate
type: call
call: "servicenow.update-incident"
with:
incident_number: "{{incident_number}}"
urgency: "1"
- name: notify
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.teams_it_channel"
text: "SLA breach warning: {{incident_number}} — {{get-incident.short_description}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://traderjoes.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: get-incident
method: GET
- name: update-incident
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/it/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves metadata for a SharePoint document including title, author, and modification date.
naftiko: "0.5"
info:
label: "SharePoint Document Metadata Lookup"
description: "Retrieves metadata for a SharePoint document including title, author, and modification date."
tags:
- document-management
- sharepoint
capability:
exposes:
- type: mcp
namespace: doc-mgmt
port: 8080
tools:
- name: get-document-metadata
description: "Retrieve SharePoint document metadata by site and item ID."
inputParameters:
- name: site_id
in: body
type: string
description: "The SharePoint site ID."
- name: item_id
in: body
type: string
description: "The document item ID."
call: "sharepoint.get-item"
with:
site_id: "{{site_id}}"
item_id: "{{item_id}}"
outputParameters:
- name: title
type: string
mapping: "$.name"
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: items
path: "/sites/{{site_id}}/drive/items/{{item_id}}"
inputParameters:
- name: site_id
in: path
- name: item_id
in: path
operations:
- name: get-item
method: GET
When a store operations policy is updated in SharePoint, sends notifications and creates an acknowledgment task.
naftiko: "0.5"
info:
label: "SharePoint Policy Update Notification"
description: "When a store operations policy is updated in SharePoint, sends notifications and creates an acknowledgment task."
tags:
- compliance
- sharepoint
- microsoft-outlook
- servicenow
capability:
exposes:
- type: mcp
namespace: policy-mgmt
port: 8080
tools:
- name: notify-policy-update
description: "Given a policy document update, notify and track acknowledgment."
inputParameters:
- name: site_id
in: body
type: string
description: "SharePoint site ID."
- name: document_id
in: body
type: string
description: "The document ID."
- name: distribution_group
in: body
type: string
description: "Email distribution group."
steps:
- name: get-doc
type: call
call: "sharepoint.get-item"
with:
site_id: "{{site_id}}"
item_id: "{{document_id}}"
- name: send-notification
type: call
call: "msgraph.send-mail"
with:
recipient: "{{distribution_group}}"
subject: "Policy Updated: {{get-doc.title}}"
body: "Please review the updated policy."
- name: create-task
type: call
call: "servicenow.create-task"
with:
short_description: "Policy acknowledgment: {{get-doc.title}}"
assignment_group: "Compliance"
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: items
path: "/sites/{{site_id}}/drive/items/{{item_id}}"
inputParameters:
- name: site_id
in: path
- name: item_id
in: path
operations:
- name: get-item
method: GET
- type: http
namespace: msgraph
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/users/$secrets.service_account_upn/sendMail"
operations:
- name: send-mail
method: POST
- type: http
namespace: servicenow
baseUri: "https://traderjoes.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
When inventory shrink thresholds are exceeded in SAP, creates a loss prevention incident in ServiceNow and escalates to the regional loss prevention manager via Teams.
naftiko: "0.5"
info:
label: "Shrink and Loss Prevention Alert"
description: "When inventory shrink thresholds are exceeded in SAP, creates a loss prevention incident in ServiceNow and escalates to the regional loss prevention manager via Teams."
tags:
- operations
- loss-prevention
- sap
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: loss-prevention
port: 8080
tools:
- name: handle-shrink-alert
description: "Given a store number and shrink percentage exceeding policy thresholds, look up inventory details in SAP, open a loss prevention incident in ServiceNow, and notify the regional LP manager via Teams."
inputParameters:
- name: store_number
in: body
type: string
description: "Store number where shrink threshold was exceeded."
- name: shrink_percentage
in: body
type: number
description: "Actual shrink percentage detected."
- name: threshold_percentage
in: body
type: number
description: "Acceptable shrink threshold percentage."
- name: lp_manager_upn
in: body
type: string
description: "UPN of the regional loss prevention manager."
steps:
- name: get-inventory-summary
type: call
call: "sap-lp.get-inventory-summary"
with:
plant: "{{store_number}}"
- name: create-lp-incident
type: call
call: "servicenow-lp.create-incident"
with:
short_description: "Shrink alert: Store {{store_number}} at {{shrink_percentage}}% (threshold: {{threshold_percentage}}%)"
category: "loss_prevention"
priority: "2"
- name: notify-lp-manager
type: call
call: "msteams-lp.send-message"
with:
recipient_upn: "{{lp_manager_upn}}"
text: "Shrink alert: Store {{store_number}} shrink rate {{shrink_percentage}}% exceeds {{threshold_percentage}}% threshold. LP incident: {{create-lp-incident.number}}. Please initiate investigation."
consumes:
- type: http
namespace: sap-lp
baseUri: "https://traderjoes-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: inventory-summary
path: "/A_MatlStkInAcctMod"
inputParameters:
- name: plant
in: query
operations:
- name: get-inventory-summary
method: GET
- type: http
namespace: servicenow-lp
baseUri: "https://traderjoes.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-lp
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Queries Snowflake for customer basket composition metrics.
naftiko: "0.5"
info:
label: "Snowflake Customer Basket Analysis"
description: "Queries Snowflake for customer basket composition metrics."
tags:
- analytics
- snowflake
capability:
exposes:
- type: mcp
namespace: tj-ops
port: 8080
tools:
- name: snowflake_customer_basket_analysis
description: "Queries Snowflake for customer basket composition metrics."
inputParameters:
- name: entity_id
type: string
description: "Primary identifier."
call: primary.get-snowflake
with:
entity_id: "{{entity_id}}"
outputParameters:
- name: result
type: string
mapping: "$.data"
consumes:
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
When a Snowflake ETL pipeline fails, queries error log, creates a ServiceNow task, and notifies the data team on Teams.
naftiko: "0.5"
info:
label: "Snowflake ETL Failure Remediation"
description: "When a Snowflake ETL pipeline fails, queries error log, creates a ServiceNow task, and notifies the data team on Teams."
tags:
- data
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: data-ops
port: 8080
tools:
- name: handle-etl-failure
description: "Given a failed task, query errors and create remediation task."
inputParameters:
- name: task_name
in: body
type: string
description: "The Snowflake task name."
steps:
- name: get-error
type: call
call: "snowflake.execute-query"
with:
statement: "SELECT * FROM TABLE(INFORMATION_SCHEMA.TASK_HISTORY(TASK_NAME=>'{{task_name}}')) ORDER BY SCHEDULED_TIME DESC LIMIT 1"
- name: create-task
type: call
call: "servicenow.create-task"
with:
short_description: "ETL failure: {{task_name}}"
description: "Error: {{get-error.error_message}}"
assignment_group: "Data_Engineering"
- name: notify
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.teams_data_channel"
text: "ETL Failure: {{task_name}} | Task: {{create-task.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://traderjoes.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/sc_task"
operations:
- name: create-task
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/data/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Queries daily store sales data from Snowflake for a specific store and date range.
naftiko: "0.5"
info:
label: "Snowflake Store Sales Query"
description: "Queries daily store sales data from Snowflake for a specific store and date range."
tags:
- analytics
- snowflake
- retail
capability:
exposes:
- type: mcp
namespace: retail-analytics
port: 8080
tools:
- name: get-store-sales
description: "Query store sales from Snowflake for a store and date range."
inputParameters:
- name: store_id
in: body
type: string
description: "The store identifier."
- name: date_from
in: body
type: string
description: "Start date (YYYY-MM-DD)."
- name: date_to
in: body
type: string
description: "End date (YYYY-MM-DD)."
call: "snowflake.execute-query"
with:
statement: "SELECT SUM(total_sales) as total, COUNT(DISTINCT transaction_id) as transactions FROM RETAIL_DB.PUBLIC.SALES WHERE store_id='{{store_id}}' AND sale_date BETWEEN '{{date_from}}' AND '{{date_to}}'"
outputParameters:
- name: total_sales
type: string
mapping: "$.data[0].total"
- name: transaction_count
type: string
mapping: "$.data[0].transactions"
consumes:
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
Searches Splunk logs for store system troubleshooting.
naftiko: "0.5"
info:
label: "Splunk Log Search"
description: "Searches Splunk logs for store system troubleshooting."
tags:
- observability
- splunk
capability:
exposes:
- type: mcp
namespace: tj-ops
port: 8080
tools:
- name: splunk_log_search
description: "Searches Splunk logs for store system troubleshooting."
inputParameters:
- name: entity_id
type: string
description: "Primary identifier."
call: primary.get-splunk
with:
entity_id: "{{entity_id}}"
outputParameters:
- name: result
type: string
mapping: "$.data"
consumes:
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
Validates allergen labeling compliance in Snowflake product data, creates Jira issues, and notifies quality.
naftiko: "0.5"
info:
label: "Store Allergen Labeling Compliance Check"
description: "Validates allergen labeling compliance in Snowflake product data, creates Jira issues, and notifies quality."
tags:
- compliance
- food-safety
- snowflake
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: tj-ops
port: 8080
tools:
- name: store_allergen_labeling_compliance_check
description: "Validates allergen labeling compliance in Snowflake product data, creates Jira issues, and notifies quality."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "Store Allergen Labeling Compliance Check: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "Store Allergen Labeling Compliance Check for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://traderjoes.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
When a store associate separates from Trader Joe's, terminates their Workday record, closes access via ServiceNow, and notifies the store manager in Teams.
naftiko: "0.5"
info:
label: "Store Associate Offboarding"
description: "When a store associate separates from Trader Joe's, terminates their Workday record, closes access via ServiceNow, and notifies the store manager in Teams."
tags:
- hr
- offboarding
- workday
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-offboarding
port: 8080
tools:
- name: trigger-associate-offboarding
description: "Given an employee ID and separation date, initiate offboarding in Workday, open an access revocation ticket in ServiceNow, and notify the store manager via Teams."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday employee ID of the departing associate."
- name: separation_date
in: body
type: string
description: "The last day of employment in YYYY-MM-DD format."
- name: separation_reason
in: body
type: string
description: "Reason for separation (e.g., resignation, termination, retirement)."
steps:
- name: get-employee
type: call
call: "workday-lookup.get-worker"
with:
worker_id: "{{employee_id}}"
- name: terminate-worker
type: call
call: "workday-lookup.terminate-worker"
with:
worker_id: "{{employee_id}}"
effective_date: "{{separation_date}}"
reason: "{{separation_reason}}"
- name: open-access-ticket
type: call
call: "servicenow-off.create-incident"
with:
short_description: "Access revocation: {{get-employee.full_name}} - separation {{separation_date}}"
category: "access_management"
priority: "2"
- name: notify-manager
type: call
call: "msteams-off.send-message"
with:
recipient_upn: "{{get-employee.manager_email}}"
text: "Associate {{get-employee.full_name}} separates on {{separation_date}}. Access revocation ticket: {{open-access-ticket.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: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- name: terminate-worker
method: POST
- type: http
namespace: servicenow-off
baseUri: "https://traderjoes.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-off
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Queries Snowflake for store energy consumption data, compares against regional benchmarks, and posts the report to the sustainability team.
naftiko: "0.5"
info:
label: "Store Energy Consumption Report"
description: "Queries Snowflake for store energy consumption data, compares against regional benchmarks, and posts the report to the sustainability team."
tags:
- sustainability
- energy
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: sustainability
port: 8080
tools:
- name: generate-energy-report
description: "Given a store and period, generate the energy consumption report."
inputParameters:
- name: store_id
type: string
description: "Store identifier."
- name: period
type: string
description: "Reporting period."
steps:
- name: get-consumption
type: call
call: snowflake.query-energy
with:
store_id: "{{store_id}}"
period: "{{period}}"
- name: get-benchmarks
type: call
call: snowflake.query-benchmarks
with:
period: "{{period}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_sustainability_channel"
text: "Energy report Store {{store_id}} ({{period}}): Consumption: {{get-consumption.total_kwh}} kWh | Benchmark: {{get-benchmarks.avg_kwh}} kWh | Variance: {{get-consumption.variance_pct}}%"
consumes:
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: query-energy
method: POST
- name: query-benchmarks
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/sustainability/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
When store equipment (refrigeration, HVAC, POS hardware) requires maintenance, opens a ServiceNow maintenance ticket and dispatches a field technician via the facilities management system.
naftiko: "0.5"
info:
label: "Store Equipment Maintenance Request"
description: "When store equipment (refrigeration, HVAC, POS hardware) requires maintenance, opens a ServiceNow maintenance ticket and dispatches a field technician via the facilities management system."
tags:
- operations
- facilities
- servicenow
- maintenance
capability:
exposes:
- type: mcp
namespace: facilities-mgmt
port: 8080
tools:
- name: request-equipment-maintenance
description: "Given a store number, equipment type, and issue description, create a ServiceNow maintenance work order and assign it to the appropriate facilities technician team."
inputParameters:
- name: store_number
in: body
type: string
description: "The store number where the equipment issue exists."
- name: equipment_type
in: body
type: string
description: "Type of equipment requiring maintenance (e.g., refrigeration, HVAC, POS hardware, lighting)."
- name: issue_description
in: body
type: string
description: "Description of the maintenance issue."
- name: urgency
in: body
type: string
description: "Urgency level: emergency, urgent, routine."
call: "servicenow-facilities.create-work-order"
with:
short_description: "{{equipment_type}} maintenance at Store {{store_number}}: {{issue_description}}"
category: "facilities_maintenance"
urgency: "{{urgency}}"
assignment_group: "Facilities_Field_Tech"
outputParameters:
- name: work_order_number
type: string
mapping: "$.result.number"
- name: assigned_technician
type: string
mapping: "$.result.assigned_to.display_value"
consumes:
- type: http
namespace: servicenow-facilities
baseUri: "https://traderjoes.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: work-orders
path: "/table/wm_order"
operations:
- name: create-work-order
method: POST
Coordinates store grand opening by creating Jira checklist, provisioning Okta store accounts, and notifying regional ops.
naftiko: "0.5"
info:
label: "Store Grand Opening Coordination"
description: "Coordinates store grand opening by creating Jira checklist, provisioning Okta store accounts, and notifying regional ops."
tags:
- operations
- store-opening
- jira
- okta
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: tj-ops
port: 8080
tools:
- name: store_grand_opening_coordination
description: "Coordinates store grand opening by creating Jira checklist, provisioning Okta store accounts, and notifying regional ops."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "Store Grand Opening Coordination: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "Store Grand Opening Coordination for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://traderjoes.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
Compares SAP inventory with physical count data in Snowflake, identifies variances, and notifies store operations.
naftiko: "0.5"
info:
label: "Store Inventory Cycle Count Reconciliation"
description: "Compares SAP inventory with physical count data in Snowflake, identifies variances, and notifies store operations."
tags:
- inventory
- sap
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: tj-ops
port: 8080
tools:
- name: store_inventory_cycle_count_reconciliation
description: "Compares SAP inventory with physical count data in Snowflake, identifies variances, and notifies store operations."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "Store Inventory Cycle Count Reconciliation: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "Store Inventory Cycle Count Reconciliation for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://traderjoes.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
When a store IT incident is reported, creates a ServiceNow ticket with priority, assigns it to the regional IT team, and notifies the store lead via Microsoft Teams.
naftiko: "0.5"
info:
label: "Store IT Incident Response"
description: "When a store IT incident is reported, creates a ServiceNow ticket with priority, assigns it to the regional IT team, and notifies the store lead via Microsoft Teams."
tags:
- itsm
- incident-response
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: store-ops
port: 8080
tools:
- name: handle-store-it-incident
description: "Given a store number, incident description, and priority, create a ServiceNow incident, assign to the regional IT team, and notify the store lead via Teams."
inputParameters:
- name: store_number
in: body
type: string
description: "The store number where the incident occurred."
- name: description
in: body
type: string
description: "Description of the IT issue (e.g., POS system down, network outage)."
- name: priority
in: body
type: string
description: "Incident priority: 1 (critical), 2 (high), 3 (medium), 4 (low)."
- name: store_lead_upn
in: body
type: string
description: "The store lead's Microsoft UPN (email) for Teams notification."
steps:
- name: create-incident
type: call
call: "servicenow-incident.create-incident"
with:
short_description: "Store {{store_number}} IT Incident: {{description}}"
priority: "{{priority}}"
assignment_group: "Regional_IT"
location: "Store_{{store_number}}"
- name: notify-lead
type: call
call: "msteams-incident.send-message"
with:
recipient_upn: "{{store_lead_upn}}"
text: "IT Incident opened for Store {{store_number}}: {{description}}. Ticket: {{create-incident.number}}. Priority: {{priority}}. Regional IT is assigned."
consumes:
- type: http
namespace: servicenow-incident
baseUri: "https://traderjoes.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-incident
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Queries Snowflake for sales forecasts, validates against Workday staffing levels, and posts recommendations.
naftiko: "0.5"
info:
label: "Store Labor Scheduling Optimization"
description: "Queries Snowflake for sales forecasts, validates against Workday staffing levels, and posts recommendations."
tags:
- operations
- labor
- snowflake
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: tj-ops
port: 8080
tools:
- name: store_labor_scheduling_optimization
description: "Queries Snowflake for sales forecasts, validates against Workday staffing levels, and posts recommendations."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "Store Labor Scheduling Optimization: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "Store Labor Scheduling Optimization for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://traderjoes.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
When a network monitoring alert fires for a store location, creates a critical ServiceNow incident, dispatches field support, and notifies the store manager and regional director via Teams.
naftiko: "0.5"
info:
label: "Store Network Outage Alert"
description: "When a network monitoring alert fires for a store location, creates a critical ServiceNow incident, dispatches field support, and notifies the store manager and regional director via Teams."
tags:
- itsm
- network-operations
- servicenow
- microsoft-teams
- monitoring
capability:
exposes:
- type: mcp
namespace: network-ops
port: 8080
tools:
- name: handle-network-outage
description: "Given a store number and network alert details, create a critical ServiceNow incident for field dispatch and notify the store manager and regional director via Teams."
inputParameters:
- name: store_number
in: body
type: string
description: "The store number experiencing the network outage."
- name: alert_details
in: body
type: string
description: "Description of the network alert (e.g., WAN link down, POS unreachable)."
- name: store_manager_upn
in: body
type: string
description: "UPN of the store manager for Teams notification."
- name: regional_director_upn
in: body
type: string
description: "UPN of the regional director for escalation notification."
steps:
- name: create-incident
type: call
call: "servicenow-network.create-incident"
with:
short_description: "Network outage at Store {{store_number}}: {{alert_details}}"
priority: "1"
category: "network"
assignment_group: "Network_Operations"
- name: notify-store-manager
type: call
call: "msteams-network.send-message"
with:
recipient_upn: "{{store_manager_upn}}"
text: "Network outage reported at Store {{store_number}}: {{alert_details}}. Incident {{create-incident.number}} opened. Network Operations is responding."
- name: notify-regional-director
type: call
call: "msteams-network.send-message"
with:
recipient_upn: "{{regional_director_upn}}"
text: "ESCALATION: Network outage at Store {{store_number}}. Incident {{create-incident.number}}. Operations team engaged."
consumes:
- type: http
namespace: servicenow-network
baseUri: "https://traderjoes.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-network
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
When a store POS system goes down, creates a P1 ServiceNow incident, notifies the IT support team on Teams, and logs the event in Snowflake.
naftiko: "0.5"
info:
label: "Store POS Outage Escalation"
description: "When a store POS system goes down, creates a P1 ServiceNow incident, notifies the IT support team on Teams, and logs the event in Snowflake."
tags:
- itsm
- retail
- servicenow
- microsoft-teams
- snowflake
capability:
exposes:
- type: mcp
namespace: store-it
port: 8080
tools:
- name: escalate-pos-outage
description: "Given a store with POS outage, create P1 incident, notify IT, and log."
inputParameters:
- name: store_id
in: body
type: string
description: "The store identifier."
- name: pos_terminal_count
in: body
type: string
description: "Number of affected terminals."
steps:
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "POS outage: Store {{store_id}} — {{pos_terminal_count}} terminals"
urgency: "1"
impact: "1"
category: "pos_systems"
- name: notify-it
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.teams_it_support_channel"
text: "POS OUTAGE: Store {{store_id}} | {{pos_terminal_count}} terminals down | Incident: {{create-incident.number}}"
- name: log-event
type: call
call: "snowflake.execute-query"
with:
statement: "INSERT INTO IT_OPS.PUBLIC.POS_EVENTS (store_id, terminal_count, incident_number, event_time) VALUES ('{{store_id}}', '{{pos_terminal_count}}', '{{create-incident.number}}', CURRENT_TIMESTAMP())"
consumes:
- type: http
namespace: servicenow
baseUri: "https://traderjoes.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/it-support/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
Creates a project plan for a store remodel, tracks milestones in ServiceNow, and notifies the facilities team on Teams.
naftiko: "0.5"
info:
label: "Store Remodel Project Tracking"
description: "Creates a project plan for a store remodel, tracks milestones in ServiceNow, and notifies the facilities team on Teams."
tags:
- facilities
- project-management
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: facilities
port: 8080
tools:
- name: track-remodel
description: "Given store and remodel details, create tracking and notify."
inputParameters:
- name: store_id
in: body
type: string
description: "The store ID."
- name: scope
in: body
type: string
description: "The remodel scope."
- name: start_date
in: body
type: string
description: "Start date."
steps:
- name: create-project
type: call
call: "servicenow.create-task"
with:
short_description: "Store remodel: {{store_id}} — {{scope}}"
description: "Start: {{start_date}}. Scope: {{scope}}."
assignment_group: "Facilities_Remodel"
- name: notify
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.teams_facilities_channel"
text: "Store remodel initiated: {{store_id}} | Scope: {{scope}} | Start: {{start_date}} | Task: {{create-project.number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://traderjoes.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/sc_task"
operations:
- name: create-task
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/facilities/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Pulls daily sales data from the point-of-sale system via SAP and publishes a store performance summary to the regional manager's Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Store Sales Daily Digest"
description: "Pulls daily sales data from the point-of-sale system via SAP and publishes a store performance summary to the regional manager's Microsoft Teams channel."
tags:
- finance
- reporting
- sap
- microsoft-teams
- sales-reporting
capability:
exposes:
- type: mcp
namespace: sales-reporting
port: 8080
tools:
- name: digest-store-sales
description: "Given a store number and date, retrieve daily sales totals from SAP and post a performance summary to the regional manager's Teams channel."
inputParameters:
- name: store_number
in: body
type: string
description: "The store number for the sales report."
- name: report_date
in: body
type: string
description: "The date for the sales report in YYYY-MM-DD format."
- name: teams_channel_id
in: body
type: string
description: "The Teams channel ID where the digest should be posted."
steps:
- name: get-sales
type: call
call: "sap-sales.get-sales-summary"
with:
store: "{{store_number}}"
date: "{{report_date}}"
- name: post-digest
type: call
call: "msteams-sales.post-channel-message"
with:
channel_id: "{{teams_channel_id}}"
text: "Store {{store_number}} Sales - {{report_date}}: Total ${{get-sales.total_sales}}, Transactions: {{get-sales.transaction_count}}, Avg Basket: ${{get-sales.avg_basket}}"
consumes:
- type: http
namespace: sap-sales
baseUri: "https://traderjoes-s4.sap.com/sap/opu/odata/sap/RETAIL_SALES_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: sales-summary
path: "/StoreSalesSummary"
inputParameters:
- name: store
in: query
- name: date
in: query
operations:
- name: get-sales-summary
method: GET
- type: http
namespace: msteams-sales
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: channel_id
in: path
operations:
- name: post-channel-message
method: POST
When a cold chain temperature alert is triggered at a store, creates a ServiceNow P1 incident and notifies the store operations team on Teams.
naftiko: "0.5"
info:
label: "Store Temperature Alert Response"
description: "When a cold chain temperature alert is triggered at a store, creates a ServiceNow P1 incident and notifies the store operations team on Teams."
tags:
- food-safety
- operations
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: food-safety-ops
port: 8080
tools:
- name: handle-temp-alert
description: "Given a store and temperature alert, create incident and notify."
inputParameters:
- name: store_id
in: body
type: string
description: "The store identifier."
- name: equipment_id
in: body
type: string
description: "The refrigeration unit ID."
- name: current_temp
in: body
type: string
description: "Current temperature reading."
- name: threshold
in: body
type: string
description: "The threshold that was breached."
steps:
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Cold chain alert: Store {{store_id}} — {{equipment_id}} at {{current_temp}}F"
urgency: "1"
impact: "1"
category: "food_safety"
- name: notify-ops
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.teams_store_ops_channel"
text: "TEMP ALERT: Store {{store_id}} | Unit: {{equipment_id}} | Temp: {{current_temp}}F (threshold: {{threshold}}F) | Incident: {{create-incident.number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://traderjoes.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/store-ops/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Queries Snowflake for store waste metrics, compares against targets, and posts report to sustainability team.
naftiko: "0.5"
info:
label: "Store Waste Reduction Tracking"
description: "Queries Snowflake for store waste metrics, compares against targets, and posts report to sustainability team."
tags:
- sustainability
- waste
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: tj-ops
port: 8080
tools:
- name: store_waste_reduction_tracking
description: "Queries Snowflake for store waste metrics, compares against targets, and posts report to sustainability team."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "Store Waste Reduction Tracking: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "Store Waste Reduction Tracking for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://traderjoes.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
Identifies SAP Ariba supplier contracts expiring within 90 days, creates a ServiceNow renewal task, and notifies the category manager via Microsoft Teams.
naftiko: "0.5"
info:
label: "Supplier Contract Renewal Alert"
description: "Identifies SAP Ariba supplier contracts expiring within 90 days, creates a ServiceNow renewal task, and notifies the category manager via Microsoft Teams."
tags:
- procurement
- contracts
- sap-ariba
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: procurement-contracts
port: 8080
tools:
- name: trigger-contract-renewal-alert
description: "Given a supplier contract ID expiring within 90 days, create a renewal task in ServiceNow and notify the responsible category manager via Teams."
inputParameters:
- name: contract_id
in: body
type: string
description: "The SAP Ariba contract ID to review for renewal."
- name: category_manager_upn
in: body
type: string
description: "UPN of the category manager responsible for this supplier contract."
steps:
- name: get-contract
type: call
call: "ariba.get-contract"
with:
contractId: "{{contract_id}}"
- name: create-renewal-task
type: call
call: "servicenow-contract.create-task"
with:
short_description: "Contract renewal: {{get-contract.title}} - expires {{get-contract.expirationDate}}"
category: "procurement"
assignment_group: "Category_Management"
- name: notify-manager
type: call
call: "msteams-contract.send-message"
with:
recipient_upn: "{{category_manager_upn}}"
text: "Contract {{get-contract.title}} expires {{get-contract.expirationDate}}. Renewal task created: {{create-renewal-task.number}}. Please initiate supplier negotiations."
consumes:
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/contract-management/v1"
authentication:
type: apikey
key: "apikey"
value: "$secrets.ariba_api_key"
placement: header
resources:
- name: contracts
path: "/contracts/{{contractId}}"
inputParameters:
- name: contractId
in: path
operations:
- name: get-contract
method: GET
- type: http
namespace: servicenow-contract
baseUri: "https://traderjoes.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/sc_task"
operations:
- name: create-task
method: POST
- type: http
namespace: msteams-contract
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
When a supplier delivery is late or short-shipped, logs the exception in SAP, creates a ServiceNow task for the buyer, and notifies the supply chain team on Teams.
naftiko: "0.5"
info:
label: "Supplier Delivery Exception Workflow"
description: "When a supplier delivery is late or short-shipped, logs the exception in SAP, creates a ServiceNow task for the buyer, and notifies the supply chain team on Teams."
tags:
- supply-chain
- sap
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: supply-chain
port: 8080
tools:
- name: log-delivery-exception
description: "Given a PO and exception details, log in SAP, create task, and notify."
inputParameters:
- name: po_number
in: body
type: string
description: "The purchase order number."
- name: exception_type
in: body
type: string
description: "Exception type (late, short_ship, damaged)."
- name: vendor_name
in: body
type: string
description: "The vendor name."
steps:
- name: get-po
type: call
call: "sap.get-po"
with:
po_number: "{{po_number}}"
- name: create-task
type: call
call: "servicenow.create-task"
with:
short_description: "Delivery exception: {{exception_type}} — PO {{po_number}} from {{vendor_name}}"
assignment_group: "Supply_Chain_Buying"
- name: notify-supply-chain
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.teams_supply_chain_channel"
text: "Delivery exception: {{exception_type}} | PO: {{po_number}} | Vendor: {{vendor_name}} | Task: {{create-task.number}}"
consumes:
- type: http
namespace: sap
baseUri: "https://traderjoes-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
- type: http
namespace: servicenow
baseUri: "https://traderjoes.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/sc_task"
operations:
- name: create-task
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/supply-chain/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves SAP Ariba supplier performance data for a given quarter and publishes a scorecard summary to the procurement team's Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Supplier Performance Scorecard"
description: "Retrieves SAP Ariba supplier performance data for a given quarter and publishes a scorecard summary to the procurement team's Microsoft Teams channel."
tags:
- procurement
- supplier-management
- sap-ariba
- microsoft-teams
- reporting
capability:
exposes:
- type: mcp
namespace: supplier-performance
port: 8080
tools:
- name: publish-supplier-scorecard
description: "Given a supplier ID and quarter, retrieve performance metrics from SAP Ariba and post a supplier scorecard to the procurement Teams channel."
inputParameters:
- name: supplier_id
in: body
type: string
description: "The SAP Ariba supplier ID."
- name: quarter
in: body
type: string
description: "Reporting quarter in YYYY-QN format (e.g., 2026-Q1)."
- name: procurement_channel_id
in: body
type: string
description: "Teams channel ID for the procurement team."
steps:
- name: get-supplier-metrics
type: call
call: "ariba-perf.get-supplier-performance"
with:
supplierId: "{{supplier_id}}"
period: "{{quarter}}"
- name: post-scorecard
type: call
call: "msteams-supplier.post-channel-message"
with:
channel_id: "{{procurement_channel_id}}"
text: "Supplier Scorecard - {{get-supplier-metrics.supplier_name}} ({{quarter}}): On-time delivery: {{get-supplier-metrics.on_time_pct}}%, Quality acceptance: {{get-supplier-metrics.quality_pct}}%, Invoice accuracy: {{get-supplier-metrics.invoice_accuracy_pct}}%"
consumes:
- type: http
namespace: ariba-perf
baseUri: "https://openapi.ariba.com/api/supplier-management/v1"
authentication:
type: apikey
key: "apikey"
value: "$secrets.ariba_api_key"
placement: header
resources:
- name: supplier-performance
path: "/suppliers/{{supplierId}}/performance"
inputParameters:
- name: supplierId
in: path
- name: period
in: query
operations:
- name: get-supplier-performance
method: GET
- type: http
namespace: msteams-supplier
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: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Pulls supplier delivery and quality metrics from Snowflake, generates a scorecard in SharePoint, and notifies the procurement team on Teams.
naftiko: "0.5"
info:
label: "Supplier Scorecarding Workflow"
description: "Pulls supplier delivery and quality metrics from Snowflake, generates a scorecard in SharePoint, and notifies the procurement team on Teams."
tags:
- procurement
- supply-chain
- snowflake
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: supplier-performance
port: 8080
tools:
- name: generate-supplier-scorecard
description: "Given a vendor ID and period, generate and distribute scorecard."
inputParameters:
- name: vendor_id
in: body
type: string
description: "The SAP vendor ID."
- name: period
in: body
type: string
description: "The evaluation period."
steps:
- name: get-metrics
type: call
call: "snowflake.execute-query"
with:
statement: "SELECT on_time_rate, quality_score, fill_rate FROM SUPPLY_DB.PUBLIC.VENDOR_METRICS WHERE vendor_id='{{vendor_id}}' AND period='{{period}}'"
- name: upload-scorecard
type: call
call: "sharepoint.upload-file"
with:
site_id: "$secrets.sharepoint_procurement_site"
folder: "Scorecards/{{period}}"
file_name: "{{vendor_id}}_scorecard.pdf"
- name: notify
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.teams_procurement_channel"
text: "Supplier scorecard: Vendor {{vendor_id}} | On-time: {{get-metrics.on_time_rate}}% | Quality: {{get-metrics.quality_score}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: uploads
path: "/sites/{{site_id}}/drive/root:/{{folder}}/{{file_name}}:/content"
inputParameters:
- name: site_id
in: path
operations:
- name: upload-file
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/procurement/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Queries Snowflake for supplier sustainability metrics, generates scorecards, and posts to procurement.
naftiko: "0.5"
info:
label: "Supplier Sustainability Scorecard"
description: "Queries Snowflake for supplier sustainability metrics, generates scorecards, and posts to procurement."
tags:
- sustainability
- procurement
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: tj-ops
port: 8080
tools:
- name: supplier_sustainability_scorecard
description: "Queries Snowflake for supplier sustainability metrics, generates scorecards, and posts to procurement."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "Supplier Sustainability Scorecard: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "Supplier Sustainability Scorecard for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://traderjoes.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
When a vendor invoice is received in SAP, validates it against the purchase order, routes for approval in ServiceNow, and notifies the accounts payable team via Teams.
naftiko: "0.5"
info:
label: "Vendor Invoice Processing"
description: "When a vendor invoice is received in SAP, validates it against the purchase order, routes for approval in ServiceNow, and notifies the accounts payable team via Teams."
tags:
- finance
- accounts-payable
- sap
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: finance-ap
port: 8080
tools:
- name: process-vendor-invoice
description: "Given a SAP invoice number and PO number, validate the invoice against the PO, create an approval workflow in ServiceNow, and notify the AP team lead via Teams."
inputParameters:
- name: invoice_number
in: body
type: string
description: "The SAP vendor invoice number."
- name: po_number
in: body
type: string
description: "The associated purchase order number for three-way match."
- name: invoice_amount
in: body
type: number
description: "Invoice amount in USD for approval threshold routing."
steps:
- name: get-invoice
type: call
call: "sap-invoice.get-invoice"
with:
invoice_number: "{{invoice_number}}"
- name: get-po
type: call
call: "sap-invoice.get-po"
with:
po_number: "{{po_number}}"
- name: create-approval
type: call
call: "servicenow-ap.create-record"
with:
short_description: "Invoice approval: {{invoice_number}} against PO {{po_number}} - ${{invoice_amount}}"
category: "accounts_payable"
assignment_group: "AP_Team"
- name: notify-ap-team
type: call
call: "msteams-ap.send-message"
with:
recipient_upn: "ap-team@traderjoes.com"
text: "Invoice {{invoice_number}} pending approval. PO: {{po_number}}, Amount: ${{invoice_amount}}. Approval task: {{create-approval.number}}"
consumes:
- type: http
namespace: sap-invoice
baseUri: "https://traderjoes-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: servicenow-ap
baseUri: "https://traderjoes.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/sc_task"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams-ap
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Validates vendor invoices against PO and goods receipt in SAP, creating a ServiceNow task when discrepancies are found.
naftiko: "0.5"
info:
label: "Vendor Invoice Three-Way Match"
description: "Validates vendor invoices against PO and goods receipt in SAP, creating a ServiceNow task when discrepancies are found."
tags:
- finance
- procurement
- sap
- servicenow
capability:
exposes:
- type: mcp
namespace: finance-ap
port: 8080
tools:
- name: verify-invoice-match
description: "Given an invoice and PO, verify three-way match and flag discrepancies."
inputParameters:
- name: invoice_reference
in: body
type: string
description: "The invoice reference."
- name: po_number
in: body
type: string
description: "The purchase order number."
steps:
- name: get-invoice
type: call
call: "sap.get-invoice"
with:
invoice_reference: "{{invoice_reference}}"
- name: get-po
type: call
call: "sap.get-po"
with:
po_number: "{{po_number}}"
- name: create-task
type: call
call: "servicenow.create-task"
with:
short_description: "Invoice match review: {{invoice_reference}} vs PO {{po_number}}"
description: "Invoice: ${{get-invoice.amount}}. PO: ${{get-po.total_value}}."
assignment_group: "AP_Team"
consumes:
- type: http
namespace: sap
baseUri: "https://traderjoes-s4.sap.com/sap/opu/odata/sap/API_SUPPLIERINVOICE_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: invoices
path: "/A_SupplierInvoice('{{invoice_reference}}')"
inputParameters:
- name: invoice_reference
in: path
operations:
- name: get-invoice
method: GET
- name: pos
path: "/A_PurchaseOrder('{{po_number}}')"
inputParameters:
- name: po_number
in: path
operations:
- name: get-po
method: GET
- type: http
namespace: servicenow
baseUri: "https://traderjoes.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
When a vendor quality issue is reported, creates ServiceNow incident, notifies the quality team, and updates Snowflake tracking.
naftiko: "0.5"
info:
label: "Vendor Quality Incident Response"
description: "When a vendor quality issue is reported, creates ServiceNow incident, notifies the quality team, and updates Snowflake tracking."
tags:
- quality
- vendor-management
- servicenow
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: tj-ops
port: 8080
tools:
- name: vendor_quality_incident_response
description: "When a vendor quality issue is reported, creates ServiceNow incident, notifies the quality team, and updates Snowflake tracking."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "Vendor Quality Incident Response: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "Vendor Quality Incident Response for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://traderjoes.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
Generates weekly sales forecasts from Snowflake, refreshes Power BI dashboard, and distributes to regional managers.
naftiko: "0.5"
info:
label: "Weekly Sales Forecast Distribution"
description: "Generates weekly sales forecasts from Snowflake, refreshes Power BI dashboard, and distributes to regional managers."
tags:
- operations
- forecasting
- snowflake
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: tj-ops
port: 8080
tools:
- name: weekly_sales_forecast_distribution
description: "Generates weekly sales forecasts from Snowflake, refreshes Power BI dashboard, and distributes to regional managers."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "Weekly Sales Forecast Distribution: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "Weekly Sales Forecast Distribution for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://traderjoes.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
Launches annual review by pulling headcount from Workday, creating Jira epic, and notifying HR.
naftiko: "0.5"
info:
label: "Workday Annual Review Cycle Launch"
description: "Launches annual review by pulling headcount from Workday, creating Jira epic, and notifying HR."
tags:
- hr
- performance
- workday
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: tj-ops
port: 8080
tools:
- name: workday_annual_review_cycle_launch
description: "Launches annual review by pulling headcount from Workday, creating Jira epic, and notifying HR."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "Workday Annual Review Cycle Launch: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "Workday Annual Review Cycle Launch for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://traderjoes.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
Queries Workday for incomplete benefits enrollments and sends reminders via Teams.
naftiko: "0.5"
info:
label: "Workday Benefits Enrollment Reminder"
description: "Queries Workday for incomplete benefits enrollments and sends reminders via Teams."
tags:
- hr
- benefits
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: tj-ops
port: 8080
tools:
- name: workday_benefits_enrollment_reminder
description: "Queries Workday for incomplete benefits enrollments and sends reminders via Teams."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "Workday Benefits Enrollment Reminder: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "Workday Benefits Enrollment Reminder for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://traderjoes.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
Retrieves employee compensation from Workday.
naftiko: "0.5"
info:
label: "Workday Compensation Lookup"
description: "Retrieves employee compensation from Workday."
tags:
- hr
- workday
capability:
exposes:
- type: mcp
namespace: tj-ops
port: 8080
tools:
- name: workday_compensation_lookup
description: "Retrieves employee compensation from Workday."
inputParameters:
- name: entity_id
type: string
description: "Primary identifier."
call: primary.get-workday
with:
entity_id: "{{entity_id}}"
outputParameters:
- name: result
type: string
mapping: "$.data"
consumes:
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
Fetches an employee profile from Workday by worker ID, returning name, department, store location, and job title.
naftiko: "0.5"
info:
label: "Workday Employee Profile Lookup"
description: "Fetches an employee profile from Workday by worker ID, returning name, department, store location, and job title."
tags:
- hr
- workday
capability:
exposes:
- type: mcp
namespace: hr-directory
port: 8080
tools:
- name: get-employee-profile
description: "Retrieve employee profile from Workday by worker ID."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID."
call: "workday.get-worker"
with:
worker_id: "{{worker_id}}"
outputParameters:
- name: full_name
type: string
mapping: "$.worker.fullName"
- name: store_location
type: string
mapping: "$.worker.location"
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: "/traderjoes/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
Queries Workday for labor hours, validates against state compliance rules in Snowflake, and creates ServiceNow alerts for violations.
naftiko: "0.5"
info:
label: "Workday Labor Compliance Check"
description: "Queries Workday for labor hours, validates against state compliance rules in Snowflake, and creates ServiceNow alerts for violations."
tags:
- hr
- compliance
- workday
- snowflake
- servicenow
capability:
exposes:
- type: mcp
namespace: labor-compliance
port: 8080
tools:
- name: check-labor-compliance
description: "Given a store and pay period, check labor compliance."
inputParameters:
- name: store_id
in: body
type: string
description: "The store ID."
- name: pay_period
in: body
type: string
description: "The pay period."
steps:
- name: get-hours
type: call
call: "snowflake.execute-query"
with:
statement: "SELECT worker_id, SUM(hours) as total_hours FROM HR_DB.PUBLIC.TIME_RECORDS WHERE store_id='{{store_id}}' AND pay_period='{{pay_period}}' GROUP BY worker_id HAVING total_hours > 40"
- name: create-alert
type: call
call: "servicenow.create-task"
with:
short_description: "Labor compliance: Store {{store_id}} — {{pay_period}} overtime violations"
description: "Workers exceeding 40 hours detected."
assignment_group: "HR_Compliance"
consumes:
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://traderjoes.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
When a new hire is confirmed, creates Okta account, provisions POS access, and notifies store management.
naftiko: "0.5"
info:
label: "Workday New Hire IT Provisioning"
description: "When a new hire is confirmed, creates Okta account, provisions POS access, and notifies store management."
tags:
- hr
- workday
- okta
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: tj-ops
port: 8080
tools:
- name: workday_new_hire_it_provisioning
description: "When a new hire is confirmed, creates Okta account, provisions POS access, and notifies store management."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "Workday New Hire IT Provisioning: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "Workday New Hire IT Provisioning for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://traderjoes.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://traderjoes.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
When a new store associate is created in Workday, assigns mandatory food safety and customer service training, creates a ServiceNow tracking task, and sends a welcome email.
naftiko: "0.5"
info:
label: "Workday New Hire Store Training Workflow"
description: "When a new store associate is created in Workday, assigns mandatory food safety and customer service training, creates a ServiceNow tracking task, and sends a welcome email."
tags:
- hr
- training
- workday
- servicenow
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: hr-training
port: 8080
tools:
- name: assign-store-training
description: "Given a new hire worker ID, assign training and track completion."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID."
steps:
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{worker_id}}"
- name: create-training-task
type: call
call: "servicenow.create-task"
with:
short_description: "Store training: {{get-employee.full_name}} — {{get-employee.location}}"
assignment_group: "Store_Training"
description: "Food safety and customer service training required. Start date: {{get-employee.start_date}}."
- name: send-welcome
type: call
call: "msgraph.send-mail"
with:
recipient: "{{get-employee.work_email}}"
subject: "Welcome to Trader Joe's — Your Training Schedule"
body: "Hi {{get-employee.first_name}}, welcome to the crew! Your training at {{get-employee.location}} starts soon. Ref: {{create-training-task.number}}."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/traderjoes/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://traderjoes.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: msgraph
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/users/$secrets.service_account_upn/sendMail"
operations:
- name: send-mail
method: POST
When a payroll variance is detected, pulls employee details, creates a ServiceNow task, and notifies HR on Teams.
naftiko: "0.5"
info:
label: "Workday Payroll Discrepancy Investigation"
description: "When a payroll variance is detected, pulls employee details, creates a ServiceNow task, and notifies HR on Teams."
tags:
- hr
- payroll
- workday
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-payroll
port: 8080
tools:
- name: investigate-payroll
description: "Given a worker and pay period, investigate discrepancy."
inputParameters:
- name: worker_id
in: body
type: string
description: "The worker ID."
- name: pay_period
in: body
type: string
description: "The pay period."
steps:
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{worker_id}}"
- name: create-task
type: call
call: "servicenow.create-task"
with:
short_description: "Payroll discrepancy: {{get-employee.full_name}} — {{pay_period}}"
assignment_group: "Payroll"
- name: notify
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.teams_hr_channel"
text: "Payroll discrepancy: {{get-employee.full_name}} for {{pay_period}} | Task: {{create-task.number}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/traderjoes/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://traderjoes.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/sc_task"
operations:
- name: create-task
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/hr/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
When a store associate is terminated in Workday, disables their M365 account, creates a ServiceNow offboarding task, and notifies the store manager.
naftiko: "0.5"
info:
label: "Workday Termination Access Revocation"
description: "When a store associate is terminated in Workday, disables their M365 account, creates a ServiceNow offboarding task, and notifies the store manager."
tags:
- hr
- security
- workday
- microsoft-365
- servicenow
capability:
exposes:
- type: mcp
namespace: hr-offboarding
port: 8080
tools:
- name: revoke-access
description: "Given a terminated worker ID, disable access and notify."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID."
steps:
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{worker_id}}"
- name: disable-account
type: call
call: "msgraph.disable-user"
with:
user_upn: "{{get-employee.work_email}}"
- name: create-task
type: call
call: "servicenow.create-task"
with:
short_description: "Offboarding: {{get-employee.full_name}} at {{get-employee.location}}"
assignment_group: "IT_Offboarding"
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: "/traderjoes/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: msgraph
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: users
path: "/users/{{user_upn}}"
inputParameters:
- name: user_upn
in: path
operations:
- name: disable-user
method: PATCH
- type: http
namespace: servicenow
baseUri: "https://traderjoes.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
Pulls headcount, turnover, and absenteeism metrics from Workday and ADP, then publishes a weekly workforce analytics summary to the HR leadership Teams channel.
naftiko: "0.5"
info:
label: "Workforce Analytics Report"
description: "Pulls headcount, turnover, and absenteeism metrics from Workday and ADP, then publishes a weekly workforce analytics summary to the HR leadership Teams channel."
tags:
- hr
- analytics
- reporting
- workday
- adp
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: workforce-analytics
port: 8080
tools:
- name: publish-workforce-report
description: "Given a reporting week, pull headcount and turnover metrics from Workday and labor hours from ADP, then post a combined workforce analytics summary to the HR Teams channel."
inputParameters:
- name: week_start
in: body
type: string
description: "Start date of the reporting week in YYYY-MM-DD format."
- name: hr_channel_id
in: body
type: string
description: "Teams channel ID for the HR leadership audience."
steps:
- name: get-headcount
type: call
call: "workday-analytics.get-headcount-report"
with:
asOfDate: "{{week_start}}"
- name: get-labor-hours
type: call
call: "adp-analytics.get-workers"
with:
startDate: "{{week_start}}"
- name: post-summary
type: call
call: "msteams-analytics.post-channel-message"
with:
channel_id: "{{hr_channel_id}}"
text: "Weekly Workforce Report (w/o {{week_start}}): Active associates: {{get-headcount.total}}, New hires: {{get-headcount.new_hires}}, Separations: {{get-headcount.separations}}, Total labor hours: {{get-labor-hours.totalHours}}"
consumes:
- type: http
namespace: workday-analytics
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: headcount-report
path: "/reports/headcount"
inputParameters:
- name: asOfDate
in: query
operations:
- name: get-headcount-report
method: GET
- type: http
namespace: adp-analytics
baseUri: "https://api.adp.com"
authentication:
type: bearer
token: "$secrets.adp_token"
resources:
- name: workers
path: "/time/v2/workers/time-details"
inputParameters:
- name: startDate
in: query
operations:
- name: get-workers
method: GET
- type: http
namespace: msteams-analytics
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: channel_id
in: path
operations:
- name: post-channel-message
method: POST