Kimberly-Clark Capabilities
Naftiko 0.5 capability definitions for Kimberly-Clark - 100 capabilities showing integration workflows and service orchestrations.
Uses Anthropic Claude to summarize supplier contracts retrieved from SharePoint and stores the structured summary back in SharePoint alongside the original document.
naftiko: "0.5"
info:
label: "AI-Assisted Contract Summarization"
description: "Uses Anthropic Claude to summarize supplier contracts retrieved from SharePoint and stores the structured summary back in SharePoint alongside the original document."
tags:
- ai
- procurement
- anthropic
- sharepoint
- document-management
capability:
exposes:
- type: mcp
namespace: ai-contracts
port: 8080
tools:
- name: summarize-contract
description: "Given a SharePoint document URL for a supplier contract, retrieve the document content, send it to Anthropic Claude for structured summarization (key terms, obligations, renewal dates), and write the summary back to SharePoint. Use for contract review and obligation tracking."
inputParameters:
- name: document_url
in: body
type: string
description: "The SharePoint document URL for the contract to summarize."
- name: site_id
in: body
type: string
description: "The SharePoint site ID where the document is stored."
steps:
- name: get-document
type: call
call: sharepoint.get-document
with:
site_id: "{{site_id}}"
document_url: "{{document_url}}"
- name: summarize
type: call
call: anthropic.create-message
with:
model: "claude-opus-4-5"
content: "Summarize this supplier contract, extracting: key obligations, payment terms, renewal date, and termination clauses. Document: {{get-document.content}}"
- name: write-summary
type: call
call: sharepoint.create-file
with:
site_id: "{{site_id}}"
filename: "contract-summary.md"
content: "{{summarize.text}}"
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: documents
path: "/sites/{{site_id}}/drive/root/children"
inputParameters:
- name: site_id
in: path
operations:
- name: get-document
method: GET
- name: create-file
method: PUT
- type: http
namespace: anthropic
baseUri: "https://api.anthropic.com/v1"
authentication:
type: apikey
key: "x-api-key"
value: "$secrets.anthropic_api_key"
placement: header
resources:
- name: messages
path: "/messages"
operations:
- name: create-message
method: POST
Checks Azure AD group memberships for a user to validate access rights.
naftiko: "0.5"
info:
label: "Azure AD User Group Membership Check"
description: "Checks Azure AD group memberships for a user to validate access rights."
tags:
- security
- identity
- azure-active-directory
- access
capability:
exposes:
- type: mcp
namespace: identity
port: 8080
tools:
- name: check-groups
description: "List Azure AD group memberships for access validation."
inputParameters:
- name: user_upn
type: string
description: "User principal name."
call: azuread.get-member-of
with:
upn: "{{user_upn}}"
outputParameters:
- name: groups
type: string
mapping: "$.value"
consumes:
- type: http
namespace: azuread
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: member-of
path: "/users/memberOf"
operations:
- name: get-member-of
method: GET
Monitors Azure cost management for spend anomalies and, when detected, creates a ServiceNow incident and posts an alert to the cloud FinOps Teams channel.
naftiko: "0.5"
info:
label: "Azure Cloud Cost Anomaly Alert"
description: "Monitors Azure cost management for spend anomalies and, when detected, creates a ServiceNow incident and posts an alert to the cloud FinOps Teams channel."
tags:
- cloud
- finops
- cost-management
- azure
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: cloud-finops
port: 8080
tools:
- name: handle-cost-anomaly
description: "Given an Azure subscription ID and anomaly detection period, retrieve cost anomalies from Azure Cost Management, open a ServiceNow ticket, and post an alert to the FinOps Teams channel. Invoke on scheduled cost monitoring runs."
inputParameters:
- name: subscription_id
in: body
type: string
description: "The Azure subscription ID to check for cost anomalies."
- name: period_days
in: body
type: integer
description: "Number of days to analyze for anomalies, e.g. 7."
steps:
- name: get-anomalies
type: call
call: azure-cost.get-anomalies
with:
subscription_id: "{{subscription_id}}"
period_days: "{{period_days}}"
- name: create-ticket
type: call
call: servicenow.create-incident
with:
short_description: "Azure cost anomaly detected in subscription {{subscription_id}}"
category: "cloud_cost"
priority: "3"
- name: post-alert
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_finops_channel_id"
text: "Cost Anomaly Alert: Azure subscription {{subscription_id}} exceeded expected spend. SNOW: {{create-ticket.number}}"
consumes:
- type: http
namespace: azure-cost
baseUri: "https://management.azure.com"
authentication:
type: bearer
token: "$secrets.azure_token"
resources:
- name: anomalies
path: "/subscriptions/{{subscription_id}}/providers/Microsoft.CostManagement/anomalies"
inputParameters:
- name: subscription_id
in: path
operations:
- name: get-anomalies
method: GET
- type: http
namespace: servicenow
baseUri: "https://kimberly-clark.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_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: post-channel-message
method: POST
Handles releases by checking Azure DevOps pipeline, ServiceNow change, and notifying Teams.
naftiko: "0.5"
info:
label: "Azure DevOps Release Approval Handler"
description: "Handles releases by checking Azure DevOps pipeline, ServiceNow change, and notifying Teams."
tags:
- operations
- devops
- azure-devops
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: release-mgmt
port: 8080
tools:
- name: handle-release
description: "Handle release approval."
inputParameters:
- name: pipeline_id
type: string
description: "Pipeline ID."
- name: change_request
type: string
description: "Change request."
steps:
- name: get-pipeline
type: call
call: azuredevops.get-run
with:
pipeline_id: "{{pipeline_id}}"
- name: validate
type: call
call: servicenow.get-change
with:
number: "{{change_request}}"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "releases"
text: "Release: Pipeline {{pipeline_id}} ({{get-pipeline.status}})"
consumes:
- type: http
namespace: azuredevops
baseUri: "https://dev.azure.com/kimberlyclark"
authentication:
type: bearer
token: "$secrets.azure_devops_token"
resources:
- name: pipelines
path: "/_apis/pipelines"
operations:
- name: get-run
method: GET
- type: http
namespace: servicenow
baseUri: "https://kimberlyclark.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: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Monitors brand sentiment from Snowflake, creates Salesforce cases, and alerts brand management via Teams.
naftiko: "0.5"
info:
label: "Brand Sentiment Monitoring Responder"
description: "Monitors brand sentiment from Snowflake, creates Salesforce cases, and alerts brand management via Teams."
tags:
- marketing
- social
- snowflake
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: brand-monitoring
port: 8080
tools:
- name: respond-sentiment
description: "Monitor brand sentiment and respond to negative trends."
inputParameters:
- name: brand_name
type: string
description: "Brand name."
- name: threshold
type: number
description: "Negative threshold pct."
steps:
- name: get-sentiment
type: call
call: snowflake.execute-query
with:
warehouse: "SOCIAL_WH"
query: "SELECT negative_pct FROM sentiment WHERE brand='{{brand_name}}'"
- name: create-case
type: call
call: salesforce.create-case
with:
Subject: "Sentiment alert: {{brand_name}}"
- name: alert
type: call
call: msteams.send-message
with:
channel_id: "brand-mgmt"
text: "SENTIMENT: {{brand_name}} negative at {{get-sentiment.negative_pct}}%"
consumes:
- type: http
namespace: snowflake
baseUri: "https://kimberlyclark.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: salesforce
baseUri: "https://kimberlyclark.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: sobjects
path: "/sobjects"
operations:
- name: query
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Polls the Meta Graph API for Kimberly-Clark brand mentions across Facebook and Instagram, and posts significant engagement spikes or negative sentiment to the brand team Teams channel.
naftiko: "0.5"
info:
label: "Brand Social Media Monitoring Alert"
description: "Polls the Meta Graph API for Kimberly-Clark brand mentions across Facebook and Instagram, and posts significant engagement spikes or negative sentiment to the brand team Teams channel."
tags:
- marketing
- social
- meta
- microsoft-teams
- brand-monitoring
capability:
exposes:
- type: mcp
namespace: brand-monitoring
port: 8080
tools:
- name: monitor-social-mentions
description: "Retrieve recent brand mentions from Meta Graph API for Kimberly-Clark brand pages. If engagement volume exceeds threshold, post an alert to the brand Teams channel. Use for real-time brand reputation monitoring."
inputParameters:
- name: page_id
in: body
type: string
description: "The Meta Facebook page ID for the Kimberly-Clark brand to monitor."
- name: hours_back
in: body
type: integer
description: "Number of hours to look back for mentions and engagements."
steps:
- name: get-mentions
type: call
call: meta.get-page-insights
with:
page_id: "{{page_id}}"
hours_back: "{{hours_back}}"
- name: post-alert
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_brand_channel_id"
text: "Social Monitor Alert: {{get-mentions.total_impressions}} impressions in last {{hours_back}}h on page {{page_id}}."
consumes:
- type: http
namespace: meta
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.meta_page_token"
resources:
- name: page-insights
path: "/{{page_id}}/insights"
inputParameters:
- name: page_id
in: path
operations:
- name: get-page-insights
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: post-channel-message
method: POST
Compiles competitive intelligence from Snowflake Circana data, updates Salesforce, and posts digest to Teams.
naftiko: "0.5"
info:
label: "Competitive Market Intelligence Digest"
description: "Compiles competitive intelligence from Snowflake Circana data, updates Salesforce, and posts digest to Teams."
tags:
- marketing
- analytics
- snowflake
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: market-intelligence
port: 8080
tools:
- name: generate-digest
description: "Generate competitive market intelligence digest."
inputParameters:
- name: category
type: string
description: "Product category."
- name: period
type: string
description: "Period."
steps:
- name: get-data
type: call
call: snowflake.execute-query
with:
warehouse: "MARKET_WH"
query: "SELECT brand, share FROM circana WHERE category='{{category}}'"
- name: update-sf
type: call
call: salesforce.update-report
with:
category: "{{category}}"
- name: post
type: call
call: msteams.send-message
with:
channel_id: "market-intel"
text: "Market digest for {{category}} ready"
consumes:
- type: http
namespace: snowflake
baseUri: "https://kimberlyclark.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: salesforce
baseUri: "https://kimberlyclark.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: sobjects
path: "/sobjects"
operations:
- name: query
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Analyzes consumer reviews from Snowflake, creates Jira tasks, and posts summary to Teams.
naftiko: "0.5"
info:
label: "Consumer Review Analysis Pipeline"
description: "Analyzes consumer reviews from Snowflake, creates Jira tasks, and posts summary to Teams."
tags:
- marketing
- quality
- snowflake
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: consumer-insights
port: 8080
tools:
- name: analyze-reviews
description: "Analyze consumer reviews for complaint trends."
inputParameters:
- name: product_line
type: string
description: "Product line."
- name: period_days
type: number
description: "Lookback days."
steps:
- name: get-reviews
type: call
call: snowflake.execute-query
with:
warehouse: "CONSUMER_WH"
query: "SELECT topic, count FROM reviews WHERE product='{{product_line}}'"
- name: create-task
type: call
call: jira.create-issue
with:
project_key: "PROD"
summary: "Reviews: {{product_line}}"
- name: post
type: call
call: msteams.send-message
with:
channel_id: "insights"
text: "Review analysis for {{product_line}} complete"
consumes:
- type: http
namespace: snowflake
baseUri: "https://kimberlyclark.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: jira
baseUri: "https://kimberlyclark.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Initiates CM audit from Ariba supplier data, Jira tasks, and SharePoint checklists.
naftiko: "0.5"
info:
label: "Contract Manufacturer Quality Audit"
description: "Initiates CM audit from Ariba supplier data, Jira tasks, and SharePoint checklists."
tags:
- quality
- procurement
- sap
- jira
- sharepoint
capability:
exposes:
- type: mcp
namespace: quality-audit
port: 8080
tools:
- name: initiate-audit
description: "Start contract manufacturer quality audit."
inputParameters:
- name: supplier_id
type: string
description: "Supplier ID."
- name: audit_type
type: string
description: "Audit type."
steps:
- name: get-supplier
type: call
call: ariba.get-supplier
with:
supplier_id: "{{supplier_id}}"
- name: create-task
type: call
call: jira.create-issue
with:
project_key: "QAUDIT"
summary: "CM Audit: {{get-supplier.name}}"
- name: share-checklist
type: call
call: sharepoint.copy-template
with:
template: "audit-{{audit_type}}"
destination: "audits/{{supplier_id}}"
consumes:
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/supplier-management/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: suppliers
path: "/suppliers"
operations:
- name: get-supplier
method: GET
- type: http
namespace: jira
baseUri: "https://kimberlyclark.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/sites/drive/items"
operations:
- name: search-docs
method: GET
Handles contractor expiry by checking Okta, Workday dates, and creating ServiceNow tasks.
naftiko: "0.5"
info:
label: "Contractor Access Expiry Handler"
description: "Handles contractor expiry by checking Okta, Workday dates, and creating ServiceNow tasks."
tags:
- security
- identity
- okta
- workday
- servicenow
capability:
exposes:
- type: mcp
namespace: access-lifecycle
port: 8080
tools:
- name: handle-expiry
description: "Handle contractor access expiry."
inputParameters:
- name: contractor_email
type: string
description: "Contractor email."
steps:
- name: get-okta
type: call
call: okta.get-user
with:
email: "{{contractor_email}}"
- name: check-wd
type: call
call: workday.get-worker
with:
email: "{{contractor_email}}"
- name: create-task
type: call
call: servicenow.create-incident
with:
short_description: "Expiry: {{contractor_email}}"
consumes:
- type: http
namespace: okta
baseUri: "https://kimberlyclark.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_api_token"
resources:
- name: users
path: "/users"
operations:
- name: get-user
method: GET
- 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: "/kimberlyclark/workers"
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://kimberlyclark.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
Routes complaints to quality by tracing batch in SAP, creating Jira investigation, and updating ServiceNow.
naftiko: "0.5"
info:
label: "Customer Complaint Quality Investigation"
description: "Routes complaints to quality by tracing batch in SAP, creating Jira investigation, and updating ServiceNow."
tags:
- quality
- customer-service
- sap
- jira
- servicenow
capability:
exposes:
- type: mcp
namespace: complaint-quality
port: 8080
tools:
- name: route-complaint
description: "Route customer complaint to quality investigation."
inputParameters:
- name: ticket_id
type: string
description: "ServiceNow ticket."
- name: batch_number
type: string
description: "Batch number."
- name: material_number
type: string
description: "Material number."
steps:
- name: trace
type: call
call: sap.get-batch
with:
batch: "{{batch_number}}"
material: "{{material_number}}"
- name: create-inv
type: call
call: jira.create-issue
with:
project_key: "QUAL"
summary: "Complaint: batch {{batch_number}}"
- name: update
type: call
call: servicenow.update-incident
with:
number: "{{ticket_id}}"
comment: "Investigation: {{create-inv.key}}"
consumes:
- type: http
namespace: sap
baseUri: "https://kimberlyclark-s4.sap.com/sap/opu/odata/sap/API_BATCH_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-batch
method: GET
- type: http
namespace: jira
baseUri: "https://kimberlyclark.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: servicenow
baseUri: "https://kimberlyclark.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
Analyzes returns from SAP, Snowflake quality data, and creates Jira improvement tasks.
naftiko: "0.5"
info:
label: "Customer Returns Analysis"
description: "Analyzes returns from SAP, Snowflake quality data, and creates Jira improvement tasks."
tags:
- quality
- sales
- sap
- snowflake
- jira
capability:
exposes:
- type: mcp
namespace: returns-analytics
port: 8080
tools:
- name: analyze-returns
description: "Analyze customer return patterns."
inputParameters:
- name: material_number
type: string
description: "Material."
- name: period
type: string
description: "Period."
steps:
- name: get-returns
type: call
call: sap.get-returns
with:
material: "{{material_number}}"
- name: get-quality
type: call
call: snowflake.execute-query
with:
warehouse: "QUALITY_WH"
query: "SELECT reason FROM returns WHERE material='{{material_number}}'"
- name: create-task
type: call
call: jira.create-issue
with:
project_key: "QUAL"
summary: "Returns: {{material_number}}"
consumes:
- type: http
namespace: sap
baseUri: "https://kimberlyclark-s4.sap.com/sap/opu/odata/sap/API_RETURNS_DELIVERY_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-returns
method: GET
- type: http
namespace: snowflake
baseUri: "https://kimberlyclark.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: jira
baseUri: "https://kimberlyclark.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
When Datadog detects a production anomaly alert, creates a ServiceNow incident, assigns the on-call engineer, and posts a triage message to the ops Teams channel.
naftiko: "0.5"
info:
label: "Datadog Production Anomaly Response"
description: "When Datadog detects a production anomaly alert, creates a ServiceNow incident, assigns the on-call engineer, and posts a triage message to the ops Teams channel."
tags:
- observability
- monitoring
- datadog
- servicenow
- microsoft-teams
- incident-response
capability:
exposes:
- type: mcp
namespace: observability-ops
port: 8080
tools:
- name: handle-datadog-anomaly
description: "Given a Datadog alert ID and monitor name, retrieve alert details, create a ServiceNow incident, and post a triage message to the operations Teams channel. Invoke when Datadog fires a production anomaly alert."
inputParameters:
- name: alert_id
in: body
type: string
description: "The Datadog alert or event ID."
- name: monitor_name
in: body
type: string
description: "The name of the Datadog monitor that fired."
steps:
- name: get-alert
type: call
call: datadog.get-alert
with:
alert_id: "{{alert_id}}"
- name: create-incident
type: call
call: servicenow.create-incident
with:
short_description: "Datadog anomaly: {{monitor_name}}"
category: "production_monitoring"
priority: "2"
- name: post-triage
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_it_ops_channel_id"
text: "Datadog anomaly detected: {{monitor_name}} | SNOW: {{create-incident.number}} | Alert: {{alert_id}}"
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: events
path: "/events/{{alert_id}}"
inputParameters:
- name: alert_id
in: path
operations:
- name: get-alert
method: GET
- type: http
namespace: servicenow
baseUri: "https://kimberly-clark.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_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: post-channel-message
method: POST
Checks production service health in Datadog including error rate, latency, and uptime.
naftiko: "0.5"
info:
label: "Datadog Service Health Check"
description: "Checks production service health in Datadog including error rate, latency, and uptime."
tags:
- operations
- monitoring
- datadog
- performance
capability:
exposes:
- type: mcp
namespace: observability
port: 8080
tools:
- name: check-service-health
description: "Check Datadog for service health metrics."
inputParameters:
- name: service_name
type: string
description: "Datadog service name."
- name: time_from
type: string
description: "Start timestamp."
call: datadog.query-metrics
with:
query: "avg:trace.errors{service:{{service_name}}}"
from: "{{time_from}}"
outputParameters:
- name: error_rate
type: string
mapping: "$.series[0].pointlist[0][1]"
- name: latency
type: string
mapping: "$.series[1].pointlist[0][1]"
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: events
path: "/events"
operations:
- name: create-event
method: POST
Syncs demand forecasts from Snowflake with SAP inventory and creates planned production orders.
naftiko: "0.5"
info:
label: "Demand Forecast to Production Sync"
description: "Syncs demand forecasts from Snowflake with SAP inventory and creates planned production orders."
tags:
- supply-chain
- manufacturing
- snowflake
- sap
- planning
capability:
exposes:
- type: mcp
namespace: demand-planning
port: 8080
tools:
- name: sync-demand
description: "Synchronize demand forecasts with production planning."
inputParameters:
- name: category
type: string
description: "Product category."
- name: plant_code
type: string
description: "Plant code."
- name: weeks
type: number
description: "Planning weeks."
steps:
- name: get-forecast
type: call
call: snowflake.execute-query
with:
warehouse: "DEMAND_WH"
query: "SELECT sku, units FROM forecast WHERE category='{{category}}'"
- name: check-stock
type: call
call: sap.get-stock
with:
plant: "{{plant_code}}"
category: "{{category}}"
- name: create-orders
type: call
call: sap.create-planned-order
with:
plant: "{{plant_code}}"
data: "{{get-forecast.data}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://kimberlyclark.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: sap
baseUri: "https://kimberlyclark-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-stock
method: GET
- name: create-planned-order
method: POST
Monitors e-commerce pricing from Snowflake, flags MAP violations, creates Salesforce cases, alerts Teams.
naftiko: "0.5"
info:
label: "Digital Shelf Price Monitor"
description: "Monitors e-commerce pricing from Snowflake, flags MAP violations, creates Salesforce cases, alerts Teams."
tags:
- ecommerce
- sales
- snowflake
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pricing-ops
port: 8080
tools:
- name: monitor-pricing
description: "Monitor digital shelf pricing for MAP violations."
inputParameters:
- name: brand
type: string
description: "Brand name."
- name: marketplace
type: string
description: "Marketplace."
steps:
- name: get-prices
type: call
call: snowflake.execute-query
with:
warehouse: "ECOM_WH"
query: "SELECT sku, price FROM shelf WHERE brand='{{brand}}'"
- name: create-case
type: call
call: salesforce.create-case
with:
Subject: "MAP violation: {{brand}} on {{marketplace}}"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "pricing"
text: "MAP alert: {{brand}} on {{marketplace}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://kimberlyclark.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: salesforce
baseUri: "https://kimberlyclark.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: sobjects
path: "/sobjects"
operations:
- name: query
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Tracks fulfillment from Salesforce order, SAP picking, and updates ServiceNow customer ticket.
naftiko: "0.5"
info:
label: "E-commerce Order Fulfillment Tracker"
description: "Tracks fulfillment from Salesforce order, SAP picking, and updates ServiceNow customer ticket."
tags:
- ecommerce
- supply-chain
- salesforce
- sap
- servicenow
capability:
exposes:
- type: mcp
namespace: ecom-fulfillment
port: 8080
tools:
- name: track-fulfillment
description: "Track e-commerce order fulfillment."
inputParameters:
- name: order_id
type: string
description: "Salesforce order ID."
- name: ticket_id
type: string
description: "ServiceNow ticket."
steps:
- name: get-order
type: call
call: salesforce.get-order
with:
order_id: "{{order_id}}"
- name: check-picking
type: call
call: sap.get-delivery
with:
order: "{{get-order.sap_order}}"
- name: update-ticket
type: call
call: servicenow.update-incident
with:
number: "{{ticket_id}}"
comment: "Status: {{get-order.status}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://kimberlyclark.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: sobjects
path: "/sobjects"
operations:
- name: query
method: GET
- type: http
namespace: sap
baseUri: "https://kimberlyclark-s4.sap.com/sap/opu/odata/sap/API_OUTBOUND_DELIVERY_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-delivery
method: GET
- type: http
namespace: servicenow
baseUri: "https://kimberlyclark.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
Generates learning paths from Workday skills, matches with training, and creates Jira development plans.
naftiko: "0.5"
info:
label: "Employee Learning Path Generator"
description: "Generates learning paths from Workday skills, matches with training, and creates Jira development plans."
tags:
- hr
- training
- workday
- jira
capability:
exposes:
- type: mcp
namespace: hr-learning
port: 8080
tools:
- name: generate-path
description: "Create personalized learning path."
inputParameters:
- name: employee_id
type: string
description: "Employee ID."
- name: target_role
type: string
description: "Target role."
steps:
- name: get-skills
type: call
call: workday.get-skills
with:
worker_id: "{{employee_id}}"
- name: create-plan
type: call
call: jira.create-issue
with:
project_key: "LEARN"
summary: "Learning: {{target_role}} for {{employee_id}}"
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: "/kimberlyclark/workers"
operations:
- name: get-worker
method: GET
- type: http
namespace: jira
baseUri: "https://kimberlyclark.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
When an employee termination is recorded in Workday, disables their Microsoft 365 account, revokes Okta sessions, and closes all open ServiceNow tickets assigned to them.
naftiko: "0.5"
info:
label: "Employee Offboarding Workflow"
description: "When an employee termination is recorded in Workday, disables their Microsoft 365 account, revokes Okta sessions, and closes all open ServiceNow tickets assigned to them."
tags:
- hr
- offboarding
- workday
- okta
- servicenow
- microsoft-365
capability:
exposes:
- type: mcp
namespace: hr-offboarding
port: 8080
tools:
- name: trigger-offboarding
description: "Given a Workday employee ID for a terminating employee, disable Microsoft 365 access, revoke all Okta sessions, and close their open ServiceNow tickets. Invoke on confirmed termination events."
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 employee's last day in YYYY-MM-DD format."
steps:
- name: get-worker
type: call
call: workday.get-worker
with:
worker_id: "{{employee_id}}"
- name: disable-m365
type: call
call: msgraph.disable-user
with:
user_id: "{{get-worker.work_email}}"
- name: revoke-okta-sessions
type: call
call: okta.clear-user-sessions
with:
user_id: "{{get-worker.work_email}}"
- name: close-snow-tickets
type: call
call: servicenow.close-user-tickets
with:
assigned_to: "{{get-worker.work_email}}"
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: "/kimberly-clark/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: msgraph
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: users
path: "/users/{{user_id}}"
inputParameters:
- name: user_id
in: path
operations:
- name: disable-user
method: PATCH
- type: http
namespace: okta
baseUri: "https://kimberly-clark.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: user-sessions
path: "/users/{{user_id}}/sessions"
inputParameters:
- name: user_id
in: path
operations:
- name: clear-user-sessions
method: DELETE
- type: http
namespace: servicenow
baseUri: "https://kimberly-clark.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: close-user-tickets
method: PATCH
On a GitHub Actions workflow failure in a protected branch, opens a Jira bug ticket and posts an alert to the engineering Microsoft Teams channel.
naftiko: "0.5"
info:
label: "GitHub CI/CD Pipeline Failure Handler"
description: "On a GitHub Actions workflow failure in a protected branch, opens a Jira bug ticket and posts an alert to the engineering Microsoft Teams channel."
tags:
- devops
- cicd
- github
- jira
- microsoft-teams
- incident-response
capability:
exposes:
- type: mcp
namespace: devops
port: 8080
tools:
- name: handle-pipeline-failure
description: "Given a GitHub Actions workflow run ID and repository that has failed on a protected branch, create a Jira bug and alert the engineering Teams channel. Invoke when a CI/CD pipeline fails on main or release branches."
inputParameters:
- name: repo_name
in: body
type: string
description: "The GitHub repository name in owner/repo format."
- name: workflow_run_id
in: body
type: string
description: "The GitHub Actions workflow run ID that failed."
- name: branch
in: body
type: string
description: "The branch where the failure occurred."
steps:
- name: get-run-details
type: call
call: github.get-workflow-run
with:
repo: "{{repo_name}}"
run_id: "{{workflow_run_id}}"
- name: create-jira-bug
type: call
call: jira.create-issue
with:
project_key: "ENG"
issuetype: "Bug"
summary: "[CI Failure] {{repo_name}} / {{branch}} — Run {{workflow_run_id}}"
description: "GitHub Actions workflow failed. Run: {{workflow_run_id}} Branch: {{branch}}"
- name: post-alert
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_engineering_channel_id"
text: "CI Failure: {{repo_name}} | Branch: {{branch}} | Jira: {{create-jira-bug.key}} | Run: {{workflow_run_id}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: workflow-runs
path: "/repos/{{repo}}/actions/runs/{{run_id}}"
inputParameters:
- name: repo
in: path
- name: run_id
in: path
operations:
- name: get-workflow-run
method: GET
- type: http
namespace: jira
baseUri: "https://kimberly-clark.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Runs a security vulnerability scan summary across Kimberly-Clark's GitHub repositories using the GitHub Advanced Security API and creates Jira issues for critical findings.
naftiko: "0.5"
info:
label: "GitHub Repository Security Scan Summary"
description: "Runs a security vulnerability scan summary across Kimberly-Clark's GitHub repositories using the GitHub Advanced Security API and creates Jira issues for critical findings."
tags:
- security
- devops
- github
- jira
capability:
exposes:
- type: mcp
namespace: security-ops
port: 8080
tools:
- name: scan-repo-security
description: "Given a GitHub repository name, retrieve open code scanning alerts at critical or high severity from GitHub Advanced Security and create a Jira security issue for each critical finding. Use for weekly security posture reviews."
inputParameters:
- name: repo_name
in: body
type: string
description: "GitHub repository in owner/repo format to scan, e.g. kimberly-clark/digital-platform."
steps:
- name: get-alerts
type: call
call: github.get-code-scanning-alerts
with:
repo: "{{repo_name}}"
severity: "critical"
- name: create-jira-issue
type: call
call: jira.create-issue
with:
project_key: "SEC"
issuetype: "Security"
summary: "Critical security alerts in {{repo_name}}: {{get-alerts.count}} findings"
description: "GitHub Advanced Security found {{get-alerts.count}} critical vulnerabilities in {{repo_name}}."
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: code-scanning-alerts
path: "/repos/{{repo}}/code-scanning/alerts"
inputParameters:
- name: repo
in: path
operations:
- name: get-code-scanning-alerts
method: GET
- type: http
namespace: jira
baseUri: "https://kimberly-clark.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Retrieves web traffic metrics from Google Analytics for a brand website.
naftiko: "0.5"
info:
label: "Google Analytics Web Traffic Report"
description: "Retrieves web traffic metrics from Google Analytics for a brand website."
tags:
- marketing
- analytics
- google-analytics
- web
capability:
exposes:
- type: mcp
namespace: web-analytics
port: 8080
tools:
- name: get-traffic
description: "Fetch web traffic data from Google Analytics."
inputParameters:
- name: property_id
type: string
description: "GA4 property ID."
- name: date_from
type: string
description: "Start date."
- name: date_to
type: string
description: "End date."
call: ga.run-report
with:
property: "{{property_id}}"
startDate: "{{date_from}}"
outputParameters:
- name: sessions
type: string
mapping: "$.rows[0].metricValues[0].value"
- name: conversion_rate
type: string
mapping: "$.rows[0].metricValues[1].value"
consumes:
- type: http
namespace: ga
baseUri: "https://analyticsdata.googleapis.com/v1beta"
authentication:
type: bearer
token: "$secrets.google_analytics_token"
resources:
- name: reports
path: "/properties/runReport"
operations:
- name: run-report
method: POST
Retrieves current headcount grouped by department and cost center from Workday for finance planning and reporting.
naftiko: "0.5"
info:
label: "Headcount Snapshot by Cost Center"
description: "Retrieves current headcount grouped by department and cost center from Workday for finance planning and reporting."
tags:
- hr
- finance
- reporting
- workday
- headcount
capability:
exposes:
- type: mcp
namespace: hr-reporting
port: 8080
tools:
- name: get-headcount-snapshot
description: "Returns a list of active employees grouped by department and cost center from Workday. Use for headcount planning, capacity analysis, and quarterly finance reviews."
call: workday.get-headcount
outputParameters:
- name: employees
type: array
mapping: "$.data"
- name: total_count
type: number
mapping: "$.total"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: headcount
path: "/kimberly-clark/workers"
operations:
- name: get-headcount
method: GET
On a high-severity PagerDuty alert, creates a ServiceNow P1 incident, pages the on-call team, and posts a war-room message to the IT Teams channel.
naftiko: "0.5"
info:
label: "IT Incident Response Handler"
description: "On a high-severity PagerDuty alert, creates a ServiceNow P1 incident, pages the on-call team, and posts a war-room message to the IT Teams channel."
tags:
- itsm
- incident-response
- pagerduty
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: itsm-ops
port: 8080
tools:
- name: handle-p1-incident
description: "Given a PagerDuty alert ID for a critical production incident, create a P1 ServiceNow incident, trigger an on-call page, and post a war-room message to the IT Teams channel. Invoke when PagerDuty fires a critical-severity alert."
inputParameters:
- name: alert_id
in: body
type: string
description: "The PagerDuty alert ID for the critical incident."
- name: service_name
in: body
type: string
description: "The name of the affected service or system."
- name: alert_summary
in: body
type: string
description: "A brief description of the alert condition."
steps:
- name: create-snow-incident
type: call
call: servicenow.create-incident
with:
priority: "1"
short_description: "P1: {{alert_summary}} in {{service_name}}"
category: "production_outage"
- name: trigger-page
type: call
call: pagerduty.create-incident
with:
title: "P1 Incident: {{alert_summary}}"
service_id: "$secrets.pagerduty_it_service_id"
body_details: "ServiceNow: {{create-snow-incident.number}}"
- name: post-war-room
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_it_ops_channel_id"
text: "P1 INCIDENT OPEN: {{alert_summary}} | SNOW: {{create-snow-incident.number}} | PD: {{trigger-page.incident_key}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://kimberly-clark.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.pagerduty_api_key"
placement: header
resources:
- name: incidents
path: "/incidents"
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: post-channel-message
method: POST
Retrieves Jira project backlog summary with issue counts by priority and status.
naftiko: "0.5"
info:
label: "Jira Project Backlog Summary"
description: "Retrieves Jira project backlog summary with issue counts by priority and status."
tags:
- project-management
- operations
- jira
- reporting
capability:
exposes:
- type: mcp
namespace: project-ops
port: 8080
tools:
- name: get-backlog
description: "Get Jira project backlog summary."
inputParameters:
- name: project_key
type: string
description: "Jira project key."
call: jira.search-issues
with:
jql: "project={{project_key}} AND status!=Done"
outputParameters:
- name: total
type: string
mapping: "$.total"
- name: issues
type: string
mapping: "$.issues"
consumes:
- type: http
namespace: jira
baseUri: "https://kimberlyclark.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Aggregates sprint velocity and story point completion data from Jira across engineering teams and posts a weekly summary to the engineering leadership Teams channel.
naftiko: "0.5"
info:
label: "Jira Sprint Velocity Report"
description: "Aggregates sprint velocity and story point completion data from Jira across engineering teams and posts a weekly summary to the engineering leadership Teams channel."
tags:
- devops
- engineering
- jira
- reporting
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: engineering-reporting
port: 8080
tools:
- name: digest-sprint-velocity
description: "Given a Jira project key and sprint ID, retrieve velocity metrics (completed vs. committed story points) and post a summary to the engineering leadership Teams channel. Use for weekly engineering reviews."
inputParameters:
- name: project_key
in: body
type: string
description: "The Jira project key to report on, e.g. ENG."
- name: sprint_id
in: body
type: integer
description: "The Jira sprint ID to analyze."
steps:
- name: get-sprint-report
type: call
call: jira.get-sprint-report
with:
project_key: "{{project_key}}"
sprint_id: "{{sprint_id}}"
- name: post-summary
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_engineering_channel_id"
text: "Sprint {{sprint_id}} Velocity ({{project_key}}): {{get-sprint-report.completed_points}} / {{get-sprint-report.committed_points}} points completed."
consumes:
- type: http
namespace: jira
baseUri: "https://kimberly-clark.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: sprint-reports
path: "/board/{{sprint_id}}/sprint/{{sprint_id}}/report"
inputParameters:
- name: sprint_id
in: path
operations:
- name: get-sprint-report
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: post-channel-message
method: POST
Retrieves LinkedIn Campaign Manager performance metrics for Kimberly-Clark brand campaigns and posts a weekly summary to the social media Teams channel.
naftiko: "0.5"
info:
label: "LinkedIn Brand Campaign Performance"
description: "Retrieves LinkedIn Campaign Manager performance metrics for Kimberly-Clark brand campaigns and posts a weekly summary to the social media Teams channel."
tags:
- marketing
- social
- linkedin
- reporting
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: social-reporting
port: 8080
tools:
- name: digest-linkedin-performance
description: "Given a date range, retrieve LinkedIn campaign impressions, clicks, and engagement rates from LinkedIn Campaign Manager and post a performance summary to the social media Teams channel."
inputParameters:
- name: start_date
in: body
type: string
description: "Start date for the reporting period in YYYY-MM-DD format."
- name: end_date
in: body
type: string
description: "End date for the reporting period in YYYY-MM-DD format."
steps:
- name: get-campaign-stats
type: call
call: linkedin.get-campaign-analytics
with:
start_date: "{{start_date}}"
end_date: "{{end_date}}"
- name: post-digest
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_social_channel_id"
text: "LinkedIn Campaign Digest {{start_date}} - {{end_date}}: {{get-campaign-stats.summary}}"
consumes:
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: ad-analytics
path: "/adAnalytics"
operations:
- name: get-campaign-analytics
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: post-channel-message
method: POST
Enriches talent pipeline from Workday requisitions, LinkedIn data, and Jira sourcing tasks.
naftiko: "0.5"
info:
label: "LinkedIn Talent Pipeline Enrichment"
description: "Enriches talent pipeline from Workday requisitions, LinkedIn data, and Jira sourcing tasks."
tags:
- hr
- recruiting
- workday
- linkedin
- jira
capability:
exposes:
- type: mcp
namespace: talent-acquisition
port: 8080
tools:
- name: enrich-pipeline
description: "Enrich talent pipeline."
inputParameters:
- name: department
type: string
description: "Department."
steps:
- name: get-reqs
type: call
call: workday.get-positions
with:
department: "{{department}}"
- name: create-tasks
type: call
call: jira.create-issue
with:
project_key: "RECRUIT"
summary: "Sourcing: {{department}}"
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: "/kimberlyclark/workers"
operations:
- name: get-worker
method: GET
- type: http
namespace: jira
baseUri: "https://kimberlyclark.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Handles line downtime by creating ServiceNow incident, updating SAP status, and alerting operations via Teams.
naftiko: "0.5"
info:
label: "Manufacturing Line Downtime Handler"
description: "Handles line downtime by creating ServiceNow incident, updating SAP status, and alerting operations via Teams."
tags:
- manufacturing
- operations
- servicenow
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: mfg-ops
port: 8080
tools:
- name: handle-downtime
description: "Respond to manufacturing line downtime."
inputParameters:
- name: production_line
type: string
description: "Line ID."
- name: plant_code
type: string
description: "Plant code."
- name: reason
type: string
description: "Downtime reason."
steps:
- name: create-incident
type: call
call: servicenow.create-incident
with:
short_description: "Line down: {{production_line}}"
urgency: "1"
- name: update-sap
type: call
call: sap.update-status
with:
plant: "{{plant_code}}"
line: "{{production_line}}"
- name: alert-ops
type: call
call: msteams.send-message
with:
channel_id: "plant-ops"
text: "LINE DOWN: {{production_line}}. Reason: {{reason}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://kimberlyclark.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: sap
baseUri: "https://kimberlyclark-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: update-status
method: PATCH
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Coordinates launch by creating Salesforce campaign, Meta ads, and notifying marketing via Teams.
naftiko: "0.5"
info:
label: "Marketing Campaign Launch Coordinator"
description: "Coordinates launch by creating Salesforce campaign, Meta ads, and notifying marketing via Teams."
tags:
- marketing
- campaigns
- salesforce
- meta
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: campaign-ops
port: 8080
tools:
- name: launch-campaign
description: "Orchestrate marketing campaign launch."
inputParameters:
- name: campaign_name
type: string
description: "Campaign name."
- name: brand
type: string
description: "Brand."
- name: start_date
type: string
description: "Start date."
- name: budget
type: number
description: "Budget USD."
steps:
- name: create-campaign
type: call
call: salesforce.create-campaign
with:
Name: "{{campaign_name}}"
Brand: "{{brand}}"
- name: activate-ads
type: call
call: meta.activate
with:
name: "{{campaign_name}}"
status: "ACTIVE"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "marketing"
text: "Campaign '{{campaign_name}}' launched for {{brand}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://kimberlyclark.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: sobjects
path: "/sobjects"
operations:
- name: query
method: GET
- type: http
namespace: meta
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.meta_token"
resources:
- name: campaigns
path: "/campaigns"
operations:
- name: get-insights
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Aggregates campaign performance metrics from Adobe Analytics and publishes a weekly digest to the marketing Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Marketing Campaign Performance Digest"
description: "Aggregates campaign performance metrics from Adobe Analytics and publishes a weekly digest to the marketing Microsoft Teams channel."
tags:
- marketing
- analytics
- reporting
- adobe-analytics
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: marketing-reporting
port: 8080
tools:
- name: digest-campaign-performance
description: "Given a date range, pull campaign performance data from Adobe Analytics (impressions, clicks, conversions) and post a summary to the marketing Teams channel. Use for weekly brand performance reviews."
inputParameters:
- name: start_date
in: body
type: string
description: "Report start date in YYYY-MM-DD format."
- name: end_date
in: body
type: string
description: "Report end date in YYYY-MM-DD format."
steps:
- name: get-campaign-metrics
type: call
call: adobe-analytics.get-report
with:
start_date: "{{start_date}}"
end_date: "{{end_date}}"
- name: post-digest
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_marketing_channel_id"
text: "Campaign Performance {{start_date}} to {{end_date}}: {{get-campaign-metrics.summary}}"
consumes:
- type: http
namespace: adobe-analytics
baseUri: "https://analytics.adobe.io/api"
authentication:
type: bearer
token: "$secrets.adobe_analytics_token"
resources:
- name: reports
path: "/{{global_company_id}}/reports"
inputParameters:
- name: global_company_id
in: path
operations:
- name: get-report
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: post-channel-message
method: POST
Generates media mix reports from Snowflake, refreshes Power BI, and posts summary to Teams.
naftiko: "0.5"
info:
label: "Media Mix Optimization Report"
description: "Generates media mix reports from Snowflake, refreshes Power BI, and posts summary to Teams."
tags:
- marketing
- analytics
- snowflake
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: media-planning
port: 8080
tools:
- name: gen-media-report
description: "Generate media mix optimization report."
inputParameters:
- name: brand
type: string
description: "Brand."
- name: date_from
type: string
description: "Start."
- name: date_to
type: string
description: "End."
steps:
- name: get-data
type: call
call: snowflake.execute-query
with:
warehouse: "MARKETING_WH"
query: "SELECT channel, roas FROM media WHERE brand='{{brand}}'"
- name: refresh
type: call
call: powerbi.refresh-dataset
with:
datasetId: "media-mix"
- name: post
type: call
call: msteams.send-message
with:
channel_id: "media"
text: "Media report for {{brand}} ready"
consumes:
- type: http
namespace: snowflake
baseUri: "https://kimberlyclark.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets"
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: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Retrieves Meta Ads campaign performance metrics for a campaign and date range.
naftiko: "0.5"
info:
label: "Meta Ad Campaign Performance Lookup"
description: "Retrieves Meta Ads campaign performance metrics for a campaign and date range."
tags:
- marketing
- social
- meta
- reporting
capability:
exposes:
- type: mcp
namespace: social-ads
port: 8080
tools:
- name: get-campaign-insights
description: "Fetch Meta Ads campaign insights."
inputParameters:
- name: campaign_id
type: string
description: "Meta campaign ID."
- name: date_from
type: string
description: "Start date."
- name: date_to
type: string
description: "End date."
call: meta.get-insights
with:
campaign_id: "{{campaign_id}}"
since: "{{date_from}}"
outputParameters:
- name: impressions
type: string
mapping: "$.data[0].impressions"
- name: spend
type: string
mapping: "$.data[0].spend"
consumes:
- type: http
namespace: meta
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.meta_token"
resources:
- name: campaigns
path: "/campaigns"
operations:
- name: get-insights
method: GET
When a new hire is created in Workday, opens a ServiceNow onboarding ticket, provisions a Microsoft 365 account via Graph API, and sends a Teams welcome message.
naftiko: "0.5"
info:
label: "New Hire Onboarding Orchestrator"
description: "When a new hire is created in Workday, opens a ServiceNow onboarding ticket, provisions a Microsoft 365 account via Graph API, and sends a Teams welcome message."
tags:
- hr
- onboarding
- workday
- servicenow
- microsoft-teams
- microsoft-365
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. Invoke when a new hire record is confirmed in Workday."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday worker ID for the new hire."
- name: start_date
in: body
type: string
description: "The new hire's start date in YYYY-MM-DD format."
steps:
- name: get-worker
type: call
call: workday.get-worker
with:
worker_id: "{{employee_id}}"
- name: create-snow-ticket
type: call
call: servicenow.create-incident
with:
short_description: "New hire onboarding: {{get-worker.full_name}}"
category: "hr_onboarding"
assigned_group: "IT_Onboarding"
- name: provision-m365
type: call
call: msgraph.create-user
with:
displayName: "{{get-worker.full_name}}"
mailNickname: "{{get-worker.preferred_name}}"
userPrincipalName: "{{get-worker.work_email}}"
- name: send-welcome
type: call
call: msteams.send-message
with:
recipient_upn: "{{get-worker.work_email}}"
text: "Welcome to Kimberly-Clark, {{get-worker.first_name}}! Your IT ticket is {{create-snow-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: "/kimberly-clark/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://kimberly-clark.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_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: chat-messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Onboards new SKU by creating SAP material, Salesforce product, and notifying supply chain via Teams.
naftiko: "0.5"
info:
label: "New SKU Onboarding Workflow"
description: "Onboards new SKU by creating SAP material, Salesforce product, and notifying supply chain via Teams."
tags:
- supply-chain
- sales
- sap
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: sku-management
port: 8080
tools:
- name: onboard-sku
description: "Orchestrate new SKU onboarding."
inputParameters:
- name: sku_name
type: string
description: "Product name."
- name: category
type: string
description: "Category."
- name: unit_cost
type: number
description: "Unit cost."
steps:
- name: create-material
type: call
call: sap.create-material
with:
description: "{{sku_name}}"
group: "{{category}}"
- name: create-product
type: call
call: salesforce.create-product
with:
Name: "{{sku_name}}"
ProductCode: "{{create-material.number}}"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "supply-chain"
text: "New SKU: {{sku_name}} ({{create-material.number}})"
consumes:
- type: http
namespace: sap
baseUri: "https://kimberlyclark-s4.sap.com/sap/opu/odata/sap/API_PRODUCT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: create-material
method: POST
- type: http
namespace: salesforce
baseUri: "https://kimberlyclark.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: sobjects
path: "/sobjects"
operations:
- name: query
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
When an employee's role changes in Workday, updates their Okta group memberships and access profile to match the new role's permissions.
naftiko: "0.5"
info:
label: "Okta Access Provisioning for New Role"
description: "When an employee's role changes in Workday, updates their Okta group memberships and access profile to match the new role's permissions."
tags:
- identity
- security
- hr
- okta
- workday
- access-management
capability:
exposes:
- type: mcp
namespace: identity-ops
port: 8080
tools:
- name: sync-role-access
description: "Given a Workday employee ID and their new job profile, update the employee's Okta group memberships to match the new role's access entitlements. Invoke on role change events from Workday."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday worker ID of the employee whose role has changed."
- name: new_role
in: body
type: string
description: "The new job profile or role name as defined in Workday."
steps:
- name: get-worker
type: call
call: workday.get-worker
with:
worker_id: "{{employee_id}}"
- name: get-okta-user
type: call
call: okta.get-user
with:
login: "{{get-worker.work_email}}"
- name: update-groups
type: call
call: okta.update-user-groups
with:
user_id: "{{get-okta-user.id}}"
profile: "{{new_role}}"
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: "/kimberly-clark/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: okta
baseUri: "https://kimberly-clark.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: users
path: "/users/{{login}}"
inputParameters:
- name: login
in: path
operations:
- name: get-user
method: GET
- name: user-groups
path: "/users/{{user_id}}/groups"
inputParameters:
- name: user_id
in: path
operations:
- name: update-user-groups
method: POST
Audits privileged Okta accounts against Workday employment, creating ServiceNow review tasks.
naftiko: "0.5"
info:
label: "Okta Privileged Access Audit"
description: "Audits privileged Okta accounts against Workday employment, creating ServiceNow review tasks."
tags:
- security
- identity
- okta
- workday
- servicenow
capability:
exposes:
- type: mcp
namespace: security-audit
port: 8080
tools:
- name: audit-access
description: "Audit privileged access."
inputParameters:
- name: role_type
type: string
description: "Okta admin role type."
steps:
- name: get-admins
type: call
call: okta.list-admins
with:
role_type: "{{role_type}}"
- name: check-employment
type: call
call: workday.get-active
with:
emails: "{{get-admins.emails}}"
- name: create-review
type: call
call: servicenow.create-incident
with:
short_description: "Access audit: {{role_type}}"
consumes:
- type: http
namespace: okta
baseUri: "https://kimberlyclark.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_api_token"
resources:
- name: users
path: "/users"
operations:
- name: get-user
method: GET
- 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: "/kimberlyclark/workers"
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://kimberlyclark.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
Checks packaging sustainability from SAP BOM, Snowflake compliance data, and creates Jira tasks.
naftiko: "0.5"
info:
label: "Packaging Sustainability Compliance Check"
description: "Checks packaging sustainability from SAP BOM, Snowflake compliance data, and creates Jira tasks."
tags:
- sustainability
- quality
- sap
- snowflake
- jira
capability:
exposes:
- type: mcp
namespace: sustainability
port: 8080
tools:
- name: check-packaging
description: "Verify packaging sustainability compliance."
inputParameters:
- name: material_number
type: string
description: "Material number."
- name: plant_code
type: string
description: "Plant code."
steps:
- name: get-bom
type: call
call: sap.get-bom
with:
material: "{{material_number}}"
plant: "{{plant_code}}"
- name: check
type: call
call: snowflake.execute-query
with:
warehouse: "SUSTAINABILITY_WH"
query: "SELECT recyclable_pct FROM packaging WHERE material IN ({{get-bom.components}})"
- name: create-task
type: call
call: jira.create-issue
with:
project_key: "SUSTAIN"
summary: "Packaging: {{material_number}}"
consumes:
- type: http
namespace: sap
baseUri: "https://kimberlyclark-s4.sap.com/sap/opu/odata/sap/API_BILL_OF_MATERIAL_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-bom
method: GET
- type: http
namespace: snowflake
baseUri: "https://kimberlyclark.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: jira
baseUri: "https://kimberlyclark.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Monitors plant energy from Snowflake IoT data, creates ServiceNow tasks, and alerts via Teams.
naftiko: "0.5"
info:
label: "Plant Energy Consumption Monitor"
description: "Monitors plant energy from Snowflake IoT data, creates ServiceNow tasks, and alerts via Teams."
tags:
- manufacturing
- sustainability
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: energy-monitoring
port: 8080
tools:
- name: monitor-energy
description: "Monitor plant energy against targets."
inputParameters:
- name: plant_code
type: string
description: "Plant code."
- name: date
type: string
description: "Date."
steps:
- name: get-data
type: call
call: snowflake.execute-query
with:
warehouse: "IOT_WH"
query: "SELECT kwh FROM energy WHERE plant='{{plant_code}}'"
- name: create-task
type: call
call: servicenow.create-incident
with:
short_description: "Energy anomaly: {{plant_code}}"
- name: alert
type: call
call: msteams.send-message
with:
channel_id: "sustainability"
text: "Energy alert: {{plant_code}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://kimberlyclark.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://kimberlyclark.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: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Generates maintenance reports from SAP orders, Snowflake equipment history, and posts to Teams.
naftiko: "0.5"
info:
label: "Plant Maintenance Schedule Report"
description: "Generates maintenance reports from SAP orders, Snowflake equipment history, and posts to Teams."
tags:
- manufacturing
- operations
- sap
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: maintenance-reporting
port: 8080
tools:
- name: gen-schedule
description: "Generate maintenance schedule report."
inputParameters:
- name: plant_code
type: string
description: "Plant code."
- name: weeks
type: number
description: "Weeks ahead."
steps:
- name: get-orders
type: call
call: sap.get-orders
with:
plant: "{{plant_code}}"
- name: get-history
type: call
call: snowflake.execute-query
with:
warehouse: "MFG_WH"
query: "SELECT mtbf FROM equipment WHERE plant='{{plant_code}}'"
- name: post
type: call
call: msteams.send-message
with:
channel_id: "maintenance"
text: "Maintenance for {{plant_code}}: {{get-orders.count}} orders"
consumes:
- type: http
namespace: sap
baseUri: "https://kimberlyclark-s4.sap.com/sap/opu/odata/sap/API_MAINTENANCEORDER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-orders
method: GET
- type: http
namespace: snowflake
baseUri: "https://kimberlyclark.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Checks Power BI dataset refresh status and returns last refresh time.
naftiko: "0.5"
info:
label: "Power BI Dataset Refresh Status"
description: "Checks Power BI dataset refresh status and returns last refresh time."
tags:
- analytics
- reporting
- power-bi
- data
capability:
exposes:
- type: mcp
namespace: bi-reporting
port: 8080
tools:
- name: check-refresh
description: "Check Power BI dataset refresh status."
inputParameters:
- name: dataset_id
type: string
description: "Power BI dataset ID."
call: powerbi.get-refresh
with:
datasetId: "{{dataset_id}}"
outputParameters:
- name: status
type: string
mapping: "$.value[0].status"
- name: end_time
type: string
mapping: "$.value[0].endTime"
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets"
operations:
- name: refresh-dataset
method: POST
Triggers a Power BI dataset refresh for the financial reporting workspace and notifies the finance team via Teams when the refresh completes or fails.
naftiko: "0.5"
info:
label: "Power BI Financial Report Refresh"
description: "Triggers a Power BI dataset refresh for the financial reporting workspace and notifies the finance team via Teams when the refresh completes or fails."
tags:
- finance
- analytics
- reporting
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: finance-reporting
port: 8080
tools:
- name: refresh-financial-report
description: "Trigger a Power BI dataset refresh for the specified financial reporting workspace and dataset, then notify the finance Teams channel of completion status. Use at period close or on demand."
inputParameters:
- name: workspace_id
in: body
type: string
description: "The Power BI workspace (group) ID containing the financial dataset."
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID to refresh."
steps:
- name: trigger-refresh
type: call
call: powerbi.refresh-dataset
with:
workspace_id: "{{workspace_id}}"
dataset_id: "{{dataset_id}}"
- name: notify-finance
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_finance_channel_id"
text: "Power BI financial dataset {{dataset_id}} refresh triggered. Refresh ID: {{trigger-refresh.refresh_id}}"
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: "/groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: workspace_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
- type: http
namespace: msteams
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: post-channel-message
method: POST
Analyzes costing variances between SAP standard and Snowflake actual costs, creating Jira reviews.
naftiko: "0.5"
info:
label: "Product Costing Variance Analyzer"
description: "Analyzes costing variances between SAP standard and Snowflake actual costs, creating Jira reviews."
tags:
- finance
- manufacturing
- sap
- snowflake
- jira
capability:
exposes:
- type: mcp
namespace: cost-analytics
port: 8080
tools:
- name: analyze-variance
description: "Analyze product costing variances."
inputParameters:
- name: material_number
type: string
description: "Material number."
- name: period
type: string
description: "Period."
steps:
- name: get-standard
type: call
call: sap.get-cost
with:
material: "{{material_number}}"
- name: get-actual
type: call
call: snowflake.execute-query
with:
warehouse: "FINANCE_WH"
query: "SELECT actual_cost FROM costs WHERE material='{{material_number}}'"
- name: create-review
type: call
call: jira.create-issue
with:
project_key: "FIN"
summary: "Variance: {{material_number}} ({{period}})"
consumes:
- type: http
namespace: sap
baseUri: "https://kimberlyclark-s4.sap.com/sap/opu/odata/sap/API_PRODUCT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-cost
method: GET
- type: http
namespace: snowflake
baseUri: "https://kimberlyclark.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: jira
baseUri: "https://kimberlyclark.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Traces affected batch in SAP, creates ServiceNow incident, and alerts quality team via Teams.
naftiko: "0.5"
info:
label: "Product Recall Investigation Orchestrator"
description: "Traces affected batch in SAP, creates ServiceNow incident, and alerts quality team via Teams."
tags:
- quality
- supply-chain
- sap
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: quality-ops
port: 8080
tools:
- name: investigate-recall
description: "Orchestrate product recall investigation."
inputParameters:
- name: batch_number
type: string
description: "Batch number."
- name: material_number
type: string
description: "Material number."
- name: severity
type: string
description: "Severity level."
steps:
- name: trace-batch
type: call
call: sap.get-batch-details
with:
batch: "{{batch_number}}"
material: "{{material_number}}"
- name: create-incident
type: call
call: servicenow.create-incident
with:
short_description: "Recall: batch {{batch_number}}"
urgency: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-message
with:
channel_id: "quality-alerts"
text: "RECALL: Batch {{batch_number}}. Incident: {{create-incident.number}}"
consumes:
- type: http
namespace: sap
baseUri: "https://kimberlyclark-s4.sap.com/sap/opu/odata/sap/API_BATCH_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-batch-details
method: GET
- type: http
namespace: servicenow
baseUri: "https://kimberlyclark.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: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Releases production batch after QA by checking SAP inspection, updating status, and notifying logistics via Teams.
naftiko: "0.5"
info:
label: "Production Batch Release Workflow"
description: "Releases production batch after QA by checking SAP inspection, updating status, and notifying logistics via Teams."
tags:
- manufacturing
- quality
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: batch-release
port: 8080
tools:
- name: release-batch
description: "Release production batch after QA."
inputParameters:
- name: batch_number
type: string
description: "Batch number."
- name: material_number
type: string
description: "Material number."
steps:
- name: check-qa
type: call
call: sap.get-inspection
with:
batch: "{{batch_number}}"
material: "{{material_number}}"
- name: release
type: call
call: sap.update-batch
with:
batch: "{{batch_number}}"
status: "RELEASED"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "logistics"
text: "Batch {{batch_number}} released. QA: {{check-qa.decision}}"
consumes:
- type: http
namespace: sap
baseUri: "https://kimberlyclark-s4.sap.com/sap/opu/odata/sap/API_INSPECTIONLOT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-inspection
method: GET
- name: update-batch
method: PATCH
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Optimizes scheduling from Snowflake demand, SAP capacity, and Jira schedule proposals.
naftiko: "0.5"
info:
label: "Production Scheduling Optimizer"
description: "Optimizes scheduling from Snowflake demand, SAP capacity, and Jira schedule proposals."
tags:
- manufacturing
- supply-chain
- snowflake
- sap
- jira
capability:
exposes:
- type: mcp
namespace: production-planning
port: 8080
tools:
- name: optimize-schedule
description: "Optimize production scheduling."
inputParameters:
- name: plant_code
type: string
description: "Plant code."
- name: period
type: string
description: "Period."
steps:
- name: get-demand
type: call
call: snowflake.execute-query
with:
warehouse: "DEMAND_WH"
query: "SELECT sku, units FROM demand WHERE plant='{{plant_code}}'"
- name: get-capacity
type: call
call: sap.get-capacity
with:
plant: "{{plant_code}}"
- name: create-schedule
type: call
call: jira.create-issue
with:
project_key: "PROD"
summary: "Schedule: {{plant_code}} {{period}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://kimberlyclark.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: sap
baseUri: "https://kimberlyclark-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-capacity
method: GET
- type: http
namespace: jira
baseUri: "https://kimberlyclark.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Analyzes yield from SAP planned vs actual, Snowflake waste trends, and creates Jira improvement tasks.
naftiko: "0.5"
info:
label: "Production Yield Analysis"
description: "Analyzes yield from SAP planned vs actual, Snowflake waste trends, and creates Jira improvement tasks."
tags:
- manufacturing
- quality
- sap
- snowflake
- jira
capability:
exposes:
- type: mcp
namespace: production-analytics
port: 8080
tools:
- name: analyze-yield
description: "Analyze production yield."
inputParameters:
- name: line
type: string
description: "Production line."
- name: plant_code
type: string
description: "Plant code."
- name: period
type: string
description: "Period."
steps:
- name: get-yield
type: call
call: sap.get-confirmations
with:
plant: "{{plant_code}}"
line: "{{line}}"
- name: get-waste
type: call
call: snowflake.execute-query
with:
warehouse: "MFG_WH"
query: "SELECT waste_pct FROM waste WHERE line='{{line}}'"
- name: create-task
type: call
call: jira.create-issue
with:
project_key: "MFG"
summary: "Yield: {{line}} ({{period}})"
consumes:
- type: http
namespace: sap
baseUri: "https://kimberlyclark-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-confirmations
method: GET
- type: http
namespace: snowflake
baseUri: "https://kimberlyclark.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: jira
baseUri: "https://kimberlyclark.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Handles shortages by checking SAP stock, identifying affected orders, and creating Ariba procurement requests.
naftiko: "0.5"
info:
label: "Raw Material Shortage Alert Handler"
description: "Handles shortages by checking SAP stock, identifying affected orders, and creating Ariba procurement requests."
tags:
- supply-chain
- procurement
- sap
- manufacturing
capability:
exposes:
- type: mcp
namespace: supply-ops
port: 8080
tools:
- name: handle-shortage
description: "Handle raw material shortage."
inputParameters:
- name: material_number
type: string
description: "Material number."
- name: plant_code
type: string
description: "Plant code."
- name: reorder_qty
type: number
description: "Reorder quantity."
steps:
- name: check-stock
type: call
call: sap.get-stock
with:
material: "{{material_number}}"
plant: "{{plant_code}}"
- name: get-orders
type: call
call: sap.get-orders
with:
material: "{{material_number}}"
- name: create-req
type: call
call: ariba.create-requisition
with:
material: "{{material_number}}"
quantity: "{{reorder_qty}}"
consumes:
- type: http
namespace: sap
baseUri: "https://kimberlyclark-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-stock
method: GET
- name: get-orders
method: GET
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/supplier-management/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: suppliers
path: "/suppliers"
operations:
- name: get-supplier
method: GET
Tracks regulatory compliance from Jira submissions, SharePoint docs, and Power BI dashboard.
naftiko: "0.5"
info:
label: "Regulatory Document Compliance Tracker"
description: "Tracks regulatory compliance from Jira submissions, SharePoint docs, and Power BI dashboard."
tags:
- regulatory
- quality
- jira
- sharepoint
- power-bi
capability:
exposes:
- type: mcp
namespace: regulatory-ops
port: 8080
tools:
- name: track-compliance
description: "Track regulatory submission status."
inputParameters:
- name: submission_id
type: string
description: "Jira submission key."
steps:
- name: get-status
type: call
call: jira.get-issue
with:
issue_key: "{{submission_id}}"
- name: check-docs
type: call
call: sharepoint.list-folder
with:
folder: "{{submission_id}}"
- name: refresh
type: call
call: powerbi.refresh-dataset
with:
datasetId: "regulatory-tracker"
consumes:
- type: http
namespace: jira
baseUri: "https://kimberlyclark.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/sites/drive/items"
operations:
- name: search-docs
method: GET
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets"
operations:
- name: refresh-dataset
method: POST
Audits planogram compliance from Salesforce visits, Snowflake metrics, and Jira follow-ups.
naftiko: "0.5"
info:
label: "Retail Planogram Compliance Audit"
description: "Audits planogram compliance from Salesforce visits, Snowflake metrics, and Jira follow-ups."
tags:
- sales
- retail
- salesforce
- snowflake
- jira
capability:
exposes:
- type: mcp
namespace: retail-compliance
port: 8080
tools:
- name: audit-planogram
description: "Audit planogram compliance."
inputParameters:
- name: region
type: string
description: "Region."
- name: audit_week
type: string
description: "Audit week."
steps:
- name: get-visits
type: call
call: salesforce.get-visits
with:
region: "{{region}}"
- name: get-compliance
type: call
call: snowflake.execute-query
with:
warehouse: "RETAIL_WH"
query: "SELECT score FROM planogram WHERE region='{{region}}'"
- name: create-followup
type: call
call: jira.create-issue
with:
project_key: "RETAIL"
summary: "Planogram: {{region}} week {{audit_week}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://kimberlyclark.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: sobjects
path: "/sobjects"
operations:
- name: query
method: GET
- type: http
namespace: snowflake
baseUri: "https://kimberlyclark.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: jira
baseUri: "https://kimberlyclark.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Orchestrates shelf audits from Salesforce data, Snowflake compliance, and Jira follow-ups.
naftiko: "0.5"
info:
label: "Retail Shelf Audit Orchestrator"
description: "Orchestrates shelf audits from Salesforce data, Snowflake compliance, and Jira follow-ups."
tags:
- sales
- retail
- salesforce
- snowflake
- jira
capability:
exposes:
- type: mcp
namespace: retail-ops
port: 8080
tools:
- name: run-audit
description: "Orchestrate retail shelf audit."
inputParameters:
- name: account_id
type: string
description: "Salesforce account ID."
- name: audit_period
type: string
description: "Period."
steps:
- name: get-account
type: call
call: salesforce.get-account
with:
account_id: "{{account_id}}"
- name: get-compliance
type: call
call: snowflake.execute-query
with:
warehouse: "RETAIL_WH"
query: "SELECT score FROM audit WHERE account='{{account_id}}'"
- name: create-followup
type: call
call: jira.create-issue
with:
project_key: "RETAIL"
summary: "Audit: {{get-account.name}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://kimberlyclark.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: sobjects
path: "/sobjects"
operations:
- name: query
method: GET
- type: http
namespace: snowflake
baseUri: "https://kimberlyclark.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: jira
baseUri: "https://kimberlyclark.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Generates a daily digest of Kimberly-Clark's top accounts from Salesforce CRM including open opportunities, recent activity, and revenue to date, and posts the summary to a Teams channel.
naftiko: "0.5"
info:
label: "Salesforce Account Health Digest"
description: "Generates a daily digest of Kimberly-Clark's top accounts from Salesforce CRM including open opportunities, recent activity, and revenue to date, and posts the summary to a Teams channel."
tags:
- sales
- crm
- reporting
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: crm-reporting
port: 8080
tools:
- name: digest-account-health
description: "Retrieve active Salesforce accounts with open opportunities and recent activity logs, then post a formatted digest to the sales leadership Teams channel. Run daily for pipeline visibility."
inputParameters:
- name: days_back
in: body
type: integer
description: "Number of days of activity to include in the digest, e.g. 7 for a weekly summary."
steps:
- name: get-accounts
type: call
call: salesforce.query-accounts
with:
days_back: "{{days_back}}"
- name: post-digest
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_sales_channel_id"
text: "Account Health Digest: {{get-accounts.summary}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://kimberly-clark.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/query"
operations:
- name: query-accounts
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: post-channel-message
method: POST
Enriches a new Salesforce lead with product interest data derived from associated Jira feature requests and customer feedback tickets.
naftiko: "0.5"
info:
label: "Salesforce Lead Enrichment from Jira"
description: "Enriches a new Salesforce lead with product interest data derived from associated Jira feature requests and customer feedback tickets."
tags:
- sales
- crm
- salesforce
- jira
- lead-enrichment
capability:
exposes:
- type: mcp
namespace: lead-enrichment
port: 8080
tools:
- name: enrich-lead-from-jira
description: "Given a Salesforce lead ID and associated Jira customer ticket keys, retrieve Jira ticket details and update the Salesforce lead record with product interest and priority signals. Use for pre-sales intelligence gathering."
inputParameters:
- name: lead_id
in: body
type: string
description: "The Salesforce lead ID to enrich."
- name: jira_ticket_key
in: body
type: string
description: "The Jira ticket key linked to this lead's customer feedback, e.g. CUST-1234."
steps:
- name: get-jira-ticket
type: call
call: jira.get-issue
with:
issue_key: "{{jira_ticket_key}}"
- name: update-lead
type: call
call: salesforce.update-lead
with:
lead_id: "{{lead_id}}"
product_interest: "{{get-jira-ticket.summary}}"
priority: "{{get-jira-ticket.priority}}"
consumes:
- type: http
namespace: jira
baseUri: "https://kimberly-clark.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue/{{issue_key}}"
inputParameters:
- name: issue_key
in: path
operations:
- name: get-issue
method: GET
- type: http
namespace: salesforce
baseUri: "https://kimberly-clark.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: leads
path: "/sobjects/Lead/{{lead_id}}"
inputParameters:
- name: lead_id
in: path
operations:
- name: update-lead
method: PATCH
Retrieves the sales opportunity pipeline from Salesforce for a business unit.
naftiko: "0.5"
info:
label: "Salesforce Opportunity Pipeline Lookup"
description: "Retrieves the sales opportunity pipeline from Salesforce for a business unit."
tags:
- sales
- crm
- salesforce
- reporting
capability:
exposes:
- type: mcp
namespace: crm-sales
port: 8080
tools:
- name: get-pipeline
description: "Look up Salesforce opportunity pipeline by business unit."
inputParameters:
- name: business_unit
type: string
description: "Business unit name."
call: salesforce.get-pipeline
with:
bu: "{{business_unit}}"
outputParameters:
- name: total_value
type: string
mapping: "$.totalSize"
- name: opportunities
type: string
mapping: "$.records"
consumes:
- type: http
namespace: salesforce
baseUri: "https://kimberlyclark.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: sobjects
path: "/sobjects"
operations:
- name: query
method: GET
When a Salesforce opportunity is marked Closed Won, creates a corresponding sales order in SAP S/4HANA and notifies the account team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Salesforce Opportunity to SAP Order Sync"
description: "When a Salesforce opportunity is marked Closed Won, creates a corresponding sales order in SAP S/4HANA and notifies the account team via Microsoft Teams."
tags:
- sales
- crm
- erp
- salesforce
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: crm-erp-sync
port: 8080
tools:
- name: sync-opportunity-to-order
description: "Given a Salesforce opportunity ID that has been marked Closed Won, retrieve opportunity details, create a SAP S/4HANA sales order, and notify the account team in Microsoft Teams."
inputParameters:
- name: opportunity_id
in: body
type: string
description: "The Salesforce opportunity ID (18-character Salesforce record ID)."
steps:
- name: get-opportunity
type: call
call: salesforce.get-opportunity
with:
opportunity_id: "{{opportunity_id}}"
- name: create-sap-order
type: call
call: sap.create-sales-order
with:
customer_id: "{{get-opportunity.account_sap_id}}"
amount: "{{get-opportunity.amount}}"
currency: "{{get-opportunity.currency_code}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_sales_channel_id"
text: "New SAP order {{create-sap-order.order_number}} created from Salesforce opportunity {{opportunity_id}}."
consumes:
- type: http
namespace: salesforce
baseUri: "https://kimberly-clark.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity/{{opportunity_id}}"
inputParameters:
- name: opportunity_id
in: path
operations:
- name: get-opportunity
method: GET
- type: http
namespace: sap
baseUri: "https://kimberly-clark-s4.sap.com/sap/opu/odata/sap/API_SALES_ORDER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: sales-orders
path: "/A_SalesOrder"
operations:
- name: create-sales-order
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: post-channel-message
method: POST
Retrieves retail buyer account details from Salesforce including account health, open opportunities, and planogram compliance scores.
naftiko: "0.5"
info:
label: "Salesforce Retail Buyer Account Lookup"
description: "Retrieves retail buyer account details from Salesforce including account health, open opportunities, and planogram compliance scores."
tags:
- sales
- retail
- salesforce
- crm
capability:
exposes:
- type: mcp
namespace: crm-retail
port: 8080
tools:
- name: get-retail-buyer
description: "Look up a retail buyer account in Salesforce. Returns health score, open opportunities, and compliance metrics."
inputParameters:
- name: account_id
type: string
description: "Salesforce account ID."
call: salesforce.get-account
with:
account_id: "{{account_id}}"
outputParameters:
- name: account_name
type: string
mapping: "$.Name"
- name: health_score
type: string
mapping: "$.Health_Score__c"
- name: open_opps
type: string
mapping: "$.Open_Opportunity_Count__c"
consumes:
- type: http
namespace: salesforce
baseUri: "https://kimberlyclark.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account
method: GET
Registers a new supplier in SAP Ariba, creates a corresponding vendor record in SAP S/4HANA, and notifies the procurement team via Microsoft Teams.
naftiko: "0.5"
info:
label: "SAP Ariba Supplier Onboarding"
description: "Registers a new supplier in SAP Ariba, creates a corresponding vendor record in SAP S/4HANA, and notifies the procurement team via Microsoft Teams."
tags:
- procurement
- sap-ariba
- sap
- supplier-management
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: supplier-ops
port: 8080
tools:
- name: onboard-supplier
description: "Given supplier details, register the supplier in SAP Ariba, create a vendor master record in SAP S/4HANA, and notify the procurement Teams channel. Use for new supplier qualification and onboarding."
inputParameters:
- name: supplier_name
in: body
type: string
description: "The legal name of the supplier company."
- name: supplier_country
in: body
type: string
description: "Two-letter ISO country code for the supplier's primary country."
- name: contact_email
in: body
type: string
description: "Primary contact email address for the supplier."
steps:
- name: register-ariba
type: call
call: ariba.create-supplier
with:
name: "{{supplier_name}}"
country: "{{supplier_country}}"
contactEmail: "{{contact_email}}"
- name: create-vendor
type: call
call: sap.create-vendor
with:
supplierName: "{{supplier_name}}"
country: "{{supplier_country}}"
aribaId: "{{register-ariba.supplier_id}}"
- name: notify-procurement
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_procurement_channel_id"
text: "New supplier onboarded: {{supplier_name}} | Ariba ID: {{register-ariba.supplier_id}} | SAP Vendor: {{create-vendor.vendor_id}}"
consumes:
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/supplier/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: suppliers
path: "/suppliers"
operations:
- name: create-supplier
method: POST
- type: http
namespace: sap
baseUri: "https://kimberly-clark-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: vendors
path: "/A_Supplier"
operations:
- name: create-vendor
method: POST
- type: http
namespace: msteams
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: post-channel-message
method: POST
Traces a product batch through SAP to retrieve production origins and component lots.
naftiko: "0.5"
info:
label: "SAP Batch Traceability Lookup"
description: "Traces a product batch through SAP to retrieve production origins and component lots."
tags:
- quality
- supply-chain
- sap
- traceability
capability:
exposes:
- type: mcp
namespace: erp-traceability
port: 8080
tools:
- name: trace-batch
description: "Trace a product batch in SAP for production details."
inputParameters:
- name: batch_number
type: string
description: "SAP batch number."
- name: material_number
type: string
description: "SAP material number."
call: sap.get-batch-trace
with:
batch: "{{batch_number}}"
material: "{{material_number}}"
outputParameters:
- name: plant
type: string
mapping: "$.d.ProductionPlant"
- name: date
type: string
mapping: "$.d.ManufactureDate"
consumes:
- type: http
namespace: sap
baseUri: "https://kimberlyclark-s4.sap.com/sap/opu/odata/sap/API_BATCH_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-batch-trace
method: GET
Retrieves the bill of materials for a finished product from SAP including component materials and quantities.
naftiko: "0.5"
info:
label: "SAP Bill of Materials Lookup"
description: "Retrieves the bill of materials for a finished product from SAP including component materials and quantities."
tags:
- manufacturing
- r-and-d
- sap
- erp
capability:
exposes:
- type: mcp
namespace: erp-engineering
port: 8080
tools:
- name: get-bom
description: "Retrieve BOM from SAP for a material. Returns component list with quantities."
inputParameters:
- name: material_number
type: string
description: "SAP material number."
- name: plant_code
type: string
description: "SAP plant code."
call: sap.get-bom
with:
material: "{{material_number}}"
plant: "{{plant_code}}"
outputParameters:
- name: bom_number
type: string
mapping: "$.d.BillOfMaterial"
- name: components
type: string
mapping: "$.d.to_BillOfMaterialItem.results"
consumes:
- type: http
namespace: sap
baseUri: "https://kimberlyclark-s4.sap.com/sap/opu/odata/sap/API_BILL_OF_MATERIAL_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-bom
method: GET
Retrieves submitted expense reports from SAP Concur that exceed policy thresholds and flags them in ServiceNow for manager review.
naftiko: "0.5"
info:
label: "SAP Concur Expense Report Audit"
description: "Retrieves submitted expense reports from SAP Concur that exceed policy thresholds and flags them in ServiceNow for manager review."
tags:
- finance
- expense-management
- sap-concur
- servicenow
- audit
capability:
exposes:
- type: mcp
namespace: expense-ops
port: 8080
tools:
- name: audit-expense-reports
description: "Retrieve expense reports from SAP Concur that exceed the policy limit and create ServiceNow approval tasks for manager review. Invoke on a nightly schedule or before period close."
inputParameters:
- name: threshold_amount
in: body
type: number
description: "The expense amount threshold in USD above which reports require additional review."
- name: submission_date
in: body
type: string
description: "Filter expense reports submitted on or after this date in YYYY-MM-DD format."
steps:
- name: get-expense-reports
type: call
call: concur.get-expense-reports
with:
submitDateAfter: "{{submission_date}}"
- name: create-review-task
type: call
call: servicenow.create-approval
with:
short_description: "Expense reports exceeding ${{threshold_amount}} require review"
category: "expense_audit"
consumes:
- type: http
namespace: concur
baseUri: "https://www.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_token"
resources:
- name: expense-reports
path: "/expense/reports"
operations:
- name: get-expense-reports
method: GET
- type: http
namespace: servicenow
baseUri: "https://kimberly-clark.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
resources:
- name: approvals
path: "/table/sysapproval_approver"
operations:
- name: create-approval
method: POST
Retrieves actual spending for a cost center from SAP for a fiscal period.
naftiko: "0.5"
info:
label: "SAP Cost Center Actuals Lookup"
description: "Retrieves actual spending for a cost center from SAP for a fiscal period."
tags:
- finance
- operations
- sap
- erp
capability:
exposes:
- type: mcp
namespace: finance-reporting
port: 8080
tools:
- name: get-actuals
description: "Look up cost center actuals in SAP."
inputParameters:
- name: cost_center
type: string
description: "SAP cost center ID."
- name: period
type: string
description: "Fiscal period."
call: sap.get-actuals
with:
cost_center: "{{cost_center}}"
period: "{{period}}"
outputParameters:
- name: total
type: string
mapping: "$.d.TotalAmount"
- name: currency
type: string
mapping: "$.d.Currency"
consumes:
- type: http
namespace: sap
baseUri: "https://kimberlyclark-s4.sap.com/sap/opu/odata/sap/API_OPLACCTGDOCITEMCUBE_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-actuals
method: GET
Monitors budgets from SAP actuals, Snowflake plans, and alerts via Teams.
naftiko: "0.5"
info:
label: "SAP Cost Center Budget Monitor"
description: "Monitors budgets from SAP actuals, Snowflake plans, and alerts via Teams."
tags:
- finance
- operations
- sap
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: budget-monitoring
port: 8080
tools:
- name: monitor-budget
description: "Monitor cost center budget."
inputParameters:
- name: cost_center
type: string
description: "Cost center."
- name: period
type: string
description: "Period."
- name: threshold
type: number
description: "Threshold pct."
steps:
- name: get-actuals
type: call
call: sap.get-actuals
with:
cc: "{{cost_center}}"
period: "{{period}}"
- name: get-plan
type: call
call: snowflake.execute-query
with:
warehouse: "FINANCE_WH"
query: "SELECT planned FROM budget WHERE cc='{{cost_center}}'"
- name: alert
type: call
call: msteams.send-message
with:
channel_id: "finance"
text: "Budget: {{cost_center}} at {{get-plan.consumed_pct}}%"
consumes:
- type: http
namespace: sap
baseUri: "https://kimberlyclark-s4.sap.com/sap/opu/odata/sap/API_OPLACCTGDOCITEMCUBE_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-actuals
method: GET
- type: http
namespace: snowflake
baseUri: "https://kimberlyclark.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Processes credit memos by validating SAP invoice, creating credit doc, and updating Salesforce account.
naftiko: "0.5"
info:
label: "SAP Credit Memo Processing"
description: "Processes credit memos by validating SAP invoice, creating credit doc, and updating Salesforce account."
tags:
- finance
- sales
- sap
- salesforce
capability:
exposes:
- type: mcp
namespace: finance-ar
port: 8080
tools:
- name: process-credit-memo
description: "Process credit memo."
inputParameters:
- name: invoice_number
type: string
description: "Invoice number."
- name: credit_amount
type: number
description: "Credit amount."
- name: reason
type: string
description: "Reason."
steps:
- name: validate
type: call
call: sap.get-invoice
with:
invoice: "{{invoice_number}}"
- name: create-credit
type: call
call: sap.create-credit-memo
with:
reference: "{{invoice_number}}"
amount: "{{credit_amount}}"
- name: update-account
type: call
call: salesforce.update-account
with:
id: "{{validate.customer_id}}"
credit: "{{credit_amount}}"
consumes:
- type: http
namespace: sap
baseUri: "https://kimberlyclark-s4.sap.com/sap/opu/odata/sap/API_BILLING_DOCUMENT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-invoice
method: GET
- name: create-credit-memo
method: POST
- type: http
namespace: salesforce
baseUri: "https://kimberlyclark.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: sobjects
path: "/sobjects"
operations:
- name: query
method: GET
Orchestrates monthly close by running SAP tasks, validating Snowflake balances, and posting status to Teams.
naftiko: "0.5"
info:
label: "SAP Financial Period Close Orchestrator"
description: "Orchestrates monthly close by running SAP tasks, validating Snowflake balances, and posting status to Teams."
tags:
- finance
- operations
- sap
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: finance-close
port: 8080
tools:
- name: close-period
description: "Orchestrate financial period close."
inputParameters:
- name: period
type: string
description: "Fiscal period."
- name: company_code
type: string
description: "Company code."
steps:
- name: check-items
type: call
call: sap.get-open-items
with:
code: "{{company_code}}"
period: "{{period}}"
- name: validate
type: call
call: snowflake.execute-query
with:
warehouse: "FINANCE_WH"
query: "SELECT * FROM recon WHERE code='{{company_code}}'"
- name: post
type: call
call: msteams.send-message
with:
channel_id: "finance-close"
text: "Period {{period}}: Open items {{check-items.count}}"
consumes:
- type: http
namespace: sap
baseUri: "https://kimberlyclark-s4.sap.com/sap/opu/odata/sap/API_OPLACCTGDOCITEMCUBE_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-open-items
method: GET
- type: http
namespace: snowflake
baseUri: "https://kimberlyclark.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Confirms goods receipt in SAP S/4HANA for a purchase order, returning receipt document and quantity.
naftiko: "0.5"
info:
label: "SAP Goods Receipt Confirmation"
description: "Confirms goods receipt in SAP S/4HANA for a purchase order, returning receipt document and quantity."
tags:
- supply-chain
- manufacturing
- sap
- erp
capability:
exposes:
- type: mcp
namespace: erp-logistics
port: 8080
tools:
- name: confirm-goods-receipt
description: "Confirm goods receipt against a PO. Returns receipt doc, quantity, and posting date."
inputParameters:
- name: po_number
type: string
description: "SAP purchase order number."
- name: plant_code
type: string
description: "SAP plant code."
call: sap.post-goods-receipt
with:
po_number: "{{po_number}}"
plant: "{{plant_code}}"
outputParameters:
- name: receipt_doc
type: string
mapping: "$.d.MaterialDocumentNumber"
- name: quantity
type: string
mapping: "$.d.QuantityReceived"
consumes:
- type: http
namespace: sap
baseUri: "https://kimberlyclark-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_DOCUMENT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: post-goods-receipt
method: POST
Creates intercompany transfers in SAP, updates Snowflake forecasts, and notifies via Teams.
naftiko: "0.5"
info:
label: "SAP Intercompany Transfer Workflow"
description: "Creates intercompany transfers in SAP, updates Snowflake forecasts, and notifies via Teams."
tags:
- supply-chain
- logistics
- sap
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: intercompany
port: 8080
tools:
- name: create-transfer
description: "Create intercompany stock transfer."
inputParameters:
- name: material
type: string
description: "Material."
- name: from_plant
type: string
description: "Source plant."
- name: to_plant
type: string
description: "Target plant."
- name: quantity
type: number
description: "Quantity."
steps:
- name: transfer
type: call
call: sap.create-transfer
with:
material: "{{material}}"
from: "{{from_plant}}"
to: "{{to_plant}}"
- name: update
type: call
call: snowflake.execute-query
with:
warehouse: "SC_WH"
query: "CALL update_forecast('{{to_plant}}', '{{material}}', {{quantity}})"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "logistics"
text: "Transfer: {{quantity}} of {{material}} from {{from_plant}} to {{to_plant}}"
consumes:
- type: http
namespace: sap
baseUri: "https://kimberlyclark-s4.sap.com/sap/opu/odata/sap/API_STOCK_TRANSFER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: create-transfer
method: POST
- type: http
namespace: snowflake
baseUri: "https://kimberlyclark.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
When a supplier invoice arrives in SAP Ariba, validates the invoice against a SAP S/4HANA purchase order and routes for approval if there is a discrepancy.
naftiko: "0.5"
info:
label: "SAP Invoice Processing and Approval"
description: "When a supplier invoice arrives in SAP Ariba, validates the invoice against a SAP S/4HANA purchase order and routes for approval if there is a discrepancy."
tags:
- finance
- procurement
- sap
- sap-ariba
- invoice
- approval
capability:
exposes:
- type: mcp
namespace: invoice-ops
port: 8080
tools:
- name: process-invoice
description: "Given an Ariba invoice ID, retrieve the invoice details from SAP Ariba, validate against the matching SAP S/4HANA PO, and create an approval task if amounts or quantities do not match."
inputParameters:
- name: invoice_id
in: body
type: string
description: "The SAP Ariba invoice document ID."
- name: po_number
in: body
type: string
description: "The associated SAP purchase order number."
steps:
- name: get-invoice
type: call
call: ariba.get-invoice
with:
invoice_id: "{{invoice_id}}"
- name: get-po
type: call
call: sap.get-po
with:
po_number: "{{po_number}}"
- name: create-approval
type: call
call: servicenow.create-approval
with:
short_description: "Invoice discrepancy: {{invoice_id}} vs PO {{po_number}}"
amount_invoiced: "{{get-invoice.total_amount}}"
amount_po: "{{get-po.total_value}}"
consumes:
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/invoice/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
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://kimberly-clark-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: purchase-orders
path: "/A_PurchaseOrder('{{po_number}}')"
inputParameters:
- name: po_number
in: path
operations:
- name: get-po
method: GET
- type: http
namespace: servicenow
baseUri: "https://kimberly-clark.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
resources:
- name: approvals
path: "/table/sysapproval_approver"
operations:
- name: create-approval
method: POST
Creates maintenance orders in SAP from ServiceNow requests and notifies team via Teams.
naftiko: "0.5"
info:
label: "SAP Maintenance Order Creation"
description: "Creates maintenance orders in SAP from ServiceNow requests and notifies team via Teams."
tags:
- manufacturing
- operations
- sap
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: plant-maintenance
port: 8080
tools:
- name: create-order
description: "Create maintenance order."
inputParameters:
- name: snow_ticket
type: string
description: "ServiceNow ticket."
- name: equipment_id
type: string
description: "Equipment ID."
- name: priority
type: string
description: "Priority."
steps:
- name: get-request
type: call
call: servicenow.get-request
with:
number: "{{snow_ticket}}"
- name: create-order
type: call
call: sap.create-order
with:
equipment: "{{equipment_id}}"
priority: "{{priority}}"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "maintenance"
text: "Maintenance order for {{equipment_id}}. Priority: {{priority}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://kimberlyclark.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: sap
baseUri: "https://kimberlyclark-s4.sap.com/sap/opu/odata/sap/API_MAINTENANCEORDER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: create-order
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Checks current material stock levels in SAP for tissue, diaper, and personal care raw materials at a specific plant.
naftiko: "0.5"
info:
label: "SAP Material Stock Level Check"
description: "Checks current material stock levels in SAP for tissue, diaper, and personal care raw materials at a specific plant."
tags:
- supply-chain
- inventory
- sap
- erp
capability:
exposes:
- type: mcp
namespace: erp-inventory
port: 8080
tools:
- name: check-stock-level
description: "Query SAP for current stock level of a material at a specific plant. Returns unrestricted use, quality inspection, and blocked stock quantities."
inputParameters:
- name: material_number
type: string
description: "SAP material number."
- name: plant_code
type: string
description: "SAP plant code."
call: sap.get-stock
with:
material: "{{material_number}}"
plant: "{{plant_code}}"
outputParameters:
- name: unrestricted_qty
type: string
mapping: "$.d.MatlWrhsStkQtyInMatlBaseUnit"
- name: quality_inspection_qty
type: string
mapping: "$.d.QualityInspectionStockQty"
- name: blocked_qty
type: string
mapping: "$.d.BlockedStockQty"
consumes:
- type: http
namespace: sap
baseUri: "https://kimberlyclark-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: stock
path: "/A_MatlStkInAcctMod(Material='{{material}}',Plant='{{plant}}')"
inputParameters:
- name: material
in: path
- name: plant
in: path
operations:
- name: get-stock
method: GET
Runs the month-end period close checklist in SAP S/4HANA, verifying that all posting periods are closed and all open items are resolved, then posts a status report to the finance Teams channel.
naftiko: "0.5"
info:
label: "SAP Period Close Checklist"
description: "Runs the month-end period close checklist in SAP S/4HANA, verifying that all posting periods are closed and all open items are resolved, then posts a status report to the finance Teams channel."
tags:
- finance
- erp
- sap
- period-close
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: period-close
port: 8080
tools:
- name: run-period-close-check
description: "Given a fiscal period and company code, verify SAP S/4HANA posting period status, check for open items, and post a close-readiness report to the finance Teams channel. Use at month-end close."
inputParameters:
- name: fiscal_period
in: body
type: string
description: "The fiscal period in YYYYMM format, e.g. 202503."
- name: company_code
in: body
type: string
description: "The SAP company code to check, e.g. 1000."
steps:
- name: check-periods
type: call
call: sap.get-posting-periods
with:
period: "{{fiscal_period}}"
companyCode: "{{company_code}}"
- name: get-open-items
type: call
call: sap.get-open-items
with:
period: "{{fiscal_period}}"
companyCode: "{{company_code}}"
- name: post-status
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_finance_channel_id"
text: "Period close check for {{fiscal_period}} ({{company_code}}): {{check-periods.status}} | Open items: {{get-open-items.count}}"
consumes:
- type: http
namespace: sap
baseUri: "https://kimberly-clark-s4.sap.com/sap/opu/odata/sap/API_FINANCIALPLANDATA_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: posting-periods
path: "/PostingPeriods"
operations:
- name: get-posting-periods
method: GET
- name: open-items
path: "/OpenItems"
operations:
- name: get-open-items
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: post-channel-message
method: POST
Retrieves the current status and progress of a manufacturing production order from SAP S/4HANA for tissue and personal care product lines.
naftiko: "0.5"
info:
label: "SAP Production Order Status Lookup"
description: "Retrieves the current status and progress of a manufacturing production order from SAP S/4HANA for tissue and personal care product lines."
tags:
- manufacturing
- production
- sap
- erp
capability:
exposes:
- type: mcp
namespace: erp-manufacturing
port: 8080
tools:
- name: get-production-order
description: "Look up a production order in SAP by order number. Returns status, planned quantity, confirmed quantity, and target completion date."
inputParameters:
- name: order_number
type: string
description: "SAP production order number."
call: sap.get-production-order
with:
order_number: "{{order_number}}"
outputParameters:
- name: status
type: string
mapping: "$.d.ManufacturingOrderStatus"
- name: planned_qty
type: string
mapping: "$.d.TotalPlannedQuantity"
- name: confirmed_qty
type: string
mapping: "$.d.TotalConfirmedYieldQuantity"
- name: target_end_date
type: string
mapping: "$.d.MfgOrderPlannedEndDate"
consumes:
- type: http
namespace: sap
baseUri: "https://kimberlyclark-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: production-orders
path: "/A_ProductionOrder('{{order_number}}')"
inputParameters:
- name: order_number
in: path
operations:
- name: get-production-order
method: GET
Looks up a SAP S/4HANA purchase order by PO number and returns header status, vendor name, total value, and open line items for procurement review.
naftiko: "0.5"
info:
label: "SAP Purchase Order Lookup"
description: "Looks up a SAP S/4HANA purchase order by PO number and returns header status, vendor name, total value, and open line items for procurement review."
tags:
- procurement
- finance
- sap
- erp
capability:
exposes:
- type: mcp
namespace: erp
port: 8080
tools:
- name: get-purchase-order
description: "Given a SAP purchase order number, return the PO header status, vendor name, total amount, and currency. Use for procurement approvals, spend analysis, and vendor reconciliation."
inputParameters:
- name: po_number
in: body
type: string
description: "The SAP purchase order number to look up, e.g. 4500012345."
call: sap.get-po
with:
po_number: "{{po_number}}"
outputParameters:
- name: status
type: string
mapping: "$.d.OverallStatus"
- name: vendor
type: string
mapping: "$.d.Supplier.CompanyName"
- name: total_value
type: string
mapping: "$.d.TotalAmount"
- name: currency
type: string
mapping: "$.d.TransactionCurrency"
consumes:
- type: http
namespace: sap
baseUri: "https://kimberly-clark-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 quality inspection lot details from SAP QM for tissue and hygiene product batches to verify inspection status.
naftiko: "0.5"
info:
label: "SAP Quality Inspection Lot Lookup"
description: "Retrieves quality inspection lot details from SAP QM for tissue and hygiene product batches to verify inspection status."
tags:
- quality
- manufacturing
- sap
- erp
capability:
exposes:
- type: mcp
namespace: erp-quality
port: 8080
tools:
- name: get-inspection-lot
description: "Look up a quality inspection lot in SAP by material and batch. Returns inspection status, usage decision, and defect count."
inputParameters:
- name: material_number
type: string
description: "SAP material number."
- name: batch
type: string
description: "Batch number."
call: sap.get-inspection-lot
with:
material: "{{material_number}}"
batch: "{{batch}}"
outputParameters:
- name: inspection_lot
type: string
mapping: "$.d.InspectionLot"
- name: status
type: string
mapping: "$.d.InspectionLotStatus"
- name: usage_decision
type: string
mapping: "$.d.UsageDecision"
consumes:
- type: http
namespace: sap
baseUri: "https://kimberlyclark-s4.sap.com/sap/opu/odata/sap/API_INSPECTIONLOT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: inspection-lots
path: "/A_InspectionLot"
operations:
- name: get-inspection-lot
method: GET
Tracks shipments from SAP delivery docs and updates Salesforce orders with tracking info.
naftiko: "0.5"
info:
label: "SAP Transport Shipment Tracker"
description: "Tracks shipments from SAP delivery docs and updates Salesforce orders with tracking info."
tags:
- supply-chain
- logistics
- sap
- salesforce
capability:
exposes:
- type: mcp
namespace: logistics-tracking
port: 8080
tools:
- name: track-shipment
description: "Track outbound shipment."
inputParameters:
- name: delivery_number
type: string
description: "SAP delivery number."
- name: sf_order_id
type: string
description: "Salesforce order ID."
steps:
- name: get-delivery
type: call
call: sap.get-delivery
with:
delivery: "{{delivery_number}}"
- name: update-order
type: call
call: salesforce.update-order
with:
order_id: "{{sf_order_id}}"
tracking: "{{get-delivery.tracking}}"
consumes:
- type: http
namespace: sap
baseUri: "https://kimberlyclark-s4.sap.com/sap/opu/odata/sap/API_OUTBOUND_DELIVERY_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-delivery
method: GET
- type: http
namespace: salesforce
baseUri: "https://kimberlyclark.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: sobjects
path: "/sobjects"
operations:
- name: query
method: GET
Retrieves vendor master data from SAP including payment terms, pulp and raw material supplier details, and compliance status.
naftiko: "0.5"
info:
label: "SAP Vendor Master Lookup"
description: "Retrieves vendor master data from SAP including payment terms, pulp and raw material supplier details, and compliance status."
tags:
- procurement
- supply-chain
- sap
- erp
capability:
exposes:
- type: mcp
namespace: erp-procurement
port: 8080
tools:
- name: get-vendor
description: "Look up vendor master record in SAP by vendor number. Returns supplier name, payment terms, and purchasing organization."
inputParameters:
- name: vendor_number
type: string
description: "SAP vendor account number."
call: sap.get-vendor
with:
vendor: "{{vendor_number}}"
outputParameters:
- name: vendor_name
type: string
mapping: "$.d.SupplierName"
- name: payment_terms
type: string
mapping: "$.d.PaymentTerms"
- name: purchasing_org
type: string
mapping: "$.d.PurchasingOrganization"
consumes:
- type: http
namespace: sap
baseUri: "https://kimberlyclark-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}}')"
inputParameters:
- name: vendor
in: path
operations:
- name: get-vendor
method: GET
Retrieves vendor payment terms and credit limit from SAP.
naftiko: "0.5"
info:
label: "SAP Vendor Payment Terms Lookup"
description: "Retrieves vendor payment terms and credit limit from SAP."
tags:
- finance
- procurement
- sap
- erp
capability:
exposes:
- type: mcp
namespace: erp-finance
port: 8080
tools:
- name: get-payment-terms
description: "Look up vendor payment terms in SAP."
inputParameters:
- name: vendor_number
type: string
description: "SAP vendor number."
call: sap.get-vendor-terms
with:
vendor: "{{vendor_number}}"
outputParameters:
- name: payment_terms
type: string
mapping: "$.d.PaymentTerms"
- name: credit_limit
type: string
mapping: "$.d.CreditLimit"
consumes:
- type: http
namespace: sap
baseUri: "https://kimberlyclark-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-vendor-terms
method: GET
Posts warehouse transfers in SAP, updates Snowflake inventory, and confirms via Teams.
naftiko: "0.5"
info:
label: "SAP Warehouse Transfer Posting"
description: "Posts warehouse transfers in SAP, updates Snowflake inventory, and confirms via Teams."
tags:
- supply-chain
- logistics
- sap
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: warehouse-ops
port: 8080
tools:
- name: post-transfer
description: "Post warehouse transfer."
inputParameters:
- name: material
type: string
description: "Material."
- name: from_loc
type: string
description: "Source."
- name: to_loc
type: string
description: "Target."
- name: quantity
type: number
description: "Quantity."
steps:
- name: transfer
type: call
call: sap.post-transfer
with:
material: "{{material}}"
from: "{{from_loc}}"
- name: update
type: call
call: snowflake.execute-query
with:
warehouse: "SC_WH"
query: "CALL update_inv('{{material}}', {{quantity}})"
- name: confirm
type: call
call: msteams.send-message
with:
channel_id: "warehouse"
text: "Transfer: {{quantity}} of {{material}} to {{to_loc}}"
consumes:
- type: http
namespace: sap
baseUri: "https://kimberlyclark-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_DOCUMENT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: post-transfer
method: POST
- type: http
namespace: snowflake
baseUri: "https://kimberlyclark.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Opens and routes a ServiceNow change request for IT infrastructure changes, attaches a risk assessment, and notifies the change advisory board via Microsoft Teams.
naftiko: "0.5"
info:
label: "ServiceNow Change Request Approval"
description: "Opens and routes a ServiceNow change request for IT infrastructure changes, attaches a risk assessment, and notifies the change advisory board via Microsoft Teams."
tags:
- itsm
- change-management
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: change-management
port: 8080
tools:
- name: create-change-request
description: "Given a change description, risk level, and implementation window, open a ServiceNow change request and notify the change advisory board channel in Teams. Use before any planned production infrastructure change."
inputParameters:
- name: change_description
in: body
type: string
description: "A clear description of the planned change and its purpose."
- name: risk_level
in: body
type: string
description: "Risk level of the change: low, medium, or high."
- name: implementation_window
in: body
type: string
description: "Planned implementation window in ISO 8601 interval format."
steps:
- name: create-cr
type: call
call: servicenow.create-change-request
with:
short_description: "{{change_description}}"
risk: "{{risk_level}}"
start_date: "{{implementation_window}}"
- name: notify-cab
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_cab_channel_id"
text: "New Change Request {{create-cr.number}} (Risk: {{risk_level}}): {{change_description}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://kimberly-clark.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
resources:
- name: change-requests
path: "/table/change_request"
operations:
- name: create-change-request
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: post-channel-message
method: POST
Retrieves current status of a ServiceNow incident including priority and assignment.
naftiko: "0.5"
info:
label: "ServiceNow Incident Status Lookup"
description: "Retrieves current status of a ServiceNow incident including priority and assignment."
tags:
- operations
- it-service
- servicenow
- incident
capability:
exposes:
- type: mcp
namespace: it-service-mgmt
port: 8080
tools:
- name: get-incident
description: "Look up ServiceNow incident status."
inputParameters:
- name: incident_number
type: string
description: "ServiceNow incident number."
call: servicenow.get-incident
with:
number: "{{incident_number}}"
outputParameters:
- name: state
type: string
mapping: "$.result.state"
- name: priority
type: string
mapping: "$.result.priority"
consumes:
- type: http
namespace: servicenow
baseUri: "https://kimberlyclark.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
Syncs IT hardware and software asset records from ServiceNow Asset Management with the Microsoft 365 device inventory to identify unmanaged devices.
naftiko: "0.5"
info:
label: "ServiceNow IT Asset Inventory Sync"
description: "Syncs IT hardware and software asset records from ServiceNow Asset Management with the Microsoft 365 device inventory to identify unmanaged devices."
tags:
- itsm
- asset-management
- servicenow
- microsoft-365
capability:
exposes:
- type: mcp
namespace: asset-ops
port: 8080
tools:
- name: sync-asset-inventory
description: "Retrieve all managed devices from Microsoft Graph (Intune) and compare with ServiceNow hardware asset records. Return a list of devices present in Intune but missing from ServiceNow for reconciliation."
steps:
- name: get-intune-devices
type: call
call: msgraph.get-managed-devices
- name: get-snow-assets
type: call
call: servicenow.get-hardware-assets
- name: create-snow-assets
type: call
call: servicenow.create-asset
with:
device_data: "{{get-intune-devices.value}}"
consumes:
- type: http
namespace: msgraph
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: managed-devices
path: "/deviceManagement/managedDevices"
operations:
- name: get-managed-devices
method: GET
- type: http
namespace: servicenow
baseUri: "https://kimberly-clark.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
resources:
- name: hardware-assets
path: "/table/alm_hardware"
operations:
- name: get-hardware-assets
method: GET
- name: create-asset
method: POST
Searches SharePoint for documents matching a keyword.
naftiko: "0.5"
info:
label: "SharePoint Document Search"
description: "Searches SharePoint for documents matching a keyword."
tags:
- operations
- documents
- sharepoint
- search
capability:
exposes:
- type: mcp
namespace: doc-management
port: 8080
tools:
- name: search-docs
description: "Search SharePoint for documents."
inputParameters:
- name: keyword
type: string
description: "Search keyword."
- name: site_id
type: string
description: "SharePoint site ID."
call: sharepoint.search
with:
siteId: "{{site_id}}"
query: "{{keyword}}"
outputParameters:
- name: results
type: string
mapping: "$.value"
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/sites/drive/items"
operations:
- name: search-docs
method: GET
Queries Snowflake for consumer demand signals across tissue, diaper, and personal care categories by region.
naftiko: "0.5"
info:
label: "Snowflake Consumer Demand Signal Query"
description: "Queries Snowflake for consumer demand signals across tissue, diaper, and personal care categories by region."
tags:
- analytics
- supply-chain
- snowflake
- data
capability:
exposes:
- type: mcp
namespace: demand-analytics
port: 8080
tools:
- name: query-demand-signals
description: "Query Snowflake for consumer demand signals including velocity, weeks of supply, and demand trend indicators."
inputParameters:
- name: category
type: string
description: "Product category (e.g., bath-tissue, diapers, fem-care)."
- name: region
type: string
description: "Market region code."
call: snowflake.execute-query
with:
warehouse: "DEMAND_ANALYTICS_WH"
query: "SELECT sku, velocity, weeks_of_supply, trend FROM demand_signals WHERE category='{{category}}' AND region='{{region}}'"
outputParameters:
- name: signals
type: string
mapping: "$.data"
consumes:
- type: http
namespace: snowflake
baseUri: "https://kimberlyclark.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
Queries Snowflake for failed or stalled data pipeline tasks, compiles a summary, and opens a ServiceNow incident if any critical jobs are overdue.
naftiko: "0.5"
info:
label: "Snowflake Data Pipeline Health Check"
description: "Queries Snowflake for failed or stalled data pipeline tasks, compiles a summary, and opens a ServiceNow incident if any critical jobs are overdue."
tags:
- data
- analytics
- monitoring
- snowflake
- servicenow
capability:
exposes:
- type: mcp
namespace: data-ops
port: 8080
tools:
- name: check-pipeline-health
description: "Query Snowflake task execution history for failures or missed schedules in the last N hours. If critical jobs are overdue, open a ServiceNow incident. Use for automated data platform monitoring."
inputParameters:
- name: hours_back
in: body
type: integer
description: "Number of hours of task execution history to check, e.g. 6."
steps:
- name: get-failed-tasks
type: call
call: snowflake.query-task-history
with:
hours_back: "{{hours_back}}"
- name: create-incident
type: call
call: servicenow.create-incident
with:
short_description: "Snowflake pipeline failures detected in last {{hours_back}} hours"
category: "data_platform"
priority: "2"
consumes:
- type: http
namespace: snowflake
baseUri: "https://kimberly-clark.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: task-history
path: "/statements"
operations:
- name: query-task-history
method: POST
- type: http
namespace: servicenow
baseUri: "https://kimberly-clark.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
Queries Snowflake's query history to identify long-running or expensive queries, flags policy violations, and posts a governance summary to the data platform Teams channel.
naftiko: "0.5"
info:
label: "Snowflake Query Governance Audit"
description: "Queries Snowflake's query history to identify long-running or expensive queries, flags policy violations, and posts a governance summary to the data platform Teams channel."
tags:
- data
- governance
- snowflake
- analytics
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: data-governance
port: 8080
tools:
- name: audit-query-governance
description: "Retrieve Snowflake query history for the last N hours and identify queries exceeding execution time or credit thresholds. Post a governance summary to the data platform Teams channel. Use for daily data platform cost governance."
inputParameters:
- name: hours_back
in: body
type: integer
description: "Number of hours of query history to analyze, e.g. 24."
- name: threshold_seconds
in: body
type: integer
description: "Query execution time threshold in seconds. Queries exceeding this are flagged."
steps:
- name: get-query-history
type: call
call: snowflake.get-query-history
with:
hours_back: "{{hours_back}}"
threshold_seconds: "{{threshold_seconds}}"
- name: post-report
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_data_channel_id"
text: "Snowflake Query Governance Report (last {{hours_back}}h): {{get-query-history.flagged_count}} queries exceeded {{threshold_seconds}}s threshold."
consumes:
- type: http
namespace: snowflake
baseUri: "https://kimberly-clark.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: query-history
path: "/statements"
operations:
- name: get-query-history
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: post-channel-message
method: POST
Queries Snowflake for retail POS analytics including velocity, distribution, and share data.
naftiko: "0.5"
info:
label: "Snowflake Retail POS Analytics Query"
description: "Queries Snowflake for retail POS analytics including velocity, distribution, and share data."
tags:
- analytics
- sales
- snowflake
- retail
capability:
exposes:
- type: mcp
namespace: retail-analytics
port: 8080
tools:
- name: query-pos-data
description: "Query Snowflake retail POS data for a category and retailer."
inputParameters:
- name: category
type: string
description: "Product category."
- name: retailer
type: string
description: "Retail account."
- name: date_from
type: string
description: "Start date."
call: snowflake.execute-query
with:
warehouse: "RETAIL_ANALYTICS_WH"
query: "SELECT * FROM pos WHERE category='{{category}}'"
outputParameters:
- name: data
type: string
mapping: "$.data"
consumes:
- type: http
namespace: snowflake
baseUri: "https://kimberlyclark.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
Queries Snowflake for supply chain KPIs including fill rate, OTIF, and inventory turns.
naftiko: "0.5"
info:
label: "Snowflake Supply Chain KPI Query"
description: "Queries Snowflake for supply chain KPIs including fill rate, OTIF, and inventory turns."
tags:
- supply-chain
- analytics
- snowflake
- reporting
capability:
exposes:
- type: mcp
namespace: sc-analytics
port: 8080
tools:
- name: query-sc-kpis
description: "Query supply chain KPIs from Snowflake."
inputParameters:
- name: region
type: string
description: "Region code."
- name: period
type: string
description: "Period."
call: snowflake.execute-query
with:
warehouse: "SC_ANALYTICS_WH"
query: "SELECT fill_rate, otif FROM sc_kpis WHERE region='{{region}}'"
outputParameters:
- name: fill_rate
type: string
mapping: "$.data[0].fill_rate"
- name: otif
type: string
mapping: "$.data[0].otif"
consumes:
- type: http
namespace: snowflake
baseUri: "https://kimberlyclark.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
Generates supplier scorecards from Ariba delivery data, Snowflake quality metrics, and posts to Teams.
naftiko: "0.5"
info:
label: "Supplier Performance Scorecard Generator"
description: "Generates supplier scorecards from Ariba delivery data, Snowflake quality metrics, and posts to Teams."
tags:
- procurement
- supply-chain
- sap
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: procurement-analytics
port: 8080
tools:
- name: generate-scorecard
description: "Generate supplier performance scorecard."
inputParameters:
- name: supplier_id
type: string
description: "Ariba supplier ID."
- name: period
type: string
description: "Period."
steps:
- name: get-delivery
type: call
call: ariba.get-performance
with:
supplier_id: "{{supplier_id}}"
period: "{{period}}"
- name: get-quality
type: call
call: snowflake.execute-query
with:
warehouse: "PROCUREMENT_WH"
query: "SELECT defect_rate FROM supplier_quality WHERE supplier='{{supplier_id}}'"
- name: post
type: call
call: msteams.send-message
with:
channel_id: "procurement"
text: "Supplier {{supplier_id}}: OTD {{get-delivery.on_time_rate}}%"
consumes:
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/supplier-management/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: suppliers
path: "/suppliers"
operations:
- name: get-supplier
method: GET
- type: http
namespace: snowflake
baseUri: "https://kimberlyclark.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Queries SAP S/4HANA for current inventory levels across Kimberly-Clark's distribution centers and generates a Snowflake-backed analytics summary for supply chain planning.
naftiko: "0.5"
info:
label: "Supply Chain Inventory Snapshot"
description: "Queries SAP S/4HANA for current inventory levels across Kimberly-Clark's distribution centers and generates a Snowflake-backed analytics summary for supply chain planning."
tags:
- supply-chain
- inventory
- sap
- snowflake
- analytics
capability:
exposes:
- type: mcp
namespace: supply-chain-ops
port: 8080
tools:
- name: get-inventory-snapshot
description: "Pull current inventory levels by material and plant from SAP S/4HANA, then write a snapshot to Snowflake for supply chain analytics. Use for daily inventory monitoring and replenishment planning."
inputParameters:
- name: plant_code
in: body
type: string
description: "The SAP plant code to query inventory for, e.g. KC01."
steps:
- name: get-inventory
type: call
call: sap.get-inventory
with:
plant: "{{plant_code}}"
- name: write-snapshot
type: call
call: snowflake.insert-snapshot
with:
plant: "{{plant_code}}"
data: "{{get-inventory.results}}"
consumes:
- type: http
namespace: sap
baseUri: "https://kimberly-clark-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: material-stock
path: "/A_MatlStkInAcctMod"
operations:
- name: get-inventory
method: GET
- type: http
namespace: snowflake
baseUri: "https://kimberly-clark.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: insert-snapshot
method: POST
Assesses risk from Snowflake supplier data, Ariba status, and posts alerts to Teams.
naftiko: "0.5"
info:
label: "Supply Chain Risk Assessment"
description: "Assesses risk from Snowflake supplier data, Ariba status, and posts alerts to Teams."
tags:
- supply-chain
- procurement
- snowflake
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: supply-risk
port: 8080
tools:
- name: assess-risk
description: "Assess supply chain risk."
inputParameters:
- name: material_group
type: string
description: "Material group."
steps:
- name: get-data
type: call
call: snowflake.execute-query
with:
warehouse: "SC_WH"
query: "SELECT supplier, share FROM concentration WHERE group='{{material_group}}'"
- name: get-risk
type: call
call: ariba.get-risk
with:
group: "{{material_group}}"
- name: post
type: call
call: msteams.send-message
with:
channel_id: "supply-risk"
text: "Risk for {{material_group}}: Top share {{get-data.top_share}}%"
consumes:
- type: http
namespace: snowflake
baseUri: "https://kimberlyclark.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/supplier-management/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: suppliers
path: "/suppliers"
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: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Creates and configures a new Terraform Cloud workspace for infrastructure provisioning, links it to the corresponding GitHub repository, and notifies the cloud team via Teams.
naftiko: "0.5"
info:
label: "Terraform Cloud Workspace Provisioning"
description: "Creates and configures a new Terraform Cloud workspace for infrastructure provisioning, links it to the corresponding GitHub repository, and notifies the cloud team via Teams."
tags:
- cloud
- infrastructure
- terraform
- github
- microsoft-teams
- devops
capability:
exposes:
- type: mcp
namespace: infra-provisioning
port: 8080
tools:
- name: provision-terraform-workspace
description: "Given a workspace name and GitHub repository URL, create a Terraform Cloud workspace, link it to the GitHub source repo, and notify the cloud team in Teams. Use when onboarding a new infrastructure project."
inputParameters:
- name: workspace_name
in: body
type: string
description: "The name for the new Terraform Cloud workspace in kebab-case."
- name: github_repo
in: body
type: string
description: "The GitHub repository URL to link to the workspace."
steps:
- name: create-workspace
type: call
call: terraform.create-workspace
with:
name: "{{workspace_name}}"
vcs_repo: "{{github_repo}}"
- name: notify-cloud-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_cloud_channel_id"
text: "Terraform workspace '{{workspace_name}}' created and linked to {{github_repo}}. Workspace ID: {{create-workspace.id}}"
consumes:
- type: http
namespace: terraform
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: workspaces
path: "/organizations/kimberly-clark/workspaces"
operations:
- name: create-workspace
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: post-channel-message
method: POST
Generates TPE by pulling Salesforce promotions, Snowflake sales, and refreshing Power BI.
naftiko: "0.5"
info:
label: "Trade Promotion Effectiveness Report"
description: "Generates TPE by pulling Salesforce promotions, Snowflake sales, and refreshing Power BI."
tags:
- sales
- marketing
- salesforce
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: trade-analytics
port: 8080
tools:
- name: generate-tpe
description: "Generate trade promotion effectiveness report."
inputParameters:
- name: promotion_id
type: string
description: "Salesforce promotion ID."
- name: date_from
type: string
description: "Start date."
- name: date_to
type: string
description: "End date."
steps:
- name: get-promo
type: call
call: salesforce.get-promotion
with:
promotion_id: "{{promotion_id}}"
- name: get-sales
type: call
call: snowflake.execute-query
with:
warehouse: "SALES_WH"
query: "SELECT revenue FROM pos WHERE promo='{{promotion_id}}'"
- name: refresh
type: call
call: powerbi.refresh-dataset
with:
datasetId: "trade-promotion-effectiveness"
consumes:
- type: http
namespace: salesforce
baseUri: "https://kimberlyclark.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: sobjects
path: "/sobjects"
operations:
- name: query
method: GET
- type: http
namespace: snowflake
baseUri: "https://kimberlyclark.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets"
operations:
- name: refresh-dataset
method: POST
Performs three-way match between SAP PO, goods receipt, and invoice, routing exceptions to ServiceNow.
naftiko: "0.5"
info:
label: "Vendor Invoice Three-Way Match"
description: "Performs three-way match between SAP PO, goods receipt, and invoice, routing exceptions to ServiceNow."
tags:
- finance
- procurement
- sap
- servicenow
capability:
exposes:
- type: mcp
namespace: ap-automation
port: 8080
tools:
- name: three-way-match
description: "Perform three-way match for vendor invoice."
inputParameters:
- name: invoice_number
type: string
description: "Invoice number."
- name: po_number
type: string
description: "PO number."
steps:
- name: get-po
type: call
call: sap.get-po
with:
po_number: "{{po_number}}"
- name: get-receipt
type: call
call: sap.get-receipt
with:
po_number: "{{po_number}}"
- name: create-exception
type: call
call: servicenow.create-incident
with:
short_description: "Mismatch: {{invoice_number}} vs PO {{po_number}}"
consumes:
- type: http
namespace: sap
baseUri: "https://kimberlyclark-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: resource
path: "/data"
operations:
- name: get-po
method: GET
- name: get-receipt
method: GET
- type: http
namespace: servicenow
baseUri: "https://kimberlyclark.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
Analyzes warehouse capacity from SAP, demand from Snowflake, and refreshes Power BI dashboard.
naftiko: "0.5"
info:
label: "Warehouse Capacity Planning Orchestrator"
description: "Analyzes warehouse capacity from SAP, demand from Snowflake, and refreshes Power BI dashboard."
tags:
- supply-chain
- logistics
- sap
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: warehouse-planning
port: 8080
tools:
- name: plan-capacity
description: "Analyze warehouse capacity."
inputParameters:
- name: warehouse_id
type: string
description: "Warehouse number."
- name: weeks
type: number
description: "Forecast weeks."
steps:
- name: get-util
type: call
call: sap.get-warehouse-stock
with:
warehouse: "{{warehouse_id}}"
- name: get-forecast
type: call
call: snowflake.execute-query
with:
warehouse: "SC_WH"
query: "SELECT pallets FROM forecast WHERE id='{{warehouse_id}}'"
- name: refresh
type: call
call: powerbi.refresh-dataset
with:
datasetId: "warehouse-capacity"
consumes:
- type: http
namespace: sap
baseUri: "https://kimberlyclark-s4.sap.com/sap/opu/odata/sap/API_WAREHOUSE_STOCK_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-warehouse-stock
method: GET
- type: http
namespace: snowflake
baseUri: "https://kimberlyclark.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets"
operations:
- name: refresh-dataset
method: POST
Pulls current compensation data from Workday and generates a cost-center benchmarking report published to Power BI for finance and HR leadership.
naftiko: "0.5"
info:
label: "Workday Compensation Benchmarking Report"
description: "Pulls current compensation data from Workday and generates a cost-center benchmarking report published to Power BI for finance and HR leadership."
tags:
- hr
- finance
- workday
- power-bi
- reporting
- compensation
capability:
exposes:
- type: mcp
namespace: compensation-reporting
port: 8080
tools:
- name: publish-compensation-benchmark
description: "Pull salary and grade data from Workday for all active employees, push the dataset to Power BI, and trigger a report refresh. Use for quarterly compensation benchmarking and HR finance reviews."
inputParameters:
- name: effective_date
in: body
type: string
description: "The effective date for the compensation snapshot in YYYY-MM-DD format."
steps:
- name: get-compensation-data
type: call
call: workday.get-compensation
with:
effectiveDate: "{{effective_date}}"
- name: push-to-powerbi
type: call
call: powerbi.refresh-dataset
with:
workspace_id: "$secrets.powerbi_hr_workspace_id"
dataset_id: "$secrets.powerbi_compensation_dataset_id"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: compensation
path: "/kimberly-clark/compensation/workers"
operations:
- name: get-compensation
method: GET
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: dataset-refreshes
path: "/groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: workspace_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
Generates diversity metrics from Workday, enriches with Snowflake analytics, refreshes Power BI.
naftiko: "0.5"
info:
label: "Workday Diversity Metrics Report"
description: "Generates diversity metrics from Workday, enriches with Snowflake analytics, refreshes Power BI."
tags:
- hr
- analytics
- workday
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: hr-analytics
port: 8080
tools:
- name: generate-diversity
description: "Generate workforce diversity metrics."
inputParameters:
- name: business_unit
type: string
description: "Business unit."
- name: period
type: string
description: "Period."
steps:
- name: get-demo
type: call
call: workday.get-demographics
with:
bu: "{{business_unit}}"
- name: get-analytics
type: call
call: snowflake.execute-query
with:
warehouse: "HR_WH"
query: "SELECT diversity_index FROM metrics WHERE bu='{{business_unit}}'"
- name: refresh
type: call
call: powerbi.refresh-dataset
with:
datasetId: "diversity-dashboard"
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: "/kimberlyclark/workers"
operations:
- name: get-worker
method: GET
- type: http
namespace: snowflake
baseUri: "https://kimberlyclark.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets"
operations:
- name: refresh-dataset
method: POST
Retrieves employee certifications and training completions from Workday for compliance tracking at manufacturing facilities.
naftiko: "0.5"
info:
label: "Workday Employee Certification Lookup"
description: "Retrieves employee certifications and training completions from Workday for compliance tracking at manufacturing facilities."
tags:
- hr
- compliance
- workday
- manufacturing
capability:
exposes:
- type: mcp
namespace: hr-compliance
port: 8080
tools:
- name: get-certifications
description: "Look up employee certifications in Workday including safety training, GMP, and equipment qualifications."
inputParameters:
- name: employee_id
type: string
description: "Workday employee ID."
call: workday.get-certifications
with:
worker_id: "{{employee_id}}"
outputParameters:
- name: certifications
type: string
mapping: "$.certifications"
- name: expired_count
type: string
mapping: "$.expired_count"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: certifications
path: "/kimberlyclark/workers/{{worker_id}}/certifications"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-certifications
method: GET
Retrieves headcount data from Workday by department including active employees and open positions.
naftiko: "0.5"
info:
label: "Workday Headcount Report Lookup"
description: "Retrieves headcount data from Workday by department including active employees and open positions."
tags:
- hr
- workforce
- workday
- reporting
capability:
exposes:
- type: mcp
namespace: hr-reporting
port: 8080
tools:
- name: get-headcount
description: "Get headcount report from Workday by department."
inputParameters:
- name: department
type: string
description: "Department name."
call: workday.get-headcount
with:
department: "{{department}}"
outputParameters:
- name: active_count
type: string
mapping: "$.headcount.active"
- name: open_positions
type: string
mapping: "$.headcount.open"
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: "/kimberlyclark/workers"
operations:
- name: get-worker
method: GET
Triggers the annual performance review cycle in Workday for a specified population, assigns reviewers, and sends reminder notifications via Microsoft Teams.
naftiko: "0.5"
info:
label: "Workday Performance Review Cycle Launch"
description: "Triggers the annual performance review cycle in Workday for a specified population, assigns reviewers, and sends reminder notifications via Microsoft Teams."
tags:
- hr
- performance-management
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-performance
port: 8080
tools:
- name: launch-review-cycle
description: "Given a review cycle name and due date, initiate the Workday performance review process for all eligible employees, and send kick-off reminders to managers via Teams. Use at the start of each annual or mid-year review period."
inputParameters:
- name: cycle_name
in: body
type: string
description: "Name of the performance review cycle, e.g. 2025 Annual Review."
- name: due_date
in: body
type: string
description: "Deadline for completing reviews in YYYY-MM-DD format."
steps:
- name: launch-cycle
type: call
call: workday.create-review-cycle
with:
name: "{{cycle_name}}"
dueDate: "{{due_date}}"
- name: notify-managers
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_hr_channel_id"
text: "Performance review cycle '{{cycle_name}}' has launched. Deadline: {{due_date}}. Please complete your reviews 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-cycles
path: "/kimberly-clark/performanceManagement/reviewCycles"
operations:
- name: create-review-cycle
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: post-channel-message
method: POST
When a new job requisition is approved in Workday Recruiting, creates a corresponding Jira project tracking ticket for the hiring team and notifies the HR channel in Teams.
naftiko: "0.5"
info:
label: "Workday Recruiting Requisition Sync to Jira"
description: "When a new job requisition is approved in Workday Recruiting, creates a corresponding Jira project tracking ticket for the hiring team and notifies the HR channel in Teams."
tags:
- hr
- recruiting
- workday
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: recruiting-ops
port: 8080
tools:
- name: sync-requisition-to-jira
description: "Given a Workday job requisition ID, retrieve requisition details and create a Jira tracking issue for the hiring team. Notify the HR Teams channel with requisition and Jira details."
inputParameters:
- name: requisition_id
in: body
type: string
description: "The Workday job requisition ID."
steps:
- name: get-requisition
type: call
call: workday.get-job-requisition
with:
requisition_id: "{{requisition_id}}"
- name: create-jira-ticket
type: call
call: jira.create-issue
with:
project_key: "HR"
issuetype: "Task"
summary: "Hiring: {{get-requisition.job_title}} ({{get-requisition.department}})"
description: "Workday requisition {{requisition_id}} approved. Target hire date: {{get-requisition.target_hire_date}}"
- name: notify-hr
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_hr_channel_id"
text: "New requisition approved: {{get-requisition.job_title}} | Jira: {{create-jira-ticket.key}}"
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: "/kimberly-clark/recruiting/jobRequisitions/{{requisition_id}}"
inputParameters:
- name: requisition_id
in: path
operations:
- name: get-job-requisition
method: GET
- type: http
namespace: jira
baseUri: "https://kimberly-clark.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves employee time off balances from Workday.
naftiko: "0.5"
info:
label: "Workday Time Off Balance Lookup"
description: "Retrieves employee time off balances from Workday."
tags:
- hr
- workforce
- workday
- time-off
capability:
exposes:
- type: mcp
namespace: hr-time-mgmt
port: 8080
tools:
- name: get-time-off
description: "Look up time off balances in Workday."
inputParameters:
- name: employee_id
type: string
description: "Workday employee ID."
call: workday.get-time-off
with:
worker_id: "{{employee_id}}"
outputParameters:
- name: vacation
type: string
mapping: "$.balance.vacation"
- name: sick
type: string
mapping: "$.balance.sick"
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: "/kimberlyclark/workers"
operations:
- name: get-worker
method: GET