Sysco Capabilities

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

Sort
Expand

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