Clorox Capabilities
Naftiko 0.5 capability definitions for Clorox - 100 capabilities showing integration workflows and service orchestrations.
Analyzes product trends via AI.
naftiko: "0.5"
info:
label: "AI-Powered Product Trend Analysis"
description: "Analyzes product trends via AI."
tags:
- artificial-intelligence
- analytics
- microsoft-teams
- cpg
capability:
exposes:
- type: mcp
namespace: artificial-intelligence-ops
port: 8080
tools:
- name: execute-workflow
description: "AI-Powered Product Trend Analysis - 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://clorox-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://clorox.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 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://clorox-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
Alerts on budget limits.
naftiko: "0.5"
info:
label: "Coupa Budget Utilization Alert"
description: "Alerts on budget limits."
tags:
- procurement
- coupa
- microsoft-teams
- budgeting
capability:
exposes:
- type: mcp
namespace: procurement-ops
port: 8080
tools:
- name: execute-workflow
description: "Coupa Budget Utilization 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://clorox-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://clorox.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: "Coupa Invoice Three-Way Match Exception"
description: "Routes match exceptions."
tags:
- procurement
- coupa
- microsoft-teams
- accounts-payable
capability:
exposes:
- type: mcp
namespace: procurement-ops
port: 8080
tools:
- name: execute-workflow
description: "Coupa Invoice Three-Way Match 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://clorox-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://clorox.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 SAP PO from Coupa PO.
naftiko: "0.5"
info:
label: "Coupa Purchase Order to SAP Sync"
description: "Creates SAP PO from Coupa PO."
tags:
- procurement
- coupa
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: procurement-ops
port: 8080
tools:
- name: execute-workflow
description: "Coupa Purchase Order to SAP Sync - 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://clorox-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://clorox.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 purchase requisition in Coupa, routes it for approval, and notifies the requester via Microsoft Teams when the requisition is approved or rejected.
naftiko: "0.5"
info:
label: "Coupa Requisition Approval Workflow"
description: "Submits a purchase requisition in Coupa, routes it for approval, and notifies the requester via Microsoft Teams when the requisition is approved or rejected."
tags:
- procurement
- coupa
- approval
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: procurement-ops
port: 8080
tools:
- name: submit-requisition
description: "Given a Coupa requisition payload (description, supplier, amount, requester), submit a purchase requisition in Coupa and notify the requester via Teams when it enters the approval queue."
inputParameters:
- name: description
in: body
type: string
description: "Description of the goods or services being requested."
- name: supplier_name
in: body
type: string
description: "The Coupa supplier name."
- name: amount
in: body
type: number
description: "Requested amount in USD."
- name: requester_upn
in: body
type: string
description: "UPN (email) of the requisition requester."
steps:
- name: create-requisition
type: call
call: coupa.create-requisition
with:
description: "{{description}}"
supplier: "{{supplier_name}}"
amount: "{{amount}}"
- name: notify-requester
type: call
call: msteams.send-message
with:
recipient_upn: "{{requester_upn}}"
text: "Your Coupa requisition {{create-requisition.id}} for {{supplier_name}} (${{amount}}) has been submitted and is pending approval."
consumes:
- type: http
namespace: coupa
baseUri: "https://clorox.coupahost.com/api"
authentication:
type: apikey
key: "X-COUPA-API-KEY"
value: "$secrets.coupa_api_key"
placement: header
resources:
- name: requisitions
path: "/requisition_headers"
operations:
- name: create-requisition
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Creates SAP vendor from Coupa.
naftiko: "0.5"
info:
label: "Coupa Supplier Onboarding to SAP"
description: "Creates SAP vendor from Coupa."
tags:
- procurement
- coupa
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: procurement-ops
port: 8080
tools:
- name: execute-workflow
description: "Coupa Supplier Onboarding to SAP - 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://clorox-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://clorox.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 new supplier record from Coupa, validates required fields including banking and tax information, and notifies the procurement team via Teams when verification is complete.
naftiko: "0.5"
info:
label: "Coupa Supplier Onboarding Verification"
description: "Retrieves a new supplier record from Coupa, validates required fields including banking and tax information, and notifies the procurement team via Teams when verification is complete."
tags:
- procurement
- coupa
- vendor-management
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: supplier-onboarding
port: 8080
tools:
- name: verify-supplier-onboarding
description: "Given a Coupa supplier ID, retrieve the supplier record, validate that banking and tax fields are populated, and notify the procurement team via Teams. Use for new supplier activation workflows."
inputParameters:
- name: supplier_id
in: body
type: string
description: "The Coupa supplier ID to verify."
steps:
- name: get-supplier
type: call
call: coupa.get-supplier
with:
supplier_id: "{{supplier_id}}"
- name: notify-procurement
type: call
call: msteams.send-message
with:
channel_id: "$secrets.teams_procurement_channel_id"
text: "Supplier {{get-supplier.name}} (ID: {{supplier_id}}) onboarding verification complete. Status: {{get-supplier.status}}"
consumes:
- type: http
namespace: coupa
baseUri: "https://clorox.coupahost.com/api"
authentication:
type: apikey
key: "X-COUPA-API-KEY"
value: "$secrets.coupa_api_key"
placement: header
resources:
- name: suppliers
path: "/suppliers/{{supplier_id}}"
inputParameters:
- name: supplier_id
in: path
operations:
- name: get-supplier
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves the current status of a vendor invoice in Coupa by invoice ID, returning approval state, line items, and due date for AP reconciliation.
naftiko: "0.5"
info:
label: "Coupa Vendor Invoice Status Lookup"
description: "Retrieves the current status of a vendor invoice in Coupa by invoice ID, returning approval state, line items, and due date for AP reconciliation."
tags:
- procurement
- coupa
- accounts-payable
- finance
capability:
exposes:
- type: mcp
namespace: ap-lookup
port: 8080
tools:
- name: get-invoice-status
description: "Look up a Coupa vendor invoice by invoice ID. Returns approval status, total amount, due date, and line item count. Use for AP reconciliation or payment tracking."
inputParameters:
- name: invoice_id
in: body
type: string
description: "The Coupa invoice ID to look up."
call: coupa.get-invoice
with:
invoice_id: "{{invoice_id}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: total_amount
type: string
mapping: "$.total_amount"
- name: due_date
type: string
mapping: "$.due_date"
consumes:
- type: http
namespace: coupa
baseUri: "https://clorox.coupahost.com/api"
authentication:
type: apikey
key: "X-COUPA-API-KEY"
value: "$secrets.coupa_api_key"
placement: header
resources:
- name: invoices
path: "/invoices/{{invoice_id}}"
inputParameters:
- name: invoice_id
in: path
operations:
- name: get-invoice
method: GET
Creates incidents for DTC issues.
naftiko: "0.5"
info:
label: "Datadog E-Commerce Performance Alert"
description: "Creates incidents for DTC issues."
tags:
- observability
- datadog
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: observability-ops
port: 8080
tools:
- name: execute-workflow
description: "Datadog E-Commerce 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://clorox-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://clorox.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 infrastructure anomalies.
naftiko: "0.5"
info:
label: "Datadog Infrastructure Anomaly Alert"
description: "Creates incidents for infrastructure anomalies."
tags:
- observability
- datadog
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: observability-ops
port: 8080
tools:
- name: execute-workflow
description: "Datadog Infrastructure Anomaly 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://clorox-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://clorox.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 Datadog monitor triggers an infrastructure anomaly alert, creates a ServiceNow incident and notifies the SRE team via Teams with full metric context.
naftiko: "0.5"
info:
label: "Datadog Infrastructure Anomaly Responder"
description: "When a Datadog monitor triggers an infrastructure anomaly alert, creates a ServiceNow incident and notifies the SRE team via Teams with full metric context."
tags:
- observability
- datadog
- servicenow
- microsoft-teams
- monitoring
capability:
exposes:
- type: mcp
namespace: observability-ops
port: 8080
tools:
- name: handle-infra-anomaly
description: "Given a Datadog monitor ID and alert status, retrieve monitor details, create a ServiceNow incident, and post to the SRE Teams channel. Use for automated infrastructure anomaly response."
inputParameters:
- name: monitor_id
in: body
type: string
description: "The Datadog monitor ID that triggered the alert."
- name: alert_status
in: body
type: string
description: "Alert status: Alert, Warn, or No Data."
steps:
- name: get-monitor
type: call
call: datadog.get-monitor
with:
monitor_id: "{{monitor_id}}"
- name: create-incident
type: call
call: servicenow.create-incident
with:
short_description: "Datadog anomaly: {{get-monitor.name}}"
description: "Monitor {{monitor_id}} status: {{alert_status}} | Query: {{get-monitor.query}}"
urgency: "1"
- name: post-alert
type: call
call: msteams.send-message
with:
channel_id: "$secrets.teams_sre_channel_id"
text: "Infra Anomaly: {{get-monitor.name}} | Status: {{alert_status}} | Incident: {{create-incident.number}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: monitors
path: "/monitor/{{monitor_id}}"
inputParameters:
- name: monitor_id
in: path
operations:
- name: get-monitor
method: GET
- type: http
namespace: servicenow
baseUri: "https://clorox.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/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Creates incidents for anomalies.
naftiko: "0.5"
info:
label: "Datadog Log Anomaly to ServiceNow"
description: "Creates incidents for 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://clorox-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://clorox.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 Logs for error spikes in a given service over the past hour and returns the top error patterns for rapid incident triage.
naftiko: "0.5"
info:
label: "Datadog Log Error Spike Investigation"
description: "Queries Datadog Logs for error spikes in a given service over the past hour and returns the top error patterns for rapid incident triage."
tags:
- observability
- datadog
- logging
- incident-response
capability:
exposes:
- type: mcp
namespace: log-analysis
port: 8080
tools:
- name: get-error-log-summary
description: "Query Datadog Logs for the top error patterns in a given service over the past hour. Returns ranked error messages and counts for rapid incident triage."
inputParameters:
- name: service_name
in: body
type: string
description: "The Datadog service name to query, e.g. product-catalog-service."
call: datadog.search-logs
with:
query: "service:{{service_name}} status:error"
outputParameters:
- name: logs
type: array
mapping: "$.data"
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: logs
path: "/logs-queries/list"
inputParameters:
- name: query
in: query
operations:
- name: search-logs
method: GET
Retrieves SLO compliance status from Datadog for all production services and publishes a weekly reliability report to the SRE Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Datadog SLO Compliance Weekly Digest"
description: "Retrieves SLO compliance status from Datadog for all production services and publishes a weekly reliability report to the SRE Microsoft Teams channel."
tags:
- observability
- datadog
- slo
- reporting
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: slo-reporting
port: 8080
tools:
- name: digest-slo-compliance
description: "Fetch all SLO status summaries from Datadog and post a weekly compliance report to the SRE Teams channel. Use for reliability governance reviews."
steps:
- name: get-slos
type: call
call: datadog.list-slos
- name: post-report
type: call
call: msteams.send-message
with:
channel_id: "$secrets.teams_sre_channel_id"
text: "Weekly SLO Report: {{get-slos.total_count}} SLOs tracked across Clorox production services."
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: slos
path: "/slo"
operations:
- name: list-slos
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-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://clorox-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 an employee termination is recorded in Workday, deactivates the Microsoft 365 account, closes open ServiceNow tickets, and notifies the HR team via Teams.
naftiko: "0.5"
info:
label: "Employee Offboarding Workflow"
description: "When an employee termination is recorded in Workday, deactivates the Microsoft 365 account, closes open ServiceNow tickets, and notifies the HR team via Teams."
tags:
- hr
- offboarding
- workday
- servicenow
- microsoft-365
capability:
exposes:
- type: mcp
namespace: hr-offboarding
port: 8080
tools:
- name: trigger-offboarding
description: "Given a Workday employee ID and termination date, deactivate the Microsoft 365 account, close outstanding ServiceNow tickets, and notify the HR partner via Teams."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday worker ID of the departing employee."
- name: termination_date
in: body
type: string
description: "The termination effective date in ISO 8601 format."
steps:
- name: get-worker
type: call
call: workday.get-worker
with:
worker_id: "{{employee_id}}"
- name: disable-account
type: call
call: msgraph.disable-user
with:
user_upn: "{{get-worker.work_email}}"
- name: close-tickets
type: call
call: servicenow.close-user-incidents
with:
caller_email: "{{get-worker.work_email}}"
- name: notify-hr
type: call
call: msteams-notify.send-message
with:
channel_id: "$secrets.teams_hr_channel_id"
text: "Offboarding complete for {{get-worker.full_name}} (termination: {{termination_date}}). M365 account disabled."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/clorox/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: msgraph
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: user-account
path: "/users/{{user_upn}}"
inputParameters:
- name: user_upn
in: path
operations:
- name: disable-user
method: PATCH
- type: http
namespace: servicenow
baseUri: "https://clorox.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: close-user-incidents
method: PATCH
- type: http
namespace: msteams-notify
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Creates Jira tickets.
naftiko: "0.5"
info:
label: "GitHub Actions Build Failure Notification"
description: "Creates Jira tickets."
tags:
- devops
- github
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: devops-ops
port: 8080
tools:
- name: execute-workflow
description: "GitHub Actions Build Failure Notification - 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://clorox-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://clorox.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 GitHub Actions workflow fails on a protected branch, opens a ServiceNow incident and alerts the engineering Teams channel with failure context.
naftiko: "0.5"
info:
label: "GitHub Actions Pipeline Failure Alert"
description: "When a GitHub Actions workflow fails on a protected branch, opens a ServiceNow incident and alerts the engineering Teams channel with failure context."
tags:
- devops
- cicd
- github
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: devops
port: 8080
tools:
- name: handle-pipeline-failure
description: "Given a GitHub Actions run ID and repository, retrieve failure details, open a ServiceNow incident, and alert the engineering Teams channel. Use when a protected-branch pipeline fails."
inputParameters:
- name: run_id
in: body
type: string
description: "The GitHub Actions workflow run ID."
- name: repo
in: body
type: string
description: "Repository in owner/repo format, e.g. clorox/ecommerce-platform."
- name: branch
in: body
type: string
description: "The branch name where the failure occurred."
steps:
- name: get-run
type: call
call: github.get-workflow-run
with:
owner: "clorox"
repo: "{{repo}}"
run_id: "{{run_id}}"
- name: create-incident
type: call
call: servicenow.create-incident
with:
short_description: "CI/CD failure: {{repo}} / {{branch}}"
description: "GitHub Actions run {{run_id}} failed. Log: {{get-run.html_url}}"
urgency: "2"
- name: post-alert
type: call
call: msteams.send-message
with:
channel_id: "$secrets.teams_engineering_channel_id"
text: "Pipeline Failure: {{repo}} | Branch: {{branch}} | Incident: {{create-incident.number}} | Log: {{get-run.html_url}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: workflow-run
path: "/repos/{{owner}}/{{repo}}/actions/runs/{{run_id}}"
inputParameters:
- name: owner
in: path
- name: repo
in: path
- name: run_id
in: path
operations:
- name: get-workflow-run
method: GET
- type: http
namespace: servicenow
baseUri: "https://clorox.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/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Fetches critical Dependabot security alerts for a GitHub repository, creates ServiceNow security incidents, and notifies the security team via Teams.
naftiko: "0.5"
info:
label: "GitHub Dependabot Security Alert Triage"
description: "Fetches critical Dependabot security alerts for a GitHub repository, creates ServiceNow security incidents, and notifies the security team via Teams."
tags:
- security
- github
- servicenow
- devops
- vulnerability-management
capability:
exposes:
- type: mcp
namespace: security-ops
port: 8080
tools:
- name: triage-security-alerts
description: "Retrieve open critical Dependabot alerts for a GitHub repository, create a ServiceNow security incident, and notify the Clorox security team via Teams."
inputParameters:
- name: repo
in: body
type: string
description: "Repository in owner/repo format, e.g. clorox/cleaning-apps."
steps:
- name: get-alerts
type: call
call: github.list-dependabot-alerts
with:
owner: "clorox"
repo: "{{repo}}"
severity: "critical"
- name: create-incident
type: call
call: servicenow.create-incident
with:
short_description: "Critical Dependabot alerts in {{repo}}"
category: "security"
urgency: "1"
- name: notify-security
type: call
call: msteams.send-message
with:
channel_id: "$secrets.teams_security_channel_id"
text: "Security Alert: {{get-alerts.total_count}} critical vulnerabilities in {{repo}}. Incident: {{create-incident.number}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: dependabot-alerts
path: "/repos/{{owner}}/{{repo}}/dependabot/alerts"
inputParameters:
- name: owner
in: path
- name: repo
in: path
- name: severity
in: query
operations:
- name: list-dependabot-alerts
method: GET
- type: http
namespace: servicenow
baseUri: "https://clorox.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/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Checks ServiceNow approval before deployment.
naftiko: "0.5"
info:
label: "GitHub Deployment Approval Gate"
description: "Checks ServiceNow 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://clorox-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://clorox.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
Updates change requests.
naftiko: "0.5"
info:
label: "GitHub Deployment to ServiceNow Change"
description: "Updates change requests."
tags:
- devops
- github
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: devops-ops
port: 8080
tools:
- name: execute-workflow
description: "GitHub Deployment to ServiceNow Change - 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://clorox-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://clorox.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 all Clorox GitHub organization repositories for missing branch protection rules and reports non-compliant repositories to the security team via Teams.
naftiko: "0.5"
info:
label: "GitHub Repository Security Policy Audit"
description: "Audits all Clorox GitHub organization repositories for missing branch protection rules and reports non-compliant repositories to the security team via Teams."
tags:
- security
- github
- devops
- compliance
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: security-audit
port: 8080
tools:
- name: audit-branch-protection
description: "List all repositories in the Clorox GitHub organization and audit branch protection compliance on default branches, reporting findings to the security Teams channel."
steps:
- name: list-repos
type: call
call: github.list-org-repos
with:
org: "clorox"
type: "private"
- name: post-report
type: call
call: msteams.send-message
with:
channel_id: "$secrets.teams_security_channel_id"
text: "Branch Protection Audit: {{list-repos.total_count}} private repositories reviewed for compliance."
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: org-repos
path: "/orgs/{{org}}/repos"
inputParameters:
- name: org
in: path
- name: type
in: query
operations:
- name: list-org-repos
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Creates Jira tickets.
naftiko: "0.5"
info:
label: "GitHub Security Vulnerability Triage"
description: "Creates Jira tickets."
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://clorox-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://clorox.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 current active headcount by cost center from Workday and returns a structured summary for finance planning and workforce analysis.
naftiko: "0.5"
info:
label: "Headcount Snapshot by Cost Center"
description: "Pulls current active headcount by cost center from Workday and returns a structured summary for finance planning and workforce analysis."
tags:
- hr
- finance
- reporting
- workday
capability:
exposes:
- type: mcp
namespace: hr-reporting
port: 8080
tools:
- name: get-headcount-snapshot
description: "Returns active headcount grouped by cost center and employment type from Workday. Use for headcount planning, finance forecasting, or quarterly workforce reviews."
call: workday.list-workers
outputParameters:
- name: workers
type: array
mapping: "$.data"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers-list
path: "/clorox/workers"
operations:
- name: list-workers
method: GET
Retrieves a vendor invoice from Coupa, validates it against the linked SAP purchase order and goods receipt, and posts the cleared invoice to SAP for payment.
naftiko: "0.5"
info:
label: "Invoice Three-Way Match and SAP Posting"
description: "Retrieves a vendor invoice from Coupa, validates it against the linked SAP purchase order and goods receipt, and posts the cleared invoice to SAP for payment."
tags:
- finance
- procurement
- coupa
- sap
- invoice-processing
capability:
exposes:
- type: mcp
namespace: ap-ops
port: 8080
tools:
- name: process-invoice-match
description: "Given a Coupa invoice ID, retrieve invoice details, validate against the SAP purchase order, and post the three-way match result to SAP for payment clearance. Use for accounts payable automation."
inputParameters:
- name: invoice_id
in: body
type: string
description: "The Coupa invoice ID to process."
steps:
- name: get-invoice
type: call
call: coupa.get-invoice
with:
invoice_id: "{{invoice_id}}"
- name: get-po
type: call
call: sap.get-po
with:
po_number: "{{get-invoice.po_number}}"
- name: post-match
type: call
call: sap.post-invoice-clearance
with:
invoice_number: "{{get-invoice.invoice_number}}"
po_number: "{{get-invoice.po_number}}"
amount: "{{get-invoice.total_amount}}"
consumes:
- type: http
namespace: coupa
baseUri: "https://clorox.coupahost.com/api"
authentication:
type: apikey
key: "X-COUPA-API-KEY"
value: "$secrets.coupa_api_key"
placement: header
resources:
- name: invoices
path: "/invoices/{{invoice_id}}"
inputParameters:
- name: invoice_id
in: path
operations:
- name: get-invoice
method: GET
- type: http
namespace: sap
baseUri: "https://clorox-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
- name: post-invoice-clearance
method: POST
When a critical ServiceNow incident is raised, creates a Datadog event marker for observability correlation and posts an alert to the IT-incidents Microsoft Teams channel.
naftiko: "0.5"
info:
label: "IT Incident Response Orchestrator"
description: "When a critical ServiceNow incident is raised, creates a Datadog event marker for observability correlation and posts an alert to the IT-incidents Microsoft Teams channel."
tags:
- itsm
- incident-response
- servicenow
- datadog
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: it-ops
port: 8080
tools:
- name: handle-critical-incident
description: "Given a ServiceNow incident number, retrieve incident details, create a Datadog correlation event, and alert the IT-incidents Teams channel. Use for P1/P2 incident bridges."
inputParameters:
- name: incident_number
in: body
type: string
description: "The ServiceNow incident number, e.g. INC0045678."
steps:
- name: get-incident
type: call
call: servicenow.get-incident
with:
incident_number: "{{incident_number}}"
- name: create-dd-event
type: call
call: datadog.create-event
with:
title: "ServiceNow Incident: {{incident_number}}"
text: "{{get-incident.short_description}} — Priority: {{get-incident.priority}}"
alert_type: "error"
- name: post-alert
type: call
call: msteams.send-message
with:
channel_id: "$secrets.teams_it_channel_id"
text: "CRITICAL: {{incident_number}} — {{get-incident.short_description}} | Assigned: {{get-incident.assigned_to}} | DD Event: {{create-dd-event.event_id}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://clorox.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
inputParameters:
- name: incident_number
in: query
operations:
- name: get-incident
method: GET
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: events
path: "/events"
operations:
- name: create-event
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Monitors environmental compliance.
naftiko: "0.5"
info:
label: "Manufacturing Environmental Compliance Monitor"
description: "Monitors environmental compliance."
tags:
- manufacturing
- compliance
- microsoft-teams
- environmental
capability:
exposes:
- type: mcp
namespace: manufacturing-ops
port: 8080
tools:
- name: execute-workflow
description: "Manufacturing Environmental Compliance Monitor - 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://clorox-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://clorox.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 line downtime.
naftiko: "0.5"
info:
label: "Manufacturing Line Downtime Alert"
description: "Creates incidents for line downtime."
tags:
- manufacturing
- iot
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: manufacturing-ops
port: 8080
tools:
- name: execute-workflow
description: "Manufacturing Line Downtime 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://clorox-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://clorox.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 new hire record is created in Workday, opens a ServiceNow onboarding ticket, provisions a Microsoft 365 account, and sends a Teams welcome message.
naftiko: "0.5"
info:
label: "New Hire Onboarding Orchestrator"
description: "When a new hire record is created in Workday, opens a ServiceNow onboarding ticket, provisions a Microsoft 365 account, and sends a Teams welcome message."
tags:
- hr
- onboarding
- workday
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-onboarding
port: 8080
tools:
- name: trigger-onboarding
description: "Given a Workday employee ID and start date, orchestrate the full onboarding sequence across ServiceNow, Microsoft 365, and Microsoft Teams for a new Clorox hire."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday worker ID for the new hire, e.g. WD-00456."
- name: start_date
in: body
type: string
description: "Employee start date in ISO 8601 format (YYYY-MM-DD)."
steps:
- name: get-worker
type: call
call: workday.get-worker
with:
worker_id: "{{employee_id}}"
- name: create-onboarding-ticket
type: call
call: servicenow.create-incident
with:
short_description: "New hire onboarding: {{get-worker.full_name}}"
category: "hr_onboarding"
assigned_to: "IT_Onboarding"
- name: provision-m365
type: call
call: msgraph.create-user
with:
displayName: "{{get-worker.full_name}}"
mail: "{{get-worker.work_email}}"
department: "{{get-worker.department}}"
- name: send-welcome
type: call
call: msteams.send-message
with:
recipient_upn: "{{get-worker.work_email}}"
text: "Welcome to Clorox, {{get-worker.first_name}}! Your IT onboarding ticket is {{create-onboarding-ticket.number}}."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/clorox/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://clorox.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msgraph
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: users
path: "/users"
operations:
- name: create-user
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Refreshes brand dashboard.
naftiko: "0.5"
info:
label: "Power BI Brand Performance Refresh"
description: "Refreshes brand dashboard."
tags:
- analytics
- power-bi
- microsoft-teams
- cpg
capability:
exposes:
- type: mcp
namespace: analytics-ops
port: 8080
tools:
- name: execute-workflow
description: "Power BI Brand Performance 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://clorox-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://clorox.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://clorox-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
Refreshes executive KPI dashboard.
naftiko: "0.5"
info:
label: "Power BI Executive Dashboard Refresh"
description: "Refreshes executive KPI dashboard."
tags:
- analytics
- power-bi
- microsoft-teams
- reporting
capability:
exposes:
- type: mcp
namespace: analytics-ops
port: 8080
tools:
- name: execute-workflow
description: "Power BI Executive Dashboard 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://clorox-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://clorox.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
Triggers a Power BI dataset refresh for the Clorox sales dashboard and notifies the analytics team in Teams upon completion or failure.
naftiko: "0.5"
info:
label: "Power BI Sales Dashboard Refresh"
description: "Triggers a Power BI dataset refresh for the Clorox sales dashboard and notifies the analytics team in Teams upon completion or failure."
tags:
- data
- analytics
- power-bi
- microsoft-teams
- reporting
capability:
exposes:
- type: mcp
namespace: data-analytics
port: 8080
tools:
- name: trigger-sales-dashboard-refresh
description: "Trigger a Power BI dataset refresh for the Clorox sales dashboard and notify the analytics Teams channel with refresh status. Use for scheduled BI report automation."
inputParameters:
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID to refresh."
steps:
- name: start-refresh
type: call
call: powerbi.refresh-dataset
with:
dataset_id: "{{dataset_id}}"
- name: notify-team
type: call
call: msteams.send-message
with:
channel_id: "$secrets.teams_analytics_channel_id"
text: "Power BI dataset {{dataset_id}} refresh triggered successfully."
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: dataset-refreshes
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Refreshes supply chain KPIs.
naftiko: "0.5"
info:
label: "Power BI Supply Chain Dashboard Refresh"
description: "Refreshes supply chain KPIs."
tags:
- analytics
- power-bi
- microsoft-teams
- supply-chain
capability:
exposes:
- type: mcp
namespace: analytics-ops
port: 8080
tools:
- name: execute-workflow
description: "Power BI Supply Chain Dashboard 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://clorox-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://clorox.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 SAP QM notification from complaints.
naftiko: "0.5"
info:
label: "Product Quality Complaint Workflow"
description: "Creates SAP QM notification from complaints."
tags:
- quality
- salesforce
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: quality-ops
port: 8080
tools:
- name: execute-workflow
description: "Product Quality Complaint 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://clorox-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://clorox.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 trade promotion data to Power BI.
naftiko: "0.5"
info:
label: "Retail Promotion Performance Tracker"
description: "Pushes trade promotion data to Power BI."
tags:
- marketing
- sap
- salesforce
- power-bi
capability:
exposes:
- type: mcp
namespace: marketing-ops
port: 8080
tools:
- name: execute-workflow
description: "Retail Promotion Performance 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://clorox-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://clorox.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 optimization recommendations.
naftiko: "0.5"
info:
label: "Retail Shelf Space Optimization Digest"
description: "Posts optimization recommendations."
tags:
- marketing
- analytics
- microsoft-teams
- cpg
capability:
exposes:
- type: mcp
namespace: marketing-ops
port: 8080
tools:
- name: execute-workflow
description: "Retail Shelf Space Optimization 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://clorox-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://clorox.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
Given a Salesforce account ID, retrieves the account profile, open opportunities, and recent service cases to produce a unified health summary for the account team.
naftiko: "0.5"
info:
label: "Salesforce Account Health Check"
description: "Given a Salesforce account ID, retrieves the account profile, open opportunities, and recent service cases to produce a unified health summary for the account team."
tags:
- sales
- crm
- salesforce
- customer-success
capability:
exposes:
- type: mcp
namespace: crm
port: 8080
tools:
- name: get-account-health
description: "Given a Salesforce account ID, retrieve the account profile, open opportunities, and recent cases to assemble a customer health summary. Use for account review meetings."
inputParameters:
- name: account_id
in: body
type: string
description: "The Salesforce Account ID (18-character ID)."
steps:
- name: get-account
type: call
call: salesforce-acct.get-account
with:
account_id: "{{account_id}}"
- name: get-opportunities
type: call
call: salesforce-opp.query-opportunities
with:
soql: "SELECT Id,Name,StageName,Amount FROM Opportunity WHERE AccountId='{{account_id}}' AND IsClosed=false"
- name: get-cases
type: call
call: salesforce-case.query-cases
with:
soql: "SELECT Id,Subject,Status,CreatedDate FROM Case WHERE AccountId='{{account_id}}' ORDER BY CreatedDate DESC LIMIT 5"
consumes:
- type: http
namespace: salesforce-acct
baseUri: "https://clorox.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: account
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account
method: GET
- type: http
namespace: salesforce-opp
baseUri: "https://clorox.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: query
path: "/query"
inputParameters:
- name: soql
in: query
operations:
- name: query-opportunities
method: GET
- type: http
namespace: salesforce-case
baseUri: "https://clorox.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: query
path: "/query"
inputParameters:
- name: soql
in: query
operations:
- name: query-cases
method: GET
Posts health score digest.
naftiko: "0.5"
info:
label: "Salesforce Account Health Score Digest"
description: "Posts health score digest."
tags:
- sales
- salesforce
- microsoft-teams
- customer-success
capability:
exposes:
- type: mcp
namespace: sales-ops
port: 8080
tools:
- name: execute-workflow
description: "Salesforce Account Health Score 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://clorox-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://clorox.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://clorox-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
Generates sentiment analysis.
naftiko: "0.5"
info:
label: "Salesforce Consumer Feedback Analysis"
description: "Generates sentiment analysis."
tags:
- customer-service
- salesforce
- microsoft-teams
- cpg
capability:
exposes:
- type: mcp
namespace: customer-service-ops
port: 8080
tools:
- name: execute-workflow
description: "Salesforce Consumer Feedback Analysis - 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://clorox-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://clorox.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 SAP orders.
naftiko: "0.5"
info:
label: "Salesforce Distributor Order Sync to SAP"
description: "Creates SAP orders."
tags:
- sales
- salesforce
- sap
- sync
capability:
exposes:
- type: mcp
namespace: sales-ops
port: 8080
tools:
- name: execute-workflow
description: "Salesforce Distributor Order Sync to SAP - 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://clorox-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://clorox.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
Converts a qualified Salesforce lead into an opportunity and account, then notifies the sales rep via Teams to begin the sales engagement.
naftiko: "0.5"
info:
label: "Salesforce Lead-to-Opportunity Conversion"
description: "Converts a qualified Salesforce lead into an opportunity and account, then notifies the sales rep via Teams to begin the sales engagement."
tags:
- sales
- crm
- salesforce
- lead-management
capability:
exposes:
- type: mcp
namespace: sales-ops
port: 8080
tools:
- name: convert-lead
description: "Given a Salesforce lead ID, convert the qualified lead to an opportunity and account and notify the assigned sales rep via Teams. Use for automated lead qualification handoff."
inputParameters:
- name: lead_id
in: body
type: string
description: "The Salesforce Lead ID to convert."
steps:
- name: get-lead
type: call
call: salesforce-lead.get-lead
with:
lead_id: "{{lead_id}}"
- name: convert
type: call
call: salesforce-convert.convert-lead
with:
lead_id: "{{lead_id}}"
convertedStatus: "Qualified"
- name: notify-owner
type: call
call: msteams.send-message
with:
recipient_upn: "{{get-lead.owner_email}}"
text: "Lead {{get-lead.name}} converted to opportunity. Account: {{convert.accountId}}"
consumes:
- type: http
namespace: salesforce-lead
baseUri: "https://clorox.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: lead
path: "/sobjects/Lead/{{lead_id}}"
inputParameters:
- name: lead_id
in: path
operations:
- name: get-lead
method: GET
- type: http
namespace: salesforce-convert
baseUri: "https://clorox.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: lead-convert
path: "/sobjects/Lead/{{lead_id}}"
inputParameters:
- name: lead_id
in: path
operations:
- name: convert-lead
method: PATCH
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Generates campaign ROI digest.
naftiko: "0.5"
info:
label: "Salesforce Marketing Campaign ROI Digest"
description: "Generates campaign ROI digest."
tags:
- marketing
- salesforce
- microsoft-teams
- analytics
capability:
exposes:
- type: mcp
namespace: marketing-ops
port: 8080
tools:
- name: execute-workflow
description: "Salesforce Marketing Campaign ROI 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://clorox-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://clorox.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 SAP customer master from Salesforce.
naftiko: "0.5"
info:
label: "Salesforce New Account to SAP Customer"
description: "Creates SAP customer master from Salesforce."
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://clorox-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://clorox.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
Tracks launch milestones.
naftiko: "0.5"
info:
label: "Salesforce New Product Launch Tracker"
description: "Tracks launch milestones."
tags:
- marketing
- salesforce
- microsoft-teams
- cpg
capability:
exposes:
- type: mcp
namespace: marketing-ops
port: 8080
tools:
- name: execute-workflow
description: "Salesforce New Product Launch 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://clorox-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://clorox.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 NPS survey response scores below the detractor threshold in Salesforce, automatically creates a high-priority service case and routes it to the customer success team.
naftiko: "0.5"
info:
label: "Salesforce NPS Detractor Case Creation"
description: "When an NPS survey response scores below the detractor threshold in Salesforce, automatically creates a high-priority service case and routes it to the customer success team."
tags:
- sales
- customer-success
- salesforce
- nps
capability:
exposes:
- type: mcp
namespace: customer-success
port: 8080
tools:
- name: handle-nps-detractor
description: "Given a Salesforce contact ID and NPS score below 7, retrieve contact details, create a high-priority service case, and assign it to the customer success team for follow-up."
inputParameters:
- name: contact_id
in: body
type: string
description: "Salesforce Contact ID of the NPS survey respondent."
- name: nps_score
in: body
type: integer
description: "NPS score (0–10) from the survey."
- name: feedback
in: body
type: string
description: "Verbatim feedback from the respondent."
steps:
- name: get-contact
type: call
call: salesforce-contact.get-contact
with:
contact_id: "{{contact_id}}"
- name: create-case
type: call
call: salesforce-cases.create-case
with:
subject: "NPS Detractor Follow-up: {{get-contact.name}} (Score: {{nps_score}})"
description: "{{feedback}}"
contactId: "{{contact_id}}"
origin: "NPS Survey"
priority: "High"
consumes:
- type: http
namespace: salesforce-contact
baseUri: "https://clorox.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: contact
path: "/sobjects/Contact/{{contact_id}}"
inputParameters:
- name: contact_id
in: path
operations:
- name: get-contact
method: GET
- type: http
namespace: salesforce-cases
baseUri: "https://clorox.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/sobjects/Case"
operations:
- name: create-case
method: POST
Queries Salesforce for opportunities updated in the last 24 hours and pushes the updated pipeline data to Power BI for sales reporting.
naftiko: "0.5"
info:
label: "Salesforce Opportunity Pipeline Refresh"
description: "Queries Salesforce for opportunities updated in the last 24 hours and pushes the updated pipeline data to Power BI for sales reporting."
tags:
- sales
- crm
- salesforce
- power-bi
- reporting
capability:
exposes:
- type: mcp
namespace: sales-reporting
port: 8080
tools:
- name: sync-opportunity-pipeline
description: "Fetch Salesforce opportunities modified in the last 24 hours and push records to the Power BI sales pipeline dataset for daily reporting. Use for pipeline refresh automation."
steps:
- name: get-opps
type: call
call: salesforce.query-opportunities
with:
soql: "SELECT Id,Name,StageName,Amount,CloseDate,AccountId FROM Opportunity WHERE LastModifiedDate = LAST_N_DAYS:1"
- name: push-to-powerbi
type: call
call: powerbi.push-rows
with:
dataset_id: "$secrets.powerbi_pipeline_dataset_id"
table_name: "Opportunities"
rows: "{{get-opps.records}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://clorox.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: query
path: "/query"
inputParameters:
- name: soql
in: query
operations:
- name: query-opportunities
method: GET
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: dataset-rows
path: "/datasets/{{dataset_id}}/tables/{{table_name}}/rows"
inputParameters:
- name: dataset_id
in: path
- name: table_name
in: path
operations:
- name: push-rows
method: POST
Pushes pipeline to Power BI.
naftiko: "0.5"
info:
label: "Salesforce Quarterly Pipeline to Power BI"
description: "Pushes pipeline 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://clorox-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://clorox.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 meeting prep.
naftiko: "0.5"
info:
label: "Salesforce Retail Buyer Meeting Prep"
description: "Generates meeting prep."
tags:
- sales
- salesforce
- microsoft-teams
- cpg
capability:
exposes:
- type: mcp
namespace: sales-ops
port: 8080
tools:
- name: execute-workflow
description: "Salesforce Retail Buyer Meeting Prep - 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://clorox-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://clorox.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
Calculates promotion ROI.
naftiko: "0.5"
info:
label: "Salesforce Trade Promotion ROI Calculator"
description: "Calculates promotion ROI."
tags:
- marketing
- salesforce
- microsoft-teams
- cpg
capability:
exposes:
- type: mcp
namespace: marketing-ops
port: 8080
tools:
- name: execute-workflow
description: "Salesforce Trade Promotion ROI Calculator - 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://clorox-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://clorox.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 tasks for expiring contracts.
naftiko: "0.5"
info:
label: "SAP Ariba Contract Renewal Alert"
description: "Creates tasks for expiring 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://clorox-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://clorox.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 active sourcing events.
naftiko: "0.5"
info:
label: "SAP Ariba Sourcing Event Monitor"
description: "Monitors active sourcing events."
tags:
- procurement
- sap-ariba
- microsoft-teams
- sourcing
capability:
exposes:
- type: mcp
namespace: procurement-ops
port: 8080
tools:
- name: execute-workflow
description: "SAP Ariba Sourcing Event Monitor - 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://clorox-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://clorox.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
Reports on sourcing events.
naftiko: "0.5"
info:
label: "SAP Ariba Sourcing Event Report"
description: "Reports on sourcing events."
tags:
- procurement
- sap-ariba
- microsoft-teams
- sourcing
capability:
exposes:
- type: mcp
namespace: procurement-ops
port: 8080
tools:
- name: execute-workflow
description: "SAP Ariba Sourcing Event 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://clorox-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://clorox.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
Identifies affected shipments for recalls.
naftiko: "0.5"
info:
label: "SAP Batch Recall Notification"
description: "Identifies affected shipments for recalls."
tags:
- quality
- sap
- microsoft-teams
- compliance
capability:
exposes:
- type: mcp
namespace: quality-ops
port: 8080
tools:
- name: execute-workflow
description: "SAP Batch Recall Notification - 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://clorox-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://clorox.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 travel compliance.
naftiko: "0.5"
info:
label: "SAP Concur Travel Compliance Check"
description: "Checks travel compliance."
tags:
- travel
- sap-concur
- microsoft-teams
- compliance
capability:
exposes:
- type: mcp
namespace: travel-ops
port: 8080
tools:
- name: execute-workflow
description: "SAP Concur Travel 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://clorox-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://clorox.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 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://clorox-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 actual vs. planned cost center spending from SAP S/4HANA and posts a variance digest to the Finance Microsoft Teams channel for monthly close review.
naftiko: "0.5"
info:
label: "SAP Cost Center Budget Variance Report"
description: "Retrieves actual vs. planned cost center spending from SAP S/4HANA and posts a variance digest to the Finance Microsoft Teams channel for monthly close review."
tags:
- finance
- sap
- budgeting
- reporting
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: finance-reporting
port: 8080
tools:
- name: digest-budget-variance
description: "Retrieve actual vs. planned cost center spending from SAP S/4HANA for a fiscal period and post a variance digest to the Finance Teams channel. Use for monthly close or quarterly reviews."
inputParameters:
- name: fiscal_period
in: body
type: string
description: "Fiscal period in YYYYMM format, e.g. 202603."
steps:
- name: get-variance
type: call
call: sap.get-cost-center-variance
with:
fiscal_period: "{{fiscal_period}}"
- name: post-report
type: call
call: msteams.send-message
with:
channel_id: "$secrets.teams_finance_channel_id"
text: "Budget Variance Report for period {{fiscal_period}} is available. {{get-variance.total_cost_centers}} cost centers reviewed."
consumes:
- type: http
namespace: sap
baseUri: "https://clorox-s4.sap.com/sap/opu/odata/sap/API_COSTCENTER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: cost-centers
path: "/A_CostCenter"
inputParameters:
- name: fiscal_period
in: query
operations:
- name: get-cost-center-variance
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Posts demand forecasts.
naftiko: "0.5"
info:
label: "SAP Demand Planning Forecast Digest"
description: "Posts demand forecasts."
tags:
- supply-chain
- sap
- microsoft-teams
- forecasting
capability:
exposes:
- type: mcp
namespace: supply-chain-ops
port: 8080
tools:
- name: execute-workflow
description: "SAP Demand Planning 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://clorox-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://clorox.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 close readiness.
naftiko: "0.5"
info:
label: "SAP Financial Close Readiness Check"
description: "Posts close readiness."
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://clorox-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://clorox.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 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://clorox-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.
naftiko: "0.5"
info:
label: "SAP Goods Movement Reversal Alert"
description: "Creates audit tasks."
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://clorox-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://clorox.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 in SAP S/4HANA for a delivered purchase order and notifies the procurement team via Teams.
naftiko: "0.5"
info:
label: "SAP Goods Receipt Confirmation"
description: "Posts a goods receipt in SAP S/4HANA for a delivered purchase order and notifies the procurement team via Teams."
tags:
- supply-chain
- sap
- procurement
- inventory
capability:
exposes:
- type: mcp
namespace: supply-chain
port: 8080
tools:
- name: confirm-goods-receipt
description: "Given a SAP purchase order number and delivered quantity, post a goods receipt in SAP S/4HANA and notify the procurement team via Teams with the material document number."
inputParameters:
- name: po_number
in: body
type: string
description: "The SAP purchase order number for the delivery."
- name: quantity
in: body
type: number
description: "The quantity delivered."
steps:
- name: post-gr
type: call
call: sap.post-goods-receipt
with:
po_number: "{{po_number}}"
quantity: "{{quantity}}"
- name: notify-procurement
type: call
call: msteams.send-message
with:
channel_id: "$secrets.teams_procurement_channel_id"
text: "Goods receipt posted for PO {{po_number}}: {{quantity}} units received. GR Document: {{post-gr.material_document}}."
consumes:
- type: http
namespace: sap
baseUri: "https://clorox-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_DOCUMENT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: material-documents
path: "/A_MaterialDocumentHeader"
operations:
- name: post-goods-receipt
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/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-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://clorox-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 purchase requisitions for low raw material stock.
naftiko: "0.5"
info:
label: "SAP Inventory Reorder Point Alert"
description: "Creates purchase requisitions for low raw material 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://clorox-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://clorox.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://clorox-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
Alerts on critical material shortages.
naftiko: "0.5"
info:
label: "SAP MRP Shortage Alert"
description: "Alerts on critical material shortages."
tags:
- supply-chain
- sap
- microsoft-teams
- mrp
capability:
exposes:
- type: mcp
namespace: supply-chain-ops
port: 8080
tools:
- name: execute-workflow
description: "SAP MRP Shortage 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://clorox-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://clorox.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 maintenance work orders for plant equipment.
naftiko: "0.5"
info:
label: "SAP Plant Maintenance Work Order Create"
description: "Creates maintenance work orders for plant equipment."
tags:
- manufacturing
- sap
- microsoft-teams
- maintenance
capability:
exposes:
- type: mcp
namespace: manufacturing-ops
port: 8080
tools:
- name: execute-workflow
description: "SAP Plant Maintenance Work Order Create - 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://clorox-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://clorox.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 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://clorox-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 production variance.
naftiko: "0.5"
info:
label: "SAP Production Variance Report"
description: "Posts production variance."
tags:
- manufacturing
- sap
- microsoft-teams
- production
capability:
exposes:
- type: mcp
namespace: manufacturing-ops
port: 8080
tools:
- name: execute-workflow
description: "SAP Production 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://clorox-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://clorox.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
Looks up a SAP S/4HANA purchase order by number, returning header status, vendor, total value, and open line items for procurement tracking.
naftiko: "0.5"
info:
label: "SAP Purchase Order Lookup"
description: "Looks up a SAP S/4HANA purchase order by number, returning header status, vendor, total value, and open line items for procurement tracking."
tags:
- finance
- procurement
- sap
- erp
capability:
exposes:
- type: mcp
namespace: erp
port: 8080
tools:
- name: get-purchase-order
description: "Look up a Clorox SAP S/4HANA purchase order by PO number. Returns status, vendor name, total amount, and currency. Use for procurement tracking or invoice reconciliation."
inputParameters:
- name: po_number
in: body
type: string
description: "The SAP purchase order number, e.g. 4500007890."
call: sap.get-po
with:
po_number: "{{po_number}}"
outputParameters:
- name: status
type: string
mapping: "$.d.OverallStatus"
- name: vendor
type: string
mapping: "$.d.Supplier.CompanyName"
- name: total_value
type: string
mapping: "$.d.TotalAmount"
- name: currency
type: string
mapping: "$.d.TransactionCurrency"
consumes:
- type: http
namespace: sap
baseUri: "https://clorox-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://clorox-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 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://clorox-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 supplier master data from SAP S/4HANA by vendor ID, returning payment terms, currency, and bank verification status for procurement and accounts payable use.
naftiko: "0.5"
info:
label: "SAP Vendor Master Data Lookup"
description: "Retrieves supplier master data from SAP S/4HANA by vendor ID, returning payment terms, currency, and bank verification status for procurement and accounts payable use."
tags:
- procurement
- sap
- vendor-management
- accounts-payable
capability:
exposes:
- type: mcp
namespace: vendor-mgmt
port: 8080
tools:
- name: get-vendor
description: "Look up a SAP supplier record by vendor ID. Returns company name, payment terms, currency, and bank verification status. Use for supplier onboarding checks or payment processing."
inputParameters:
- name: vendor_id
in: body
type: string
description: "The SAP vendor ID, e.g. 1000099."
call: sap.get-vendor
with:
vendor_id: "{{vendor_id}}"
outputParameters:
- name: company_name
type: string
mapping: "$.d.SupplierName"
- name: payment_terms
type: string
mapping: "$.d.PaymentTerms"
- name: currency
type: string
mapping: "$.d.Currency"
consumes:
- type: http
namespace: sap
baseUri: "https://clorox-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: suppliers
path: "/A_Supplier('{{vendor_id}}')"
inputParameters:
- name: vendor_id
in: path
operations:
- name: get-vendor
method: GET
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://clorox-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
Generates vendor scorecards.
naftiko: "0.5"
info:
label: "SAP Vendor Scorecard Generation"
description: "Generates vendor scorecards."
tags:
- procurement
- sap
- microsoft-teams
- supplier-management
capability:
exposes:
- type: mcp
namespace: procurement-ops
port: 8080
tools:
- name: execute-workflow
description: "SAP Vendor Scorecard Generation - 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://clorox-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://clorox.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
Triggers cycle counts.
naftiko: "0.5"
info:
label: "SAP Warehouse Inventory Cycle Count"
description: "Triggers cycle counts."
tags:
- supply-chain
- sap
- microsoft-teams
- inventory
capability:
exposes:
- type: mcp
namespace: supply-chain-ops
port: 8080
tools:
- name: execute-workflow
description: "SAP Warehouse Inventory Cycle Count - 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://clorox-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://clorox.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 a ServiceNow change request for a planned infrastructure or application change, routes it for approval, and notifies the requester via Teams.
naftiko: "0.5"
info:
label: "ServiceNow Change Request Management"
description: "Creates a ServiceNow change request for a planned infrastructure or application change, routes it for approval, and notifies the requester via Teams."
tags:
- itsm
- change-management
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: change-mgmt
port: 8080
tools:
- name: create-change-request
description: "Submit a ServiceNow change request for a planned infrastructure or application change and notify the requester via Teams upon submission. Use for CAB change management workflows."
inputParameters:
- name: description
in: body
type: string
description: "Description of the planned change."
- name: risk
in: body
type: string
description: "Risk level: low, medium, or high."
- name: planned_start
in: body
type: string
description: "Planned change start in ISO 8601 format."
- name: requester_upn
in: body
type: string
description: "UPN of the change requester."
steps:
- name: create-cr
type: call
call: servicenow.create-change
with:
description: "{{description}}"
risk: "{{risk}}"
start_date: "{{planned_start}}"
- name: notify-requester
type: call
call: msteams.send-message
with:
recipient_upn: "{{requester_upn}}"
text: "Your change request {{create-cr.number}} has been submitted and is pending CAB approval."
consumes:
- type: http
namespace: servicenow
baseUri: "https://clorox.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
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Retrieves a 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://clorox-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://clorox-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
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://clorox-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.
naftiko: "0.5"
info:
label: "ServiceNow Major Incident Bridge"
description: "Creates Teams bridge for P1."
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://clorox-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://clorox.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 problem investigation.
naftiko: "0.5"
info:
label: "ServiceNow Problem Management Workflow"
description: "Creates Jira tickets for problem investigation."
tags:
- it-ops
- servicenow
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: it-ops-ops
port: 8080
tools:
- name: execute-workflow
description: "ServiceNow Problem Management 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://clorox-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://clorox.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://clorox-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://clorox.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://clorox-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
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://clorox-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://clorox.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 compensation change for an employee in Workday and notifies the manager via Teams to complete the approval in Workday.
naftiko: "0.5"
info:
label: "Workday Compensation Change Submission"
description: "Submits a compensation change for an employee in Workday and notifies the manager via Teams to complete the approval in Workday."
tags:
- hr
- compensation
- workday
- microsoft-teams
- approval
capability:
exposes:
- type: mcp
namespace: hr-comp
port: 8080
tools:
- name: submit-comp-change
description: "Given a Workday employee ID, new salary, and effective date, submit a compensation change in Workday and notify the manager via Teams to approve. Use for merit increase and promotion workflows."
inputParameters:
- name: employee_id
in: body
type: string
description: "Workday worker ID of the employee receiving the compensation change."
- name: new_salary
in: body
type: number
description: "New base salary amount in the employee's home currency."
- name: effective_date
in: body
type: string
description: "Effective date for the compensation change in ISO 8601 format."
steps:
- name: get-worker
type: call
call: workday.get-worker
with:
worker_id: "{{employee_id}}"
- name: submit-change
type: call
call: workday.submit-comp-change
with:
worker_id: "{{employee_id}}"
new_salary: "{{new_salary}}"
effective_date: "{{effective_date}}"
- name: notify-manager
type: call
call: msteams.send-message
with:
recipient_upn: "{{get-worker.manager_email}}"
text: "Compensation change for {{get-worker.full_name}} (effective {{effective_date}}) is pending your approval in Workday."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/clorox/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- name: submit-comp-change
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Updates access on transfers.
naftiko: "0.5"
info:
label: "Workday Employee Transfer Provisioning"
description: "Updates access on 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://clorox-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://clorox.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 monthly headcount planning summary.
naftiko: "0.5"
info:
label: "Workday Headcount Planning Digest"
description: "Posts monthly headcount planning summary."
tags:
- hr
- workday
- microsoft-teams
- workforce-planning
capability:
exposes:
- type: mcp
namespace: hr-ops
port: 8080
tools:
- name: execute-workflow
description: "Workday Headcount Planning 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://clorox-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://clorox.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://clorox-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://clorox.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://clorox-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 Tracker"
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 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://clorox-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://clorox.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 IT equipment requests.
naftiko: "0.5"
info:
label: "Workday New Hire Equipment Provisioning"
description: "Creates IT equipment requests."
tags:
- hr
- workday
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-ops
port: 8080
tools:
- name: execute-workflow
description: "Workday New Hire Equipment 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://clorox-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://clorox.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 all open job requisitions from Workday and posts a weekly recruiting digest to the HR Microsoft Teams channel for staffing review.
naftiko: "0.5"
info:
label: "Workday Open Requisition Weekly Digest"
description: "Retrieves all open job requisitions from Workday and posts a weekly recruiting digest to the HR Microsoft Teams channel for staffing review."
tags:
- hr
- recruiting
- workday
- microsoft-teams
- reporting
capability:
exposes:
- type: mcp
namespace: hr-recruiting
port: 8080
tools:
- name: digest-open-requisitions
description: "Fetch all open Workday job requisitions and post a weekly digest to the HR Teams channel. Use for weekly recruiting pipeline review."
steps:
- name: get-reqs
type: call
call: workday.list-job-requisitions
with:
status: "Open"
- name: post-digest
type: call
call: msteams.send-message
with:
channel_id: "$secrets.teams_hr_channel_id"
text: "Weekly Open Requisitions: {{get-reqs.total_count}} open roles across Clorox."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: job-requisitions
path: "/clorox/jobRequisitions"
inputParameters:
- name: status
in: query
operations:
- name: list-job-requisitions
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-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://clorox-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 a performance review event in Workday for a review period and notifies managers via Teams to complete evaluations by the deadline.
naftiko: "0.5"
info:
label: "Workday Performance Review Cycle Kickoff"
description: "Creates a performance review event in Workday for a review period and notifies managers via Teams to complete evaluations by the deadline."
tags:
- hr
- performance-management
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-performance
port: 8080
tools:
- name: kickoff-review-cycle
description: "Launch a Workday performance review cycle for a defined review period and notify managers via Teams to complete evaluations by the due date."
inputParameters:
- name: review_period
in: body
type: string
description: "Review period label, e.g. 2026-Annual."
- name: due_date
in: body
type: string
description: "Evaluation completion deadline in ISO 8601 format."
steps:
- name: create-review-event
type: call
call: workday.create-review-event
with:
period: "{{review_period}}"
due_date: "{{due_date}}"
- name: notify-managers
type: call
call: msteams.send-message
with:
channel_id: "$secrets.teams_hr_channel_id"
text: "Performance review cycle {{review_period}} is now open. Complete all evaluations by {{due_date}} in Workday."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: review-events
path: "/clorox/performanceReviews"
operations:
- name: create-review-event
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Sends review reminders.
naftiko: "0.5"
info:
label: "Workday Performance Review Reminder"
description: "Sends review reminders."
tags:
- hr
- workday
- microsoft-teams
- performance-management
capability:
exposes:
- type: mcp
namespace: hr-ops
port: 8080
tools:
- name: execute-workflow
description: "Workday Performance Review 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://clorox-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://clorox.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
Revokes access on termination.
naftiko: "0.5"
info:
label: "Workday Termination Access Revocation"
description: "Revokes access on termination."
tags:
- hr
- security
- workday
- servicenow
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://clorox-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://clorox.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
Deactivates building badges on termination.
naftiko: "0.5"
info:
label: "Workday Termination Badge Deactivation"
description: "Deactivates building badges on termination."
tags:
- hr
- security
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-ops
port: 8080
tools:
- name: execute-workflow
description: "Workday Termination Badge Deactivation - 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://clorox-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://clorox.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