Colgate Palmolive Capabilities
Naftiko 0.5 capability definitions for Colgate Palmolive - 100 capabilities showing integration workflows and service orchestrations.
When Adobe Analytics detects a traffic anomaly on a Colgate-Palmolive digital property, creates a ServiceNow ticket and notifies the digital team in Teams.
naftiko: "0.5"
info:
label: "Adobe Analytics Anomaly Triage"
description: "When Adobe Analytics detects a traffic anomaly on a Colgate-Palmolive digital property, creates a ServiceNow ticket and notifies the digital team in Teams."
tags:
- marketing
- analytics
- adobe-analytics
- servicenow
- microsoft-teams
- monitoring
capability:
exposes:
- type: mcp
namespace: digital-monitoring
port: 8080
tools:
- name: handle-analytics-anomaly
description: "Given an Adobe Analytics report suite ID and anomaly description, create a ServiceNow ticket for investigation and alert the digital team in Teams."
inputParameters:
- name: report_suite_id
in: body
type: string
description: "The Adobe Analytics report suite ID where the anomaly occurred."
- name: anomaly_description
in: body
type: string
description: "Description of the detected anomaly."
- name: metric
in: body
type: string
description: "The metric that anomaly was detected on, e.g. visits, revenue."
steps:
- name: get-anomaly-data
type: call
call: "adobe-analytics.get-anomaly-report"
with:
reportSuiteId: "{{report_suite_id}}"
metric: "{{metric}}"
- name: create-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "Analytics anomaly on {{report_suite_id}}: {{anomaly_description}}"
category: "digital_analytics"
description: "Metric: {{metric}}\nAnomaly: {{anomaly_description}}\nValue: {{get-anomaly-data.currentValue}}"
- name: notify-digital-team
type: call
call: "msteams.post-channel-message"
with:
channelId: "digital-team"
message: "Analytics anomaly detected on {{report_suite_id}}: {{anomaly_description}} | ServiceNow: {{create-ticket.number}}"
consumes:
- type: http
namespace: adobe-analytics
baseUri: "https://analytics.adobe.io/api"
authentication:
type: bearer
token: "$secrets.adobe_analytics_token"
resources:
- name: anomaly-detection
path: "/anomalyDetection/suites/{{reportSuiteId}}"
inputParameters:
- name: reportSuiteId
in: path
operations:
- name: get-anomaly-report
method: POST
- type: http
namespace: servicenow
baseUri: "https://colgate-palmolive.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/channels/{{channelId}}/messages"
inputParameters:
- name: channelId
in: path
operations:
- name: post-channel-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
When Azure Cost Management detects a cost spike exceeding threshold, opens a ServiceNow ticket, tags the offending resources, and alerts the FinOps team in Teams.
naftiko: "0.5"
info:
label: "Azure Cost Anomaly Responder"
description: "When Azure Cost Management detects a cost spike exceeding threshold, opens a ServiceNow ticket, tags the offending resources, and alerts the FinOps team in Teams."
tags:
- cloud
- finops
- azure
- servicenow
- microsoft-teams
- cost-management
capability:
exposes:
- type: mcp
namespace: cloud-finops
port: 8080
tools:
- name: handle-cost-anomaly
description: "Given an Azure subscription ID and anomaly alert details, create a ServiceNow cost management ticket and post an alert to the FinOps Teams channel."
inputParameters:
- name: subscription_id
in: body
type: string
description: "The Azure subscription ID where the anomaly was detected."
- name: anomaly_amount
in: body
type: number
description: "The anomalous spend amount in USD."
- name: resource_group
in: body
type: string
description: "The Azure resource group associated with the cost spike."
steps:
- name: get-cost-details
type: call
call: "azure-cost.get-usage"
with:
subscriptionId: "{{subscription_id}}"
resourceGroup: "{{resource_group}}"
- name: create-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "Azure cost anomaly: {{resource_group}} +${{anomaly_amount}}"
category: "cloud_cost"
urgency: "2"
- name: alert-finops
type: call
call: "msteams.post-channel-message"
with:
channelId: "finops-alerts"
message: "Cost anomaly detected in {{resource_group}}: +${{anomaly_amount}}. ServiceNow: {{create-ticket.number}}."
consumes:
- type: http
namespace: azure-cost
baseUri: "https://management.azure.com"
authentication:
type: bearer
token: "$secrets.azure_token"
resources:
- name: usage
path: "/subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroup}}/providers/Microsoft.CostManagement/query"
inputParameters:
- name: subscriptionId
in: path
- name: resourceGroup
in: path
operations:
- name: get-usage
method: POST
- type: http
namespace: servicenow
baseUri: "https://colgate-palmolive.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/channels/{{channelId}}/messages"
inputParameters:
- name: channelId
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/colgatepalmolive"
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://colgatepalmolive.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://colgatepalmolive.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://colgatepalmolive.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
Monitors cold chain temperatures from Snowflake IoT data, flags excursions, and creates ServiceNow incidents for out-of-range events.
naftiko: "0.5"
info:
label: "Cold Chain Temperature Monitoring"
description: "Monitors cold chain temperatures from Snowflake IoT data, flags excursions, and creates ServiceNow incidents for out-of-range events."
tags:
- supply-chain
- quality
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: cold-chain
port: 8080
tools:
- name: monitor-cold-chain
description: "Monitor cold chain temperature excursions and create incidents."
inputParameters:
- name: shipment_id
type: string
description: "Shipment tracking ID."
- name: max_temp
type: number
description: "Maximum allowed temperature in Celsius."
steps:
- name: get-temps
type: call
call: snowflake.execute-query
with:
warehouse: "IOT_WH"
query: "SELECT timestamp, temp_celsius FROM cold_chain WHERE shipment='{{shipment_id}}' AND temp_celsius>{{max_temp}}"
- name: create-incident
type: call
call: servicenow.create-incident
with:
short_description: "Cold chain excursion: shipment {{shipment_id}}"
description: "{{get-temps.excursion_count}} temperature excursions above {{max_temp}}C"
- name: alert-team
type: call
call: msteams.send-message
with:
channel_id: "quality-alerts"
text: "COLD CHAIN ALERT: Shipment {{shipment_id}} had {{get-temps.excursion_count}} excursions"
consumes:
- type: http
namespace: snowflake
baseUri: "https://colgatepalmolive.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://colgatepalmolive.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
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://colgatepalmolive.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://colgatepalmolive.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://colgatepalmolive.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://colgatepalmolive.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://colgatepalmolive.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://colgatepalmolive.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: "/colgatepalmolive/workers"
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://colgatepalmolive.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://colgatepalmolive-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://colgatepalmolive.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://colgatepalmolive.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://colgatepalmolive-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://colgatepalmolive.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://colgatepalmolive.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 a Datadog monitor triggers a critical alert for a production service, automatically creates a ServiceNow P1 incident and pages the on-call team.
naftiko: "0.5"
info:
label: "Datadog Alert to ServiceNow Incident"
description: "When a Datadog monitor triggers a critical alert for a production service, automatically creates a ServiceNow P1 incident and pages the on-call team."
tags:
- observability
- itsm
- datadog
- servicenow
- incident-response
capability:
exposes:
- type: mcp
namespace: observability-ops
port: 8080
tools:
- name: handle-datadog-alert
description: "Given a Datadog monitor alert, create a ServiceNow P1 incident and post a notification to the on-call Teams channel."
inputParameters:
- name: monitor_id
in: body
type: string
description: "The Datadog monitor ID that triggered the alert."
- name: monitor_name
in: body
type: string
description: "The Datadog monitor name."
- name: alert_message
in: body
type: string
description: "The alert message body from Datadog."
steps:
- name: get-monitor
type: call
call: "datadog.get-monitor"
with:
monitor_id: "{{monitor_id}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Datadog alert: {{monitor_name}}"
description: "{{alert_message}}\nMonitor: {{monitor_id}}\nStatus: {{get-monitor.overall_state}}"
urgency: "1"
impact: "1"
- name: page-oncall
type: call
call: "msteams.post-channel-message"
with:
channelId: "oncall-alerts"
message: "P1 Incident: {{monitor_name}} | ServiceNow: {{create-incident.number}} | Details: {{alert_message}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: monitors
path: "/monitor/{{monitor_id}}"
inputParameters:
- name: monitor_id
in: path
operations:
- name: get-monitor
method: GET
- type: http
namespace: servicenow
baseUri: "https://colgate-palmolive.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/channels/{{channelId}}/messages"
inputParameters:
- name: channelId
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://colgatepalmolive.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://colgatepalmolive-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://colgatepalmolive.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://colgatepalmolive.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 distributor orders from Salesforce through SAP fulfillment and posts cash collection status to the finance Teams channel.
naftiko: "0.5"
info:
label: "Distributor Order to Cash Tracker"
description: "Tracks distributor orders from Salesforce through SAP fulfillment and posts cash collection status to the finance Teams channel."
tags:
- sales
- finance
- salesforce
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: order-to-cash
port: 8080
tools:
- name: track-order-to-cash
description: "Track distributor order through fulfillment and collection."
inputParameters:
- name: order_id
type: string
description: "Salesforce order ID."
steps:
- name: get-order
type: call
call: salesforce.get-order
with:
order_id: "{{order_id}}"
- name: get-fulfillment
type: call
call: sap.get-delivery-status
with:
order: "{{get-order.sap_reference}}"
- name: post-status
type: call
call: msteams.send-message
with:
channel_id: "finance-ar"
text: "Order {{order_id}}: Fulfillment {{get-fulfillment.status}}. Invoice: {{get-fulfillment.invoice_number}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://colgatepalmolive.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: orders
path: "/sobjects/Order"
operations:
- name: get-order
method: GET
- type: http
namespace: sap
baseUri: "https://colgatepalmolive-s4.sap.com/sap/opu/odata/sap/API_OUTBOUND_DELIVERY_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: deliveries
path: "/data"
operations:
- name: get-delivery-status
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://colgatepalmolive.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://colgatepalmolive-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://colgatepalmolive.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: "/colgatepalmolive/workers"
operations:
- name: get-worker
method: GET
- type: http
namespace: jira
baseUri: "https://colgatepalmolive.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 processed in Workday, deactivates their Microsoft 365 account, revokes Okta access, and closes all open ServiceNow tickets.
naftiko: "0.5"
info:
label: "Employee Offboarding Workflow"
description: "When an employee termination is processed in Workday, deactivates their Microsoft 365 account, revokes Okta access, and closes all open ServiceNow tickets."
tags:
- hr
- offboarding
- workday
- okta
- servicenow
capability:
exposes:
- type: mcp
namespace: hr-offboarding
port: 8080
tools:
- name: trigger-offboarding
description: "Given a Workday employee ID and termination date, revoke Okta access, disable the Microsoft 365 account, and resolve open ServiceNow tickets."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday worker ID for the departing employee."
- name: termination_date
in: body
type: string
description: "Termination date in YYYY-MM-DD format."
steps:
- name: get-worker
type: call
call: "workday.get-worker"
with:
worker_id: "{{employee_id}}"
- name: deactivate-okta
type: call
call: "okta.deactivate-user"
with:
login: "{{get-worker.work_email}}"
- name: disable-m365
type: call
call: "msgraph.update-user"
with:
userPrincipalName: "{{get-worker.work_email}}"
accountEnabled: "false"
- name: close-tickets
type: call
call: "servicenow.close-user-tickets"
with:
caller_id: "{{get-worker.work_email}}"
close_notes: "Account deactivated - employee terminated {{termination_date}}"
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: "/colgate-palmolive/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: okta
baseUri: "https://colgate-palmolive.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: users
path: "/users/{{login}}/lifecycle/deactivate"
inputParameters:
- name: login
in: path
operations:
- name: deactivate-user
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/{{userPrincipalName}}"
inputParameters:
- name: userPrincipalName
in: path
operations:
- name: update-user
method: PATCH
- type: http
namespace: servicenow
baseUri: "https://colgate-palmolive.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
Verifies allergen declarations by checking SAP BOM ingredients, querying Snowflake allergen database, and creating Jira review tasks for discrepancies.
naftiko: "0.5"
info:
label: "Food Safety Allergen Verification"
description: "Verifies allergen declarations by checking SAP BOM ingredients, querying Snowflake allergen database, and creating Jira review tasks for discrepancies."
tags:
- quality
- food-safety
- sap
- snowflake
- jira
capability:
exposes:
- type: mcp
namespace: food-safety
port: 8080
tools:
- name: verify-allergens
description: "Verify allergen declarations against BOM and regulatory database."
inputParameters:
- name: material_number
type: string
description: "SAP material number."
- name: market
type: string
description: "Target market country code."
steps:
- name: get-ingredients
type: call
call: sap.get-bom
with:
material: "{{material_number}}"
- name: check-allergens
type: call
call: snowflake.execute-query
with:
warehouse: "FOOD_SAFETY_WH"
query: "SELECT allergen, status FROM allergen_db WHERE ingredient IN ({{get-ingredients.components}}) AND market='{{market}}'"
- name: create-review
type: call
call: jira.create-issue
with:
project_key: "FSAFETY"
summary: "Allergen verification: {{material_number}} for {{market}}"
consumes:
- type: http
namespace: sap
baseUri: "https://colgatepalmolive-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: bom
path: "/data"
operations:
- name: get-bom
method: GET
- type: http
namespace: snowflake
baseUri: "https://colgatepalmolive.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://colgatepalmolive.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
On a GitHub Actions workflow failure on a protected branch, creates a Jira bug, posts a failure summary to the engineering Teams channel, and logs the incident in Datadog.
naftiko: "0.5"
info:
label: "GitHub CI/CD Pipeline Failure Handler"
description: "On a GitHub Actions workflow failure on a protected branch, creates a Jira bug, posts a failure summary to the engineering Teams channel, and logs the incident in Datadog."
tags:
- devops
- cicd
- github
- jira
- datadog
- incident-response
capability:
exposes:
- type: mcp
namespace: devops-cicd
port: 8080
tools:
- name: handle-pipeline-failure
description: "Given a GitHub Actions workflow failure event, create a Jira bug, log a Datadog event, and alert the engineering Teams channel with full context."
inputParameters:
- name: repo
in: body
type: string
description: "The GitHub repository name in owner/repo format."
- name: workflow_name
in: body
type: string
description: "The name of the failed GitHub Actions workflow."
- name: branch
in: body
type: string
description: "The branch on which the failure occurred."
- name: run_id
in: body
type: string
description: "The GitHub Actions workflow run ID."
steps:
- name: get-run-details
type: call
call: "github.get-workflow-run"
with:
repo: "{{repo}}"
run_id: "{{run_id}}"
- name: create-jira-bug
type: call
call: "jira.create-issue"
with:
projectKey: "ENG"
issuetype: "Bug"
summary: "[CI Failure] {{repo}} / {{branch}} — {{workflow_name}}"
description: "Run: {{run_id}}\nBranch: {{branch}}\nConclusion: {{get-run-details.conclusion}}"
- name: log-datadog-event
type: call
call: "datadog.create-event"
with:
title: "CI Failure: {{repo}} {{workflow_name}}"
text: "Branch: {{branch}}, Run: {{run_id}}"
alert_type: "error"
- name: alert-team
type: call
call: "msteams.post-channel-message"
with:
channelId: "engineering-alerts"
message: "CI Failure: {{repo}} | Branch: {{branch}} | Workflow: {{workflow_name}} | Jira: {{create-jira-bug.key}}"
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://colgate-palmolive.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: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: events
path: "/events"
operations:
- name: create-event
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/channels/{{channelId}}/messages"
inputParameters:
- name: channelId
in: path
operations:
- name: post-channel-message
method: POST
Scans GitHub Dependabot alerts for critical vulnerabilities, creates Jira security tickets, and notifies the security team in Microsoft Teams.
naftiko: "0.5"
info:
label: "GitHub Security Vulnerability Triage"
description: "Scans GitHub Dependabot alerts for critical vulnerabilities, creates Jira security tickets, and notifies the security team in Microsoft Teams."
tags:
- security
- devops
- github
- jira
- microsoft-teams
- vulnerability-management
capability:
exposes:
- type: mcp
namespace: security-ops
port: 8080
tools:
- name: triage-vulnerability-alerts
description: "Given a GitHub repository, retrieve critical Dependabot security alerts, create Jira security tickets for each, and post a summary to the security Teams channel."
inputParameters:
- name: repo
in: body
type: string
description: "GitHub repository in owner/repo format."
steps:
- name: get-alerts
type: call
call: "github.get-dependabot-alerts"
with:
repo: "{{repo}}"
severity: "critical"
- name: create-security-ticket
type: call
call: "jira.create-issue"
with:
projectKey: "SEC"
issuetype: "Security"
summary: "Critical vulnerability: {{get-alerts.advisory_summary}}"
description: "Package: {{get-alerts.package_name}}\nCVSS: {{get-alerts.cvss_score}}\nRepo: {{repo}}"
- name: notify-security
type: call
call: "msteams.post-channel-message"
with:
channelId: "security-team"
message: "Critical vulnerability in {{repo}}: {{get-alerts.advisory_summary}} | Jira: {{create-security-ticket.key}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: dependabot-alerts
path: "/repos/{{repo}}/dependabot/alerts"
inputParameters:
- name: repo
in: path
- name: severity
in: query
operations:
- name: get-dependabot-alerts
method: GET
- type: http
namespace: jira
baseUri: "https://colgate-palmolive.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/channels/{{channelId}}/messages"
inputParameters:
- name: channelId
in: path
operations:
- name: post-channel-message
method: POST
Tracks GMP training compliance by pulling Workday certifications, checking overdue trainings in Snowflake, and creating ServiceNow remediation tasks.
naftiko: "0.5"
info:
label: "GMP Training Compliance Tracker"
description: "Tracks GMP training compliance by pulling Workday certifications, checking overdue trainings in Snowflake, and creating ServiceNow remediation tasks."
tags:
- quality
- manufacturing
- workday
- snowflake
- servicenow
capability:
exposes:
- type: mcp
namespace: gmp-compliance
port: 8080
tools:
- name: track-gmp-compliance
description: "Track GMP training compliance across the workforce."
inputParameters:
- name: plant_code
type: string
description: "Plant code."
- name: department
type: string
description: "Department name."
steps:
- name: get-certifications
type: call
call: workday.get-certifications
with:
plant: "{{plant_code}}"
department: "{{department}}"
- name: check-overdue
type: call
call: snowflake.execute-query
with:
warehouse: "HR_WH"
query: "SELECT employee_id, training, days_overdue FROM gmp_compliance WHERE plant='{{plant_code}}' AND overdue=true"
- name: create-remediation
type: call
call: servicenow.create-incident
with:
short_description: "GMP training overdue: {{plant_code}} {{department}}"
description: "{{check-overdue.count}} employees with overdue GMP training"
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: "/colgatepalmolive/certifications"
operations:
- name: get-certifications
method: GET
- type: http
namespace: snowflake
baseUri: "https://colgatepalmolive.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://colgatepalmolive.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
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
Uses Anthropic Claude to summarize product compliance documents stored in SharePoint and posts the summary to the relevant product team channel in Microsoft Teams.
naftiko: "0.5"
info:
label: "Intelligent Document Summarization"
description: "Uses Anthropic Claude to summarize product compliance documents stored in SharePoint and posts the summary to the relevant product team channel in Microsoft Teams."
tags:
- ai
- automation
- anthropic
- sharepoint
- microsoft-teams
- document-management
capability:
exposes:
- type: mcp
namespace: ai-docs
port: 8080
tools:
- name: summarize-compliance-document
description: "Given a SharePoint file path and target Teams channel, retrieve the document content, send it to Claude for summarization, and post the summary to the Teams channel."
inputParameters:
- name: site_id
in: body
type: string
description: "The SharePoint site ID containing the document."
- name: file_path
in: body
type: string
description: "The relative file path in SharePoint."
- name: teams_channel_id
in: body
type: string
description: "The Teams channel ID to post the summary to."
steps:
- name: get-document
type: call
call: "sharepoint.get-file-content"
with:
siteId: "{{site_id}}"
filePath: "{{file_path}}"
- name: summarize
type: call
call: "anthropic.create-message"
with:
model: "claude-3-5-sonnet-20241022"
content: "Summarize this compliance document in 3-5 key bullet points: {{get-document.content}}"
- name: post-summary
type: call
call: "msteams.post-channel-message"
with:
channelId: "{{teams_channel_id}}"
message: "Document summary for {{file_path}}:\n{{summarize.content}}"
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/sites/{{siteId}}/drive/root:{{filePath}}:/content"
inputParameters:
- name: siteId
in: path
- name: filePath
in: path
operations:
- name: get-file-content
method: GET
- 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
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/channels/{{channelId}}/messages"
inputParameters:
- name: channelId
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://colgatepalmolive.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
Pulls completed sprint data from Jira, calculates team velocity metrics, and posts the sprint review summary to the engineering Teams channel.
naftiko: "0.5"
info:
label: "Jira Sprint Velocity Report"
description: "Pulls completed sprint data from Jira, calculates team velocity metrics, and posts the sprint review summary to the engineering Teams channel."
tags:
- devops
- engineering
- jira
- microsoft-teams
- reporting
capability:
exposes:
- type: mcp
namespace: engineering-reporting
port: 8080
tools:
- name: publish-sprint-velocity
description: "Given a Jira board ID and sprint ID, retrieve completed story points and issues, then post a velocity summary to the engineering Teams channel."
inputParameters:
- name: board_id
in: body
type: string
description: "The Jira software board ID."
- name: sprint_id
in: body
type: string
description: "The Jira sprint ID to report on."
steps:
- name: get-sprint-issues
type: call
call: "jira.get-sprint-issues"
with:
boardId: "{{board_id}}"
sprintId: "{{sprint_id}}"
- name: post-velocity
type: call
call: "msteams.post-channel-message"
with:
channelId: "engineering-team"
message: "Sprint {{sprint_id}} complete: {{get-sprint-issues.completedIssues}} issues, {{get-sprint-issues.completedPoints}} story points delivered."
consumes:
- type: http
namespace: jira
baseUri: "https://colgate-palmolive.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: sprint-issues
path: "/board/{{boardId}}/sprint/{{sprintId}}/issue"
inputParameters:
- name: boardId
in: path
- name: sprintId
in: path
operations:
- name: get-sprint-issues
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/channels/{{channelId}}/messages"
inputParameters:
- name: channelId
in: path
operations:
- name: post-channel-message
method: POST
Retrieves engagement metrics for Colgate-Palmolive's LinkedIn brand campaigns and publishes a weekly performance digest to the marketing Teams channel.
naftiko: "0.5"
info:
label: "LinkedIn Brand Campaign Digest"
description: "Retrieves engagement metrics for Colgate-Palmolive's LinkedIn brand campaigns and publishes a weekly performance digest to the marketing Teams channel."
tags:
- marketing
- social
- linkedin
- microsoft-teams
- reporting
capability:
exposes:
- type: mcp
namespace: social-reporting
port: 8080
tools:
- name: digest-linkedin-performance
description: "Given a LinkedIn campaign ID and date range, retrieve engagement metrics and post a performance digest to the marketing Teams channel."
inputParameters:
- name: campaign_id
in: body
type: string
description: "The LinkedIn campaign ID."
- name: start_date
in: body
type: string
description: "Start date in YYYY-MM-DD format."
- name: end_date
in: body
type: string
description: "End date in YYYY-MM-DD format."
steps:
- name: get-campaign-stats
type: call
call: "linkedin.get-campaign-analytics"
with:
campaignId: "{{campaign_id}}"
startDate: "{{start_date}}"
endDate: "{{end_date}}"
- name: post-digest
type: call
call: "msteams.post-channel-message"
with:
channelId: "marketing-team"
message: "LinkedIn Campaign {{campaign_id}} ({{start_date}} to {{end_date}}): Impressions={{get-campaign-stats.impressions}}, Clicks={{get-campaign-stats.clicks}}, Engagement={{get-campaign-stats.engagementRate}}"
consumes:
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: campaign-analytics
path: "/adAnalytics"
inputParameters:
- name: campaignId
in: query
- name: startDate
in: query
- name: endDate
in: query
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/channels/{{channelId}}/messages"
inputParameters:
- name: channelId
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: "/colgatepalmolive/workers"
operations:
- name: get-worker
method: GET
- type: http
namespace: jira
baseUri: "https://colgatepalmolive.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://colgatepalmolive.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://colgatepalmolive-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://colgatepalmolive.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 daily digest to a Microsoft Teams channel for the marketing team.
naftiko: "0.5"
info:
label: "Marketing Campaign Performance Digest"
description: "Aggregates campaign performance metrics from Adobe Analytics and publishes a daily digest to a Microsoft Teams channel for the marketing team."
tags:
- marketing
- analytics
- adobe-analytics
- microsoft-teams
- reporting
capability:
exposes:
- type: mcp
namespace: marketing-reporting
port: 8080
tools:
- name: digest-campaign-performance
description: "Given a campaign ID and date range, pull performance metrics from Adobe Analytics and post a summary digest to the marketing Teams channel."
inputParameters:
- name: campaign_id
in: body
type: string
description: "The Adobe Analytics campaign identifier."
- name: date_range
in: body
type: string
description: "Date range in YYYY-MM-DD/YYYY-MM-DD format."
- name: teams_channel_id
in: body
type: string
description: "The Microsoft Teams channel ID to post the digest to."
steps:
- name: get-campaign-metrics
type: call
call: "adobe-analytics.get-report"
with:
campaignId: "{{campaign_id}}"
dateRange: "{{date_range}}"
- name: post-digest
type: call
call: "msteams.post-channel-message"
with:
channelId: "{{teams_channel_id}}"
message: "Campaign {{campaign_id}} digest ({{date_range}}): Visits={{get-campaign-metrics.visits}}, Conversions={{get-campaign-metrics.conversions}}, Revenue={{get-campaign-metrics.revenue}}"
consumes:
- type: http
namespace: adobe-analytics
baseUri: "https://analytics.adobe.io/api"
authentication:
type: bearer
token: "$secrets.adobe_analytics_token"
resources:
- name: reports
path: "/reports"
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/channels/{{channelId}}/messages"
inputParameters:
- name: channelId
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://colgatepalmolive.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 employee is created in Workday, opens a ServiceNow onboarding ticket, provisions a Microsoft 365 account, and sends a Teams welcome message.
naftiko: "0.5"
info:
label: "New Hire Onboarding Orchestrator"
description: "When a new employee is created in Workday, opens a ServiceNow onboarding ticket, provisions a Microsoft 365 account, and sends a Teams welcome message."
tags:
- hr
- onboarding
- workday
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-onboarding
port: 8080
tools:
- name: trigger-onboarding
description: "Given a Workday employee ID and start date, orchestrate the full onboarding sequence across ServiceNow, Microsoft Graph, and Microsoft Teams."
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: "Employee 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_to: "IT_Onboarding"
- name: provision-m365
type: call
call: "msgraph.create-user"
with:
displayName: "{{get-worker.full_name}}"
mailNickname: "{{get-worker.username}}"
userPrincipalName: "{{get-worker.work_email}}"
- name: send-welcome
type: call
call: "msteams.post-message"
with:
recipient: "{{get-worker.work_email}}"
message: "Welcome to Colgate-Palmolive, {{get-worker.first_name}}! Your onboarding 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: "/colgate-palmolive/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://colgate-palmolive.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: messages
path: "/chats/messages"
operations:
- name: post-message
method: POST
Orchestrates NPD gate reviews by pulling project status from Jira, financial projections from Snowflake, and posting review summary to Teams.
naftiko: "0.5"
info:
label: "New Product Development Gate Review"
description: "Orchestrates NPD gate reviews by pulling project status from Jira, financial projections from Snowflake, and posting review summary to Teams."
tags:
- r-and-d
- innovation
- jira
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: npd-gates
port: 8080
tools:
- name: conduct-gate-review
description: "Conduct NPD gate review by gathering project status and financials."
inputParameters:
- name: project_key
type: string
description: "Jira project key for NPD."
- name: gate_number
type: number
description: "Gate review number."
steps:
- name: get-project-status
type: call
call: jira.get-issue
with:
issue_key: "{{project_key}}"
- name: get-financials
type: call
call: snowflake.execute-query
with:
warehouse: "FINANCE_WH"
query: "SELECT npv, roi_pct, payback_months FROM npd_financials WHERE project='{{project_key}}'"
- name: post-review
type: call
call: msteams.send-message
with:
channel_id: "npd-reviews"
text: "Gate {{gate_number}} review for {{project_key}}: NPV ${{get-financials.npv}}, ROI {{get-financials.roi_pct}}%"
consumes:
- type: http
namespace: jira
baseUri: "https://colgatepalmolive.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: get-issue
method: GET
- type: http
namespace: snowflake
baseUri: "https://colgatepalmolive.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
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://colgatepalmolive-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://colgatepalmolive.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
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://colgatepalmolive.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: "/colgatepalmolive/workers"
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://colgatepalmolive.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
Retrieves a list of Okta users with privileged application assignments for a quarterly access review and posts the report to SharePoint.
naftiko: "0.5"
info:
label: "Okta User Access Review"
description: "Retrieves a list of Okta users with privileged application assignments for a quarterly access review and posts the report to SharePoint."
tags:
- identity
- security
- okta
- sharepoint
- access-management
capability:
exposes:
- type: mcp
namespace: identity-ops
port: 8080
tools:
- name: run-access-review
description: "Given an Okta group ID, retrieve all active members and their application assignments, then upload the access review report to SharePoint."
inputParameters:
- name: group_id
in: body
type: string
description: "The Okta group ID to review."
- name: sharepoint_site_id
in: body
type: string
description: "The SharePoint site ID where the report should be uploaded."
steps:
- name: get-group-members
type: call
call: "okta.get-group-members"
with:
groupId: "{{group_id}}"
- name: upload-report
type: call
call: "sharepoint.create-file"
with:
siteId: "{{sharepoint_site_id}}"
fileName: "access-review-{{group_id}}.json"
content: "{{get-group-members.members}}"
consumes:
- type: http
namespace: okta
baseUri: "https://colgate-palmolive.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: group-members
path: "/groups/{{groupId}}/users"
inputParameters:
- name: groupId
in: path
operations:
- name: get-group-members
method: GET
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/sites/{{siteId}}/drive/root/children"
inputParameters:
- name: siteId
in: path
operations:
- name: create-file
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://colgatepalmolive-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://colgatepalmolive.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://colgatepalmolive.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://colgatepalmolive.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://colgatepalmolive.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://colgatepalmolive-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://colgatepalmolive.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 scheduled Power BI dataset refresh after Snowflake pipeline completion and posts the refresh status to the analytics Teams channel.
naftiko: "0.5"
info:
label: "Power BI Report Refresh Trigger"
description: "Triggers a scheduled Power BI dataset refresh after Snowflake pipeline completion and posts the refresh status to the analytics Teams channel."
tags:
- data
- analytics
- power-bi
- snowflake
- microsoft-teams
- reporting
capability:
exposes:
- type: mcp
namespace: bi-reporting
port: 8080
tools:
- name: trigger-report-refresh
description: "Given a Power BI dataset ID, trigger a dataset refresh and post the completion status to the analytics Teams channel."
inputParameters:
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID to refresh."
- name: workspace_id
in: body
type: string
description: "The Power BI workspace ID containing the dataset."
steps:
- name: trigger-refresh
type: call
call: "powerbi.refresh-dataset"
with:
workspaceId: "{{workspace_id}}"
datasetId: "{{dataset_id}}"
- name: notify-analytics
type: call
call: "msteams.post-channel-message"
with:
channelId: "analytics-team"
message: "Power BI dataset {{dataset_id}} refresh triggered in workspace {{workspace_id}}."
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/groups/{{workspaceId}}/datasets/{{datasetId}}/refreshes"
inputParameters:
- name: workspaceId
in: path
- name: datasetId
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/channels/{{channelId}}/messages"
inputParameters:
- name: channelId
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://colgatepalmolive-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://colgatepalmolive.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://colgatepalmolive.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
Coordinates a product launch by publishing content to LinkedIn and retrieving early engagement metrics to share with the brand team in Microsoft Teams.
naftiko: "0.5"
info:
label: "Product Launch Social Media Coordinator"
description: "Coordinates a product launch by publishing content to LinkedIn and retrieving early engagement metrics to share with the brand team in Microsoft Teams."
tags:
- marketing
- social
- linkedin
- microsoft-teams
- product-launch
capability:
exposes:
- type: mcp
namespace: product-launch
port: 8080
tools:
- name: publish-launch-content
description: "Given a LinkedIn organization ID and post content, publish the launch post and then retrieve initial engagement metrics, posting the result to the brand Teams channel."
inputParameters:
- name: org_id
in: body
type: string
description: "The LinkedIn organization ID for Colgate-Palmolive."
- name: post_content
in: body
type: string
description: "The content text for the LinkedIn post."
steps:
- name: publish-post
type: call
call: "linkedin.create-post"
with:
organizationId: "{{org_id}}"
text: "{{post_content}}"
- name: notify-brand-team
type: call
call: "msteams.post-channel-message"
with:
channelId: "brand-team"
message: "Product launch post published on LinkedIn. Post ID: {{publish-post.id}}."
consumes:
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: shares
path: "/ugcPosts"
operations:
- name: create-post
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/channels/{{channelId}}/messages"
inputParameters:
- name: channelId
in: path
operations:
- name: post-channel-message
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://colgatepalmolive-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://colgatepalmolive.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 product shelf life by checking SAP batch expiry dates, identifying at-risk inventory in Snowflake, and alerting supply chain via Teams.
naftiko: "0.5"
info:
label: "Product Shelf Life Monitoring"
description: "Monitors product shelf life by checking SAP batch expiry dates, identifying at-risk inventory in Snowflake, and alerting supply chain via Teams."
tags:
- quality
- supply-chain
- sap
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: shelf-life
port: 8080
tools:
- name: monitor-shelf-life
description: "Monitor product shelf life and alert on expiring inventory."
inputParameters:
- name: plant_code
type: string
description: "SAP plant code."
- name: days_threshold
type: number
description: "Days until expiry threshold."
steps:
- name: get-expiring
type: call
call: sap.get-expiring-batches
with:
plant: "{{plant_code}}"
threshold: "{{days_threshold}}"
- name: get-inventory-value
type: call
call: snowflake.execute-query
with:
warehouse: "SC_WH"
query: "SELECT sum(value) FROM inventory WHERE plant='{{plant_code}}' AND days_to_expiry<={{days_threshold}}"
- name: alert-team
type: call
call: msteams.send-message
with:
channel_id: "supply-chain"
text: "Shelf life alert: {{get-expiring.count}} batches expiring within {{days_threshold}} days at {{plant_code}}"
consumes:
- type: http
namespace: sap
baseUri: "https://colgatepalmolive-s4.sap.com/sap/opu/odata/sap/API_BATCH_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: batches
path: "/data"
operations:
- name: get-expiring-batches
method: GET
- type: http
namespace: snowflake
baseUri: "https://colgatepalmolive.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
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://colgatepalmolive-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://colgatepalmolive.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://colgatepalmolive-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://colgatepalmolive.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://colgatepalmolive-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://colgatepalmolive.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://colgatepalmolive.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://colgatepalmolive-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://colgatepalmolive.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://colgatepalmolive.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://colgatepalmolive.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://colgatepalmolive.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://colgatepalmolive.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://colgatepalmolive.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://colgatepalmolive.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
Calculates a customer health score from Salesforce case history and product usage data, then updates the account record for proactive retention management.
naftiko: "0.5"
info:
label: "Salesforce Customer Health Score Updater"
description: "Calculates a customer health score from Salesforce case history and product usage data, then updates the account record for proactive retention management."
tags:
- crm
- customer-success
- salesforce
- reporting
capability:
exposes:
- type: mcp
namespace: customer-success
port: 8080
tools:
- name: update-health-score
description: "Given a Salesforce account ID, retrieve open cases and usage data, compute a health score, and update the account record with the latest score."
inputParameters:
- name: account_id
in: body
type: string
description: "The Salesforce account record ID."
steps:
- name: get-account-cases
type: call
call: "salesforce.get-account-cases"
with:
accountId: "{{account_id}}"
- name: update-account
type: call
call: "salesforce-update.update-account"
with:
accountId: "{{account_id}}"
healthScore: "{{get-account-cases.healthIndicator}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://colgate-palmolive.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/sobjects/Account/{{accountId}}/Cases"
inputParameters:
- name: accountId
in: path
operations:
- name: get-account-cases
method: GET
- type: http
namespace: salesforce-update
baseUri: "https://colgate-palmolive.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{accountId}}"
inputParameters:
- name: accountId
in: path
operations:
- name: update-account
method: PATCH
When a new lead is created in Salesforce, enriches the record with ZoomInfo company data and assigns it to the correct sales territory owner.
naftiko: "0.5"
info:
label: "Salesforce Lead Enrichment"
description: "When a new lead is created in Salesforce, enriches the record with ZoomInfo company data and assigns it to the correct sales territory owner."
tags:
- crm
- sales
- salesforce
- zoominfo
- lead-management
capability:
exposes:
- type: mcp
namespace: crm-leads
port: 8080
tools:
- name: enrich-lead
description: "Given a Salesforce lead ID, fetch company firmographics from ZoomInfo and update the Salesforce record with enriched data and territory assignment."
inputParameters:
- name: lead_id
in: body
type: string
description: "The Salesforce lead record ID."
steps:
- name: get-lead
type: call
call: "salesforce.get-lead"
with:
lead_id: "{{lead_id}}"
- name: enrich-company
type: call
call: "zoominfo.search-company"
with:
companyName: "{{get-lead.Company}}"
website: "{{get-lead.Website}}"
- name: update-lead
type: call
call: "salesforce-update.update-lead"
with:
lead_id: "{{lead_id}}"
AnnualRevenue: "{{enrich-company.revenue}}"
NumberOfEmployees: "{{enrich-company.employeeCount}}"
Industry: "{{enrich-company.industry}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://colgate-palmolive.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: get-lead
method: GET
- type: http
namespace: zoominfo
baseUri: "https://api.zoominfo.com/search"
authentication:
type: bearer
token: "$secrets.zoominfo_token"
resources:
- name: companies
path: "/company"
operations:
- name: search-company
method: POST
- type: http
namespace: salesforce-update
baseUri: "https://colgate-palmolive.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://colgatepalmolive.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 moves to Closed Won, creates an SAP S/4HANA sales order and notifies the account team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Salesforce Opportunity Stage Sync"
description: "When a Salesforce opportunity moves to Closed Won, creates an SAP S/4HANA sales order and notifies the account team via Microsoft Teams."
tags:
- crm
- sales
- salesforce
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: crm-opportunity
port: 8080
tools:
- name: sync-closed-opportunity
description: "Given a Salesforce opportunity ID that has moved to Closed Won, create a matching SAP sales order and notify the account team in Teams."
inputParameters:
- name: opportunity_id
in: body
type: string
description: "The Salesforce opportunity record ID."
steps:
- name: get-opportunity
type: call
call: "salesforce.get-opportunity"
with:
opportunity_id: "{{opportunity_id}}"
- name: create-sales-order
type: call
call: "sap-sd.create-sales-order"
with:
customerName: "{{get-opportunity.AccountName}}"
amount: "{{get-opportunity.Amount}}"
currency: "{{get-opportunity.CurrencyIsoCode}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
recipient: "{{get-opportunity.OwnerId}}"
message: "Opportunity {{get-opportunity.Name}} is Closed Won. SAP Sales Order {{create-sales-order.salesOrderId}} has been created."
consumes:
- type: http
namespace: salesforce
baseUri: "https://colgate-palmolive.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-sd
baseUri: "https://colgate-palmolive-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: messages
path: "/chats/messages"
operations:
- name: post-message
method: POST
When a purchase requisition is submitted in SAP Ariba, validates budget availability in SAP S/4HANA and routes the approval to the appropriate manager via Microsoft Teams.
naftiko: "0.5"
info:
label: "SAP Ariba Requisition Approval"
description: "When a purchase requisition is submitted in SAP Ariba, validates budget availability in SAP S/4HANA and routes the approval to the appropriate manager via Microsoft Teams."
tags:
- procurement
- finance
- sap-ariba
- sap
- microsoft-teams
- approval
capability:
exposes:
- type: mcp
namespace: procurement-approval
port: 8080
tools:
- name: approve-requisition
description: "Given an Ariba requisition ID, check budget in SAP S/4HANA and send an approval card to the responsible manager in Microsoft Teams."
inputParameters:
- name: requisition_id
in: body
type: string
description: "The SAP Ariba requisition ID."
- name: manager_email
in: body
type: string
description: "The Microsoft Teams UPN of the approving manager."
steps:
- name: get-requisition
type: call
call: "ariba.get-requisition"
with:
requisitionId: "{{requisition_id}}"
- name: check-budget
type: call
call: "sap-finance.check-budget"
with:
cost_center: "{{get-requisition.costCenter}}"
amount: "{{get-requisition.totalAmount}}"
- name: send-approval-card
type: call
call: "msteams.post-message"
with:
recipient: "{{manager_email}}"
message: "Approval needed: Requisition {{requisition_id}} for {{get-requisition.totalAmount}} {{get-requisition.currency}}. Budget status: {{check-budget.status}}."
consumes:
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/purchase-requisitions/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: requisitions
path: "/requisitions/{{requisitionId}}"
inputParameters:
- name: requisitionId
in: path
operations:
- name: get-requisition
method: GET
- type: http
namespace: sap-finance
baseUri: "https://colgate-palmolive-s4.sap.com/sap/opu/odata/sap/API_COSTCENTER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: budgets
path: "/A_CostCenter('{{cost_center}}')"
inputParameters:
- name: cost_center
in: path
operations:
- name: check-budget
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/chats/messages"
operations:
- name: post-message
method: POST
Registers a new supplier in SAP Ariba, creates the corresponding vendor master record in SAP S/4HANA, and notifies procurement via Teams.
naftiko: "0.5"
info:
label: "SAP Ariba Supplier Onboarding"
description: "Registers a new supplier in SAP Ariba, creates the corresponding vendor master record in SAP S/4HANA, and notifies procurement via Teams."
tags:
- procurement
- supplier-management
- sap-ariba
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: supplier-onboarding
port: 8080
tools:
- name: onboard-supplier
description: "Given supplier details, register the supplier in SAP Ariba, create the vendor master in SAP S/4HANA, and notify the procurement team in Teams."
inputParameters:
- name: supplier_name
in: body
type: string
description: "Legal name of the supplier."
- name: supplier_email
in: body
type: string
description: "Primary contact email for the supplier."
- name: country_code
in: body
type: string
description: "ISO 2-letter country code for the supplier's primary country."
steps:
- name: register-ariba
type: call
call: "ariba.create-supplier"
with:
name: "{{supplier_name}}"
email: "{{supplier_email}}"
country: "{{country_code}}"
- name: create-vendor-master
type: call
call: "sap-erp.create-vendor"
with:
companyName: "{{supplier_name}}"
aribaId: "{{register-ariba.supplierId}}"
country: "{{country_code}}"
- name: notify-procurement
type: call
call: "msteams.post-channel-message"
with:
channelId: "procurement-team"
message: "New supplier onboarded: {{supplier_name}} | Ariba ID: {{register-ariba.supplierId}} | SAP Vendor: {{create-vendor-master.vendorId}}"
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: create-supplier
method: POST
- type: http
namespace: sap-erp
baseUri: "https://colgate-palmolive-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_BusinessPartner"
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/channels/{{channelId}}/messages"
inputParameters:
- name: channelId
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://colgatepalmolive-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://colgatepalmolive-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
When an expense report is submitted in SAP Concur, validates the amount against policy limits and routes for manager approval via Microsoft Teams.
naftiko: "0.5"
info:
label: "SAP Concur Expense Report Approval"
description: "When an expense report is submitted in SAP Concur, validates the amount against policy limits and routes for manager approval via Microsoft Teams."
tags:
- finance
- expense-management
- sap-concur
- microsoft-teams
- approval
capability:
exposes:
- type: mcp
namespace: expense-approval
port: 8080
tools:
- name: approve-expense-report
description: "Given an SAP Concur expense report ID, validate the total against company policy and send an approval request card to the submitter's manager in Teams."
inputParameters:
- name: report_id
in: body
type: string
description: "The SAP Concur expense report ID."
- name: manager_email
in: body
type: string
description: "Email address of the approving manager."
steps:
- name: get-report
type: call
call: "concur.get-expense-report"
with:
reportId: "{{report_id}}"
- name: send-approval
type: call
call: "msteams.post-message"
with:
recipient: "{{manager_email}}"
message: "Expense approval needed: Report {{report_id}} for {{get-report.Total}} {{get-report.CurrencyCode}} submitted by {{get-report.OwnerName}}."
consumes:
- type: http
namespace: concur
baseUri: "https://www.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_token"
resources:
- name: expense-reports
path: "/expense/reports/{{reportId}}"
inputParameters:
- name: reportId
in: path
operations:
- name: get-expense-report
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/chats/messages"
operations:
- name: post-message
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://colgatepalmolive-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://colgatepalmolive-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://colgatepalmolive.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://colgatepalmolive-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://colgatepalmolive.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: sobjects
path: "/sobjects"
operations:
- name: query
method: GET
At month end, retrieves the SAP S/4HANA period close status for all entities, checks for open items, and posts the close checklist status to the finance Teams channel.
naftiko: "0.5"
info:
label: "SAP Finance Period Close Checklist"
description: "At month end, retrieves the SAP S/4HANA period close status for all entities, checks for open items, and posts the close checklist status to the finance Teams channel."
tags:
- finance
- erp
- sap
- microsoft-teams
- period-close
capability:
exposes:
- type: mcp
namespace: finance-close
port: 8080
tools:
- name: check-period-close-status
description: "Given a fiscal year and period, retrieve the SAP period close status for all company codes and post the consolidated status report to the finance Teams channel."
inputParameters:
- name: fiscal_year
in: body
type: string
description: "The fiscal year, e.g. 2025."
- name: fiscal_period
in: body
type: string
description: "The fiscal period number, e.g. 03 for March."
steps:
- name: get-close-status
type: call
call: "sap-finance.get-period-status"
with:
fiscalYear: "{{fiscal_year}}"
fiscalPeriod: "{{fiscal_period}}"
- name: post-status
type: call
call: "msteams.post-channel-message"
with:
channelId: "finance-team"
message: "Period close status FY{{fiscal_year}} P{{fiscal_period}}: Open items={{get-close-status.openItems}}, Blocked postings={{get-close-status.blockedPostings}}"
consumes:
- type: http
namespace: sap-finance
baseUri: "https://colgate-palmolive-s4.sap.com/sap/opu/odata/sap/API_FIGL_PERIOD_LOCK_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: period-status
path: "/A_AccountingPeriodLock"
inputParameters:
- name: fiscalYear
in: query
- name: fiscalPeriod
in: query
operations:
- name: get-period-status
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/channels/{{channelId}}/messages"
inputParameters:
- name: channelId
in: path
operations:
- name: post-channel-message
method: POST
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://colgatepalmolive-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://colgatepalmolive.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://colgatepalmolive-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://colgatepalmolive-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://colgatepalmolive.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
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://colgatepalmolive.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://colgatepalmolive-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
Looks up an SAP S/4HANA purchase order by number and returns structured header status, vendor, and line items for procurement review.
naftiko: "0.5"
info:
label: "SAP Purchase Order Lookup"
description: "Looks up an SAP S/4HANA purchase order by number and returns structured header status, vendor, and line items for procurement review."
tags:
- procurement
- finance
- sap
- erp
capability:
exposes:
- type: mcp
namespace: procurement
port: 8080
tools:
- name: get-purchase-order
description: "Given a PO number, retrieve the SAP S/4HANA purchase order status, vendor name, total value, and open line items. Use for procurement approvals and spend visibility."
inputParameters:
- name: po_number
in: body
type: string
description: "The SAP purchase order number, e.g. 4500012345."
call: "sap-erp.get-po"
with:
po_number: "{{po_number}}"
outputParameters:
- name: status
type: string
mapping: "$.d.OverallStatus"
- name: vendor
type: string
mapping: "$.d.Supplier.CompanyName"
- name: total_value
type: string
mapping: "$.d.TotalAmount"
- name: currency
type: string
mapping: "$.d.TransactionCurrency"
consumes:
- type: http
namespace: sap-erp
baseUri: "https://colgate-palmolive-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 product recipe details from SAP including ingredients, process parameters, and yield specifications.
naftiko: "0.5"
info:
label: "SAP Recipe Management Lookup"
description: "Retrieves product recipe details from SAP including ingredients, process parameters, and yield specifications."
tags:
- manufacturing
- r-and-d
- sap
- erp
capability:
exposes:
- type: mcp
namespace: recipe-mgmt
port: 8080
tools:
- name: get-recipe
description: "Look up a product recipe in SAP by material number. Returns ingredients, process steps, and yield."
inputParameters:
- name: material_number
type: string
description: "SAP material number."
call: sap.get-recipe
with:
material: "{{material_number}}"
outputParameters:
- name: recipe_id
type: string
mapping: "$.d.RecipeId"
- name: ingredients
type: string
mapping: "$.d.Ingredients"
- name: yield_pct
type: string
mapping: "$.d.PlannedYield"
consumes:
- type: http
namespace: sap
baseUri: "https://colgatepalmolive-s4.sap.com/sap/opu/odata/sap/API_RECIPE_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: recipes
path: "/A_Recipe"
operations:
- name: get-recipe
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://colgatepalmolive-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://colgatepalmolive.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 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://colgatepalmolive-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://colgatepalmolive-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://colgatepalmolive.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
Creates a standard ServiceNow change request for planned maintenance, associates it with affected CI records, and sends pre-change notifications via Microsoft Teams.
naftiko: "0.5"
info:
label: "ServiceNow Change Request Automation"
description: "Creates a standard ServiceNow change request for planned maintenance, associates it with affected CI records, and sends pre-change notifications via Microsoft Teams."
tags:
- itsm
- change-management
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: change-management
port: 8080
tools:
- name: open-change-request
description: "Given a change description, affected configuration items, and planned window, create a ServiceNow standard change request and notify stakeholders in Teams."
inputParameters:
- name: change_description
in: body
type: string
description: "Description of the planned change."
- name: affected_ci
in: body
type: string
description: "Comma-separated list of affected configuration item names."
- name: planned_start
in: body
type: string
description: "Planned change start datetime in ISO 8601 format."
- name: planned_end
in: body
type: string
description: "Planned change end datetime in ISO 8601 format."
steps:
- name: create-change
type: call
call: "servicenow.create-change"
with:
short_description: "{{change_description}}"
type: "standard"
start_date: "{{planned_start}}"
end_date: "{{planned_end}}"
cmdb_ci: "{{affected_ci}}"
- name: notify-stakeholders
type: call
call: "msteams.post-channel-message"
with:
channelId: "it-operations"
message: "Change request {{create-change.number}} opened: {{change_description}} | Window: {{planned_start}} to {{planned_end}} | CIs: {{affected_ci}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://colgate-palmolive.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
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/channels/{{channelId}}/messages"
inputParameters:
- name: channelId
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://colgatepalmolive.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
When a high-priority ServiceNow incident is raised for a digital product, automatically creates a linked Jira bug and notifies the engineering team in Microsoft Teams.
naftiko: "0.5"
info:
label: "ServiceNow Incident to Jira Bug Bridge"
description: "When a high-priority ServiceNow incident is raised for a digital product, automatically creates a linked Jira bug and notifies the engineering team in Microsoft Teams."
tags:
- itsm
- devops
- servicenow
- jira
- microsoft-teams
- incident-response
capability:
exposes:
- type: mcp
namespace: itsm-ops
port: 8080
tools:
- name: handle-p1-incident
description: "Given a ServiceNow P1 incident number, create a linked Jira bug in the engineering project and post an alert to the engineering Teams channel."
inputParameters:
- name: incident_number
in: body
type: string
description: "The ServiceNow incident number, e.g. INC0012345."
steps:
- name: get-incident
type: call
call: "servicenow.get-incident"
with:
number: "{{incident_number}}"
- name: create-jira-bug
type: call
call: "jira.create-issue"
with:
projectKey: "ENG"
issuetype: "Bug"
summary: "[P1 Incident] {{get-incident.short_description}}"
description: "ServiceNow: {{incident_number}}\nImpact: {{get-incident.impact}}\nDescription: {{get-incident.description}}"
- name: alert-engineering
type: call
call: "msteams.post-channel-message"
with:
channelId: "engineering-alerts"
message: "P1 Incident {{incident_number}}: {{get-incident.short_description}} | Jira: {{create-jira-bug.key}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://colgate-palmolive.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
resources:
- name: incidents
path: "/table/incident"
inputParameters:
- name: number
in: query
operations:
- name: get-incident
method: GET
- type: http
namespace: jira
baseUri: "https://colgate-palmolive.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/channels/{{channelId}}/messages"
inputParameters:
- name: channelId
in: path
operations:
- name: post-channel-message
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
Checks the status of Snowflake data pipelines and tasks, surfaces any failures, and creates ServiceNow incidents for failed jobs requiring manual intervention.
naftiko: "0.5"
info:
label: "Snowflake Data Pipeline Health Monitor"
description: "Checks the status of Snowflake data pipelines and tasks, surfaces any failures, and creates ServiceNow incidents for failed jobs requiring manual intervention."
tags:
- data
- analytics
- snowflake
- servicenow
- monitoring
capability:
exposes:
- type: mcp
namespace: data-ops
port: 8080
tools:
- name: check-pipeline-health
description: "Given a Snowflake task name, retrieve task execution history, identify failures, and open a ServiceNow incident if the failure count exceeds threshold."
inputParameters:
- name: task_name
in: body
type: string
description: "The Snowflake task name to check."
- name: failure_threshold
in: body
type: integer
description: "Number of consecutive failures before opening an incident."
steps:
- name: get-task-history
type: call
call: "snowflake.get-task-history"
with:
taskName: "{{task_name}}"
- name: open-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Snowflake task failure: {{task_name}}"
category: "data_pipeline"
description: "Task {{task_name}} has exceeded failure threshold. Last error: {{get-task-history.error_message}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://colgate-palmolive.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: task-history
path: "/databases/tasks/{{taskName}}/executions"
inputParameters:
- name: taskName
in: path
operations:
- name: get-task-history
method: GET
- type: http
namespace: servicenow
baseUri: "https://colgate-palmolive.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 the Snowflake account usage schema to identify long-running and expensive queries, and posts a performance audit report to the data engineering Teams channel.
naftiko: "0.5"
info:
label: "Snowflake Query Performance Audit"
description: "Queries the Snowflake account usage schema to identify long-running and expensive queries, and posts a performance audit report to the data engineering Teams channel."
tags:
- data
- analytics
- snowflake
- microsoft-teams
- monitoring
capability:
exposes:
- type: mcp
namespace: data-performance
port: 8080
tools:
- name: audit-query-performance
description: "Given a time window and cost threshold, retrieve expensive Snowflake queries from account usage and post a top offenders report to the data engineering Teams channel."
inputParameters:
- name: hours_back
in: body
type: integer
description: "Number of hours to look back for query history."
- name: credits_threshold
in: body
type: number
description: "Minimum credits consumed to flag a query as expensive."
steps:
- name: get-expensive-queries
type: call
call: "snowflake.get-query-history"
with:
hoursBack: "{{hours_back}}"
creditsThreshold: "{{credits_threshold}}"
- name: post-audit-report
type: call
call: "msteams.post-channel-message"
with:
channelId: "data-engineering"
message: "Snowflake query audit (last {{hours_back}}h): {{get-expensive-queries.queryCount}} expensive queries found. Top query: {{get-expensive-queries.topQuery}}."
consumes:
- type: http
namespace: snowflake
baseUri: "https://colgate-palmolive.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/channels/{{channelId}}/messages"
inputParameters:
- name: channelId
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://colgatepalmolive.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://colgatepalmolive.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://colgatepalmolive.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
Aggregates demand signals from Salesforce opportunity pipeline and SAP inventory positions to produce a consolidated supply chain outlook report.
naftiko: "0.5"
info:
label: "Supply Chain Demand Signal Aggregator"
description: "Aggregates demand signals from Salesforce opportunity pipeline and SAP inventory positions to produce a consolidated supply chain outlook report."
tags:
- supply-chain
- finance
- salesforce
- sap
- reporting
capability:
exposes:
- type: mcp
namespace: supply-chain-reporting
port: 8080
tools:
- name: get-demand-outlook
description: "Given a product family code and planning horizon, retrieve open Salesforce pipeline opportunities and SAP inventory positions to produce a demand vs. supply summary."
inputParameters:
- name: product_family
in: body
type: string
description: "The Salesforce product family code, e.g. ORAL_CARE."
- name: horizon_weeks
in: body
type: integer
description: "Planning horizon in weeks."
steps:
- name: get-pipeline
type: call
call: "salesforce.get-opportunities-by-product"
with:
productFamily: "{{product_family}}"
- name: get-inventory
type: call
call: "sap-inventory.get-stock-overview"
with:
productFamily: "{{product_family}}"
- name: post-outlook
type: call
call: "msteams.post-channel-message"
with:
channelId: "supply-chain-team"
message: "Demand outlook for {{product_family}} ({{horizon_weeks}}w): Pipeline={{get-pipeline.totalValue}}, On-hand stock={{get-inventory.totalUnits}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://colgate-palmolive.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity"
inputParameters:
- name: productFamily
in: query
operations:
- name: get-opportunities-by-product
method: GET
- type: http
namespace: sap-inventory
baseUri: "https://colgate-palmolive-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"
inputParameters:
- name: productFamily
in: query
operations:
- name: get-stock-overview
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/channels/{{channelId}}/messages"
inputParameters:
- name: channelId
in: path
operations:
- name: post-channel-message
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://colgatepalmolive.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
Triggers a Terraform Cloud workspace run to provision or update cloud infrastructure, monitors the run result, and creates a ServiceNow change record.
naftiko: "0.5"
info:
label: "Terraform Cloud Workspace Provisioning"
description: "Triggers a Terraform Cloud workspace run to provision or update cloud infrastructure, monitors the run result, and creates a ServiceNow change record."
tags:
- cloud
- infrastructure
- terraform
- servicenow
- change-management
capability:
exposes:
- type: mcp
namespace: infra-provisioning
port: 8080
tools:
- name: trigger-terraform-run
description: "Given a Terraform Cloud workspace ID and message, trigger a plan and apply run, then create a ServiceNow change record documenting the infrastructure change."
inputParameters:
- name: workspace_id
in: body
type: string
description: "The Terraform Cloud workspace ID."
- name: change_description
in: body
type: string
description: "Description of the infrastructure change being applied."
steps:
- name: create-run
type: call
call: "terraform.create-run"
with:
workspaceId: "{{workspace_id}}"
message: "{{change_description}}"
- name: create-change-record
type: call
call: "servicenow.create-change"
with:
short_description: "Terraform infra change: {{change_description}}"
description: "Workspace: {{workspace_id}}\nRun ID: {{create-run.runId}}"
category: "Infrastructure"
consumes:
- type: http
namespace: terraform
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: runs
path: "/runs"
operations:
- name: create-run
method: POST
- type: http
namespace: servicenow
baseUri: "https://colgate-palmolive.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
resources:
- name: changes
path: "/table/change_request"
operations:
- name: create-change
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://colgatepalmolive.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://colgatepalmolive.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://colgatepalmolive-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://colgatepalmolive.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://colgatepalmolive-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://colgatepalmolive.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
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: "/colgatepalmolive/workers"
operations:
- name: get-worker
method: GET
- type: http
namespace: snowflake
baseUri: "https://colgatepalmolive.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 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: "/colgatepalmolive/workers"
operations:
- name: get-worker
method: GET
Pulls current headcount by department and cost center from Workday and returns the structured dataset for workforce planning and finance reporting.
naftiko: "0.5"
info:
label: "Workday Headcount Report Snapshot"
description: "Pulls current headcount by department and cost center from Workday and returns the structured dataset for workforce planning and finance reporting."
tags:
- hr
- finance
- workday
- reporting
- headcount
capability:
exposes:
- type: mcp
namespace: hr-reporting
port: 8080
tools:
- name: get-headcount-snapshot
description: "Returns current active employee headcount grouped by department and cost center from Workday. Use for workforce planning, finance period close, and budget reviews."
call: "workday.get-headcount"
outputParameters:
- name: employees
type: array
mapping: "$.data"
items:
- name: employee_id
type: string
mapping: "$.id"
- name: full_name
type: string
mapping: "$.name"
- name: department
type: string
mapping: "$.department"
- name: cost_center
type: string
mapping: "$.costCenter"
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: "/colgate-palmolive/workers"
operations:
- name: get-headcount
method: GET
Compares current period payroll totals from Workday against the previous period and flags variances exceeding threshold for finance review.
naftiko: "0.5"
info:
label: "Workday Payroll Variance Report"
description: "Compares current period payroll totals from Workday against the previous period and flags variances exceeding threshold for finance review."
tags:
- hr
- finance
- workday
- payroll
- reporting
capability:
exposes:
- type: mcp
namespace: payroll-reporting
port: 8080
tools:
- name: get-payroll-variance
description: "Given a pay period and variance threshold percentage, retrieve Workday payroll totals for the current and prior period, identify variances, and return flagged entries."
inputParameters:
- name: pay_period
in: body
type: string
description: "Pay period identifier in YYYY-MM format."
- name: variance_threshold
in: body
type: number
description: "Percentage threshold above which a variance is flagged, e.g. 5 for 5%."
call: "workday.get-payroll-results"
with:
payPeriod: "{{pay_period}}"
outputParameters:
- name: total_gross_pay
type: number
mapping: "$.totals.grossPay"
- name: total_net_pay
type: number
mapping: "$.totals.netPay"
- name: period
type: string
mapping: "$.payPeriod"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: payroll-results
path: "/colgate-palmolive/payrollResults"
inputParameters:
- name: payPeriod
in: query
operations:
- name: get-payroll-results
method: GET
Retrieves the current hiring pipeline status for an open Workday job requisition and summarizes candidate stage counts for recruiters.
naftiko: "0.5"
info:
label: "Workday Recruiting Candidate Status Tracker"
description: "Retrieves the current hiring pipeline status for an open Workday job requisition and summarizes candidate stage counts for recruiters."
tags:
- hr
- recruiting
- workday
- reporting
capability:
exposes:
- type: mcp
namespace: recruiting
port: 8080
tools:
- name: get-requisition-pipeline
description: "Given a Workday job requisition ID, return a summary of candidates by stage including screened, interviewed, offered, and rejected counts."
inputParameters:
- name: requisition_id
in: body
type: string
description: "The Workday job requisition ID."
call: "workday.get-job-requisition"
with:
requisitionId: "{{requisition_id}}"
outputParameters:
- name: job_title
type: string
mapping: "$.jobRequisition.jobTitle"
- name: total_candidates
type: number
mapping: "$.jobRequisition.candidateCount"
- name: stage_summary
type: string
mapping: "$.jobRequisition.stageSummary"
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: "/colgate-palmolive/jobRequisitions/{{requisitionId}}"
inputParameters:
- name: requisitionId
in: path
operations:
- name: get-job-requisition
method: GET
When an employee's role changes in Workday, updates their Okta application assignments to reflect the new role's access profile.
naftiko: "0.5"
info:
label: "Workday Role Change Access Provisioning"
description: "When an employee's role changes in Workday, updates their Okta application assignments to reflect the new role's access profile."
tags:
- hr
- identity
- workday
- okta
- access-management
capability:
exposes:
- type: mcp
namespace: hr-identity
port: 8080
tools:
- name: sync-role-access
description: "Given a Workday employee ID and new job profile, update Okta group memberships to match the new role's access entitlements."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday worker ID."
- name: new_job_profile
in: body
type: string
description: "The new Workday job profile name."
steps:
- name: get-worker
type: call
call: "workday.get-worker"
with:
worker_id: "{{employee_id}}"
- name: assign-okta-group
type: call
call: "okta.add-user-to-group"
with:
userId: "{{get-worker.okta_user_id}}"
groupProfile: "{{new_job_profile}}"
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: "/colgate-palmolive/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: okta
baseUri: "https://colgate-palmolive.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: group-members
path: "/groups/{{groupProfile}}/users/{{userId}}"
inputParameters:
- name: groupProfile
in: path
- name: userId
in: path
operations:
- name: add-user-to-group
method: PUT
Returns the current paid time off and vacation accrual balances for an employee from Workday, for use in absence planning and manager approvals.
naftiko: "0.5"
info:
label: "Workday Time-Off Balance Lookup"
description: "Returns the current paid time off and vacation accrual balances for an employee from Workday, for use in absence planning and manager approvals."
tags:
- hr
- workday
- absence-management
capability:
exposes:
- type: mcp
namespace: hr-absence
port: 8080
tools:
- name: get-time-off-balance
description: "Given a Workday employee ID, return current accrued vacation, PTO, and sick leave balances. Use when an employee or manager needs to verify available time-off before approving a request."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday worker ID."
call: "workday.get-leave-balance"
with:
worker_id: "{{employee_id}}"
outputParameters:
- name: vacation_days
type: number
mapping: "$.leaveBalances.vacation"
- name: pto_days
type: number
mapping: "$.leaveBalances.pto"
- name: sick_days
type: number
mapping: "$.leaveBalances.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: leave-balances
path: "/colgate-palmolive/workers/{{worker_id}}/leaveBalance"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-leave-balance
method: GET