Sysco Capabilities
Naftiko 0.5 capability definitions for Sysco - 100 capabilities showing integration workflows and service orchestrations.
Generates demand forecasts via AI.
naftiko: "0.5"
info:
label: "AI-Powered Demand Forecast Digest"
description: "Generates demand forecasts via AI."
tags:
- artificial-intelligence
- supply-chain
- microsoft-teams
- forecasting
capability:
exposes:
- type: mcp
namespace: artificial-intelligence-ops
port: 8080
tools:
- name: execute-workflow
description: "AI-Powered Demand Forecast Digest - orchestrate multi-step workflow across services."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
steps:
- name: get-data
type: call
call: primary.get-data
with:
record_id: "{{record_id}}"
- name: process-result
type: call
call: secondary.process
with:
data: "{{get-data.result}}"
- name: notify-team
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_ops_channel_id"
text: "Processed {{record_id}} | Result: {{process-result.status}}"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: data
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-data
method: GET
- type: http
namespace: secondary
baseUri: "https://sysco.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: process
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Submits a raw supply chain disruption report to Anthropic Claude for concise summarization and risk scoring, enabling faster procurement decision-making.
naftiko: "0.5"
info:
label: "Anthropic AI Supply Chain Disruption Summarization"
description: "Submits a raw supply chain disruption report to Anthropic Claude for concise summarization and risk scoring, enabling faster procurement decision-making."
tags:
- ai
- anthropic
- supply-chain
- procurement
- automation
capability:
exposes:
- type: mcp
namespace: ai-supply-chain
port: 8080
tools:
- name: summarize-disruption-report
description: "Given raw supply chain disruption text (e.g. from a supplier alert or news feed), send it to Anthropic Claude for a concise summary and risk level assessment. Use for rapid procurement triage of supply disruptions."
inputParameters:
- name: disruption_text
in: body
type: string
description: "Raw text of the supply chain disruption report or supplier communication."
call: anthropic-supply.create-message
with:
model: "claude-opus-4-5"
max_tokens: 300
messages: "[{\"role\":\"user\",\"content\":\"Summarize this supply chain disruption and rate risk as low/medium/high:\\n\\n{{disruption_text}}\"}]"
outputParameters:
- name: summary
type: string
mapping: "$.content[0].text"
consumes:
- type: http
namespace: anthropic-supply
baseUri: "https://api.anthropic.com/v1"
authentication:
type: apikey
key: "x-api-key"
value: "$secrets.anthropic_api_key"
placement: header
resources:
- name: messages
path: "/messages"
operations:
- name: create-message
method: POST
Generates cold chain compliance reports.
naftiko: "0.5"
info:
label: "Cold Chain Compliance Report Generator"
description: "Generates cold chain compliance reports."
tags:
- food-safety
- iot
- sharepoint
- compliance
capability:
exposes:
- type: mcp
namespace: food-safety-ops
port: 8080
tools:
- name: execute-workflow
description: "Cold Chain Compliance Report Generator - orchestrate multi-step workflow across services."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
steps:
- name: get-data
type: call
call: primary.get-data
with:
record_id: "{{record_id}}"
- name: process-result
type: call
call: secondary.process
with:
data: "{{get-data.result}}"
- name: notify-team
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_ops_channel_id"
text: "Processed {{record_id}} | Result: {{process-result.status}}"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: data
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-data
method: GET
- type: http
namespace: secondary
baseUri: "https://sysco.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: process
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Monitors cold chain temperature sensors in distribution centers and creates a ServiceNow incident when temperatures exceed food safety thresholds.
naftiko: "0.5"
info:
label: "Cold Chain Temperature Monitoring Alert"
description: "Monitors cold chain temperature sensors in distribution centers and creates a ServiceNow incident when temperatures exceed food safety thresholds."
tags:
- food-safety
- iot
- servicenow
- microsoft-teams
- cold-chain
- distribution
capability:
exposes:
- type: mcp
namespace: food-safety
port: 8080
tools:
- name: alert-temperature-breach
description: "Given a distribution center ID and zone, check temperature sensors and create incidents for breaches."
inputParameters:
- name: dc_id
in: body
type: string
description: "Distribution center identifier."
- name: zone
in: body
type: string
description: "Storage zone, e.g. frozen, refrigerated, dry."
steps:
- name: get-temps
type: call
call: iot-sensors.get-temperature
with:
dc_id: "{{dc_id}}"
zone: "{{zone}}"
- name: create-incident
type: call
call: servicenow.create-incident
with:
short_description: "Cold chain temp breach: DC {{dc_id}} zone {{zone}}"
description: "Current: {{get-temps.current_temp}} | Threshold: {{get-temps.threshold}} | Zone: {{zone}}"
category: "food_safety"
- name: notify-ops
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_dc_ops_channel_id"
text: "TEMP ALERT: DC {{dc_id}} | Zone: {{zone}} | Current: {{get-temps.current_temp}} | Threshold: {{get-temps.threshold}} | Incident: {{create-incident.number}}"
consumes:
- type: http
namespace: iot-sensors
baseUri: "https://sysco-iot.azure-devices.net/api/v1"
authentication:
type: bearer
token: "$secrets.iot_token"
resources:
- name: temperatures
path: "/dc/{{dc_id}}/zones/{{zone}}/temperature"
inputParameters:
- name: dc_id
in: path
- name: zone
in: path
operations:
- name: get-temperature
method: GET
- type: http
namespace: servicenow
baseUri: "https://sysco.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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Searches Confluence for pages matching a query.
naftiko: "0.5"
info:
label: "Confluence Page Search"
description: "Searches Confluence for pages matching a query."
tags:
- collaboration
- confluence
- knowledge-management
capability:
exposes:
- type: mcp
namespace: collaboration-ops
port: 8080
tools:
- name: get-record
description: "Confluence Page Search - retrieve record data for operations review."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
call: primary.get-record
with:
record_id: "{{record_id}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: result
type: string
mapping: "$.result"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: records
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-record
method: GET
Tracks orders from Salesforce through SAP fulfillment.
naftiko: "0.5"
info:
label: "Customer Order Fulfillment Tracker"
description: "Tracks orders from Salesforce through SAP fulfillment."
tags:
- customer-service
- salesforce
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: customer-service-ops
port: 8080
tools:
- name: execute-workflow
description: "Customer Order Fulfillment Tracker - orchestrate multi-step workflow across services."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
steps:
- name: get-data
type: call
call: primary.get-data
with:
record_id: "{{record_id}}"
- name: process-result
type: call
call: secondary.process
with:
data: "{{get-data.result}}"
- name: notify-team
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_ops_channel_id"
text: "Processed {{record_id}} | Result: {{process-result.status}}"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: data
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-data
method: GET
- type: http
namespace: secondary
baseUri: "https://sysco.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: process
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Creates incidents for app performance degradation.
naftiko: "0.5"
info:
label: "Datadog Delivery App Performance Alert"
description: "Creates incidents for app performance degradation."
tags:
- observability
- datadog
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: observability-ops
port: 8080
tools:
- name: execute-workflow
description: "Datadog Delivery App Performance Alert - orchestrate multi-step workflow across services."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
steps:
- name: get-data
type: call
call: primary.get-data
with:
record_id: "{{record_id}}"
- name: process-result
type: call
call: secondary.process
with:
data: "{{get-data.result}}"
- name: notify-team
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_ops_channel_id"
text: "Processed {{record_id}} | Result: {{process-result.status}}"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: data
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-data
method: GET
- type: http
namespace: secondary
baseUri: "https://sysco.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: process
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Monitors Datadog metrics for delivery fleet GPS and telematics data, triggering a ServiceNow incident when a vehicle goes offline or exceeds a temperature threshold for refrigerated goods.
naftiko: "0.5"
info:
label: "Datadog Delivery Fleet Observability"
description: "Monitors Datadog metrics for delivery fleet GPS and telematics data, triggering a ServiceNow incident when a vehicle goes offline or exceeds a temperature threshold for refrigerated goods."
tags:
- supply-chain
- datadog
- servicenow
- fleet-management
- monitoring
capability:
exposes:
- type: mcp
namespace: fleet-ops
port: 8080
tools:
- name: handle-fleet-alert
description: "Given a Datadog monitor ID and vehicle ID, retrieve monitor details and open a ServiceNow incident for fleet operations response. Use when telematics alerts fire for vehicle offline or refrigeration temperature breach."
inputParameters:
- name: monitor_id
in: body
type: integer
description: "Datadog monitor ID that fired the fleet alert."
- name: vehicle_id
in: body
type: string
description: "Fleet vehicle identifier (e.g. VEH-12345)."
- name: alert_type
in: body
type: string
description: "Type of fleet alert: vehicle_offline or temp_breach."
steps:
- name: get-monitor-details
type: call
call: dd-fleet.get-monitor
with:
monitor_id: "{{monitor_id}}"
- name: open-fleet-incident
type: call
call: snow-fleet.create-incident
with:
category: "fleet_operations"
short_description: "Fleet alert {{alert_type}}: vehicle {{vehicle_id}}"
assigned_group: "Fleet_Operations"
description: "Datadog monitor {{monitor_id}} ({{get-monitor-details.name}}) fired {{alert_type}} for vehicle {{vehicle_id}}"
consumes:
- type: http
namespace: dd-fleet
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: monitors
path: "/monitor/{{monitor_id}}"
inputParameters:
- name: monitor_id
in: path
operations:
- name: get-monitor
method: GET
- type: http
namespace: snow-fleet
baseUri: "https://sysco.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
Monitors Datadog for infrastructure anomalies at distribution centers and triggers a ServiceNow incident when a threshold is breached, ensuring rapid IT response.
naftiko: "0.5"
info:
label: "Datadog Distribution Center Infrastructure Alert"
description: "Monitors Datadog for infrastructure anomalies at distribution centers and triggers a ServiceNow incident when a threshold is breached, ensuring rapid IT response."
tags:
- itsm
- datadog
- servicenow
- incident-response
- infrastructure
capability:
exposes:
- type: mcp
namespace: dc-infra-ops
port: 8080
tools:
- name: handle-dc-infra-alert
description: "Given a Datadog monitor ID and distribution center site name, retrieve monitor details and open a ServiceNow incident for IT infrastructure response at that facility. Use for automated alerting from Datadog webhook triggers."
inputParameters:
- name: monitor_id
in: body
type: integer
description: "Datadog monitor ID that triggered the alert."
- name: dc_site
in: body
type: string
description: "Distribution center site identifier (e.g. DC-ATL-01)."
- name: alert_message
in: body
type: string
description: "Alert message body from Datadog."
steps:
- name: get-monitor
type: call
call: datadog-mon.get-monitor
with:
monitor_id: "{{monitor_id}}"
- name: create-snow-incident
type: call
call: snow-infra.create-incident
with:
category: "infrastructure"
short_description: "Infrastructure alert at {{dc_site}}: {{alert_message}}"
assigned_group: "DC_IT_Operations"
description: "Datadog monitor {{monitor_id}} ({{get-monitor.name}}) triggered at {{dc_site}}. Alert: {{alert_message}}"
consumes:
- type: http
namespace: datadog-mon
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: monitors
path: "/monitor/{{monitor_id}}"
inputParameters:
- name: monitor_id
in: path
operations:
- name: get-monitor
method: GET
- type: http
namespace: snow-infra
baseUri: "https://sysco.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
Creates incidents for log anomalies.
naftiko: "0.5"
info:
label: "Datadog Log Anomaly to ServiceNow"
description: "Creates incidents for log anomalies."
tags:
- observability
- datadog
- servicenow
- incident-management
capability:
exposes:
- type: mcp
namespace: observability-ops
port: 8080
tools:
- name: execute-workflow
description: "Datadog Log Anomaly to ServiceNow - orchestrate multi-step workflow across services."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
steps:
- name: get-data
type: call
call: primary.get-data
with:
record_id: "{{record_id}}"
- name: process-result
type: call
call: secondary.process
with:
data: "{{get-data.result}}"
- name: notify-team
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_ops_channel_id"
text: "Processed {{record_id}} | Result: {{process-result.status}}"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: data
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-data
method: GET
- type: http
namespace: secondary
baseUri: "https://sysco.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: process
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Queries Datadog for the health status of a monitored service, returning active alerts and P95 latency.
naftiko: "0.5"
info:
label: "Datadog Service Health Check"
description: "Queries Datadog for the health status of a monitored service, returning active alerts and P95 latency."
tags:
- observability
- datadog
- monitoring
capability:
exposes:
- type: mcp
namespace: observability
port: 8080
tools:
- name: get-service-health
description: "Check health of a Datadog-monitored service. Returns alert count and latency."
inputParameters:
- name: service_name
in: body
type: string
description: "The Datadog service name."
call: datadog.get-service-summary
with:
service_name: "{{service_name}}"
outputParameters:
- name: alert_count
type: number
mapping: "$.alertCount"
- name: p95_latency
type: number
mapping: "$.p95Latency"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: services
path: "/service_dependencies/{{service_name}}"
inputParameters:
- name: service_name
in: path
operations:
- name: get-service-summary
method: GET
Generates a weekly operations report by querying Datadog for key infrastructure metrics and SLO compliance, then posts the report to the IT leadership Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Datadog Weekly Operations Report"
description: "Generates a weekly operations report by querying Datadog for key infrastructure metrics and SLO compliance, then posts the report to the IT leadership Microsoft Teams channel."
tags:
- devops
- datadog
- microsoft-teams
- reporting
- observability
capability:
exposes:
- type: mcp
namespace: ops-reporting
port: 8080
tools:
- name: publish-weekly-ops-report
description: "Query Datadog for the past week's SLO compliance and incident count metrics, then post a weekly operations summary to the Microsoft Teams IT-leadership channel. Invoke every Monday morning as a scheduled digest."
inputParameters:
- name: slo_id
in: body
type: string
description: "Datadog SLO ID to include in the weekly report."
steps:
- name: get-slo-status
type: call
call: dd-slo-report.get-slo
with:
slo_id: "{{slo_id}}"
- name: post-weekly-report
type: call
call: msteams-it-leadership.send-channel-message
with:
team_id: "$secrets.msteams_it_team_id"
channel_id: "$secrets.msteams_it_channel_id"
content: "Weekly Ops Report: SLO {{slo_id}} status: {{get-slo-status.data.overall_status}}. Error budget remaining: {{get-slo-status.data.overall_error_budget_remaining}}%. Full report in Datadog."
consumes:
- type: http
namespace: dd-slo-report
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: slos
path: "/slo/{{slo_id}}"
inputParameters:
- name: slo_id
in: path
operations:
- name: get-slo
method: GET
- type: http
namespace: msteams-it-leadership
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Posts route completion summaries.
naftiko: "0.5"
info:
label: "Delivery Driver Route Completion Tracker"
description: "Posts route completion summaries."
tags:
- logistics
- fleet-management
- microsoft-teams
- food-distribution
capability:
exposes:
- type: mcp
namespace: logistics-ops
port: 8080
tools:
- name: execute-workflow
description: "Delivery Driver Route Completion Tracker - orchestrate multi-step workflow across services."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
steps:
- name: get-data
type: call
call: primary.get-data
with:
record_id: "{{record_id}}"
- name: process-result
type: call
call: secondary.process
with:
data: "{{get-data.result}}"
- name: notify-team
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_ops_channel_id"
text: "Processed {{record_id}} | Result: {{process-result.status}}"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: data
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-data
method: GET
- type: http
namespace: secondary
baseUri: "https://sysco.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: process
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Pulls delivery route data from SAP, analyzes efficiency, and posts recommendations.
naftiko: "0.5"
info:
label: "Delivery Route Optimization Report"
description: "Pulls delivery route data from SAP, analyzes efficiency, and posts recommendations."
tags:
- logistics
- sap
- microsoft-teams
- food-distribution
capability:
exposes:
- type: mcp
namespace: logistics-ops
port: 8080
tools:
- name: execute-workflow
description: "Delivery Route Optimization Report - orchestrate multi-step workflow across services."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
steps:
- name: get-data
type: call
call: primary.get-data
with:
record_id: "{{record_id}}"
- name: process-result
type: call
call: secondary.process
with:
data: "{{get-data.result}}"
- name: notify-team
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_ops_channel_id"
text: "Processed {{record_id}} | Result: {{process-result.status}}"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: data
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-data
method: GET
- type: http
namespace: secondary
baseUri: "https://sysco.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: process
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Creates ServiceNow task when DC capacity exceeds threshold.
naftiko: "0.5"
info:
label: "Distribution Center Capacity Alert"
description: "Creates ServiceNow task when DC capacity exceeds threshold."
tags:
- supply-chain
- servicenow
- microsoft-teams
- distribution
capability:
exposes:
- type: mcp
namespace: supply-chain-ops
port: 8080
tools:
- name: execute-workflow
description: "Distribution Center Capacity Alert - orchestrate multi-step workflow across services."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
steps:
- name: get-data
type: call
call: primary.get-data
with:
record_id: "{{record_id}}"
- name: process-result
type: call
call: secondary.process
with:
data: "{{get-data.result}}"
- name: notify-team
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_ops_channel_id"
text: "Processed {{record_id}} | Result: {{process-result.status}}"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: data
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-data
method: GET
- type: http
namespace: secondary
baseUri: "https://sysco.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: process
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Generates labor scheduling recommendations.
naftiko: "0.5"
info:
label: "Distribution Center Labor Scheduling"
description: "Generates labor scheduling recommendations."
tags:
- supply-chain
- workforce-planning
- microsoft-teams
- distribution
capability:
exposes:
- type: mcp
namespace: supply-chain-ops
port: 8080
tools:
- name: execute-workflow
description: "Distribution Center Labor Scheduling - orchestrate multi-step workflow across services."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
steps:
- name: get-data
type: call
call: primary.get-data
with:
record_id: "{{record_id}}"
- name: process-result
type: call
call: secondary.process
with:
data: "{{get-data.result}}"
- name: notify-team
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_ops_channel_id"
text: "Processed {{record_id}} | Result: {{process-result.status}}"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: data
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-data
method: GET
- type: http
namespace: secondary
baseUri: "https://sysco.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: process
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Retrieves the signing status of a DocuSign envelope including signer progress.
naftiko: "0.5"
info:
label: "DocuSign Envelope Status"
description: "Retrieves the signing status of a DocuSign envelope including signer progress."
tags:
- legal
- docusign
- contract-management
capability:
exposes:
- type: mcp
namespace: legal-ops
port: 8080
tools:
- name: get-record
description: "DocuSign Envelope Status - retrieve record data for operations review."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
call: primary.get-record
with:
record_id: "{{record_id}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: result
type: string
mapping: "$.result"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: records
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-record
method: GET
Creates SAP PM work orders for fleet maintenance.
naftiko: "0.5"
info:
label: "Fleet Vehicle Maintenance Scheduler"
description: "Creates SAP PM work orders for fleet maintenance."
tags:
- logistics
- sap
- microsoft-teams
- fleet-management
capability:
exposes:
- type: mcp
namespace: logistics-ops
port: 8080
tools:
- name: execute-workflow
description: "Fleet Vehicle Maintenance Scheduler - orchestrate multi-step workflow across services."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
steps:
- name: get-data
type: call
call: primary.get-data
with:
record_id: "{{record_id}}"
- name: process-result
type: call
call: secondary.process
with:
data: "{{get-data.result}}"
- name: notify-team
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_ops_channel_id"
text: "Processed {{record_id}} | Result: {{process-result.status}}"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: data
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-data
method: GET
- type: http
namespace: secondary
baseUri: "https://sysco.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: process
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Retrieves the real-time status of a food distribution order from SAP S/4HANA, including delivery date, fulfillment status, and carrier tracking number.
naftiko: "0.5"
info:
label: "Food Distribution Order Status Lookup"
description: "Retrieves the real-time status of a food distribution order from SAP S/4HANA, including delivery date, fulfillment status, and carrier tracking number."
tags:
- supply-chain
- sap
- erp
- order-management
- lookup
capability:
exposes:
- type: mcp
namespace: order-ops
port: 8080
tools:
- name: get-order-status
description: "Given a SAP sales order number, return its current fulfillment status, scheduled delivery date, and carrier tracking number. Use for customer service inquiries or distribution operations monitoring."
inputParameters:
- name: sales_order_number
in: body
type: string
description: "SAP sales order number (e.g. 1000234567)."
call: sap-orders.get-sales-order
with:
order_number: "{{sales_order_number}}"
outputParameters:
- name: status
type: string
mapping: "$.d.OverallSDProcessStatus"
- name: delivery_date
type: string
mapping: "$.d.RequestedDeliveryDate"
- name: tracking_number
type: string
mapping: "$.d.TrackingNumber"
consumes:
- type: http
namespace: sap-orders
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/SD_CUSTOMER_ORDER_MAINT_V2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: sales-orders
path: "/A_SalesOrder('{{order_number}}')"
inputParameters:
- name: order_number
in: path
operations:
- name: get-sales-order
method: GET
Retrieves affected products and broadcasts food recall alerts.
naftiko: "0.5"
info:
label: "Food Recall Notification Workflow"
description: "Retrieves affected products and broadcasts food recall alerts."
tags:
- food-safety
- sap
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: food-safety-ops
port: 8080
tools:
- name: execute-workflow
description: "Food Recall Notification Workflow - orchestrate multi-step workflow across services."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
steps:
- name: get-data
type: call
call: primary.get-data
with:
record_id: "{{record_id}}"
- name: process-result
type: call
call: secondary.process
with:
data: "{{get-data.result}}"
- name: notify-team
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_ops_channel_id"
text: "Processed {{record_id}} | Result: {{process-result.status}}"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: data
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-data
method: GET
- type: http
namespace: secondary
baseUri: "https://sysco.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: process
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
When a food safety incident is reported, creates a ServiceNow quality incident record, logs it in SAP S/4HANA quality management, and notifies the food safety team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Food Safety Compliance Incident Tracking"
description: "When a food safety incident is reported, creates a ServiceNow quality incident record, logs it in SAP S/4HANA quality management, and notifies the food safety team via Microsoft Teams."
tags:
- compliance
- servicenow
- sap
- microsoft-teams
- food-safety
- quality-management
capability:
exposes:
- type: mcp
namespace: quality-ops
port: 8080
tools:
- name: report-food-safety-incident
description: "Given a product lot number, distribution center, and incident description, create a ServiceNow quality incident, log a quality notification in SAP, and alert the food safety compliance team in Microsoft Teams. Use when a food safety issue is identified at any facility."
inputParameters:
- name: lot_number
in: body
type: string
description: "Product batch or lot number involved in the incident."
- name: dc_location
in: body
type: string
description: "Distribution center location code where incident occurred."
- name: incident_description
in: body
type: string
description: "Detailed description of the food safety incident."
steps:
- name: create-snow-incident
type: call
call: snow-quality.create-incident
with:
category: "food_safety"
short_description: "Food safety incident: Lot {{lot_number}} at {{dc_location}}"
description: "{{incident_description}}"
assigned_group: "Food_Safety_Compliance"
- name: log-sap-notification
type: call
call: sap-quality.create-notification
with:
NotificationType: "Q1"
ShortText: "Food safety incident lot {{lot_number}}"
FunctionalLocation: "{{dc_location}}"
- name: alert-food-safety-team
type: call
call: msteams-quality.send-channel-message
with:
team_id: "$secrets.msteams_quality_team_id"
channel_id: "$secrets.msteams_quality_channel_id"
content: "FOOD SAFETY INCIDENT: Lot {{lot_number}} at {{dc_location}} | ServiceNow: {{create-snow-incident.number}} | Immediate action required"
consumes:
- type: http
namespace: snow-quality
baseUri: "https://sysco.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-quality
baseUri: "https://sysco-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: "/QualityNotification"
operations:
- name: create-notification
method: POST
- type: http
namespace: msteams-quality
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Creates Jira ticket for build failures.
naftiko: "0.5"
info:
label: "GitHub Actions Build Failure Response"
description: "Creates Jira ticket for build failures."
tags:
- devops
- github
- jira
- ci-cd
capability:
exposes:
- type: mcp
namespace: devops-ops
port: 8080
tools:
- name: execute-workflow
description: "GitHub Actions Build Failure Response - orchestrate multi-step workflow across services."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
steps:
- name: get-data
type: call
call: primary.get-data
with:
record_id: "{{record_id}}"
- name: process-result
type: call
call: secondary.process
with:
data: "{{get-data.result}}"
- name: notify-team
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_ops_channel_id"
text: "Processed {{record_id}} | Result: {{process-result.status}}"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: data
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-data
method: GET
- type: http
namespace: secondary
baseUri: "https://sysco.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: process
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Checks approval before deployment.
naftiko: "0.5"
info:
label: "GitHub Deployment Approval Gate"
description: "Checks approval before deployment."
tags:
- devops
- github
- servicenow
- change-management
capability:
exposes:
- type: mcp
namespace: devops-ops
port: 8080
tools:
- name: execute-workflow
description: "GitHub Deployment Approval Gate - orchestrate multi-step workflow across services."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
steps:
- name: get-data
type: call
call: primary.get-data
with:
record_id: "{{record_id}}"
- name: process-result
type: call
call: secondary.process
with:
data: "{{get-data.result}}"
- name: notify-team
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_ops_channel_id"
text: "Processed {{record_id}} | Result: {{process-result.status}}"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: data
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-data
method: GET
- type: http
namespace: secondary
baseUri: "https://sysco.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: process
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Creates Jira tickets for vulnerabilities.
naftiko: "0.5"
info:
label: "GitHub Security Vulnerability Triage"
description: "Creates Jira tickets for vulnerabilities."
tags:
- security
- github
- jira
- vulnerability-management
capability:
exposes:
- type: mcp
namespace: security-ops
port: 8080
tools:
- name: execute-workflow
description: "GitHub Security Vulnerability Triage - orchestrate multi-step workflow across services."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
steps:
- name: get-data
type: call
call: primary.get-data
with:
record_id: "{{record_id}}"
- name: process-result
type: call
call: secondary.process
with:
data: "{{get-data.result}}"
- name: notify-team
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_ops_channel_id"
text: "Processed {{record_id}} | Result: {{process-result.status}}"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: data
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-data
method: GET
- type: http
namespace: secondary
baseUri: "https://sysco.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: process
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Checks the latest Power BI dataset refresh status, returning completion time and status.
naftiko: "0.5"
info:
label: "Power BI Dataset Refresh Status"
description: "Checks the latest Power BI dataset refresh status, returning completion time and status."
tags:
- analytics
- power-bi
- monitoring
capability:
exposes:
- type: mcp
namespace: analytics-ops
port: 8080
tools:
- name: get-record
description: "Power BI Dataset Refresh Status - retrieve record data for operations review."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
call: primary.get-record
with:
record_id: "{{record_id}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: result
type: string
mapping: "$.result"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: records
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-record
method: GET
Triggers a Power BI dataset refresh for the procurement spend analytics report and notifies the procurement leadership team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Power BI Procurement Spend Report Refresh"
description: "Triggers a Power BI dataset refresh for the procurement spend analytics report and notifies the procurement leadership team via Microsoft Teams."
tags:
- data
- power-bi
- microsoft-teams
- procurement
- reporting
capability:
exposes:
- type: mcp
namespace: procurement-reporting
port: 8080
tools:
- name: refresh-spend-report
description: "Given a Power BI workspace and dataset ID for the procurement spend report, trigger a dataset refresh and notify the procurement leadership Microsoft Teams channel. Use monthly after SAP period close or on-demand for spend reviews."
inputParameters:
- name: workspace_id
in: body
type: string
description: "Power BI workspace ID containing the procurement dataset."
- name: dataset_id
in: body
type: string
description: "Power BI dataset ID to refresh."
steps:
- name: trigger-pbi-refresh
type: call
call: pbi-procurement.refresh-dataset
with:
workspace_id: "{{workspace_id}}"
dataset_id: "{{dataset_id}}"
- name: notify-procurement-leadership
type: call
call: msteams-pbi.send-channel-message
with:
team_id: "$secrets.msteams_procurement_team_id"
channel_id: "$secrets.msteams_procurement_channel_id"
content: "Procurement spend report refresh triggered for dataset {{dataset_id}}. Data will be current within minutes."
consumes:
- type: http
namespace: pbi-procurement
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: dataset-refresh
path: "/groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: workspace_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
- type: http
namespace: msteams-pbi
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Triggers a Power BI dataset refresh for the food-service sales performance dashboard and posts a completion notification to the sales leadership Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Power BI Sales Performance Dashboard Refresh"
description: "Triggers a Power BI dataset refresh for the food-service sales performance dashboard and posts a completion notification to the sales leadership Microsoft Teams channel."
tags:
- data
- power-bi
- microsoft-teams
- reporting
- sales
capability:
exposes:
- type: mcp
namespace: bi-ops
port: 8080
tools:
- name: refresh-sales-dashboard
description: "Given a Power BI workspace and dataset ID, trigger a dataset refresh and notify the sales leadership Microsoft Teams channel when complete. Use for on-demand or scheduled dashboard updates ahead of business reviews."
inputParameters:
- name: workspace_id
in: body
type: string
description: "Power BI workspace (group) ID containing the dataset."
- name: dataset_id
in: body
type: string
description: "Power BI dataset ID to refresh."
steps:
- name: trigger-refresh
type: call
call: powerbi-datasets.refresh-dataset
with:
workspace_id: "{{workspace_id}}"
dataset_id: "{{dataset_id}}"
- name: notify-sales-leadership
type: call
call: msteams-sales.send-channel-message
with:
team_id: "$secrets.msteams_sales_team_id"
channel_id: "$secrets.msteams_sales_channel_id"
content: "Sales Performance dashboard refresh triggered for dataset {{dataset_id}} in workspace {{workspace_id}}. Data will be current within a few minutes."
consumes:
- type: http
namespace: powerbi-datasets
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: dataset-refresh
path: "/groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: workspace_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
- 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: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Triggers Power BI refresh for weekly sales.
naftiko: "0.5"
info:
label: "Power BI Weekly Sales Report Refresh"
description: "Triggers Power BI refresh for weekly sales."
tags:
- analytics
- power-bi
- microsoft-teams
- sales
capability:
exposes:
- type: mcp
namespace: analytics-ops
port: 8080
tools:
- name: execute-workflow
description: "Power BI Weekly Sales Report Refresh - orchestrate multi-step workflow across services."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
steps:
- name: get-data
type: call
call: primary.get-data
with:
record_id: "{{record_id}}"
- name: process-result
type: call
call: secondary.process
with:
data: "{{get-data.result}}"
- name: notify-team
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_ops_channel_id"
text: "Processed {{record_id}} | Result: {{process-result.status}}"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: data
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-data
method: GET
- type: http
namespace: secondary
baseUri: "https://sysco.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: process
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Retrieves a Salesforce support case by number, returning status, priority, and account name.
naftiko: "0.5"
info:
label: "Salesforce Case Lookup"
description: "Retrieves a Salesforce support case by number, returning status, priority, and account name."
tags:
- customer-service
- salesforce
- crm
capability:
exposes:
- type: mcp
namespace: customer-service-ops
port: 8080
tools:
- name: get-record
description: "Salesforce Case Lookup - retrieve record data for operations review."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
call: primary.get-record
with:
record_id: "{{record_id}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: result
type: string
mapping: "$.result"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: records
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-record
method: GET
Retrieves a Salesforce contact by email, returning name, title, account, and phone for customer service operations.
naftiko: "0.5"
info:
label: "Salesforce Contact Lookup"
description: "Retrieves a Salesforce contact by email, returning name, title, account, and phone for customer service operations."
tags:
- sales
- salesforce
- crm
capability:
exposes:
- type: mcp
namespace: crm-contacts
port: 8080
tools:
- name: get-contact-by-email
description: "Look up a Salesforce contact by email. Returns name, title, and account."
inputParameters:
- name: email
in: body
type: string
description: "The contact email address."
call: salesforce.query-contact
with:
email: "{{email}}"
outputParameters:
- name: full_name
type: string
mapping: "$.records[0].Name"
- name: account_name
type: string
mapping: "$.records[0].Account.Name"
consumes:
- type: http
namespace: salesforce
baseUri: "https://sysco.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: query
path: "/query?q=SELECT+Name,Title,Phone,Account.Name+FROM+Contact+WHERE+Email='{{email}}'"
inputParameters:
- name: email
in: path
operations:
- name: query-contact
method: GET
Retrieves a Salesforce customer account record and associated open opportunities, providing an at-a-glance account health summary for sales and account management.
naftiko: "0.5"
info:
label: "Salesforce Customer Account Health Check"
description: "Retrieves a Salesforce customer account record and associated open opportunities, providing an at-a-glance account health summary for sales and account management."
tags:
- crm
- salesforce
- sales
- account-management
- lookup
capability:
exposes:
- type: mcp
namespace: crm-ops
port: 8080
tools:
- name: get-account-health
description: "Given a Salesforce account ID, retrieve account details and list all open opportunities with amounts and close dates. Use for pre-call preparation, account review meetings, or churn risk assessments."
inputParameters:
- name: account_id
in: body
type: string
description: "Salesforce account ID (18-char) to review."
steps:
- name: get-account
type: call
call: salesforce-acct.get-account
with:
account_id: "{{account_id}}"
- name: get-opportunities
type: call
call: salesforce-opps.query-opportunities
with:
account_id: "{{account_id}}"
consumes:
- type: http
namespace: salesforce-acct
baseUri: "https://sysco.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_access_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account
method: GET
- type: http
namespace: salesforce-opps
baseUri: "https://sysco.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_access_token"
resources:
- name: opportunity-query
path: "/query"
inputParameters:
- name: account_id
in: query
operations:
- name: query-opportunities
method: GET
Notifies account managers of at-risk accounts.
naftiko: "0.5"
info:
label: "Salesforce Customer Churn Risk Alert"
description: "Notifies account managers of at-risk accounts."
tags:
- sales
- salesforce
- microsoft-teams
- customer-retention
capability:
exposes:
- type: mcp
namespace: sales-ops
port: 8080
tools:
- name: execute-workflow
description: "Salesforce Customer Churn Risk Alert - orchestrate multi-step workflow across services."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
steps:
- name: get-data
type: call
call: primary.get-data
with:
record_id: "{{record_id}}"
- name: process-result
type: call
call: secondary.process
with:
data: "{{get-data.result}}"
- name: notify-team
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_ops_channel_id"
text: "Processed {{record_id}} | Result: {{process-result.status}}"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: data
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-data
method: GET
- type: http
namespace: secondary
baseUri: "https://sysco.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: process
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
When a Salesforce case is marked as a customer complaint, creates a matching ServiceNow incident for operations follow-up and links the two records for unified tracking.
naftiko: "0.5"
info:
label: "Salesforce Customer Complaint to ServiceNow Case"
description: "When a Salesforce case is marked as a customer complaint, creates a matching ServiceNow incident for operations follow-up and links the two records for unified tracking."
tags:
- crm
- salesforce
- servicenow
- customer-support
- complaint-management
capability:
exposes:
- type: mcp
namespace: complaint-ops
port: 8080
tools:
- name: escalate-complaint-to-servicenow
description: "Given a Salesforce case ID flagged as a customer complaint, retrieve the case details and open a linked ServiceNow incident for operations resolution, then update the Salesforce case with the ServiceNow incident number. Use when complaint cases require cross-functional operations response."
inputParameters:
- name: case_id
in: body
type: string
description: "Salesforce case ID of the customer complaint."
steps:
- name: get-sf-case
type: call
call: sf-cases.get-case
with:
case_id: "{{case_id}}"
- name: create-snow-case
type: call
call: snow-complaints.create-incident
with:
category: "customer_complaint"
short_description: "Customer complaint: {{get-sf-case.Subject}}"
description: "Salesforce case {{case_id}} escalated. Account: {{get-sf-case.AccountId}}. Description: {{get-sf-case.Description}}"
assigned_group: "Customer_Operations"
- name: update-sf-case
type: call
call: sf-cases-update.update-case
with:
case_id: "{{case_id}}"
ServiceNow_Incident__c: "{{create-snow-case.number}}"
consumes:
- type: http
namespace: sf-cases
baseUri: "https://sysco.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_access_token"
resources:
- name: cases
path: "/sobjects/Case/{{case_id}}"
inputParameters:
- name: case_id
in: path
operations:
- name: get-case
method: GET
- type: http
namespace: snow-complaints
baseUri: "https://sysco.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: sf-cases-update
baseUri: "https://sysco.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_access_token"
resources:
- name: case-update
path: "/sobjects/Case/{{case_id}}"
inputParameters:
- name: case_id
in: path
operations:
- name: update-case
method: PATCH
Creates SAP customer from Salesforce account.
naftiko: "0.5"
info:
label: "Salesforce New Account to SAP Customer"
description: "Creates SAP customer from Salesforce account."
tags:
- sales
- salesforce
- sap
- sync
capability:
exposes:
- type: mcp
namespace: sales-ops
port: 8080
tools:
- name: execute-workflow
description: "Salesforce New Account to SAP Customer - orchestrate multi-step workflow across services."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
steps:
- name: get-data
type: call
call: primary.get-data
with:
record_id: "{{record_id}}"
- name: process-result
type: call
call: secondary.process
with:
data: "{{get-data.result}}"
- name: notify-team
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_ops_channel_id"
text: "Processed {{record_id}} | Result: {{process-result.status}}"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: data
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-data
method: GET
- type: http
namespace: secondary
baseUri: "https://sysco.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: process
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Escalates low NPS scores.
naftiko: "0.5"
info:
label: "Salesforce NPS Low Score Escalation"
description: "Escalates low NPS scores."
tags:
- customer-service
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: customer-service-ops
port: 8080
tools:
- name: execute-workflow
description: "Salesforce NPS Low Score Escalation - orchestrate multi-step workflow across services."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
steps:
- name: get-data
type: call
call: primary.get-data
with:
record_id: "{{record_id}}"
- name: process-result
type: call
call: secondary.process
with:
data: "{{get-data.result}}"
- name: notify-team
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_ops_channel_id"
text: "Processed {{record_id}} | Result: {{process-result.status}}"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: data
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-data
method: GET
- type: http
namespace: secondary
baseUri: "https://sysco.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: process
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
When a Salesforce customer NPS survey response is recorded with a low score, creates a Salesforce task for the account manager and sends a follow-up notification via Microsoft Teams.
naftiko: "0.5"
info:
label: "Salesforce NPS Survey Follow-Up Workflow"
description: "When a Salesforce customer NPS survey response is recorded with a low score, creates a Salesforce task for the account manager and sends a follow-up notification via Microsoft Teams."
tags:
- crm
- salesforce
- microsoft-teams
- nps
- customer-success
capability:
exposes:
- type: mcp
namespace: nps-ops
port: 8080
tools:
- name: handle-low-nps-response
description: "Given a Salesforce survey response ID with a low NPS score, retrieve the customer account details, create a follow-up task for the account manager, and notify them in Microsoft Teams. Use when NPS automation detects a detractor response."
inputParameters:
- name: survey_response_id
in: body
type: string
description: "Salesforce survey response record ID with the low NPS score."
- name: nps_score
in: body
type: integer
description: "NPS score (0-10) from the customer response."
steps:
- name: get-survey-response
type: call
call: sf-surveys.get-survey-response
with:
response_id: "{{survey_response_id}}"
- name: create-followup-task
type: call
call: sf-tasks.create-task
with:
Subject: "NPS follow-up required: score {{nps_score}}"
WhatId: "{{get-survey-response.AccountId}}"
OwnerId: "{{get-survey-response.OwnerId}}"
Priority: "High"
- name: notify-account-manager
type: call
call: msteams-nps.send-channel-message
with:
team_id: "$secrets.msteams_sales_team_id"
channel_id: "$secrets.msteams_sales_channel_id"
content: "Low NPS alert: Customer {{get-survey-response.AccountId}} scored {{nps_score}}. Follow-up task created: {{create-followup-task.Id}}. Prompt outreach required."
consumes:
- type: http
namespace: sf-surveys
baseUri: "https://sysco.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_access_token"
resources:
- name: survey-responses
path: "/sobjects/SurveyResponse/{{response_id}}"
inputParameters:
- name: response_id
in: path
operations:
- name: get-survey-response
method: GET
- type: http
namespace: sf-tasks
baseUri: "https://sysco.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_access_token"
resources:
- name: tasks
path: "/sobjects/Task"
operations:
- name: create-task
method: POST
- type: http
namespace: msteams-nps
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
When a Salesforce food-service opportunity closes as Won, automatically creates a corresponding sales order in SAP S/4HANA to initiate fulfillment.
naftiko: "0.5"
info:
label: "Salesforce Opportunity Won to SAP Order Creation"
description: "When a Salesforce food-service opportunity closes as Won, automatically creates a corresponding sales order in SAP S/4HANA to initiate fulfillment."
tags:
- crm
- salesforce
- sap
- order-management
- supply-chain
- revenue-operations
capability:
exposes:
- type: mcp
namespace: order-fulfillment
port: 8080
tools:
- name: create-order-from-opportunity
description: "Given a closed-won Salesforce opportunity ID, fetch the opportunity details and create a matching sales order in SAP S/4HANA, then update the Salesforce opportunity with the SAP order number. Use at deal close to automate order initiation."
inputParameters:
- name: opportunity_id
in: body
type: string
description: "Salesforce opportunity ID of the closed-won deal."
steps:
- name: get-opportunity
type: call
call: sf-opps.get-opportunity
with:
opportunity_id: "{{opportunity_id}}"
- name: create-sap-order
type: call
call: sap-sales-orders.create-order
with:
SoldToParty: "{{get-opportunity.SAP_Customer_ID__c}}"
PurchaseOrderByCustomer: "{{opportunity_id}}"
RequestedDeliveryDate: "{{get-opportunity.CloseDate}}"
- name: update-opportunity
type: call
call: sf-opps-update.update-opportunity
with:
opportunity_id: "{{opportunity_id}}"
SAP_Order_Number__c: "{{create-sap-order.SalesOrder}}"
consumes:
- type: http
namespace: sf-opps
baseUri: "https://sysco.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_access_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity/{{opportunity_id}}"
inputParameters:
- name: opportunity_id
in: path
operations:
- name: get-opportunity
method: GET
- type: http
namespace: sap-sales-orders
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/SD_CUSTOMER_ORDER_MAINT_V2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: sales-orders
path: "/A_SalesOrder"
operations:
- name: create-order
method: POST
- type: http
namespace: sf-opps-update
baseUri: "https://sysco.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_access_token"
resources:
- name: opportunity-update
path: "/sobjects/Opportunity/{{opportunity_id}}"
inputParameters:
- name: opportunity_id
in: path
operations:
- name: update-opportunity
method: PATCH
Creates SAP return orders.
naftiko: "0.5"
info:
label: "Salesforce Product Return Workflow"
description: "Creates SAP return orders."
tags:
- customer-service
- salesforce
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: customer-service-ops
port: 8080
tools:
- name: execute-workflow
description: "Salesforce Product Return Workflow - orchestrate multi-step workflow across services."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
steps:
- name: get-data
type: call
call: primary.get-data
with:
record_id: "{{record_id}}"
- name: process-result
type: call
call: secondary.process
with:
data: "{{get-data.result}}"
- name: notify-team
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_ops_channel_id"
text: "Processed {{record_id}} | Result: {{process-result.status}}"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: data
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-data
method: GET
- type: http
namespace: secondary
baseUri: "https://sysco.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: process
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Pushes pipeline data to Power BI.
naftiko: "0.5"
info:
label: "Salesforce Quarterly Pipeline to Power BI"
description: "Pushes pipeline data to Power BI."
tags:
- sales
- salesforce
- power-bi
- analytics
capability:
exposes:
- type: mcp
namespace: sales-ops
port: 8080
tools:
- name: execute-workflow
description: "Salesforce Quarterly Pipeline to Power BI - orchestrate multi-step workflow across services."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
steps:
- name: get-data
type: call
call: primary.get-data
with:
record_id: "{{record_id}}"
- name: process-result
type: call
call: secondary.process
with:
data: "{{get-data.result}}"
- name: notify-team
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_ops_channel_id"
text: "Processed {{record_id}} | Result: {{process-result.status}}"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: data
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-data
method: GET
- type: http
namespace: secondary
baseUri: "https://sysco.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: process
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Retrieves a restaurant account from Salesforce with order history, credit status, and assigned sales representative details.
naftiko: "0.5"
info:
label: "Salesforce Restaurant Account Snapshot"
description: "Retrieves a restaurant account from Salesforce with order history, credit status, and assigned sales representative details."
tags:
- sales
- salesforce
- crm
- food-distribution
capability:
exposes:
- type: mcp
namespace: crm-accounts
port: 8080
tools:
- name: get-restaurant-account
description: "Look up a Salesforce restaurant account. Returns order history, credit status, and sales rep."
inputParameters:
- name: account_id
in: body
type: string
description: "The Salesforce account ID."
call: salesforce.get-account
with:
account_id: "{{account_id}}"
outputParameters:
- name: name
type: string
mapping: "$.Name"
- name: credit_status
type: string
mapping: "$.Credit_Status__c"
- name: sales_rep
type: string
mapping: "$.Owner.Name"
consumes:
- type: http
namespace: salesforce
baseUri: "https://sysco.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account
method: GET
Syncs completed route sales activities from Salesforce to SAP S/4HANA for revenue recognition and ensures the ERP reflects the latest customer order data.
naftiko: "0.5"
info:
label: "Salesforce Route Sales Activity Sync to SAP"
description: "Syncs completed route sales activities from Salesforce to SAP S/4HANA for revenue recognition and ensures the ERP reflects the latest customer order data."
tags:
- crm
- salesforce
- sap
- sales
- supply-chain
- sync
capability:
exposes:
- type: mcp
namespace: sales-sync
port: 8080
tools:
- name: sync-route-sales-to-sap
description: "Given a Salesforce activity ID for a completed route sale, fetch the activity and line items, then create or update the corresponding SAP sales order. Use daily or post-route-completion to keep ERP revenue data current."
inputParameters:
- name: activity_id
in: body
type: string
description: "Salesforce task or event ID representing the completed route sale."
- name: customer_sap_id
in: body
type: string
description: "SAP customer ID for the route customer."
steps:
- name: get-activity
type: call
call: sf-activities.get-task
with:
activity_id: "{{activity_id}}"
- name: upsert-sap-order
type: call
call: sap-route-orders.create-order
with:
SoldToParty: "{{customer_sap_id}}"
PurchaseOrderByCustomer: "{{activity_id}}"
SalesOrderType: "ROUTE"
consumes:
- type: http
namespace: sf-activities
baseUri: "https://sysco.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_access_token"
resources:
- name: tasks
path: "/sobjects/Task/{{activity_id}}"
inputParameters:
- name: activity_id
in: path
operations:
- name: get-task
method: GET
- type: http
namespace: sap-route-orders
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/SD_CUSTOMER_ORDER_MAINT_V2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: sales-orders
path: "/A_SalesOrder"
operations:
- name: create-order
method: POST
Queries Salesforce for open pipeline opportunities by close date and posts a weekly forecast summary to the sales leadership Microsoft Teams channel for pipeline review meetings.
naftiko: "0.5"
info:
label: "Salesforce Sales Forecast Digest"
description: "Queries Salesforce for open pipeline opportunities by close date and posts a weekly forecast summary to the sales leadership Microsoft Teams channel for pipeline review meetings."
tags:
- crm
- salesforce
- microsoft-teams
- reporting
- forecasting
- sales
capability:
exposes:
- type: mcp
namespace: sales-forecasting
port: 8080
tools:
- name: digest-sales-forecast
description: "Query Salesforce for all open opportunities closing within a specified number of days, compute total pipeline value, and post the forecast summary to Microsoft Teams sales leadership. Use weekly for pipeline review preparation."
inputParameters:
- name: close_within_days
in: body
type: integer
description: "Number of days ahead to include opportunities in the forecast window."
steps:
- name: query-pipeline
type: call
call: sf-forecast.query-opportunities
with:
jql: "StageName != 'Closed Lost' AND CloseDate <= NEXT_N_DAYS:{{close_within_days}}"
- name: post-forecast
type: call
call: msteams-forecast.send-channel-message
with:
team_id: "$secrets.msteams_sales_team_id"
channel_id: "$secrets.msteams_sales_channel_id"
content: "Sales Forecast (next {{close_within_days}} days): {{query-pipeline.totalSize}} open opportunities. Total pipeline: {{query-pipeline.records}}. Review in Salesforce."
consumes:
- type: http
namespace: sf-forecast
baseUri: "https://sysco.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_access_token"
resources:
- name: opportunity-query
path: "/query"
inputParameters:
- name: jql
in: query
operations:
- name: query-opportunities
method: GET
- type: http
namespace: msteams-forecast
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Pushes win-loss to Power BI.
naftiko: "0.5"
info:
label: "Salesforce Win-Loss Analysis Report"
description: "Pushes win-loss to Power BI."
tags:
- sales
- salesforce
- power-bi
- analytics
capability:
exposes:
- type: mcp
namespace: sales-ops
port: 8080
tools:
- name: execute-workflow
description: "Salesforce Win-Loss Analysis Report - orchestrate multi-step workflow across services."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
steps:
- name: get-data
type: call
call: primary.get-data
with:
record_id: "{{record_id}}"
- name: process-result
type: call
call: secondary.process
with:
data: "{{get-data.result}}"
- name: notify-team
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_ops_channel_id"
text: "Processed {{record_id}} | Result: {{process-result.status}}"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: data
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-data
method: GET
- type: http
namespace: secondary
baseUri: "https://sysco.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: process
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Queries SAP Ariba for supplier contracts expiring within the next 30 days and notifies the procurement team via Microsoft Teams to initiate renewal negotiations.
naftiko: "0.5"
info:
label: "SAP Ariba Contract Expiry Alert"
description: "Queries SAP Ariba for supplier contracts expiring within the next 30 days and notifies the procurement team via Microsoft Teams to initiate renewal negotiations."
tags:
- procurement
- sap-ariba
- microsoft-teams
- contract-management
- supplier-management
capability:
exposes:
- type: mcp
namespace: contract-ops
port: 8080
tools:
- name: alert-expiring-contracts
description: "Query SAP Ariba for supplier contracts expiring within a given number of days and post a summary of expiring contracts to the Microsoft Teams procurement channel. Use as a weekly scheduled check for contract renewal tracking."
inputParameters:
- name: days_ahead
in: body
type: integer
description: "Number of days ahead to check for expiring contracts (e.g. 30)."
steps:
- name: get-expiring-contracts
type: call
call: ariba-contracts.list-contracts
with:
expiresWithinDays: "{{days_ahead}}"
status: "active"
- name: notify-procurement
type: call
call: msteams-contracts.send-channel-message
with:
team_id: "$secrets.msteams_procurement_team_id"
channel_id: "$secrets.msteams_procurement_channel_id"
content: "Contract expiry alert: {{get-expiring-contracts.total}} contracts expiring within {{days_ahead}} days. Review and initiate renewals in SAP Ariba."
consumes:
- type: http
namespace: ariba-contracts
baseUri: "https://openapi.ariba.com/api/contract/v1"
authentication:
type: bearer
token: "$secrets.ariba_oauth_token"
resources:
- name: contracts
path: "/contracts"
inputParameters:
- name: expiresWithinDays
in: query
- name: status
in: query
operations:
- name: list-contracts
method: GET
- type: http
namespace: msteams-contracts
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Creates tasks for expiring supplier contracts.
naftiko: "0.5"
info:
label: "SAP Ariba Contract Renewal Alert"
description: "Creates tasks for expiring supplier contracts."
tags:
- procurement
- sap-ariba
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: procurement-ops
port: 8080
tools:
- name: execute-workflow
description: "SAP Ariba Contract Renewal Alert - orchestrate multi-step workflow across services."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
steps:
- name: get-data
type: call
call: primary.get-data
with:
record_id: "{{record_id}}"
- name: process-result
type: call
call: secondary.process
with:
data: "{{get-data.result}}"
- name: notify-team
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_ops_channel_id"
text: "Processed {{record_id}} | Result: {{process-result.status}}"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: data
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-data
method: GET
- type: http
namespace: secondary
baseUri: "https://sysco.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: process
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Routes match exceptions.
naftiko: "0.5"
info:
label: "SAP Ariba Invoice Matching Exception"
description: "Routes match exceptions."
tags:
- procurement
- sap-ariba
- microsoft-teams
- accounts-payable
capability:
exposes:
- type: mcp
namespace: procurement-ops
port: 8080
tools:
- name: execute-workflow
description: "SAP Ariba Invoice Matching Exception - orchestrate multi-step workflow across services."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
steps:
- name: get-data
type: call
call: primary.get-data
with:
record_id: "{{record_id}}"
- name: process-result
type: call
call: secondary.process
with:
data: "{{get-data.result}}"
- name: notify-team
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_ops_channel_id"
text: "Processed {{record_id}} | Result: {{process-result.status}}"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: data
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-data
method: GET
- type: http
namespace: secondary
baseUri: "https://sysco.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: process
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Registers a new supplier in SAP Ariba, creates the matching vendor record in SAP S/4HANA, and notifies the procurement team via Microsoft Teams.
naftiko: "0.5"
info:
label: "SAP Ariba Supplier Onboarding"
description: "Registers a new supplier in SAP Ariba, creates the matching vendor record in SAP S/4HANA, and notifies the procurement team via Microsoft Teams."
tags:
- procurement
- sap-ariba
- sap
- microsoft-teams
- supplier-management
- onboarding
capability:
exposes:
- type: mcp
namespace: supplier-ops
port: 8080
tools:
- name: onboard-supplier
description: "Given a supplier name, contact email, and commodity category, create the supplier record in SAP Ariba, provision the matching vendor master in SAP S/4HANA, and notify the procurement team channel in Microsoft Teams. Use when a new supplier passes qualification."
inputParameters:
- name: supplier_name
in: body
type: string
description: "Legal name of the supplier to onboard."
- name: supplier_email
in: body
type: string
description: "Primary contact email for the supplier."
- name: commodity_category
in: body
type: string
description: "Ariba commodity category code for the supplier."
steps:
- name: create-ariba-supplier
type: call
call: ariba-suppliers.create-supplier
with:
name: "{{supplier_name}}"
email: "{{supplier_email}}"
commodityCode: "{{commodity_category}}"
- name: create-sap-vendor
type: call
call: sap-vendors.create-vendor
with:
SupplierName: "{{supplier_name}}"
AribaSupplierID: "{{create-ariba-supplier.id}}"
- name: notify-procurement
type: call
call: msteams-procurement.send-channel-message
with:
team_id: "$secrets.msteams_procurement_team_id"
channel_id: "$secrets.msteams_procurement_channel_id"
content: "New supplier onboarded: {{supplier_name}} | Ariba ID: {{create-ariba-supplier.id}} | Category: {{commodity_category}}"
consumes:
- type: http
namespace: ariba-suppliers
baseUri: "https://openapi.ariba.com/api/supplier/v1"
authentication:
type: bearer
token: "$secrets.ariba_oauth_token"
resources:
- name: suppliers
path: "/suppliers"
operations:
- name: create-supplier
method: POST
- type: http
namespace: sap-vendors
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: vendors
path: "/A_Supplier"
operations:
- name: create-vendor
method: POST
- type: http
namespace: msteams-procurement
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Posts supplier performance report.
naftiko: "0.5"
info:
label: "SAP Ariba Supplier Performance Review"
description: "Posts supplier performance report."
tags:
- procurement
- sap-ariba
- microsoft-teams
- supplier-management
capability:
exposes:
- type: mcp
namespace: procurement-ops
port: 8080
tools:
- name: execute-workflow
description: "SAP Ariba Supplier Performance Review - orchestrate multi-step workflow across services."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
steps:
- name: get-data
type: call
call: primary.get-data
with:
record_id: "{{record_id}}"
- name: process-result
type: call
call: secondary.process
with:
data: "{{get-data.result}}"
- name: notify-team
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_ops_channel_id"
text: "Processed {{record_id}} | Result: {{process-result.status}}"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: data
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-data
method: GET
- type: http
namespace: secondary
baseUri: "https://sysco.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: process
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Traces batches for food safety.
naftiko: "0.5"
info:
label: "SAP Batch Traceability Lookup Chain"
description: "Traces batches for food safety."
tags:
- food-safety
- sap
- traceability
- compliance
capability:
exposes:
- type: mcp
namespace: food-safety-ops
port: 8080
tools:
- name: execute-workflow
description: "SAP Batch Traceability Lookup Chain - orchestrate multi-step workflow across services."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
steps:
- name: get-data
type: call
call: primary.get-data
with:
record_id: "{{record_id}}"
- name: process-result
type: call
call: secondary.process
with:
data: "{{get-data.result}}"
- name: notify-team
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_ops_channel_id"
text: "Processed {{record_id}} | Result: {{process-result.status}}"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: data
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-data
method: GET
- type: http
namespace: secondary
baseUri: "https://sysco.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: process
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Audits expense reports for policy violations.
naftiko: "0.5"
info:
label: "SAP Concur Expense Compliance Audit"
description: "Audits expense reports for policy violations."
tags:
- travel
- sap-concur
- microsoft-teams
- compliance
capability:
exposes:
- type: mcp
namespace: travel-ops
port: 8080
tools:
- name: execute-workflow
description: "SAP Concur Expense Compliance Audit - orchestrate multi-step workflow across services."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
steps:
- name: get-data
type: call
call: primary.get-data
with:
record_id: "{{record_id}}"
- name: process-result
type: call
call: secondary.process
with:
data: "{{get-data.result}}"
- name: notify-team
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_ops_channel_id"
text: "Processed {{record_id}} | Result: {{process-result.status}}"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: data
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-data
method: GET
- type: http
namespace: secondary
baseUri: "https://sysco.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: process
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Retrieves pending SAP Concur expense reports for a manager, validates policy compliance, and routes non-compliant reports to the finance team for review via Microsoft Teams.
naftiko: "0.5"
info:
label: "SAP Concur Expense Report Approval"
description: "Retrieves pending SAP Concur expense reports for a manager, validates policy compliance, and routes non-compliant reports to the finance team for review via Microsoft Teams."
tags:
- finance
- sap-concur
- microsoft-teams
- expense-management
- approval
capability:
exposes:
- type: mcp
namespace: expense-ops
port: 8080
tools:
- name: process-expense-report
description: "Given a SAP Concur expense report ID, fetch report details and check for policy violations. If compliant, approve the report; if non-compliant, post a review request to the Microsoft Teams finance channel. Use in expense approval workflows."
inputParameters:
- name: report_id
in: body
type: string
description: "SAP Concur expense report ID to process."
- name: approver_login
in: body
type: string
description: "SAP Concur login ID of the approver."
steps:
- name: get-expense-report
type: call
call: concur-reports.get-report
with:
report_id: "{{report_id}}"
- name: flag-for-review
type: call
call: msteams-expense.send-channel-message
with:
team_id: "$secrets.msteams_finance_team_id"
channel_id: "$secrets.msteams_finance_channel_id"
content: "Expense report {{report_id}} requires review. Submitted by: {{get-expense-report.OwnerName}}. Total: {{get-expense-report.Total}} {{get-expense-report.CurrencyCode}}. Please review in Concur."
consumes:
- type: http
namespace: concur-reports
baseUri: "https://www.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_oauth_token"
resources:
- name: expense-reports
path: "/expense/reports/{{report_id}}"
inputParameters:
- name: report_id
in: path
operations:
- name: get-report
method: GET
- type: http
namespace: msteams-expense
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Retrieves a pending SAP Concur travel request, checks it against travel policy thresholds, and routes it for approval or escalation via Microsoft Teams.
naftiko: "0.5"
info:
label: "SAP Concur Travel Request Approval"
description: "Retrieves a pending SAP Concur travel request, checks it against travel policy thresholds, and routes it for approval or escalation via Microsoft Teams."
tags:
- finance
- sap-concur
- microsoft-teams
- travel-management
- approval
capability:
exposes:
- type: mcp
namespace: travel-ops
port: 8080
tools:
- name: process-travel-request
description: "Given a SAP Concur travel request ID, retrieve the request details and estimated cost. If over the policy threshold, post an escalation to the Microsoft Teams finance approval channel; otherwise confirm the request. Use in automated travel approval pipelines."
inputParameters:
- name: request_id
in: body
type: string
description: "SAP Concur travel request ID to review."
- name: policy_threshold
in: body
type: number
description: "Maximum allowed travel cost before escalation is required (in USD)."
steps:
- name: get-travel-request
type: call
call: concur-travel.get-request
with:
request_id: "{{request_id}}"
- name: escalate-for-approval
type: call
call: msteams-travel.send-channel-message
with:
team_id: "$secrets.msteams_finance_team_id"
channel_id: "$secrets.msteams_finance_channel_id"
content: "Travel request {{request_id}} requires approval: {{get-travel-request.Name}} | Total: {{get-travel-request.TotalApprovedAmount}} USD | Exceeds threshold {{policy_threshold}} USD. Approve in Concur."
consumes:
- type: http
namespace: concur-travel
baseUri: "https://www.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_oauth_token"
resources:
- name: travel-requests
path: "/travelrequest/requests/{{request_id}}"
inputParameters:
- name: request_id
in: path
operations:
- name: get-request
method: GET
- type: http
namespace: msteams-travel
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Retrieves budget vs actual spend for a SAP cost center, returning planned budget and variance.
naftiko: "0.5"
info:
label: "SAP Cost Center Budget Check"
description: "Retrieves budget vs actual spend for a SAP cost center, returning planned budget and variance."
tags:
- finance
- sap
- erp
- budgeting
capability:
exposes:
- type: mcp
namespace: finance-ops
port: 8080
tools:
- name: get-record
description: "SAP Cost Center Budget Check - retrieve record data for operations review."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
call: primary.get-record
with:
record_id: "{{record_id}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: result
type: string
mapping: "$.result"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: records
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-record
method: GET
Retrieves the status of an outbound food delivery from SAP including shipping point, goods issue date, and carrier tracking.
naftiko: "0.5"
info:
label: "SAP Delivery Tracking"
description: "Retrieves the status of an outbound food delivery from SAP including shipping point, goods issue date, and carrier tracking."
tags:
- logistics
- sap
- erp
- food-distribution
- shipping
capability:
exposes:
- type: mcp
namespace: logistics
port: 8080
tools:
- name: get-delivery-status
description: "Look up a SAP outbound delivery. Returns shipping point, goods issue date, and tracking."
inputParameters:
- name: delivery_number
in: body
type: string
description: "The SAP delivery document number."
call: sap.get-delivery
with:
delivery_number: "{{delivery_number}}"
outputParameters:
- name: shipping_point
type: string
mapping: "$.d.ShippingPoint"
- name: goods_issue_date
type: string
mapping: "$.d.GoodsMovementDate"
consumes:
- type: http
namespace: sap
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_OUTBOUND_DELIVERY_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: deliveries
path: "/A_OutbDeliveryHeader('{{delivery_number}}')"
inputParameters:
- name: delivery_number
in: path
operations:
- name: get-delivery
method: GET
Posts close readiness to finance.
naftiko: "0.5"
info:
label: "SAP Financial Close Readiness Check"
description: "Posts close readiness to finance."
tags:
- finance
- sap
- microsoft-teams
- accounting
capability:
exposes:
- type: mcp
namespace: finance-ops
port: 8080
tools:
- name: execute-workflow
description: "SAP Financial Close Readiness Check - orchestrate multi-step workflow across services."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
steps:
- name: get-data
type: call
call: primary.get-data
with:
record_id: "{{record_id}}"
- name: process-result
type: call
call: secondary.process
with:
data: "{{get-data.result}}"
- name: notify-team
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_ops_channel_id"
text: "Processed {{record_id}} | Result: {{process-result.status}}"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: data
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-data
method: GET
- type: http
namespace: secondary
baseUri: "https://sysco.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: process
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Orchestrates the monthly financial period close process by verifying open items in SAP S/4HANA, posting a checklist status to the finance Microsoft Teams channel, and creating a ServiceNow task for any unresolved items.
naftiko: "0.5"
info:
label: "SAP Financial Period Close Checklist"
description: "Orchestrates the monthly financial period close process by verifying open items in SAP S/4HANA, posting a checklist status to the finance Microsoft Teams channel, and creating a ServiceNow task for any unresolved items."
tags:
- finance
- sap
- servicenow
- microsoft-teams
- period-close
- accounting
capability:
exposes:
- type: mcp
namespace: period-close
port: 8080
tools:
- name: run-period-close-checklist
description: "Given a fiscal year and period, query SAP S/4HANA for open accounting documents and GR/IR clearing items, post a status summary to the Microsoft Teams finance channel, and open a ServiceNow task for each unresolved item. Use at month-end close."
inputParameters:
- name: fiscal_year
in: body
type: integer
description: "SAP fiscal year (e.g. 2026)."
- name: fiscal_period
in: body
type: integer
description: "SAP fiscal period (1-12)."
steps:
- name: get-open-items
type: call
call: sap-accounting.get-open-items
with:
fiscal_year: "{{fiscal_year}}"
fiscal_period: "{{fiscal_period}}"
- name: post-close-status
type: call
call: msteams-period.send-channel-message
with:
team_id: "$secrets.msteams_finance_team_id"
channel_id: "$secrets.msteams_finance_channel_id"
content: "Period close status for FY{{fiscal_year}} Period {{fiscal_period}}: Open items retrieved from SAP. Count: {{get-open-items.total}}. Review before closing."
- name: create-close-task
type: call
call: snow-close.create-task
with:
short_description: "Period close follow-up FY{{fiscal_year}}-P{{fiscal_period}}: {{get-open-items.total}} open items"
assigned_group: "Finance_Accounting"
description: "Monthly close checklist: {{get-open-items.total}} unresolved SAP accounting items for FY{{fiscal_year}} Period {{fiscal_period}}"
consumes:
- type: http
namespace: sap-accounting
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_JOURNALENTRY_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: open-items
path: "/A_JournalEntry"
inputParameters:
- name: fiscal_year
in: query
- name: fiscal_period
in: query
operations:
- name: get-open-items
method: GET
- type: http
namespace: msteams-period
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
- type: http
namespace: snow-close
baseUri: "https://sysco.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/task"
operations:
- name: create-task
method: POST
Checks whether a SAP financial posting period is open or closed.
naftiko: "0.5"
info:
label: "SAP Financial Posting Period Check"
description: "Checks whether a SAP financial posting period is open or closed."
tags:
- finance
- sap
- erp
- accounting
capability:
exposes:
- type: mcp
namespace: finance-ops
port: 8080
tools:
- name: get-record
description: "SAP Financial Posting Period Check - retrieve record data for operations review."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
call: primary.get-record
with:
record_id: "{{record_id}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: result
type: string
mapping: "$.result"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: records
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-record
method: GET
Creates audit tasks for reversals.
naftiko: "0.5"
info:
label: "SAP Goods Movement Reversal Alert"
description: "Creates audit tasks for reversals."
tags:
- supply-chain
- sap
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: supply-chain-ops
port: 8080
tools:
- name: execute-workflow
description: "SAP Goods Movement Reversal Alert - orchestrate multi-step workflow across services."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
steps:
- name: get-data
type: call
call: primary.get-data
with:
record_id: "{{record_id}}"
- name: process-result
type: call
call: secondary.process
with:
data: "{{get-data.result}}"
- name: notify-team
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_ops_channel_id"
text: "Processed {{record_id}} | Result: {{process-result.status}}"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: data
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-data
method: GET
- type: http
namespace: secondary
baseUri: "https://sysco.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: process
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Posts a goods receipt against a SAP purchase order, confirming delivery and updating inventory records.
naftiko: "0.5"
info:
label: "SAP Goods Receipt Posting"
description: "Posts a goods receipt against a SAP purchase order, confirming delivery and updating inventory records."
tags:
- supply-chain
- sap
- erp
- inventory
capability:
exposes:
- type: mcp
namespace: supply-chain-ops
port: 8080
tools:
- name: get-record
description: "SAP Goods Receipt Posting - retrieve record data for operations review."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
call: primary.get-record
with:
record_id: "{{record_id}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: result
type: string
mapping: "$.result"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: records
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-record
method: GET
Queries SAP S/4HANA for uncleared goods receipt/invoice receipt (GR/IR) items and creates a ServiceNow task for the AP team to resolve discrepancies before period close.
naftiko: "0.5"
info:
label: "SAP GR/IR Clearing Reconciliation"
description: "Queries SAP S/4HANA for uncleared goods receipt/invoice receipt (GR/IR) items and creates a ServiceNow task for the AP team to resolve discrepancies before period close."
tags:
- finance
- sap
- servicenow
- reconciliation
- accounts-payable
- period-close
capability:
exposes:
- type: mcp
namespace: ap-reconciliation
port: 8080
tools:
- name: reconcile-gr-ir
description: "Given a SAP company code and fiscal period, query all open GR/IR clearing account items and create a ServiceNow AP task for any items uncleared for more than the specified number of days. Use at month-end for accounts payable reconciliation."
inputParameters:
- name: company_code
in: body
type: string
description: "SAP company code to check GR/IR items for (e.g. 1000)."
- name: fiscal_period
in: body
type: integer
description: "SAP fiscal period to check."
- name: overdue_days
in: body
type: integer
description: "Number of days after which an uncleared GR/IR item is flagged as overdue."
steps:
- name: get-grir-items
type: call
call: sap-grir.get-open-items
with:
company_code: "{{company_code}}"
fiscal_period: "{{fiscal_period}}"
- name: create-ap-task
type: call
call: snow-ap.create-task
with:
short_description: "GR/IR clearing required: {{get-grir-items.total}} open items for company {{company_code}} period {{fiscal_period}}"
assigned_group: "Accounts_Payable"
description: "Open GR/IR items in SAP for company code {{company_code}}, period {{fiscal_period}}. Items older than {{overdue_days}} days require immediate clearing."
consumes:
- type: http
namespace: sap-grir
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_JOURNALENTRY_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: gr-ir-items
path: "/A_JournalEntry"
inputParameters:
- name: company_code
in: query
- name: fiscal_period
in: query
operations:
- name: get-open-items
method: GET
- type: http
namespace: snow-ap
baseUri: "https://sysco.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/task"
operations:
- name: create-task
method: POST
Queries SAP S/4HANA inventory levels for a product SKU at a distribution center and triggers a reorder request in SAP Ariba if stock falls below the reorder threshold.
naftiko: "0.5"
info:
label: "SAP Inventory Level Alert"
description: "Queries SAP S/4HANA inventory levels for a product SKU at a distribution center and triggers a reorder request in SAP Ariba if stock falls below the reorder threshold."
tags:
- supply-chain
- sap
- sap-ariba
- inventory-management
- procurement
capability:
exposes:
- type: mcp
namespace: inventory-ops
port: 8080
tools:
- name: check-and-reorder-inventory
description: "Given a product material number, distribution center plant code, and reorder threshold, query SAP inventory levels and automatically submit a purchase requisition in SAP Ariba if stock is below threshold. Use for automated replenishment monitoring."
inputParameters:
- name: material_number
in: body
type: string
description: "SAP material number for the food product SKU."
- name: plant_code
in: body
type: string
description: "SAP plant code for the distribution center (e.g. 1100)."
- name: reorder_threshold
in: body
type: number
description: "Minimum stock quantity that triggers a reorder."
steps:
- name: get-inventory
type: call
call: sap-inventory.get-stock-level
with:
material: "{{material_number}}"
plant: "{{plant_code}}"
- name: create-requisition
type: call
call: ariba-requisition.create-pr
with:
material: "{{material_number}}"
plant: "{{plant_code}}"
quantity: "{{reorder_threshold}}"
justification: "Auto-reorder: stock below threshold {{reorder_threshold}} at plant {{plant_code}}"
consumes:
- type: http
namespace: sap-inventory
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: material-stock
path: "/A_MatlStkInAcctMod"
inputParameters:
- name: material
in: query
- name: plant
in: query
operations:
- name: get-stock-level
method: GET
- type: http
namespace: ariba-requisition
baseUri: "https://openapi.ariba.com/api/purchase-req/v1"
authentication:
type: bearer
token: "$secrets.ariba_oauth_token"
resources:
- name: purchase-requisitions
path: "/purchaseRequisitions"
operations:
- name: create-pr
method: POST
Creates purchase requisitions for low stock.
naftiko: "0.5"
info:
label: "SAP Inventory Reorder Point Alert"
description: "Creates purchase requisitions for low stock."
tags:
- supply-chain
- sap
- microsoft-teams
- inventory
capability:
exposes:
- type: mcp
namespace: supply-chain-ops
port: 8080
tools:
- name: execute-workflow
description: "SAP Inventory Reorder Point Alert - orchestrate multi-step workflow across services."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
steps:
- name: get-data
type: call
call: primary.get-data
with:
record_id: "{{record_id}}"
- name: process-result
type: call
call: secondary.process
with:
data: "{{get-data.result}}"
- name: notify-team
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_ops_channel_id"
text: "Processed {{record_id}} | Result: {{process-result.status}}"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: data
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-data
method: GET
- type: http
namespace: secondary
baseUri: "https://sysco.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: process
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Retrieves invoice payment status from SAP including approval state and payment date.
naftiko: "0.5"
info:
label: "SAP Invoice Payment Status"
description: "Retrieves invoice payment status from SAP including approval state and payment date."
tags:
- finance
- sap
- erp
- accounts-payable
capability:
exposes:
- type: mcp
namespace: finance-ops
port: 8080
tools:
- name: get-record
description: "SAP Invoice Payment Status - retrieve record data for operations review."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
call: primary.get-record
with:
record_id: "{{record_id}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: result
type: string
mapping: "$.result"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: records
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-record
method: GET
Retrieves food product material master data from SAP including description, material group, shelf life, and storage conditions.
naftiko: "0.5"
info:
label: "SAP Material Master Lookup"
description: "Retrieves food product material master data from SAP including description, material group, shelf life, and storage conditions."
tags:
- supply-chain
- sap
- erp
- food-distribution
capability:
exposes:
- type: mcp
namespace: supply-chain
port: 8080
tools:
- name: get-material-master
description: "Look up a food product material in SAP. Returns description, group, and storage info."
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.MaterialName"
- name: material_group
type: string
mapping: "$.d.MaterialGroup"
consumes:
- type: http
namespace: sap
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_PRODUCT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: materials
path: "/A_Product('{{material_number}}')"
inputParameters:
- name: material_number
in: path
operations:
- name: get-material
method: GET
Retrieves the status of a SAP production order including planned quantity and manufacturing status.
naftiko: "0.5"
info:
label: "SAP Production Order Status"
description: "Retrieves the status of a SAP production order including planned quantity and manufacturing status."
tags:
- manufacturing
- sap
- erp
- production
capability:
exposes:
- type: mcp
namespace: manufacturing-ops
port: 8080
tools:
- name: get-record
description: "SAP Production Order Status - retrieve record data for operations review."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
call: primary.get-record
with:
record_id: "{{record_id}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: result
type: string
mapping: "$.result"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: records
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-record
method: GET
Looks up a SAP S/4HANA purchase order by number, returning vendor, status, line items, and total value for procurement review or supplier reconciliation.
naftiko: "0.5"
info:
label: "SAP Purchase Order Lookup"
description: "Looks up a SAP S/4HANA purchase order by number, returning vendor, status, line items, and total value for procurement review or supplier reconciliation."
tags:
- procurement
- sap
- erp
- lookup
capability:
exposes:
- type: mcp
namespace: erp
port: 8080
tools:
- name: get-purchase-order
description: "Given a SAP purchase order number, retrieve header status, vendor name, total amount, currency, and open line items from SAP S/4HANA. Use for procurement review, supplier disputes, or invoice matching."
inputParameters:
- name: po_number
in: body
type: string
description: "SAP purchase order number (e.g. 4500012345)."
call: sap-erp.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_amount
type: string
mapping: "$.d.TotalAmount"
- name: currency
type: string
mapping: "$.d.TransactionCurrency"
consumes:
- type: http
namespace: sap-erp
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: purchase-orders
path: "/A_PurchaseOrder('{{po_number}}')"
inputParameters:
- name: po_number
in: path
operations:
- name: get-po
method: GET
Retrieves a quality inspection lot from SAP QM and returns the inspection result and defect count.
naftiko: "0.5"
info:
label: "SAP Quality Inspection Result"
description: "Retrieves a quality inspection lot from SAP QM and returns the inspection result and defect count."
tags:
- manufacturing
- sap
- erp
- quality
capability:
exposes:
- type: mcp
namespace: manufacturing-ops
port: 8080
tools:
- name: get-record
description: "SAP Quality Inspection Result - retrieve record data for operations review."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
call: primary.get-record
with:
record_id: "{{record_id}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: result
type: string
mapping: "$.result"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: records
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-record
method: GET
Checks the status of a SAP S/4HANA automatic payment run and posts results to the accounts payable Microsoft Teams channel, enabling real-time visibility into vendor payment cycles.
naftiko: "0.5"
info:
label: "SAP S/4HANA Vendor Payment Run Status"
description: "Checks the status of a SAP S/4HANA automatic payment run and posts results to the accounts payable Microsoft Teams channel, enabling real-time visibility into vendor payment cycles."
tags:
- finance
- sap
- microsoft-teams
- accounts-payable
- payment-processing
capability:
exposes:
- type: mcp
namespace: ap-payments
port: 8080
tools:
- name: check-payment-run-status
description: "Given a SAP payment run ID and company code, retrieve the payment run status and document count, then post a status summary to the Microsoft Teams AP channel. Use after executing a SAP F110 payment run to confirm completion."
inputParameters:
- name: payment_run_id
in: body
type: string
description: "SAP automatic payment run identification key."
- name: company_code
in: body
type: string
description: "SAP company code for the payment run (e.g. 1000)."
steps:
- name: get-payment-run
type: call
call: sap-payments.get-payment-run
with:
payment_run_id: "{{payment_run_id}}"
company_code: "{{company_code}}"
- name: post-ap-status
type: call
call: msteams-ap.send-channel-message
with:
team_id: "$secrets.msteams_finance_team_id"
channel_id: "$secrets.msteams_finance_channel_id"
content: "SAP Payment Run {{payment_run_id}} for company {{company_code}}: Status {{get-payment-run.Status}}. Documents posted: {{get-payment-run.DocumentCount}}."
consumes:
- type: http
namespace: sap-payments
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_PAYMENTADVICE_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: payment-runs
path: "/A_PaymentAdvice"
inputParameters:
- name: payment_run_id
in: query
- name: company_code
in: query
operations:
- name: get-payment-run
method: GET
- type: http
namespace: msteams-ap
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Retrieves the status of a SAP transport request including release status, target system, and owner.
naftiko: "0.5"
info:
label: "SAP Transport Request Status"
description: "Retrieves the status of a SAP transport request including release status, target system, and owner."
tags:
- devops
- sap
- erp
- transport-management
capability:
exposes:
- type: mcp
namespace: devops-ops
port: 8080
tools:
- name: get-record
description: "SAP Transport Request Status - retrieve record data for operations review."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
call: primary.get-record
with:
record_id: "{{record_id}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: result
type: string
mapping: "$.result"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: records
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-record
method: GET
Retrieves vendor master data from SAP S/4HANA including company name, payment terms, and tax classification for food supplier verification.
naftiko: "0.5"
info:
label: "SAP Vendor Master Lookup"
description: "Retrieves vendor master data from SAP S/4HANA including company name, payment terms, and tax classification for food supplier verification."
tags:
- finance
- procurement
- sap
- erp
capability:
exposes:
- type: mcp
namespace: erp-procurement
port: 8080
tools:
- name: get-vendor-master
description: "Look up a vendor in SAP by vendor number. Returns company name, payment terms, and tax info."
inputParameters:
- name: vendor_number
in: body
type: string
description: "The SAP vendor number."
call: sap.get-vendor
with:
vendor_number: "{{vendor_number}}"
outputParameters:
- name: company_name
type: string
mapping: "$.d.CompanyName"
- name: payment_terms
type: string
mapping: "$.d.PaymentTerms"
consumes:
- type: http
namespace: sap
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: vendors
path: "/A_Supplier('{{vendor_number}}')"
inputParameters:
- name: vendor_number
in: path
operations:
- name: get-vendor
method: GET
Checks the status of a SAP vendor payment run, returning processed count and total amount.
naftiko: "0.5"
info:
label: "SAP Vendor Payment Run Status"
description: "Checks the status of a SAP vendor payment run, returning processed count and total amount."
tags:
- finance
- sap
- erp
- accounts-payable
capability:
exposes:
- type: mcp
namespace: finance-ops
port: 8080
tools:
- name: get-record
description: "SAP Vendor Payment Run Status - retrieve record data for operations review."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
call: primary.get-record
with:
record_id: "{{record_id}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: result
type: string
mapping: "$.result"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: records
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-record
method: GET
Opens a ServiceNow change request before performing SAP S/4HANA system maintenance, ensuring proper CAB approval workflow and audit trail for food-grade compliance.
naftiko: "0.5"
info:
label: "ServiceNow Change Request for SAP Maintenance"
description: "Opens a ServiceNow change request before performing SAP S/4HANA system maintenance, ensuring proper CAB approval workflow and audit trail for food-grade compliance."
tags:
- itsm
- servicenow
- sap
- change-management
- compliance
capability:
exposes:
- type: mcp
namespace: change-mgmt
port: 8080
tools:
- name: open-sap-change-request
description: "Given a maintenance description, scheduled start and end times, and risk level, open a ServiceNow change request for SAP S/4HANA maintenance activity and notify the change manager via Microsoft Teams. Use before any planned SAP system changes."
inputParameters:
- name: description
in: body
type: string
description: "Description of the SAP maintenance activity being requested."
- name: scheduled_start
in: body
type: string
description: "Planned maintenance start time in ISO 8601 format."
- name: scheduled_end
in: body
type: string
description: "Planned maintenance end time in ISO 8601 format."
- name: risk_level
in: body
type: string
description: "Change risk level: low, moderate, or high."
steps:
- name: create-change-request
type: call
call: snow-change.create-change
with:
short_description: "SAP Maintenance: {{description}}"
start_date: "{{scheduled_start}}"
end_date: "{{scheduled_end}}"
risk: "{{risk_level}}"
category: "SAP"
- name: notify-change-manager
type: call
call: msteams-change.send-channel-message
with:
team_id: "$secrets.msteams_itops_team_id"
channel_id: "$secrets.msteams_change_channel_id"
content: "SAP Change Request submitted: {{create-change-request.number}} | {{description}} | Start: {{scheduled_start}} | Risk: {{risk_level}}"
consumes:
- type: http
namespace: snow-change
baseUri: "https://sysco.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: change-requests
path: "/table/change_request"
operations:
- name: create-change
method: POST
- type: http
namespace: 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: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Retrieves a ServiceNow change request and returns its approval status and risk level.
naftiko: "0.5"
info:
label: "ServiceNow Change Request Status"
description: "Retrieves a ServiceNow change request and returns its approval status and risk level."
tags:
- it-ops
- servicenow
- change-management
capability:
exposes:
- type: mcp
namespace: it-ops-ops
port: 8080
tools:
- name: get-record
description: "ServiceNow Change Request Status - retrieve record data for operations review."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
call: primary.get-record
with:
record_id: "{{record_id}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: result
type: string
mapping: "$.result"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: records
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-record
method: GET
Retrieves a ServiceNow CMDB configuration item by asset tag.
naftiko: "0.5"
info:
label: "ServiceNow CMDB Asset Lookup"
description: "Retrieves a ServiceNow CMDB configuration item by asset tag."
tags:
- it-ops
- servicenow
- asset-management
capability:
exposes:
- type: mcp
namespace: it-ops-ops
port: 8080
tools:
- name: get-record
description: "ServiceNow CMDB Asset Lookup - retrieve record data for operations review."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
call: primary.get-record
with:
record_id: "{{record_id}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: result
type: string
mapping: "$.result"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: records
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-record
method: GET
Retrieves a ServiceNow incident by number, returning priority, state, assigned group, and description.
naftiko: "0.5"
info:
label: "ServiceNow Incident Lookup"
description: "Retrieves a ServiceNow incident by number, returning priority, state, assigned group, and description."
tags:
- it-ops
- servicenow
- incident-management
capability:
exposes:
- type: mcp
namespace: it-ops
port: 8080
tools:
- name: get-incident
description: "Look up a ServiceNow incident by number. Returns priority, state, and assigned group."
inputParameters:
- name: incident_number
in: body
type: string
description: "The ServiceNow incident number."
call: servicenow.get-incident
with:
incident_number: "{{incident_number}}"
outputParameters:
- name: priority
type: string
mapping: "$.result.priority"
- name: state
type: string
mapping: "$.result.state"
consumes:
- type: http
namespace: servicenow
baseUri: "https://sysco.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident/{{incident_number}}"
inputParameters:
- name: incident_number
in: path
operations:
- name: get-incident
method: GET
When a P1 IT incident is raised in ServiceNow, immediately notifies the IT operations team via Microsoft Teams and creates a Datadog event for cross-platform correlation.
naftiko: "0.5"
info:
label: "ServiceNow IT Incident to Teams Alert"
description: "When a P1 IT incident is raised in ServiceNow, immediately notifies the IT operations team via Microsoft Teams and creates a Datadog event for cross-platform correlation."
tags:
- itsm
- servicenow
- microsoft-teams
- datadog
- incident-response
capability:
exposes:
- type: mcp
namespace: itsm-ops
port: 8080
tools:
- name: handle-p1-incident
description: "Given a ServiceNow incident number and short description, post a P1 alert to the Microsoft Teams IT-Ops channel and create a correlated Datadog event. Invoke from ServiceNow business rules when a P1 incident is created."
inputParameters:
- name: incident_number
in: body
type: string
description: "ServiceNow incident number (e.g. INC0012345)."
- name: short_description
in: body
type: string
description: "Short description of the P1 incident."
- name: affected_service
in: body
type: string
description: "Name of the IT service affected by the incident."
steps:
- name: notify-teams
type: call
call: msteams-ops.send-channel-message
with:
team_id: "$secrets.msteams_itops_team_id"
channel_id: "$secrets.msteams_itops_channel_id"
content: "P1 INCIDENT: {{incident_number}} | {{short_description}} | Service: {{affected_service}} | https://sysco.service-now.com/nav_to.do?uri=incident.do?number={{incident_number}}"
- name: create-dd-event
type: call
call: datadog-events.create-event
with:
title: "ServiceNow P1: {{incident_number}}"
text: "{{short_description}}"
tags: "source:servicenow,service:{{affected_service}},priority:p1"
consumes:
- type: http
namespace: msteams-ops
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
- type: http
namespace: datadog-events
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: events
path: "/events"
operations:
- name: create-event
method: POST
Searches the ServiceNow knowledge base for articles matching a query.
naftiko: "0.5"
info:
label: "ServiceNow Knowledge Article Search"
description: "Searches the ServiceNow knowledge base for articles matching a query."
tags:
- it-ops
- servicenow
- knowledge-management
capability:
exposes:
- type: mcp
namespace: it-ops-ops
port: 8080
tools:
- name: get-record
description: "ServiceNow Knowledge Article Search - retrieve record data for operations review."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
call: primary.get-record
with:
record_id: "{{record_id}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: result
type: string
mapping: "$.result"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: records
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-record
method: GET
Creates Teams bridge for P1 incidents.
naftiko: "0.5"
info:
label: "ServiceNow Major Incident Bridge"
description: "Creates Teams bridge for P1 incidents."
tags:
- it-ops
- servicenow
- microsoft-teams
- incident-management
capability:
exposes:
- type: mcp
namespace: it-ops-ops
port: 8080
tools:
- name: execute-workflow
description: "ServiceNow Major Incident Bridge - orchestrate multi-step workflow across services."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
steps:
- name: get-data
type: call
call: primary.get-data
with:
record_id: "{{record_id}}"
- name: process-result
type: call
call: secondary.process
with:
data: "{{get-data.result}}"
- name: notify-team
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_ops_channel_id"
text: "Processed {{record_id}} | Result: {{process-result.status}}"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: data
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-data
method: GET
- type: http
namespace: secondary
baseUri: "https://sysco.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: process
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
When a recurring IT problem in ServiceNow is linked to an SAP system, creates a quality notification in SAP S/4HANA to trigger root-cause analysis and system improvement tracking.
naftiko: "0.5"
info:
label: "ServiceNow Problem Management to SAP Notification"
description: "When a recurring IT problem in ServiceNow is linked to an SAP system, creates a quality notification in SAP S/4HANA to trigger root-cause analysis and system improvement tracking."
tags:
- itsm
- servicenow
- sap
- problem-management
- quality-management
capability:
exposes:
- type: mcp
namespace: problem-mgmt
port: 8080
tools:
- name: escalate-problem-to-sap
description: "Given a ServiceNow problem record ID and SAP functional location, fetch the problem details and create a SAP quality notification to initiate formal root-cause analysis. Use when an IT problem is traced to SAP system behavior."
inputParameters:
- name: problem_id
in: body
type: string
description: "ServiceNow problem record sys_id or number."
- name: sap_functional_location
in: body
type: string
description: "SAP functional location code for the affected system."
steps:
- name: get-problem
type: call
call: snow-problems.get-problem
with:
problem_id: "{{problem_id}}"
- name: create-sap-qn
type: call
call: sap-qn.create-notification
with:
NotificationType: "Q2"
ShortText: "IT Problem: {{get-problem.short_description}}"
FunctionalLocation: "{{sap_functional_location}}"
LongText: "ServiceNow Problem {{problem_id}}: {{get-problem.description}}"
consumes:
- type: http
namespace: snow-problems
baseUri: "https://sysco.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: problems
path: "/table/problem/{{problem_id}}"
inputParameters:
- name: problem_id
in: path
operations:
- name: get-problem
method: GET
- type: http
namespace: sap-qn
baseUri: "https://sysco-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: "/QualityNotification"
operations:
- name: create-notification
method: POST
Creates Jira ticket for root cause.
naftiko: "0.5"
info:
label: "ServiceNow Problem Root Cause Workflow"
description: "Creates Jira ticket for root cause."
tags:
- it-ops
- servicenow
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: it-ops-ops
port: 8080
tools:
- name: execute-workflow
description: "ServiceNow Problem Root Cause Workflow - orchestrate multi-step workflow across services."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
steps:
- name: get-data
type: call
call: primary.get-data
with:
record_id: "{{record_id}}"
- name: process-result
type: call
call: secondary.process
with:
data: "{{get-data.result}}"
- name: notify-team
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_ops_channel_id"
text: "Processed {{record_id}} | Result: {{process-result.status}}"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: data
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-data
method: GET
- type: http
namespace: secondary
baseUri: "https://sysco.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: process
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Escalates SLA breaches.
naftiko: "0.5"
info:
label: "ServiceNow SLA Breach Escalation"
description: "Escalates SLA breaches."
tags:
- it-ops
- servicenow
- microsoft-teams
- sla-management
capability:
exposes:
- type: mcp
namespace: it-ops-ops
port: 8080
tools:
- name: execute-workflow
description: "ServiceNow SLA Breach Escalation - orchestrate multi-step workflow across services."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
steps:
- name: get-data
type: call
call: primary.get-data
with:
record_id: "{{record_id}}"
- name: process-result
type: call
call: secondary.process
with:
data: "{{get-data.result}}"
- name: notify-team
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_ops_channel_id"
text: "Processed {{record_id}} | Result: {{process-result.status}}"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: data
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-data
method: GET
- type: http
namespace: secondary
baseUri: "https://sysco.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: process
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Searches a SharePoint site for documents matching a keyword.
naftiko: "0.5"
info:
label: "SharePoint Document Search"
description: "Searches a SharePoint site for documents matching a keyword."
tags:
- collaboration
- sharepoint
- document-management
capability:
exposes:
- type: mcp
namespace: collaboration-ops
port: 8080
tools:
- name: get-record
description: "SharePoint Document Search - retrieve record data for operations review."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
call: primary.get-record
with:
record_id: "{{record_id}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: result
type: string
mapping: "$.result"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: records
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-record
method: GET
When a new supplier invoice arrives in SAP Ariba, validates the invoice against the matching purchase order in SAP S/4HANA and routes it for approval or flags discrepancies.
naftiko: "0.5"
info:
label: "Supplier Invoice Processing and Approval"
description: "When a new supplier invoice arrives in SAP Ariba, validates the invoice against the matching purchase order in SAP S/4HANA and routes it for approval or flags discrepancies."
tags:
- procurement
- sap-ariba
- sap
- finance
- invoice-processing
- approval
capability:
exposes:
- type: mcp
namespace: procurement-ops
port: 8080
tools:
- name: process-supplier-invoice
description: "Given an Ariba invoice ID and SAP PO number, fetch the invoice from SAP Ariba, retrieve the matching PO from SAP S/4HANA, compare amounts, and submit for approval or flag a discrepancy. Use for automated three-way match in accounts payable."
inputParameters:
- name: ariba_invoice_id
in: body
type: string
description: "SAP Ariba invoice document ID to process."
- name: po_number
in: body
type: string
description: "SAP S/4HANA purchase order number to match against."
steps:
- name: get-ariba-invoice
type: call
call: ariba-invoices.get-invoice
with:
invoice_id: "{{ariba_invoice_id}}"
- name: get-sap-po
type: call
call: sap-po.get-po
with:
po_number: "{{po_number}}"
- name: submit-for-approval
type: call
call: ariba-approval.submit-approval
with:
invoice_id: "{{ariba_invoice_id}}"
po_amount: "{{get-sap-po.TotalAmount}}"
invoice_amount: "{{get-ariba-invoice.amount}}"
consumes:
- type: http
namespace: ariba-invoices
baseUri: "https://openapi.ariba.com/api/invoice/v1"
authentication:
type: bearer
token: "$secrets.ariba_oauth_token"
resources:
- name: invoices
path: "/invoices/{{invoice_id}}"
inputParameters:
- name: invoice_id
in: path
operations:
- name: get-invoice
method: GET
- type: http
namespace: sap-po
baseUri: "https://sysco-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: ariba-approval
baseUri: "https://openapi.ariba.com/api/approval/v1"
authentication:
type: bearer
token: "$secrets.ariba_oauth_token"
resources:
- name: approvals
path: "/approvals"
operations:
- name: submit-approval
method: POST
Generates supplier quality scorecard from SAP and Salesforce.
naftiko: "0.5"
info:
label: "Supplier Quality Scorecard Generator"
description: "Generates supplier quality scorecard from SAP and Salesforce."
tags:
- procurement
- sap
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: procurement-ops
port: 8080
tools:
- name: execute-workflow
description: "Supplier Quality Scorecard Generator - orchestrate multi-step workflow across services."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
steps:
- name: get-data
type: call
call: primary.get-data
with:
record_id: "{{record_id}}"
- name: process-result
type: call
call: secondary.process
with:
data: "{{get-data.result}}"
- name: notify-team
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_ops_channel_id"
text: "Processed {{record_id}} | Result: {{process-result.status}}"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: data
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-data
method: GET
- type: http
namespace: secondary
baseUri: "https://sysco.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: process
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Checks forklift operator certifications and safety inspection logs for distribution center compliance.
naftiko: "0.5"
info:
label: "Warehouse Forklift Safety Compliance Check"
description: "Checks forklift operator certifications and safety inspection logs for distribution center compliance."
tags:
- safety
- compliance
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: safety-ops
port: 8080
tools:
- name: execute-workflow
description: "Warehouse Forklift Safety Compliance Check - orchestrate multi-step workflow across services."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
steps:
- name: get-data
type: call
call: primary.get-data
with:
record_id: "{{record_id}}"
- name: process-result
type: call
call: secondary.process
with:
data: "{{get-data.result}}"
- name: notify-team
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_ops_channel_id"
text: "Processed {{record_id}} | Result: {{process-result.status}}"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: data
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-data
method: GET
- type: http
namespace: secondary
baseUri: "https://sysco.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: process
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Sends enrollment reminders.
naftiko: "0.5"
info:
label: "Workday Benefits Enrollment Reminder"
description: "Sends enrollment reminders."
tags:
- hr
- workday
- benefits
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-ops
port: 8080
tools:
- name: execute-workflow
description: "Workday Benefits Enrollment Reminder - orchestrate multi-step workflow across services."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
steps:
- name: get-data
type: call
call: primary.get-data
with:
record_id: "{{record_id}}"
- name: process-result
type: call
call: secondary.process
with:
data: "{{get-data.result}}"
- name: notify-team
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_ops_channel_id"
text: "Processed {{record_id}} | Result: {{process-result.status}}"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: data
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-data
method: GET
- type: http
namespace: secondary
baseUri: "https://sysco.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: process
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Retrieves a Workday employee compensation summary including base pay, bonus target, and total compensation.
naftiko: "0.5"
info:
label: "Workday Compensation Summary"
description: "Retrieves a Workday employee compensation summary including base pay, bonus target, and total compensation."
tags:
- hr
- compensation
- workday
capability:
exposes:
- type: mcp
namespace: hr-compensation
port: 8080
tools:
- name: get-compensation
description: "Look up employee compensation in Workday. Returns base pay and total compensation."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID."
call: workday.get-compensation
with:
worker_id: "{{worker_id}}"
outputParameters:
- name: base_pay
type: number
mapping: "$.compensation.basePay"
- name: total_comp
type: number
mapping: "$.compensation.totalCompensation"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: compensation
path: "/workers/{{worker_id}}/compensation"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-compensation
method: GET
When an employee is terminated in Workday, deactivates their SAP user account, closes open ServiceNow tasks, and notifies the HR operations team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Workday Employee Offboarding"
description: "When an employee is terminated in Workday, deactivates their SAP user account, closes open ServiceNow tasks, and notifies the HR operations team via Microsoft Teams."
tags:
- hr
- workday
- sap
- servicenow
- microsoft-teams
- offboarding
capability:
exposes:
- type: mcp
namespace: hr-offboarding
port: 8080
tools:
- name: offboard-employee
description: "Given a Workday worker ID and SAP user ID, deactivate the SAP user, search for open ServiceNow tasks assigned to the employee, and notify #hr-ops in Microsoft Teams. Use on confirmed termination events from Workday."
inputParameters:
- name: worker_id
in: body
type: string
description: "Workday worker ID of the departing employee."
- name: sap_user_id
in: body
type: string
description: "SAP system user ID to deactivate."
- name: snow_user_id
in: body
type: string
description: "ServiceNow user sys_id to search for open tasks."
steps:
- name: deactivate-sap-user
type: call
call: sap-users.update-user
with:
user_id: "{{sap_user_id}}"
ValidTo: "{{worker_id}}"
- name: find-open-tasks
type: call
call: snow-tasks.get-tasks
with:
assigned_to: "{{snow_user_id}}"
state: "open"
- name: notify-hr
type: call
call: msteams-hr.send-channel-message
with:
team_id: "$secrets.msteams_hr_team_id"
channel_id: "$secrets.msteams_hr_channel_id"
content: "Offboarding complete for worker {{worker_id}}. SAP user {{sap_user_id}} deactivated. Open ServiceNow tasks found: {{find-open-tasks.total_count}} — please reassign."
consumes:
- type: http
namespace: sap-users
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: users
path: "/A_BusinessPartner/{{user_id}}"
inputParameters:
- name: user_id
in: path
operations:
- name: update-user
method: PATCH
- type: http
namespace: snow-tasks
baseUri: "https://sysco.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/task"
inputParameters:
- name: assigned_to
in: query
- name: state
in: query
operations:
- name: get-tasks
method: GET
- type: http
namespace: msteams-hr
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
When a new distribution center employee is hired in Workday, creates a ServiceNow onboarding ticket, provisions system access, and sends a Teams welcome message to the facility manager.
naftiko: "0.5"
info:
label: "Workday Employee Onboarding for Distribution Staff"
description: "When a new distribution center employee is hired in Workday, creates a ServiceNow onboarding ticket, provisions system access, and sends a Teams welcome message to the facility manager."
tags:
- hr
- workday
- servicenow
- microsoft-teams
- onboarding
capability:
exposes:
- type: mcp
namespace: hr-ops
port: 8080
tools:
- name: onboard-distribution-employee
description: "Given a Workday worker ID and distribution center location, fetch employee details, create a ServiceNow onboarding ticket, and send a Teams welcome message to the facility manager. Use when a new distribution hire is confirmed in Workday."
inputParameters:
- name: worker_id
in: body
type: string
description: "Workday worker ID for the new distribution employee."
- name: facility_manager_upn
in: body
type: string
description: "UPN of the distribution center facility manager in Microsoft Teams."
- name: location_code
in: body
type: string
description: "Distribution center location code (e.g. DC-ATL-01)."
steps:
- name: get-worker
type: call
call: workday-workers.get-worker
with:
worker_id: "{{worker_id}}"
- name: create-onboarding-ticket
type: call
call: servicenow-tickets.create-incident
with:
category: "hr_onboarding"
short_description: "New hire onboarding: {{get-worker.fullName}} at {{location_code}}"
assigned_group: "HR_Operations"
description: "Please provision access for new hire {{get-worker.fullName}} at distribution center {{location_code}}. Worker ID: {{worker_id}}"
- name: send-welcome
type: call
call: msteams-notify.send-message
with:
recipient_upn: "{{facility_manager_upn}}"
text: "New team member {{get-worker.fullName}} joining {{location_code}}. Onboarding ticket: {{create-onboarding-ticket.number}}"
consumes:
- type: http
namespace: workday-workers
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-tickets
baseUri: "https://sysco.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-notify
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
Updates access on department transfers.
naftiko: "0.5"
info:
label: "Workday Employee Transfer Provisioning"
description: "Updates access on department transfers."
tags:
- hr
- workday
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-ops
port: 8080
tools:
- name: execute-workflow
description: "Workday Employee Transfer Provisioning - orchestrate multi-step workflow across services."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
steps:
- name: get-data
type: call
call: primary.get-data
with:
record_id: "{{record_id}}"
- name: process-result
type: call
call: secondary.process
with:
data: "{{get-data.result}}"
- name: notify-team
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_ops_channel_id"
text: "Processed {{record_id}} | Result: {{process-result.status}}"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: data
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-data
method: GET
- type: http
namespace: secondary
baseUri: "https://sysco.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: process
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Posts headcount variance.
naftiko: "0.5"
info:
label: "Workday Headcount Variance Report"
description: "Posts headcount variance."
tags:
- hr
- workday
- microsoft-teams
- workforce-planning
capability:
exposes:
- type: mcp
namespace: hr-ops
port: 8080
tools:
- name: execute-workflow
description: "Workday Headcount Variance Report - orchestrate multi-step workflow across services."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
steps:
- name: get-data
type: call
call: primary.get-data
with:
record_id: "{{record_id}}"
- name: process-result
type: call
call: secondary.process
with:
data: "{{get-data.result}}"
- name: notify-team
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_ops_channel_id"
text: "Processed {{record_id}} | Result: {{process-result.status}}"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: data
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-data
method: GET
- type: http
namespace: secondary
baseUri: "https://sysco.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: process
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Retrieves a Workday job requisition by ID and returns approval status, hiring manager, and target start date.
naftiko: "0.5"
info:
label: "Workday Job Requisition Status"
description: "Retrieves a Workday job requisition by ID and returns approval status, hiring manager, and target start date."
tags:
- hr
- recruiting
- workday
capability:
exposes:
- type: mcp
namespace: hr-ops
port: 8080
tools:
- name: get-record
description: "Workday Job Requisition Status - retrieve record data for operations review."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
call: primary.get-record
with:
record_id: "{{record_id}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: result
type: string
mapping: "$.result"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: records
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-record
method: GET
Posts learning digest.
naftiko: "0.5"
info:
label: "Workday Learning Completion Digest"
description: "Posts learning digest."
tags:
- hr
- workday
- microsoft-teams
- learning
capability:
exposes:
- type: mcp
namespace: hr-ops
port: 8080
tools:
- name: execute-workflow
description: "Workday Learning Completion Digest - orchestrate multi-step workflow across services."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
steps:
- name: get-data
type: call
call: primary.get-data
with:
record_id: "{{record_id}}"
- name: process-result
type: call
call: secondary.process
with:
data: "{{get-data.result}}"
- name: notify-team
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_ops_channel_id"
text: "Processed {{record_id}} | Result: {{process-result.status}}"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: data
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-data
method: GET
- type: http
namespace: secondary
baseUri: "https://sysco.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: process
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Provisions fleet badges.
naftiko: "0.5"
info:
label: "Workday New Hire Fleet Badge Provisioning"
description: "Provisions fleet badges."
tags:
- hr
- workday
- microsoft-teams
- onboarding
capability:
exposes:
- type: mcp
namespace: hr-ops
port: 8080
tools:
- name: execute-workflow
description: "Workday New Hire Fleet Badge Provisioning - orchestrate multi-step workflow across services."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
steps:
- name: get-data
type: call
call: primary.get-data
with:
record_id: "{{record_id}}"
- name: process-result
type: call
call: secondary.process
with:
data: "{{get-data.result}}"
- name: notify-team
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_ops_channel_id"
text: "Processed {{record_id}} | Result: {{process-result.status}}"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: data
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-data
method: GET
- type: http
namespace: secondary
baseUri: "https://sysco.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: process
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Retrieves the organizational hierarchy for a Workday worker, returning manager and direct reports count.
naftiko: "0.5"
info:
label: "Workday Org Chart Lookup"
description: "Retrieves the organizational hierarchy for a Workday worker, returning manager and direct reports count."
tags:
- hr
- workday
- organization
capability:
exposes:
- type: mcp
namespace: hr-ops
port: 8080
tools:
- name: get-record
description: "Workday Org Chart Lookup - retrieve record data for operations review."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
call: primary.get-record
with:
record_id: "{{record_id}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: result
type: string
mapping: "$.result"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: records
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-record
method: GET
Fetches current active headcount by department and cost center from Workday, and posts the snapshot to the finance Microsoft Teams channel for budget review.
naftiko: "0.5"
info:
label: "Workday Payroll Headcount Snapshot"
description: "Fetches current active headcount by department and cost center from Workday, and posts the snapshot to the finance Microsoft Teams channel for budget review."
tags:
- hr
- finance
- workday
- microsoft-teams
- reporting
- headcount
capability:
exposes:
- type: mcp
namespace: hr-finance
port: 8080
tools:
- name: publish-headcount-snapshot
description: "Retrieve active worker headcount grouped by department and cost center from Workday and post the summary to the Microsoft Teams #finance channel. Use monthly for budget review or on-demand for workforce planning."
inputParameters:
- name: as_of_date
in: body
type: string
description: "Snapshot date in YYYY-MM-DD format."
steps:
- name: get-headcount
type: call
call: workday-hc.get-workers
with:
as_of_date: "{{as_of_date}}"
- name: post-snapshot
type: call
call: msteams-finance.send-channel-message
with:
team_id: "$secrets.msteams_finance_team_id"
channel_id: "$secrets.msteams_finance_channel_id"
content: "Headcount snapshot as of {{as_of_date}} retrieved from Workday. Total active workers: {{get-headcount.total}}."
consumes:
- type: http
namespace: workday-hc
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers"
inputParameters:
- name: as_of_date
in: query
operations:
- name: get-workers
method: GET
- type: http
namespace: msteams-finance
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Launches review cycle.
naftiko: "0.5"
info:
label: "Workday Performance Review Kickoff"
description: "Launches review cycle."
tags:
- hr
- workday
- microsoft-teams
- performance-management
capability:
exposes:
- type: mcp
namespace: hr-ops
port: 8080
tools:
- name: execute-workflow
description: "Workday Performance Review Kickoff - orchestrate multi-step workflow across services."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
steps:
- name: get-data
type: call
call: primary.get-data
with:
record_id: "{{record_id}}"
- name: process-result
type: call
call: secondary.process
with:
data: "{{get-data.result}}"
- name: notify-team
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_ops_channel_id"
text: "Processed {{record_id}} | Result: {{process-result.status}}"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: data
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-data
method: GET
- type: http
namespace: secondary
baseUri: "https://sysco.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: process
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
When an employee changes roles in Workday, updates their SAP authorization profile and notifies IT via ServiceNow to adjust system access accordingly.
naftiko: "0.5"
info:
label: "Workday Role Change Access Provisioning"
description: "When an employee changes roles in Workday, updates their SAP authorization profile and notifies IT via ServiceNow to adjust system access accordingly."
tags:
- hr
- workday
- sap
- servicenow
- access-management
- identity
capability:
exposes:
- type: mcp
namespace: access-ops
port: 8080
tools:
- name: provision-role-change-access
description: "Given a Workday worker ID, old role, and new role, look up the employee in Workday, create a ServiceNow access change request to update SAP authorization profiles, and notify the IT team. Use when Workday fires a position-change event."
inputParameters:
- name: worker_id
in: body
type: string
description: "Workday worker ID for the employee changing roles."
- name: old_role
in: body
type: string
description: "The employee's previous role or job profile name."
- name: new_role
in: body
type: string
description: "The employee's new role or job profile name."
steps:
- name: get-worker
type: call
call: workday-role.get-worker
with:
worker_id: "{{worker_id}}"
- name: create-access-request
type: call
call: snow-access.create-request
with:
short_description: "SAP access update for {{get-worker.fullName}}: {{old_role}} to {{new_role}}"
assigned_group: "IT_Access_Management"
description: "Worker {{worker_id}} ({{get-worker.fullName}}) has changed roles from {{old_role}} to {{new_role}}. Update SAP authorization profile accordingly."
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: snow-access
baseUri: "https://sysco.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
Revokes access on employee termination.
naftiko: "0.5"
info:
label: "Workday Termination Access Revocation"
description: "Revokes access on employee termination."
tags:
- hr
- security
- workday
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-ops
port: 8080
tools:
- name: execute-workflow
description: "Workday Termination Access Revocation - orchestrate multi-step workflow across services."
inputParameters:
- name: record_id
in: body
type: string
description: "The primary record identifier."
steps:
- name: get-data
type: call
call: primary.get-data
with:
record_id: "{{record_id}}"
- name: process-result
type: call
call: secondary.process
with:
data: "{{get-data.result}}"
- name: notify-team
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_ops_channel_id"
text: "Processed {{record_id}} | Result: {{process-result.status}}"
consumes:
- type: http
namespace: primary
baseUri: "https://sysco-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: data
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-data
method: GET
- type: http
namespace: secondary
baseUri: "https://sysco.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: process
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Retrieves an employee time off balance from Workday, returning available PTO and sick leave days.
naftiko: "0.5"
info:
label: "Workday Time Off Balance Lookup"
description: "Retrieves an employee time off balance from Workday, returning available PTO and sick leave days."
tags:
- hr
- workday
- time-management
capability:
exposes:
- type: mcp
namespace: hr-time
port: 8080
tools:
- name: get-time-off-balance
description: "Look up employee time off balance in Workday. Returns PTO and sick leave."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID."
call: workday.get-time-off-balance
with:
worker_id: "{{worker_id}}"
outputParameters:
- name: pto_balance
type: number
mapping: "$.timeOffBalance.pto"
- name: sick_leave
type: number
mapping: "$.timeOffBalance.sickLeave"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: time-off
path: "/workers/{{worker_id}}/timeOffBalance"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-time-off-balance
method: GET