Procter & Gamble Capabilities
Naftiko 0.5 capability definitions for Procter & Gamble - 100 capabilities showing integration workflows and service orchestrations.
Pulls DTC website conversion funnel metrics from Adobe Analytics into Snowflake, refreshes Power BI dashboards, and sends insights to the e-commerce team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Adobe Analytics DTC Conversion Funnel"
description: "Pulls DTC website conversion funnel metrics from Adobe Analytics into Snowflake, refreshes Power BI dashboards, and sends insights to the e-commerce team via Microsoft Teams."
tags:
- analytics
- adobe-analytics
- snowflake
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: adobe_analytics_dtc_
port: 8080
tools:
- name: adobe-analytics
description: "Given an execution date, run the adobe analytics dtc conversion funnel process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.ADOBE_ANALYTICS_DTC_CONVERSION_FUNNEL LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.ADOBE_ANALYTICS_DTC_CONVERSION_RESULTS SELECT * FROM staging"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_adobe_analytics_dtc__channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Syncs Adobe Campaign email performance metrics to Snowflake, analyzes engagement trends, and distributes reports to the digital marketing team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Adobe Campaign Email Performance Sync"
description: "Syncs Adobe Campaign email performance metrics to Snowflake, analyzes engagement trends, and distributes reports to the digital marketing team via Microsoft Teams."
tags:
- marketing
- adobe-campaign
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: adobe_campaign_email
port: 8080
tools:
- name: adobe-campaign
description: "Given an execution date, run the adobe campaign email performance sync process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.ADOBE_CAMPAIGN_EMAIL_PERFORMANCE_SYNC LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.ADOBE_CAMPAIGN_EMAIL_PERFORMAN_RESULTS SELECT * FROM staging"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_adobe_campaign_email_channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Given a consumer complaint narrative, uses Anthropic Claude to classify the complaint category and urgency, then creates a Salesforce case for the consumer affairs team.
naftiko: "0.5"
info:
label: "AI-Assisted Consumer Complaint Triage"
description: "Given a consumer complaint narrative, uses Anthropic Claude to classify the complaint category and urgency, then creates a Salesforce case for the consumer affairs team."
tags:
- ai
- consumer-affairs
- anthropic
- salesforce
- customer-support
capability:
exposes:
- type: mcp
namespace: consumer-affairs-ai
port: 8080
tools:
- name: triage-consumer-complaint
description: "Given a consumer complaint text and product name, invoke Anthropic Claude to classify the complaint type and urgency, then create a Salesforce consumer affairs case."
inputParameters:
- name: complaint_text
in: body
type: string
description: "The full consumer complaint narrative text."
- name: product_name
in: body
type: string
description: "The P&G product associated with the complaint (e.g., 'Tide Pods', 'Pampers Size 4')."
- name: consumer_email
in: body
type: string
description: "The consumer's email address for case creation."
steps:
- name: classify-complaint
type: call
call: anthropic.create-message
with:
model: "claude-3-5-sonnet-20241022"
prompt: "Classify this consumer complaint about {{product_name}} into: 1) Category (Product Quality, Packaging, Performance, Safety, Other), 2) Urgency (Immediate, High, Standard), 3) Recommended action. Complaint: {{complaint_text}}"
- name: create-sf-case
type: call
call: salesforce.create-case
with:
subject: "Consumer Complaint — {{product_name}}"
description: "{{complaint_text}}\n\nAI Classification: {{classify-complaint.content}}"
suppliedEmail: "{{consumer_email}}"
origin: "AI Triage"
consumes:
- 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: salesforce
baseUri: "https://pg.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/sobjects/Case"
operations:
- name: create-case
method: POST
Pulls Azure DevOps sprint velocity data into Snowflake, computes team trends, and sends sprint reports to engineering managers via Microsoft Teams.
naftiko: "0.5"
info:
label: "Azure DevOps Sprint Velocity Reporter"
description: "Pulls Azure DevOps sprint velocity data into Snowflake, computes team trends, and sends sprint reports to engineering managers via Microsoft Teams."
tags:
- devops
- azure-devops
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: azure_devops_sprint_
port: 8080
tools:
- name: azure-devops
description: "Given an execution date, run the azure devops sprint velocity reporter process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.AZURE_DEVOPS_SPRINT_VELOCITY_REPORTER LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.AZURE_DEVOPS_SPRINT_VELOCITY_R_RESULTS SELECT * FROM staging"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_azure_devops_sprint__channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When Azure costs approach budget thresholds, logs the alert in Snowflake, creates a ServiceNow request for review, and notifies the cloud governance team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Azure FinOps Budget Alert Handler"
description: "When Azure costs approach budget thresholds, logs the alert in Snowflake, creates a ServiceNow request for review, and notifies the cloud governance team via Microsoft Teams."
tags:
- cloud
- microsoft-azure
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: azure_finops_budget_
port: 8080
tools:
- name: azure-finops
description: "Given an execution date, run the azure finops budget alert handler process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.AZURE_FINOPS_BUDGET_ALERT_HANDLER LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.AZURE_FINOPS_BUDGET_ALERT_HAND_RESULTS SELECT * FROM staging"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
category: "cloud"
short_description: "Azure FinOps Budget Alert Handler processing complete"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_azure_finops_budget__channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: servicenow
baseUri: "https://pg.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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When Azure Cost Management detects a spend anomaly on a P&G subscription, creates a ServiceNow financial incident and posts a FinOps alert to the Microsoft Teams cost management channel.
naftiko: "0.5"
info:
label: "Azure FinOps Cost Anomaly Responder"
description: "When Azure Cost Management detects a spend anomaly on a P&G subscription, creates a ServiceNow financial incident and posts a FinOps alert to the Microsoft Teams cost management channel."
tags:
- finops
- cloud
- azure
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: finops
port: 8080
tools:
- name: handle-azure-cost-anomaly
description: "Given an Azure subscription, resource group, and estimated overage in USD, create a ServiceNow financial incident and post a FinOps Teams alert."
inputParameters:
- name: subscription_id
in: body
type: string
description: "The Azure subscription ID where the cost anomaly was detected."
- name: resource_group
in: body
type: string
description: "The Azure resource group driving the anomaly."
- name: estimated_overage_usd
in: body
type: number
description: "Estimated spend overage in US dollars."
steps:
- name: create-snow-incident
type: call
call: servicenow.create-incident
with:
short_description: "Azure Cost Anomaly — {{resource_group}} — ${{estimated_overage_usd}}"
category: "cloud_cost"
urgency: "2"
- name: post-finops-alert
type: call
call: msteams.send-message
with:
channel_id: "finops-alerts"
text: "Azure Cost Anomaly: {{resource_group}} ({{subscription_id}}) | Overage: ${{estimated_overage_usd}} | SNOW: {{create-snow-incident.number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://pg.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.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Scans AKS container images for vulnerabilities via Snowflake data, creates Jira remediation tickets, and alerts the security team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Azure Kubernetes Container Vulnerability Scanner"
description: "Scans AKS container images for vulnerabilities via Snowflake data, creates Jira remediation tickets, and alerts the security team via Microsoft Teams."
tags:
- security
- microsoft-azure
- snowflake
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: azure_kubernetes_con
port: 8080
tools:
- name: azure-kubernetes
description: "Given an execution date, run the azure kubernetes container vulnerability scanner process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.AZURE_KUBERNETES_CONTAINER_VULNERABILITY LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.AZURE_KUBERNETES_CONTAINER_VUL_RESULTS SELECT * FROM staging"
- name: create-task
type: call
call: "jira.create-issue"
with:
project: "PGOPS"
issue_type: "Task"
summary: "Azure Kubernetes Container Vulnerability Scanner - review required"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_azure_kubernetes_con_channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: jira
baseUri: "https://pg.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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Checks the health status of a specified Azure resource.
naftiko: "0.5"
info:
label: "Azure Resource Health Check"
description: "Checks the health status of a specified Azure resource."
tags:
- cloud
- microsoft-azure
- infrastructure
capability:
exposes:
- type: mcp
namespace: cloud
port: 8080
tools:
- name: get-resource-health
description: "Given an Azure resource ID, retrieve its availability status. Use for infrastructure monitoring."
inputParameters:
- name: resource_id
in: body
type: string
description: "The Azure resource ID."
call: "azure.get-resource-health"
with:
resource_id: "{{resource_id}}"
outputParameters:
- name: availability_state
type: string
mapping: "$.properties.availabilityState"
consumes:
- type: http
namespace: azure
baseUri: "https://management.azure.com"
authentication:
type: bearer
token: "$secrets.azure_mgmt_token"
resources:
- name: resource-health
path: "/{{resource_id}}/providers/Microsoft.ResourceHealth/availabilityStatuses/current"
inputParameters:
- name: resource_id
in: path
operations:
- name: get-resource-health
method: GET
Ingests Circana market share data into Snowflake, computes brand performance metrics, refreshes Power BI dashboards, and notifies brand managers via Microsoft Teams.
naftiko: "0.5"
info:
label: "Circana Market Share Tracker"
description: "Ingests Circana market share data into Snowflake, computes brand performance metrics, refreshes Power BI dashboards, and notifies brand managers via Microsoft Teams."
tags:
- analytics
- circana
- snowflake
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: circana_market_share
port: 8080
tools:
- name: circana-market
description: "Given an execution date, run the circana market share tracker process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.CIRCANA_MARKET_SHARE_TRACKER LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.CIRCANA_MARKET_SHARE_TRACKER_RESULTS SELECT * FROM staging"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_circana_market_share_channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Collects Cisco Webex meeting usage data, aggregates in Snowflake, and distributes adoption reports to IT leadership via Microsoft Teams.
naftiko: "0.5"
info:
label: "Cisco Webex Meeting Usage Analytics"
description: "Collects Cisco Webex meeting usage data, aggregates in Snowflake, and distributes adoption reports to IT leadership via Microsoft Teams."
tags:
- collaboration
- cisco-webex
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: cisco_webex_meeting_
port: 8080
tools:
- name: cisco-webex
description: "Given an execution date, run the cisco webex meeting usage analytics process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.CISCO_WEBEX_MEETING_USAGE_ANALYTICS LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.CISCO_WEBEX_MEETING_USAGE_ANAL_RESULTS SELECT * FROM staging"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_cisco_webex_meeting__channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Processes Cobalt penetration test findings, logs in Snowflake, creates Jira remediation tickets for critical issues, and alerts the security team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Cobalt Penetration Test Result Processor"
description: "Processes Cobalt penetration test findings, logs in Snowflake, creates Jira remediation tickets for critical issues, and alerts the security team via Microsoft Teams."
tags:
- security
- cobalt
- snowflake
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: cobalt_penetration_t
port: 8080
tools:
- name: cobalt-penetration
description: "Given an execution date, run the cobalt penetration test result processor process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.COBALT_PENETRATION_TEST_RESULT_PROCESSOR LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.COBALT_PENETRATION_TEST_RESULT_RESULTS SELECT * FROM staging"
- name: create-task
type: call
call: "jira.create-issue"
with:
project: "PGOPS"
issue_type: "Task"
summary: "Cobalt Penetration Test Result Processor - review required"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_cobalt_penetration_t_channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: jira
baseUri: "https://pg.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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves a Confluence page by ID, returning title, space, and version.
naftiko: "0.5"
info:
label: "Confluence Page Lookup"
description: "Retrieves a Confluence page by ID, returning title, space, and version."
tags:
- documentation
- confluence
- knowledge-management
capability:
exposes:
- type: mcp
namespace: knowledge
port: 8080
tools:
- name: get-page
description: "Given a Confluence page ID, retrieve details. Use for documentation reviews."
inputParameters:
- name: page_id
in: body
type: string
description: "The Confluence page ID."
call: "confluence.get-page"
with:
page_id: "{{page_id}}"
outputParameters:
- name: title
type: string
mapping: "$.title"
consumes:
- type: http
namespace: confluence
baseUri: "https://pg.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content/{{page_id}}?expand=version,space"
inputParameters:
- name: page_id
in: path
operations:
- name: get-page
method: GET
When consumer complaints in Salesforce exceed thresholds for a product, creates a ServiceNow quality investigation, logs in Snowflake, and alerts the quality team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Consumer Complaint Quality Escalation"
description: "When consumer complaints in Salesforce exceed thresholds for a product, creates a ServiceNow quality investigation, logs in Snowflake, and alerts the quality team via Microsoft Teams."
tags:
- quality
- salesforce
- servicenow
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: consumer_complaint_q
port: 8080
tools:
- name: consumer-complaint
description: "Given an execution date, run the consumer complaint quality escalation process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.CONSUMER_COMPLAINT_QUALITY_ESCALATION LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.CONSUMER_COMPLAINT_QUALITY_ESC_RESULTS SELECT * FROM staging"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
category: "quality"
short_description: "Consumer Complaint Quality Escalation processing complete"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_consumer_complaint_q_channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: servicenow
baseUri: "https://pg.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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Fetches Adobe Analytics campaign performance data for a P&G brand campaign and posts a consumer engagement digest to the brand marketing Teams channel.
naftiko: "0.5"
info:
label: "Consumer Insight Campaign Performance Digest"
description: "Fetches Adobe Analytics campaign performance data for a P&G brand campaign and posts a consumer engagement digest to the brand marketing Teams channel."
tags:
- marketing
- analytics
- reporting
- microsoft-teams
- campaign
- consumer
capability:
exposes:
- type: mcp
namespace: brand-analytics
port: 8080
tools:
- name: digest-campaign-performance
description: "Given an Adobe Analytics report suite ID and campaign ID, retrieve visits, conversions, and revenue metrics, then post a performance digest to the brand marketing Teams channel."
inputParameters:
- name: report_suite_id
in: body
type: string
description: "The Adobe Analytics report suite ID for the brand (e.g., 'pg-tide-global')."
- name: campaign_id
in: body
type: string
description: "The campaign tracking code or ID to filter metrics."
- name: teams_channel_id
in: body
type: string
description: "Teams channel ID for the brand marketing digest."
steps:
- name: get-campaign-metrics
type: call
call: adobe-analytics.get-report
with:
report_suite: "{{report_suite_id}}"
campaign: "{{campaign_id}}"
- name: post-digest
type: call
call: msteams.send-message
with:
channel_id: "{{teams_channel_id}}"
text: "Brand Campaign Digest — {{campaign_id}}: Visits: {{get-campaign-metrics.visits}} | Conversions: {{get-campaign-metrics.conversions}} | Revenue: ${{get-campaign-metrics.revenue}} | Bounce Rate: {{get-campaign-metrics.bounce_rate}}%"
consumes:
- type: http
namespace: adobe-analytics
baseUri: "https://analytics.adobe.io/api"
authentication:
type: bearer
token: "$secrets.adobe_analytics_token"
resources:
- name: reports
path: "/{{report_suite_id}}/reports"
inputParameters:
- name: report_suite_id
in: path
operations:
- name: get-report
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Monitors consumer panel data refresh status in Snowflake, flags delayed feeds, creates ServiceNow incidents, and alerts the analytics team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Consumer Panel Data Refresh Monitor"
description: "Monitors consumer panel data refresh status in Snowflake, flags delayed feeds, creates ServiceNow incidents, and alerts the analytics team via Microsoft Teams."
tags:
- analytics
- consumer-insights
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: consumer_panel_data_
port: 8080
tools:
- name: consumer-panel
description: "Given an execution date, run the consumer panel data refresh monitor process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.CONSUMER_PANEL_DATA_REFRESH_MONITOR LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.CONSUMER_PANEL_DATA_REFRESH_MO_RESULTS SELECT * FROM staging"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
category: "analytics"
short_description: "Consumer Panel Data Refresh Monitor processing complete"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_consumer_panel_data__channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: servicenow
baseUri: "https://pg.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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Aggregates social media sentiment data in Snowflake, runs trend analysis, refreshes Power BI dashboards, and notifies the consumer insights team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Consumer Sentiment Analysis Pipeline"
description: "Aggregates social media sentiment data in Snowflake, runs trend analysis, refreshes Power BI dashboards, and notifies the consumer insights team via Microsoft Teams."
tags:
- analytics
- consumer-insights
- snowflake
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: consumer_sentiment_a
port: 8080
tools:
- name: consumer-sentiment
description: "Given an execution date, run the consumer sentiment analysis pipeline process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.CONSUMER_SENTIMENT_ANALYSIS_PIPELINE LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.CONSUMER_SENTIMENT_ANALYSIS_PI_RESULTS SELECT * FROM staging"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_consumer_sentiment_a_channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Analyzes Coupa procurement spend data in Snowflake, identifies savings opportunities, creates Jira action items, and notifies the procurement team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Coupa Procurement Spend Analyzer"
description: "Analyzes Coupa procurement spend data in Snowflake, identifies savings opportunities, creates Jira action items, and notifies the procurement team via Microsoft Teams."
tags:
- procurement
- coupa
- snowflake
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: coupa_procurement_sp
port: 8080
tools:
- name: coupa-procurement
description: "Given an execution date, run the coupa procurement spend analyzer process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.COUPA_PROCUREMENT_SPEND_ANALYZER LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.COUPA_PROCUREMENT_SPEND_ANALYZ_RESULTS SELECT * FROM staging"
- name: create-task
type: call
call: "jira.create-issue"
with:
project: "PGOPS"
issue_type: "Task"
summary: "Coupa Procurement Spend Analyzer - review required"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_coupa_procurement_sp_channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: jira
baseUri: "https://pg.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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Monitors Datadog for eCommerce application performance alerts and creates a ServiceNow incident when a critical monitor fires on the P&G.com platform.
naftiko: "0.5"
info:
label: "Datadog eCommerce Monitoring Alert"
description: "Monitors Datadog for eCommerce application performance alerts and creates a ServiceNow incident when a critical monitor fires on the P&G.com platform."
tags:
- observability
- datadog
- servicenow
- ecommerce
- incident-response
capability:
exposes:
- type: mcp
namespace: ecommerce-ops
port: 8080
tools:
- name: handle-ecommerce-alert
description: "Given a Datadog monitor ID, alert severity, and affected eCommerce service, create a ServiceNow incident and alert the digital operations team in Teams."
inputParameters:
- name: monitor_id
in: body
type: string
description: "The Datadog monitor ID that fired the eCommerce alert."
- name: monitor_name
in: body
type: string
description: "The human-readable Datadog monitor name."
- name: severity
in: body
type: string
description: "Alert severity: 'critical' or 'warning'."
- name: teams_channel_id
in: body
type: string
description: "Teams channel ID for the digital operations team."
steps:
- name: create-incident
type: call
call: servicenow.create-incident
with:
short_description: "eCommerce Alert [{{severity}}]: {{monitor_name}}"
category: "ecommerce_monitoring"
urgency: "1"
- name: alert-digital-ops
type: call
call: msteams.send-message
with:
channel_id: "{{teams_channel_id}}"
text: "eCommerce Alert [{{severity}}]: {{monitor_name}} | Monitor: {{monitor_id}} | SNOW: {{create-incident.number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://pg.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.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Queries Datadog for the health of P&G e-commerce platform services.
naftiko: "0.5"
info:
label: "Datadog E-Commerce Service Health"
description: "Queries Datadog for the health of P&G e-commerce platform services."
tags:
- monitoring
- datadog
- e-commerce
capability:
exposes:
- type: mcp
namespace: monitoring
port: 8080
tools:
- name: get-ecommerce-health
description: "Given a Datadog service name, retrieve health status. Use for e-commerce platform monitoring."
inputParameters:
- name: service_name
in: body
type: string
description: "The Datadog service name."
call: "datadog.get-service-health"
with:
service_name: "{{service_name}}"
outputParameters:
- name: status
type: string
mapping: "$.data.attributes.status"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: services
path: "/service_level_objectives?query={{service_name}}"
inputParameters:
- name: service_name
in: query
operations:
- name: get-service-health
method: GET
Compares demand forecasts against actual sales in Snowflake, flags significant variances, and notifies the demand planning team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Demand Forecast Accuracy Monitor"
description: "Compares demand forecasts against actual sales in Snowflake, flags significant variances, and notifies the demand planning team via Microsoft Teams."
tags:
- supply-chain
- forecasting
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: demand_forecast_accu
port: 8080
tools:
- name: demand-forecast
description: "Given an execution date, run the demand forecast accuracy monitor process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.DEMAND_FORECAST_ACCURACY_MONITOR LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.DEMAND_FORECAST_ACCURACY_MONIT_RESULTS SELECT * FROM staging"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_demand_forecast_accu_channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Monitors e-commerce order fulfillment metrics in Snowflake, flags delayed shipments, creates ServiceNow incidents, and alerts the fulfillment team via Microsoft Teams.
naftiko: "0.5"
info:
label: "E-Commerce Order Fulfillment Tracker"
description: "Monitors e-commerce order fulfillment metrics in Snowflake, flags delayed shipments, creates ServiceNow incidents, and alerts the fulfillment team via Microsoft Teams."
tags:
- e-commerce
- fulfillment
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: ecommerce_order_fulf
port: 8080
tools:
- name: ecommerce-order
description: "Given an execution date, run the e-commerce order fulfillment tracker process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.ECOMMERCE_ORDER_FULFILLMENT_TRACKER LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.ECOMMERCE_ORDER_FULFILLMENT_TR_RESULTS SELECT * FROM staging"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
category: "e-commerce"
short_description: "E-Commerce Order Fulfillment Tracker processing complete"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_ecommerce_order_fulf_channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: servicenow
baseUri: "https://pg.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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When an employee termination is processed in Workday, creates a ServiceNow offboarding ticket and notifies IT security in Microsoft Teams to revoke system access.
naftiko: "0.5"
info:
label: "Employee Offboarding Workflow"
description: "When an employee termination is processed in Workday, creates a ServiceNow offboarding ticket and notifies IT security in Microsoft Teams to revoke system access."
tags:
- hr
- offboarding
- workday
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-offboarding
port: 8080
tools:
- name: trigger-offboarding
description: "Given a Workday worker ID and termination date, create a ServiceNow offboarding ticket and alert the IT security team in Teams to begin access revocation."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID of the departing employee."
- name: termination_date
in: body
type: string
description: "The employee's last working date in YYYY-MM-DD format."
steps:
- name: get-employee
type: call
call: workday.get-worker
with:
worker_id: "{{worker_id}}"
- name: create-offboard-ticket
type: call
call: servicenow.create-incident
with:
short_description: "Offboarding: {{get-employee.full_name}} — last day {{termination_date}}"
category: "hr_offboarding"
assigned_group: "IT_Security"
- name: notify-it
type: call
call: msteams.send-message
with:
channel_id: "it-security-channel"
text: "Offboarding started for {{get-employee.full_name}} (last day {{termination_date}}). SNOW: {{create-offboard-ticket.number}}. Begin access revocation."
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: "/pg/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://pg.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.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When a Figma design is marked for review, creates Jira review tasks, assigns to the UX team, and notifies stakeholders via Microsoft Teams.
naftiko: "0.5"
info:
label: "Figma Design Review Workflow"
description: "When a Figma design is marked for review, creates Jira review tasks, assigns to the UX team, and notifies stakeholders via Microsoft Teams."
tags:
- design
- figma
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: figma_design_review_
port: 8080
tools:
- name: figma-design
description: "Given an execution date, run the figma design review workflow process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.FIGMA_DESIGN_REVIEW_WORKFLOW LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.FIGMA_DESIGN_REVIEW_WORKFLOW_RESULTS SELECT * FROM staging"
- name: create-task
type: call
call: "jira.create-issue"
with:
project: "PGOPS"
issue_type: "Task"
summary: "Figma Design Review Workflow - review required"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_figma_design_review__channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: jira
baseUri: "https://pg.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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Analyzes GitHub Actions build quality metrics in Snowflake, flags degrading build success rates, creates Jira tickets, and notifies engineering via Microsoft Teams.
naftiko: "0.5"
info:
label: "GitHub CI/CD Build Quality Monitor"
description: "Analyzes GitHub Actions build quality metrics in Snowflake, flags degrading build success rates, creates Jira tickets, and notifies engineering via Microsoft Teams."
tags:
- devops
- github
- snowflake
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: github_cicd_build_qu
port: 8080
tools:
- name: github-cicd
description: "Given an execution date, run the github ci/cd build quality monitor process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.GITHUB_CICD_BUILD_QUALITY_MONITOR LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.GITHUB_CICD_BUILD_QUALITY_MONI_RESULTS SELECT * FROM staging"
- name: create-task
type: call
call: "jira.create-issue"
with:
project: "PGOPS"
issue_type: "Task"
summary: "GitHub CI/CD Build Quality Monitor - review required"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_github_cicd_build_qu_channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: jira
baseUri: "https://pg.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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves metadata for a GitHub repository including default branch and open issues.
naftiko: "0.5"
info:
label: "GitHub Repository Info Lookup"
description: "Retrieves metadata for a GitHub repository including default branch and open issues."
tags:
- devops
- github
- source-control
capability:
exposes:
- type: mcp
namespace: devops
port: 8080
tools:
- name: get-repo-info
description: "Given a GitHub org and repo name, retrieve metadata. Use for developer onboarding."
inputParameters:
- name: org
in: body
type: string
description: "The GitHub organization."
- name: repo
in: body
type: string
description: "The repository name."
call: "github.get-repo"
with:
org: "{{org}}"
repo: "{{repo}}"
outputParameters:
- name: full_name
type: string
mapping: "$.full_name"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: repos
path: "/repos/{{org}}/{{repo}}"
inputParameters:
- name: org
in: path
- name: repo
in: path
operations:
- name: get-repo
method: GET
Audits Google Tag Manager containers for compliance with tagging standards, logs findings in Snowflake, and notifies the web analytics team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Google Tag Manager Container Audit"
description: "Audits Google Tag Manager containers for compliance with tagging standards, logs findings in Snowflake, and notifies the web analytics team via Microsoft Teams."
tags:
- analytics
- google-tag-manager
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: google_tag_manager_c
port: 8080
tools:
- name: google-tag
description: "Given an execution date, run the google tag manager container audit process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.GOOGLE_TAG_MANAGER_CONTAINER_AUDIT LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.GOOGLE_TAG_MANAGER_CONTAINER_A_RESULTS SELECT * FROM staging"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_google_tag_manager_c_channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Monitors Informatica data quality job results in Snowflake, creates Jira tickets for failed rules, and notifies the data governance team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Informatica Data Quality Job Monitor"
description: "Monitors Informatica data quality job results in Snowflake, creates Jira tickets for failed rules, and notifies the data governance team via Microsoft Teams."
tags:
- data-quality
- informatica
- snowflake
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: informatica_data_qua
port: 8080
tools:
- name: informatica-data
description: "Given an execution date, run the informatica data quality job monitor process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.INFORMATICA_DATA_QUALITY_JOB_MONITOR LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.INFORMATICA_DATA_QUALITY_JOB_M_RESULTS SELECT * FROM staging"
- name: create-task
type: call
call: "jira.create-issue"
with:
project: "PGOPS"
issue_type: "Task"
summary: "Informatica Data Quality Job Monitor - review required"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_informatica_data_qua_channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: jira
baseUri: "https://pg.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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves a Jira issue by key, returning summary, status, and assignee.
naftiko: "0.5"
info:
label: "Jira Issue Lookup"
description: "Retrieves a Jira issue by key, returning summary, status, and assignee."
tags:
- project-management
- jira
- issue-tracking
capability:
exposes:
- type: mcp
namespace: project-management
port: 8080
tools:
- name: get-issue
description: "Given a Jira issue key, retrieve details. Use for status updates and triage."
inputParameters:
- name: issue_key
in: body
type: string
description: "The Jira issue key."
call: "jira.get-issue"
with:
issue_key: "{{issue_key}}"
outputParameters:
- name: summary
type: string
mapping: "$.fields.summary"
- name: status
type: string
mapping: "$.fields.status.name"
consumes:
- type: http
namespace: jira
baseUri: "https://pg.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue/{{issue_key}}"
inputParameters:
- name: issue_key
in: path
operations:
- name: get-issue
method: GET
Fetches P&G LinkedIn company page engagement metrics and posts a monthly brand performance digest to the global communications Microsoft Teams channel.
naftiko: "0.5"
info:
label: "LinkedIn Brand Performance Digest"
description: "Fetches P&G LinkedIn company page engagement metrics and posts a monthly brand performance digest to the global communications Microsoft Teams channel."
tags:
- marketing
- linkedin
- social
- reporting
- microsoft-teams
- brand
capability:
exposes:
- type: mcp
namespace: brand-social-reporting
port: 8080
tools:
- name: digest-linkedin-performance
description: "Retrieve LinkedIn company page follower and engagement statistics for the past 30 days and post a brand performance digest to the global communications Teams channel."
inputParameters:
- name: organization_id
in: body
type: string
description: "The LinkedIn organization ID for P&G's company page."
- name: teams_channel_id
in: body
type: string
description: "Teams channel ID for the global communications team."
steps:
- name: get-follower-stats
type: call
call: linkedin.get-follower-statistics
with:
organization_id: "{{organization_id}}"
- name: post-digest
type: call
call: msteams.send-message
with:
channel_id: "{{teams_channel_id}}"
text: "P&G LinkedIn Performance (30d): Followers: {{get-follower-stats.follower_count}} | New Followers: +{{get-follower-stats.gained_30d}} | Engagement Rate: {{get-follower-stats.engagement_rate}}%"
consumes:
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: follower-statistics
path: "/organizationalEntityFollowerStatistics"
inputParameters:
- name: organization_id
in: query
operations:
- name: get-follower-statistics
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Pulls LinkedIn employer brand metrics, stores in Snowflake, and distributes talent acquisition insights to the HR team via Microsoft Teams.
naftiko: "0.5"
info:
label: "LinkedIn Employer Brand Analytics"
description: "Pulls LinkedIn employer brand metrics, stores in Snowflake, and distributes talent acquisition insights to the HR team via Microsoft Teams."
tags:
- hr
- linkedin
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: linkedin_employer_br
port: 8080
tools:
- name: linkedin-employer
description: "Given an execution date, run the linkedin employer brand analytics process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.LINKEDIN_EMPLOYER_BRAND_ANALYTICS LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.LINKEDIN_EMPLOYER_BRAND_ANALYT_RESULTS SELECT * FROM staging"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_linkedin_employer_br_channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Sends a message to a specified Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Microsoft Teams Channel Message Sender"
description: "Sends a message to a specified Microsoft Teams channel."
tags:
- collaboration
- microsoft-teams
- messaging
capability:
exposes:
- type: mcp
namespace: collaboration
port: 8080
tools:
- name: send-channel-message
description: "Given a Teams team ID, channel ID, and message, post to the channel. Use for automated notifications."
inputParameters:
- name: team_id
in: body
type: string
description: "The Teams team ID."
- name: channel_id
in: body
type: string
description: "The channel ID."
- name: message_text
in: body
type: string
description: "The message body."
call: "msteams.send-channel-message"
with:
team_id: "{{team_id}}"
channel_id: "{{channel_id}}"
text: "{{message_text}}"
outputParameters:
- name: message_id
type: string
mapping: "$.id"
consumes:
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Monitors MuleSoft API integration health metrics in Snowflake, creates ServiceNow incidents for failing integrations, and alerts the integration team via Microsoft Teams.
naftiko: "0.5"
info:
label: "MuleSoft API Integration Health Check"
description: "Monitors MuleSoft API integration health metrics in Snowflake, creates ServiceNow incidents for failing integrations, and alerts the integration team via Microsoft Teams."
tags:
- integration
- mulesoft
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: mulesoft_api_integra
port: 8080
tools:
- name: mulesoft-api
description: "Given an execution date, run the mulesoft api integration health check process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.MULESOFT_API_INTEGRATION_HEALTH_CHECK LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.MULESOFT_API_INTEGRATION_HEALT_RESULTS SELECT * FROM staging"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
category: "integration"
short_description: "MuleSoft API Integration Health Check processing complete"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_mulesoft_api_integra_channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: servicenow
baseUri: "https://pg.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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Monitors NetApp storage utilization from Snowflake metrics, forecasts capacity needs, creates Jira procurement tasks, and notifies the infrastructure team via Microsoft Teams.
naftiko: "0.5"
info:
label: "NetApp Storage Capacity Planner"
description: "Monitors NetApp storage utilization from Snowflake metrics, forecasts capacity needs, creates Jira procurement tasks, and notifies the infrastructure team via Microsoft Teams."
tags:
- infrastructure
- netapp
- snowflake
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: netapp_storage_capac
port: 8080
tools:
- name: netapp-storage
description: "Given an execution date, run the netapp storage capacity planner process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.NETAPP_STORAGE_CAPACITY_PLANNER LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.NETAPP_STORAGE_CAPACITY_PLANNE_RESULTS SELECT * FROM staging"
- name: create-task
type: call
call: "jira.create-issue"
with:
project: "PGOPS"
issue_type: "Task"
summary: "NetApp Storage Capacity Planner - review required"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_netapp_storage_capac_channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: jira
baseUri: "https://pg.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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Validates new product launch readiness across SAP material master, marketing assets, and retail distribution, then notifies the brand team via Microsoft Teams.
naftiko: "0.5"
info:
label: "New Product Launch Readiness Checker"
description: "Validates new product launch readiness across SAP material master, marketing assets, and retail distribution, then notifies the brand team via Microsoft Teams."
tags:
- product-launch
- sap
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: new_product_launch_r
port: 8080
tools:
- name: new-product
description: "Given an execution date, run the new product launch readiness checker process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.NEW_PRODUCT_LAUNCH_READINESS_CHECKER LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.NEW_PRODUCT_LAUNCH_READINESS_C_RESULTS SELECT * FROM staging"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_new_product_launch_r_channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Syncs product roadmap items from Notion to Jira epics, logs the mapping in Snowflake, and notifies the product management team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Notion Product Roadmap Sync"
description: "Syncs product roadmap items from Notion to Jira epics, logs the mapping in Snowflake, and notifies the product management team via Microsoft Teams."
tags:
- product-management
- notion
- jira
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: notion_product_roadm
port: 8080
tools:
- name: notion-product
description: "Given an execution date, run the notion product roadmap sync process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.NOTION_PRODUCT_ROADMAP_SYNC LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.NOTION_PRODUCT_ROADMAP_SYNC_RESULTS SELECT * FROM staging"
- name: create-task
type: call
call: "jira.create-issue"
with:
project: "PGOPS"
issue_type: "Task"
summary: "Notion Product Roadmap Sync - review required"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_notion_product_roadm_channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: jira
baseUri: "https://pg.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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Identifies privileged access accounts in Okta for certification review, logs in Snowflake, creates ServiceNow audit tasks, and notifies the IAM team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Okta Privileged Access Certification"
description: "Identifies privileged access accounts in Okta for certification review, logs in Snowflake, creates ServiceNow audit tasks, and notifies the IAM team via Microsoft Teams."
tags:
- security
- okta
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: okta_privileged_acce
port: 8080
tools:
- name: okta-privileged
description: "Given an execution date, run the okta privileged access certification process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.OKTA_PRIVILEGED_ACCESS_CERTIFICATION LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.OKTA_PRIVILEGED_ACCESS_CERTIFI_RESULTS SELECT * FROM staging"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
category: "security"
short_description: "Okta Privileged Access Certification processing complete"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_okta_privileged_acce_channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: servicenow
baseUri: "https://pg.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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Lists Okta users in privileged groups who lack MFA enrollment and creates a ServiceNow security task for remediation.
naftiko: "0.5"
info:
label: "Okta Privileged Access MFA Audit"
description: "Lists Okta users in privileged groups who lack MFA enrollment and creates a ServiceNow security task for remediation."
tags:
- security
- identity
- okta
- servicenow
- compliance
- access-review
capability:
exposes:
- type: mcp
namespace: security-audit
port: 8080
tools:
- name: audit-privileged-mfa
description: "Given an Okta privileged access group ID, list members without MFA enrollment and create a ServiceNow security remediation task."
inputParameters:
- name: okta_group_id
in: body
type: string
description: "The Okta privileged group ID to audit for MFA compliance."
steps:
- name: list-users-without-mfa
type: call
call: okta.list-users
with:
group_id: "{{okta_group_id}}"
- name: create-remediation-task
type: call
call: servicenow.create-incident
with:
short_description: "MFA Remediation — {{list-users-without-mfa.count}} privileged users lack MFA"
category: "security_compliance"
description: "Users without MFA in privileged group {{okta_group_id}}: {{list-users-without-mfa.emails}}"
consumes:
- type: http
namespace: okta
baseUri: "https://pg.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_key"
placement: header
resources:
- name: users
path: "/groups/{{group_id}}/users"
inputParameters:
- name: group_id
in: path
operations:
- name: list-users
method: GET
- type: http
namespace: servicenow
baseUri: "https://pg.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
Looks up an Okta user by login email, returning profile status and last login time.
naftiko: "0.5"
info:
label: "Okta User Lookup"
description: "Looks up an Okta user by login email, returning profile status and last login time."
tags:
- identity
- okta
- access-management
capability:
exposes:
- type: mcp
namespace: identity
port: 8080
tools:
- name: get-user
description: "Given an Okta user login email, retrieve profile details. Use for identity verification."
inputParameters:
- name: user_login
in: body
type: string
description: "The Okta user login email."
call: "okta.get-user"
with:
user_login: "{{user_login}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: last_login
type: string
mapping: "$.lastLogin"
consumes:
- type: http
namespace: okta
baseUri: "https://pg.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: users
path: "/users/{{user_login}}"
inputParameters:
- name: user_login
in: path
operations:
- name: get-user
method: GET
When a P1 production incident is declared, creates a ServiceNow P1 incident, annotates Datadog, and alerts the IT engineering team in Microsoft Teams.
naftiko: "0.5"
info:
label: "P1 Production Incident Response Chain"
description: "When a P1 production incident is declared, creates a ServiceNow P1 incident, annotates Datadog, and alerts the IT engineering team in Microsoft Teams."
tags:
- itsm
- incident-response
- servicenow
- datadog
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: itsm-ops
port: 8080
tools:
- name: handle-p1-incident
description: "Given an affected P&G system and impact description, create a ServiceNow P1 incident, add a Datadog event annotation, and alert the engineering team via Teams."
inputParameters:
- name: affected_system
in: body
type: string
description: "The P&G system or service experiencing the incident."
- name: impact_description
in: body
type: string
description: "Brief description of the business impact."
- name: teams_channel_id
in: body
type: string
description: "Teams channel ID for the engineering on-call alert."
steps:
- name: create-p1-incident
type: call
call: servicenow.create-incident
with:
short_description: "P1: {{affected_system}} — {{impact_description}}"
urgency: "1"
priority: "1"
- name: annotate-datadog
type: call
call: datadog.create-event
with:
title: "P1 Incident: {{affected_system}}"
text: "SNOW {{create-p1-incident.number}} — {{impact_description}}"
alert_type: "error"
- name: alert-team
type: call
call: msteams.send-message
with:
channel_id: "{{teams_channel_id}}"
text: "P1 INCIDENT: {{affected_system}} | Impact: {{impact_description}} | SNOW: {{create-p1-incident.number}} | Datadog: {{annotate-datadog.url}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://pg.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: 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.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Analyzes plant energy consumption data in Snowflake, identifies optimization opportunities, creates Jira improvement tasks, and notifies the sustainability team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Plant Energy Consumption Optimizer"
description: "Analyzes plant energy consumption data in Snowflake, identifies optimization opportunities, creates Jira improvement tasks, and notifies the sustainability team via Microsoft Teams."
tags:
- sustainability
- manufacturing
- snowflake
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: plant_energy_consump
port: 8080
tools:
- name: plant-energy
description: "Given an execution date, run the plant energy consumption optimizer process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.PLANT_ENERGY_CONSUMPTION_OPTIMIZER LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.PLANT_ENERGY_CONSUMPTION_OPTIM_RESULTS SELECT * FROM staging"
- name: create-task
type: call
call: "jira.create-issue"
with:
project: "PGOPS"
issue_type: "Task"
summary: "Plant Energy Consumption Optimizer - review required"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_plant_energy_consump_channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: jira
baseUri: "https://pg.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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Checks the refresh status of consumer insights Power BI datasets.
naftiko: "0.5"
info:
label: "Power BI Consumer Dashboard Refresh Status"
description: "Checks the refresh status of consumer insights Power BI datasets."
tags:
- analytics
- power-bi
- consumer-insights
capability:
exposes:
- type: mcp
namespace: analytics
port: 8080
tools:
- name: get-refresh-status
description: "Given a Power BI dataset ID, check the last refresh status. Use for dashboard monitoring."
inputParameters:
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID."
call: "powerbi.get-refresh"
with:
dataset_id: "{{dataset_id}}"
outputParameters:
- name: status
type: string
mapping: "$.value[0].status"
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/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: get-refresh
method: GET
Triggers a Power BI dataset refresh for the global consumer goods revenue dashboard and notifies the commercial analytics team in Microsoft Teams.
naftiko: "0.5"
info:
label: "Power BI Consumer Goods Revenue Dashboard Refresh"
description: "Triggers a Power BI dataset refresh for the global consumer goods revenue dashboard and notifies the commercial analytics team in Microsoft Teams."
tags:
- data
- analytics
- power-bi
- finance
- reporting
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: bi-ops
port: 8080
tools:
- name: refresh-revenue-dashboard
description: "Trigger a Power BI refresh for the P&G global revenue dashboard and notify the commercial analytics team in Teams."
inputParameters:
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID for the global revenue dashboard."
- name: teams_channel_id
in: body
type: string
description: "Teams channel ID for the analytics team notification."
steps:
- name: trigger-refresh
type: call
call: powerbi.refresh-dataset
with:
dataset_id: "{{dataset_id}}"
- name: notify-team
type: call
call: msteams.send-message
with:
channel_id: "{{teams_channel_id}}"
text: "Global revenue dashboard refresh initiated. Dataset: {{dataset_id}} | Status: {{trigger-refresh.status}}."
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: refreshes
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Monitors retail POS data ingestion pipelines in Snowflake, flags missing retailer feeds, creates ServiceNow incidents, and alerts the data operations team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Retail POS Data Ingestion Monitor"
description: "Monitors retail POS data ingestion pipelines in Snowflake, flags missing retailer feeds, creates ServiceNow incidents, and alerts the data operations team via Microsoft Teams."
tags:
- data-engineering
- retail
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: retail_pos_data_inge
port: 8080
tools:
- name: retail-pos
description: "Given an execution date, run the retail pos data ingestion monitor process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.RETAIL_POS_DATA_INGESTION_MONITOR LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.RETAIL_POS_DATA_INGESTION_MONI_RESULTS SELECT * FROM staging"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
category: "data-engineering"
short_description: "Retail POS Data Ingestion Monitor processing complete"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_retail_pos_data_inge_channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: servicenow
baseUri: "https://pg.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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Monitors retail shelf availability data in Snowflake, creates Jira tasks for field reps when out-of-stock thresholds are breached, and notifies the sales team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Retail Shelf Availability Alert"
description: "Monitors retail shelf availability data in Snowflake, creates Jira tasks for field reps when out-of-stock thresholds are breached, and notifies the sales team via Microsoft Teams."
tags:
- retail
- supply-chain
- snowflake
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: retail_shelf_availab
port: 8080
tools:
- name: retail-shelf
description: "Given an execution date, run the retail shelf availability alert process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.RETAIL_SHELF_AVAILABILITY_ALERT LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.RETAIL_SHELF_AVAILABILITY_ALER_RESULTS SELECT * FROM staging"
- name: create-task
type: call
call: "jira.create-issue"
with:
project: "PGOPS"
issue_type: "Task"
summary: "Retail Shelf Availability Alert - review required"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_retail_shelf_availab_channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: jira
baseUri: "https://pg.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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When a Revert API integration fails, logs the error in Snowflake, creates a ServiceNow incident, and notifies the integration team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Revert API Integration Failure Handler"
description: "When a Revert API integration fails, logs the error in Snowflake, creates a ServiceNow incident, and notifies the integration team via Microsoft Teams."
tags:
- integration
- revert
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: revert_api_integrati
port: 8080
tools:
- name: revert-api
description: "Given an execution date, run the revert api integration failure handler process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.REVERT_API_INTEGRATION_FAILURE_HANDLER LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.REVERT_API_INTEGRATION_FAILURE_RESULTS SELECT * FROM staging"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
category: "integration"
short_description: "Revert API Integration Failure Handler processing complete"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_revert_api_integrati_channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: servicenow
baseUri: "https://pg.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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves Salesforce retail account metrics for a P&G brand and posts an account health digest to the key account manager's Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Salesforce Brand Account Health Digest"
description: "Retrieves Salesforce retail account metrics for a P&G brand and posts an account health digest to the key account manager's Microsoft Teams channel."
tags:
- sales
- crm
- salesforce
- microsoft-teams
- key-account
- reporting
capability:
exposes:
- type: mcp
namespace: kam-reporting
port: 8080
tools:
- name: digest-account-health
description: "Given a Salesforce account ID and KAM Teams UPN, fetch open opportunities, recent activity date, and revenue metrics, then post an account health digest."
inputParameters:
- name: account_id
in: body
type: string
description: "The Salesforce account ID for the retail partner account."
- name: kam_teams_upn
in: body
type: string
description: "The Teams UPN of the key account manager to notify."
steps:
- name: get-account
type: call
call: salesforce.get-account
with:
account_id: "{{account_id}}"
- name: post-digest
type: call
call: msteams.send-message
with:
channel_id: "{{kam_teams_upn}}"
text: "Account Health: {{get-account.Name}} | Annual Revenue: ${{get-account.AnnualRevenue}} | Open Cases: {{get-account.OpenCasesCount}} | Last Activity: {{get-account.LastActivityDate}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://pg.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Aggregates brand health metrics from Salesforce and Snowflake, refreshes Power BI dashboards, and sends weekly digests to brand leadership via Microsoft Teams.
naftiko: "0.5"
info:
label: "Salesforce Brand Health Digest"
description: "Aggregates brand health metrics from Salesforce and Snowflake, refreshes Power BI dashboards, and sends weekly digests to brand leadership via Microsoft Teams."
tags:
- marketing
- salesforce
- snowflake
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: salesforce_brand_hea
port: 8080
tools:
- name: salesforce-brand
description: "Given an execution date, run the salesforce brand health digest process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.SALESFORCE_BRAND_HEALTH_DIGEST LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.SALESFORCE_BRAND_HEALTH_DIGEST_RESULTS SELECT * FROM staging"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_salesforce_brand_hea_channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Syncs trade promotion opportunities from Salesforce to Snowflake, computes pipeline forecasts, and notifies sales leadership via Microsoft Teams.
naftiko: "0.5"
info:
label: "Salesforce CPG Promotion Pipeline Sync"
description: "Syncs trade promotion opportunities from Salesforce to Snowflake, computes pipeline forecasts, and notifies sales leadership via Microsoft Teams."
tags:
- sales
- salesforce
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: salesforce_cpg_promo
port: 8080
tools:
- name: salesforce-cpg
description: "Given an execution date, run the salesforce cpg promotion pipeline sync process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.SALESFORCE_CPG_PROMOTION_PIPELINE_SYNC LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.SALESFORCE_CPG_PROMOTION_PIPEL_RESULTS SELECT * FROM staging"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_salesforce_cpg_promo_channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Processes Salesforce Einstein lead scores into Snowflake, identifies high-priority leads, and notifies the sales team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Salesforce Einstein Lead Scoring Pipeline"
description: "Processes Salesforce Einstein lead scores into Snowflake, identifies high-priority leads, and notifies the sales team via Microsoft Teams."
tags:
- sales
- salesforce
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: salesforce_einstein_
port: 8080
tools:
- name: salesforce-einstein
description: "Given an execution date, run the salesforce einstein lead scoring pipeline process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.SALESFORCE_EINSTEIN_LEAD_SCORING_PIPELIN LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.SALESFORCE_EINSTEIN_LEAD_SCORI_RESULTS SELECT * FROM staging"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_salesforce_einstein__channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Creates a new retailer account and primary contact in Salesforce, opens a ServiceNow onboarding task, and notifies the assigned key account manager in Microsoft Teams.
naftiko: "0.5"
info:
label: "Salesforce New Retailer Account Onboarding"
description: "Creates a new retailer account and primary contact in Salesforce, opens a ServiceNow onboarding task, and notifies the assigned key account manager in Microsoft Teams."
tags:
- sales
- crm
- salesforce
- servicenow
- onboarding
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: retailer-onboarding
port: 8080
tools:
- name: onboard-retailer
description: "Given retailer company name, primary contact details, region, and assigned KAM Teams UPN, create a Salesforce account and contact, open a ServiceNow onboarding task, and notify the KAM."
inputParameters:
- name: company_name
in: body
type: string
description: "The retailer's legal company name."
- name: contact_name
in: body
type: string
description: "Primary contact's full name at the retailer."
- name: contact_email
in: body
type: string
description: "Primary contact's email address."
- name: region
in: body
type: string
description: "The sales region (e.g., 'NA', 'EMEA', 'APAC')."
- name: kam_teams_upn
in: body
type: string
description: "The Teams UPN of the assigned key account manager."
steps:
- name: create-account
type: call
call: salesforce.create-account
with:
name: "{{company_name}}"
type: "Retailer"
region: "{{region}}"
- name: create-contact
type: call
call: salesforce.create-contact
with:
account_id: "{{create-account.id}}"
name: "{{contact_name}}"
email: "{{contact_email}}"
- name: open-onboarding-task
type: call
call: servicenow.create-incident
with:
short_description: "Retailer Onboarding: {{company_name}} — {{region}}"
category: "retailer_onboarding"
description: "Salesforce Account: {{create-account.id}}. Contact: {{contact_name}} ({{contact_email}})."
- name: notify-kam
type: call
call: msteams.send-message
with:
channel_id: "{{kam_teams_upn}}"
text: "New retailer onboarded: {{company_name}} ({{region}}). Salesforce account: {{create-account.id}}. SNOW setup task: {{open-onboarding-task.number}}."
consumes:
- type: http
namespace: salesforce
baseUri: "https://pg.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account"
operations:
- name: create-account
method: POST
- name: contacts
path: "/sobjects/Contact"
operations:
- name: create-contact
method: POST
- type: http
namespace: servicenow
baseUri: "https://pg.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.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves a Salesforce retail account by ID, returning retailer name, tier, and annual volume.
naftiko: "0.5"
info:
label: "Salesforce Retail Account Lookup"
description: "Retrieves a Salesforce retail account by ID, returning retailer name, tier, and annual volume."
tags:
- sales
- salesforce
- retail
capability:
exposes:
- type: mcp
namespace: retail-sales
port: 8080
tools:
- name: get-retail-account
description: "Given a Salesforce account ID, retrieve retail account details. Use for trade promotion planning."
inputParameters:
- name: account_id
in: body
type: string
description: "The Salesforce account ID."
call: "salesforce.get-account"
with:
account_id: "{{account_id}}"
outputParameters:
- name: name
type: string
mapping: "$.Name"
- name: tier
type: string
mapping: "$.Account_Tier__c"
consumes:
- type: http
namespace: salesforce
baseUri: "https://pg.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account
method: GET
Queries Salesforce for open retail opportunities by brand category and posts a pipeline digest to the commercial sales leadership Teams channel.
naftiko: "0.5"
info:
label: "Salesforce Retail Opportunity Pipeline Digest"
description: "Queries Salesforce for open retail opportunities by brand category and posts a pipeline digest to the commercial sales leadership Teams channel."
tags:
- sales
- crm
- salesforce
- reporting
- microsoft-teams
- commercial
capability:
exposes:
- type: mcp
namespace: commercial-reporting
port: 8080
tools:
- name: digest-retail-pipeline
description: "Given a Salesforce brand category and Teams channel, query open opportunities and post a retail pipeline digest with deal counts and total value."
inputParameters:
- name: brand_category
in: body
type: string
description: "The P&G brand category to filter opportunities (e.g., 'Fabric Care', 'Baby Care', 'Beauty')."
- name: teams_channel_id
in: body
type: string
description: "Teams channel ID for the sales leadership digest."
steps:
- name: query-opportunities
type: call
call: salesforce.query-records
with:
q: "SELECT Id,Name,StageName,Amount,CloseDate FROM Opportunity WHERE Brand_Category__c = '{{brand_category}}' AND IsClosed = false"
- name: post-digest
type: call
call: msteams.send-message
with:
channel_id: "{{teams_channel_id}}"
text: "Retail Pipeline — {{brand_category}}: {{query-opportunities.totalSize}} open opportunities | Pipeline value: ${{query-opportunities.total_amount}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://pg.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: query
path: "/query"
inputParameters:
- name: q
in: query
operations:
- name: query-records
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Evaluates supplier risk scores in SAP Ariba, logs assessments in Snowflake, creates Jira mitigation tasks, and alerts procurement via Microsoft Teams.
naftiko: "0.5"
info:
label: "SAP Ariba Supplier Risk Assessment"
description: "Evaluates supplier risk scores in SAP Ariba, logs assessments in Snowflake, creates Jira mitigation tasks, and alerts procurement via Microsoft Teams."
tags:
- procurement
- sap
- snowflake
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: sap_ariba_supplier_r
port: 8080
tools:
- name: sap-ariba
description: "Given an execution date, run the sap ariba supplier risk assessment process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.SAP_ARIBA_SUPPLIER_RISK_ASSESSMENT LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.SAP_ARIBA_SUPPLIER_RISK_ASSESS_RESULTS SELECT * FROM staging"
- name: create-task
type: call
call: "jira.create-issue"
with:
project: "PGOPS"
issue_type: "Task"
summary: "SAP Ariba Supplier Risk Assessment - review required"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_sap_ariba_supplier_r_channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: jira
baseUri: "https://pg.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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Creates a new vendor profile in SAP Ariba for a qualified supplier and opens a ServiceNow vendor setup task for the procurement team.
naftiko: "0.5"
info:
label: "SAP Ariba Vendor Onboarding"
description: "Creates a new vendor profile in SAP Ariba for a qualified supplier and opens a ServiceNow vendor setup task for the procurement team."
tags:
- procurement
- sap-ariba
- vendor-management
- servicenow
- onboarding
capability:
exposes:
- type: mcp
namespace: vendor-onboarding
port: 8080
tools:
- name: onboard-vendor
description: "Given a vendor company name, contact email, and country, register the vendor in SAP Ariba and create a ServiceNow vendor setup task for procurement."
inputParameters:
- name: vendor_name
in: body
type: string
description: "The legal company name of the new vendor."
- name: vendor_email
in: body
type: string
description: "The primary contact email address at the vendor."
- name: country
in: body
type: string
description: "The vendor's country of incorporation (ISO 2-letter code)."
steps:
- name: register-vendor
type: call
call: ariba.create-supplier
with:
name: "{{vendor_name}}"
email: "{{vendor_email}}"
country: "{{country}}"
- name: create-setup-task
type: call
call: servicenow.create-incident
with:
short_description: "Vendor Onboarding: {{vendor_name}} ({{country}})"
category: "vendor_management"
description: "New vendor registered in Ariba: {{register-vendor.vendor_id}}. Contact: {{vendor_email}}."
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: servicenow
baseUri: "https://pg.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 product recall is initiated, traces affected batches in SAP, logs the scope in Snowflake, creates a ServiceNow crisis case, and alerts the quality and legal teams via Microsoft Teams.
naftiko: "0.5"
info:
label: "SAP Batch Recall Coordination Chain"
description: "When a product recall is initiated, traces affected batches in SAP, logs the scope in Snowflake, creates a ServiceNow crisis case, and alerts the quality and legal teams via Microsoft Teams."
tags:
- quality
- recall
- sap
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: sap_batch_recall_coo
port: 8080
tools:
- name: sap-batch
description: "Given an execution date, run the sap batch recall coordination chain process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.SAP_BATCH_RECALL_COORDINATION_CHAIN LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.SAP_BATCH_RECALL_COORDINATION__RESULTS SELECT * FROM staging"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
category: "quality"
short_description: "SAP Batch Recall Coordination Chain processing complete"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_sap_batch_recall_coo_channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: servicenow
baseUri: "https://pg.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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves batch traceability data from SAP for a given material and batch number.
naftiko: "0.5"
info:
label: "SAP Batch Traceability Lookup"
description: "Retrieves batch traceability data from SAP for a given material and batch number."
tags:
- quality
- sap
- traceability
capability:
exposes:
- type: mcp
namespace: quality
port: 8080
tools:
- name: get-batch-trace
description: "Given a material and batch number, retrieve traceability data. Use for quality investigations and recalls."
inputParameters:
- name: material_number
in: body
type: string
description: "The SAP material number."
- name: batch_number
in: body
type: string
description: "The batch number."
call: "sap.get-batch"
with:
material_number: "{{material_number}}"
batch_number: "{{batch_number}}"
outputParameters:
- name: production_date
type: string
mapping: "$.d.ManufactureDate"
- name: shelf_life_date
type: string
mapping: "$.d.ShelfLifeExpirationDate"
consumes:
- type: http
namespace: sap
baseUri: "https://pg-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: "/Batch(Material='{{material_number}}',BatchIdentifyingPlant='*',Batch='{{batch_number}}')"
inputParameters:
- name: material_number
in: path
- name: batch_number
in: path
operations:
- name: get-batch
method: GET
Retrieves a pending SAP Concur expense report, approves it, and notifies the submitter via Microsoft Teams.
naftiko: "0.5"
info:
label: "SAP Concur Expense Report Approval"
description: "Retrieves a pending SAP Concur expense report, approves it, and notifies the submitter via Microsoft Teams."
tags:
- finance
- expense-management
- sap-concur
- approval
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: expense-approval
port: 8080
tools:
- name: approve-expense-report
description: "Given a SAP Concur report ID and approver comment, retrieve the report, approve it, and notify the submitter via Teams."
inputParameters:
- name: report_id
in: body
type: string
description: "The SAP Concur expense report ID to approve."
- name: approver_comment
in: body
type: string
description: "Approval comment to attach to the submission."
steps:
- name: get-report
type: call
call: concur.get-report
with:
report_id: "{{report_id}}"
- name: approve-report
type: call
call: concur.approve-report
with:
report_id: "{{report_id}}"
comment: "{{approver_comment}}"
- name: notify-submitter
type: call
call: msteams.send-message
with:
channel_id: "{{get-report.submitter_email}}"
text: "Your expense report '{{get-report.name}}' (${{get-report.total}}) has been approved in SAP Concur."
consumes:
- type: http
namespace: concur
baseUri: "https://www.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_token"
resources:
- name: reports
path: "/expense/reports/{{report_id}}"
inputParameters:
- name: report_id
in: path
operations:
- name: get-report
method: GET
- name: approve-report
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Reviews SAP Concur travel bookings for policy compliance in Snowflake, creates ServiceNow exceptions for violations, and notifies the travel team via Microsoft Teams.
naftiko: "0.5"
info:
label: "SAP Concur Travel Booking Compliance"
description: "Reviews SAP Concur travel bookings for policy compliance in Snowflake, creates ServiceNow exceptions for violations, and notifies the travel team via Microsoft Teams."
tags:
- travel
- sap
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: sap_concur_travel_bo
port: 8080
tools:
- name: sap-concur
description: "Given an execution date, run the sap concur travel booking compliance process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.SAP_CONCUR_TRAVEL_BOOKING_COMPLIANCE LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.SAP_CONCUR_TRAVEL_BOOKING_COMP_RESULTS SELECT * FROM staging"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
category: "travel"
short_description: "SAP Concur Travel Booking Compliance processing complete"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_sap_concur_travel_bo_channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: servicenow
baseUri: "https://pg.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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves cost center details from SAP including responsible person and hierarchy.
naftiko: "0.5"
info:
label: "SAP Cost Center Lookup"
description: "Retrieves cost center details from SAP including responsible person and hierarchy."
tags:
- finance
- sap
- cost-management
capability:
exposes:
- type: mcp
namespace: finance
port: 8080
tools:
- name: get-cost-center
description: "Given a SAP cost center ID, retrieve master data. Use for financial reporting."
inputParameters:
- name: cost_center
in: body
type: string
description: "The SAP cost center ID."
call: "sap.get-cost-center"
with:
cost_center: "{{cost_center}}"
outputParameters:
- name: description
type: string
mapping: "$.d.CostCenterDescription"
consumes:
- type: http
namespace: sap
baseUri: "https://pg-s4.sap.com/sap/opu/odata/sap/API_COSTCENTER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: cost-centers
path: "/A_CostCenter('{{cost_center}}')"
inputParameters:
- name: cost_center
in: path
operations:
- name: get-cost-center
method: GET
When SAP blocks a sales order due to credit limits, logs the event in Snowflake, creates a ServiceNow case, and notifies the credit management team via Microsoft Teams.
naftiko: "0.5"
info:
label: "SAP Credit Management Block Handler"
description: "When SAP blocks a sales order due to credit limits, logs the event in Snowflake, creates a ServiceNow case, and notifies the credit management team via Microsoft Teams."
tags:
- finance
- sap
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: sap_credit_managemen
port: 8080
tools:
- name: sap-credit
description: "Given an execution date, run the sap credit management block handler process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.SAP_CREDIT_MANAGEMENT_BLOCK_HANDLER LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.SAP_CREDIT_MANAGEMENT_BLOCK_HA_RESULTS SELECT * FROM staging"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
category: "finance"
short_description: "SAP Credit Management Block Handler processing complete"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_sap_credit_managemen_channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: servicenow
baseUri: "https://pg.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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Monitors customs declaration status from SAP in Snowflake, flags delayed clearances, creates ServiceNow cases, and alerts the trade compliance team via Microsoft Teams.
naftiko: "0.5"
info:
label: "SAP Customs Declaration Monitor"
description: "Monitors customs declaration status from SAP in Snowflake, flags delayed clearances, creates ServiceNow cases, and alerts the trade compliance team via Microsoft Teams."
tags:
- compliance
- sap
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: sap_customs_declarat
port: 8080
tools:
- name: sap-customs
description: "Given an execution date, run the sap customs declaration monitor process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.SAP_CUSTOMS_DECLARATION_MONITOR LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.SAP_CUSTOMS_DECLARATION_MONITO_RESULTS SELECT * FROM staging"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
category: "compliance"
short_description: "SAP Customs Declaration Monitor processing complete"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_sap_customs_declarat_channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: servicenow
baseUri: "https://pg.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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves a delivery document from SAP by number, returning ship-to party, planned goods issue date, and items.
naftiko: "0.5"
info:
label: "SAP Delivery Document Lookup"
description: "Retrieves a delivery document from SAP by number, returning ship-to party, planned goods issue date, and items."
tags:
- logistics
- sap
- shipping
capability:
exposes:
- type: mcp
namespace: logistics
port: 8080
tools:
- name: get-delivery
description: "Given a SAP delivery document number, retrieve details. Use for logistics tracking."
inputParameters:
- name: delivery_number
in: body
type: string
description: "The SAP delivery document number."
call: "sap.get-delivery"
with:
delivery_number: "{{delivery_number}}"
outputParameters:
- name: ship_to
type: string
mapping: "$.d.ShipToParty"
- name: planned_goods_issue
type: string
mapping: "$.d.PlannedGoodsIssueDate"
consumes:
- type: http
namespace: sap
baseUri: "https://pg-s4.sap.com/sap/opu/odata/sap/API_OUTBOUND_DELIVERY_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: deliveries
path: "/A_OutbDeliveryHeader('{{delivery_number}}')"
inputParameters:
- name: delivery_number
in: path
operations:
- name: get-delivery
method: GET
Retrieves a goods movement document from SAP by document number, returning material, quantity, movement type, and posting date.
naftiko: "0.5"
info:
label: "SAP Goods Movement Lookup"
description: "Retrieves a goods movement document from SAP by document number, returning material, quantity, movement type, and posting date."
tags:
- logistics
- sap
- inventory
capability:
exposes:
- type: mcp
namespace: goods-movement
port: 8080
tools:
- name: get-goods-movement
description: "Given a SAP material document number, retrieve goods movement details including movement type, quantity, and storage location. Use for inventory transaction audits."
inputParameters:
- name: document_number
in: body
type: string
description: "The SAP material document number."
call: "sap.get-goods-movement"
with:
document_number: "{{document_number}}"
outputParameters:
- name: movement_type
type: string
mapping: "$.d.GoodsMovementType"
- name: quantity
type: string
mapping: "$.d.QuantityInEntryUnit"
consumes:
- type: http
namespace: sap
baseUri: "https://pg-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_DOCUMENT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: material-documents
path: "/A_MaterialDocumentHeader('{{document_number}}')"
inputParameters:
- name: document_number
in: path
operations:
- name: get-goods-movement
method: GET
Reconciles intercompany billing documents in SAP against Snowflake records, flags discrepancies, and notifies the accounting team via Microsoft Teams.
naftiko: "0.5"
info:
label: "SAP Intercompany Billing Reconciliation"
description: "Reconciles intercompany billing documents in SAP against Snowflake records, flags discrepancies, and notifies the accounting team via Microsoft Teams."
tags:
- finance
- sap
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: sap_intercompany_bil
port: 8080
tools:
- name: sap-intercompany
description: "Given an execution date, run the sap intercompany billing reconciliation process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.SAP_INTERCOMPANY_BILLING_RECONCILIATION LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.SAP_INTERCOMPANY_BILLING_RECON_RESULTS SELECT * FROM staging"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_sap_intercompany_bil_channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves material master data from SAP by material number, returning description, UOM, and material group.
naftiko: "0.5"
info:
label: "SAP Material Master Lookup"
description: "Retrieves material master data from SAP by material number, returning description, UOM, and material group."
tags:
- supply-chain
- sap
- product-data
capability:
exposes:
- type: mcp
namespace: product-data
port: 8080
tools:
- name: get-material
description: "Given a SAP material number, retrieve the material master record. Use for product inquiries."
inputParameters:
- name: material_number
in: body
type: string
description: "The SAP material number."
call: "sap.get-material"
with:
material_number: "{{material_number}}"
outputParameters:
- name: description
type: string
mapping: "$.d.MaterialDescription"
- name: material_group
type: string
mapping: "$.d.MaterialGroup"
consumes:
- type: http
namespace: sap
baseUri: "https://pg-s4.sap.com/sap/opu/odata/sap/API_PRODUCT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: materials
path: "/A_Product('{{material_number}}')"
inputParameters:
- name: material_number
in: path
operations:
- name: get-material
method: GET
Monitors MRP exception messages in SAP via Snowflake, flags critical shortages, creates ServiceNow tickets, and alerts the supply planning team via Microsoft Teams.
naftiko: "0.5"
info:
label: "SAP Material Requirements Planning Alert"
description: "Monitors MRP exception messages in SAP via Snowflake, flags critical shortages, creates ServiceNow tickets, and alerts the supply planning team via Microsoft Teams."
tags:
- supply-chain
- sap
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: sap_material_require
port: 8080
tools:
- name: sap-material
description: "Given an execution date, run the sap material requirements planning alert process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.SAP_MATERIAL_REQUIREMENTS_PLANNING_ALERT LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.SAP_MATERIAL_REQUIREMENTS_PLAN_RESULTS SELECT * FROM staging"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
category: "supply-chain"
short_description: "SAP Material Requirements Planning Alert processing complete"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_sap_material_require_channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: servicenow
baseUri: "https://pg.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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Validates SAP period-close readiness by checking open items in Snowflake, creates ServiceNow tasks for blockers, and notifies the accounting team via Microsoft Teams.
naftiko: "0.5"
info:
label: "SAP Period Close Readiness Checker"
description: "Validates SAP period-close readiness by checking open items in Snowflake, creates ServiceNow tasks for blockers, and notifies the accounting team via Microsoft Teams."
tags:
- finance
- sap
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: sap_period_close_rea
port: 8080
tools:
- name: sap-period
description: "Given an execution date, run the sap period close readiness checker process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.SAP_PERIOD_CLOSE_READINESS_CHECKER LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.SAP_PERIOD_CLOSE_READINESS_CHE_RESULTS SELECT * FROM staging"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
category: "finance"
short_description: "SAP Period Close Readiness Checker processing complete"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_sap_period_close_rea_channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: servicenow
baseUri: "https://pg.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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Checks SAP period-end close task completion for a fiscal period and company code, posting a status digest to the finance leadership Microsoft Teams channel.
naftiko: "0.5"
info:
label: "SAP Period-End Close Monitor"
description: "Checks SAP period-end close task completion for a fiscal period and company code, posting a status digest to the finance leadership Microsoft Teams channel."
tags:
- finance
- sap
- period-close
- reporting
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: finance-close
port: 8080
tools:
- name: monitor-period-close
description: "Given a fiscal period and company code, check SAP period-end close completion percentage and post a status digest to the finance Teams channel."
inputParameters:
- name: fiscal_period
in: body
type: string
description: "The SAP fiscal period to monitor (e.g., '006/2026')."
- name: company_code
in: body
type: string
description: "The SAP company code (e.g., 'US01')."
- name: teams_channel_id
in: body
type: string
description: "Teams channel ID for the finance leadership status digest."
steps:
- name: get-close-status
type: call
call: sap.get-close-tasks
with:
fiscal_period: "{{fiscal_period}}"
company_code: "{{company_code}}"
- name: post-status
type: call
call: msteams.send-message
with:
channel_id: "{{teams_channel_id}}"
text: "Period Close Status {{fiscal_period}} ({{company_code}}): {{get-close-status.completion_pct}}% complete. Open tasks: {{get-close-status.open_count}}. Blockers: {{get-close-status.blockers}}."
consumes:
- type: http
namespace: sap
baseUri: "https://pg-s4.sap.com/sap/opu/odata/sap/FCO_PI_CLOSE_COCKPIT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: close-tasks
path: "/ClosingTaskSet"
inputParameters:
- name: fiscal_period
in: query
- name: company_code
in: query
operations:
- name: get-close-tasks
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Identifies equipment due for planned maintenance in SAP via Snowflake, creates ServiceNow work orders, and notifies plant maintenance teams via Microsoft Teams.
naftiko: "0.5"
info:
label: "SAP Planned Maintenance Scheduler"
description: "Identifies equipment due for planned maintenance in SAP via Snowflake, creates ServiceNow work orders, and notifies plant maintenance teams via Microsoft Teams."
tags:
- maintenance
- sap
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: sap_planned_maintena
port: 8080
tools:
- name: sap-planned
description: "Given an execution date, run the sap planned maintenance scheduler process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.SAP_PLANNED_MAINTENANCE_SCHEDULER LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.SAP_PLANNED_MAINTENANCE_SCHEDU_RESULTS SELECT * FROM staging"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
category: "maintenance"
short_description: "SAP Planned Maintenance Scheduler processing complete"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_sap_planned_maintena_channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: servicenow
baseUri: "https://pg.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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves stock overview for a material across all plants in SAP.
naftiko: "0.5"
info:
label: "SAP Plant Stock Overview"
description: "Retrieves stock overview for a material across all plants in SAP."
tags:
- supply-chain
- sap
- inventory
capability:
exposes:
- type: mcp
namespace: inventory
port: 8080
tools:
- name: get-stock-overview
description: "Given a SAP material number, retrieve stock levels across all plants. Use for inventory management."
inputParameters:
- name: material_number
in: body
type: string
description: "The SAP material number."
call: "sap.get-stock"
with:
material_number: "{{material_number}}"
outputParameters:
- name: total_stock
type: string
mapping: "$.d.MatlWrhsStkQtyInMatlBaseUnit"
consumes:
- type: http
namespace: sap
baseUri: "https://pg-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: stock
path: "/A_MatlStkInAcctMod(Material='{{material_number}}')"
inputParameters:
- name: material_number
in: path
operations:
- name: get-stock
method: GET
Aggregates production line downtime events from SAP in Snowflake, creates Jira improvement tasks, and notifies plant management via Microsoft Teams.
naftiko: "0.5"
info:
label: "SAP Production Line Downtime Reporter"
description: "Aggregates production line downtime events from SAP in Snowflake, creates Jira improvement tasks, and notifies plant management via Microsoft Teams."
tags:
- manufacturing
- sap
- snowflake
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: sap_production_line_
port: 8080
tools:
- name: sap-production
description: "Given an execution date, run the sap production line downtime reporter process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.SAP_PRODUCTION_LINE_DOWNTIME_REPORTER LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.SAP_PRODUCTION_LINE_DOWNTIME_R_RESULTS SELECT * FROM staging"
- name: create-task
type: call
call: "jira.create-issue"
with:
project: "PGOPS"
issue_type: "Task"
summary: "SAP Production Line Downtime Reporter - review required"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_sap_production_line__channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: jira
baseUri: "https://pg.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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves a production order from SAP by number, returning material, quantity, and status.
naftiko: "0.5"
info:
label: "SAP Production Order Lookup"
description: "Retrieves a production order from SAP by number, returning material, quantity, and status."
tags:
- manufacturing
- sap
- production
capability:
exposes:
- type: mcp
namespace: manufacturing
port: 8080
tools:
- name: get-production-order
description: "Given a SAP production order number, retrieve the order details. Use for production scheduling."
inputParameters:
- name: order_number
in: body
type: string
description: "The SAP production order number."
call: "sap.get-production-order"
with:
order_number: "{{order_number}}"
outputParameters:
- name: material
type: string
mapping: "$.d.Material"
- name: status
type: string
mapping: "$.d.ManufacturingOrderStatus"
consumes:
- type: http
namespace: sap
baseUri: "https://pg-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: production-orders
path: "/A_ProductionOrder('{{order_number}}')"
inputParameters:
- name: order_number
in: path
operations:
- name: get-production-order
method: GET
Retrieves a SAP S/4HANA purchase order by number and returns the header status, supplier, and total amount for procurement tracking.
naftiko: "0.5"
info:
label: "SAP Purchase Order Lookup"
description: "Retrieves a SAP S/4HANA purchase order by number and returns the header status, supplier, and total amount for procurement tracking."
tags:
- finance
- procurement
- sap
- lookup
capability:
exposes:
- type: mcp
namespace: erp-lookup
port: 8080
tools:
- name: get-purchase-order
description: "Given a SAP purchase order number, return the PO status, supplier name, total amount, and currency."
inputParameters:
- name: po_number
in: body
type: string
description: "The SAP purchase order number (e.g., '4500054321')."
call: sap.get-po
with:
po_number: "{{po_number}}"
outputParameters:
- name: status
type: string
mapping: "$.d.OverallStatus"
- name: supplier
type: string
mapping: "$.d.Supplier.CompanyName"
- name: total_amount
type: string
mapping: "$.d.TotalAmount"
- name: currency
type: string
mapping: "$.d.TransactionCurrency"
consumes:
- type: http
namespace: sap
baseUri: "https://pg-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
When a quality hold is placed on a batch in SAP, creates a ServiceNow investigation case, logs in Snowflake, and notifies the quality assurance team via Microsoft Teams.
naftiko: "0.5"
info:
label: "SAP Quality Hold Release Workflow"
description: "When a quality hold is placed on a batch in SAP, creates a ServiceNow investigation case, logs in Snowflake, and notifies the quality assurance team via Microsoft Teams."
tags:
- quality
- sap
- servicenow
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: sap_quality_hold_rel
port: 8080
tools:
- name: sap-quality
description: "Given an execution date, run the sap quality hold release workflow process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.SAP_QUALITY_HOLD_RELEASE_WORKFLOW LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.SAP_QUALITY_HOLD_RELEASE_WORKF_RESULTS SELECT * FROM staging"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
category: "quality"
short_description: "SAP Quality Hold Release Workflow processing complete"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_sap_quality_hold_rel_channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: servicenow
baseUri: "https://pg.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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves a quality inspection lot from SAP, returning inspection result, material, and batch.
naftiko: "0.5"
info:
label: "SAP Quality Inspection Lot Lookup"
description: "Retrieves a quality inspection lot from SAP, returning inspection result, material, and batch."
tags:
- quality
- sap
- quality-management
capability:
exposes:
- type: mcp
namespace: qm
port: 8080
tools:
- name: get-inspection-lot
description: "Given a SAP inspection lot number, retrieve results. Use for quality release decisions."
inputParameters:
- name: inspection_lot
in: body
type: string
description: "The SAP inspection lot number."
call: "sap.get-inspection-lot"
with:
inspection_lot: "{{inspection_lot}}"
outputParameters:
- name: result
type: string
mapping: "$.d.InspectionLotResult"
- name: material
type: string
mapping: "$.d.Material"
consumes:
- type: http
namespace: sap
baseUri: "https://pg-s4.sap.com/sap/opu/odata/sap/API_INSPECTIONLOT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: inspection-lots
path: "/A_InspectionLot('{{inspection_lot}}')"
inputParameters:
- name: inspection_lot
in: path
operations:
- name: get-inspection-lot
method: GET
Monitors recipe formula changes in SAP, validates compliance in Snowflake, creates ServiceNow change records, and notifies the R&D team via Microsoft Teams.
naftiko: "0.5"
info:
label: "SAP Recipe Management Change Tracker"
description: "Monitors recipe formula changes in SAP, validates compliance in Snowflake, creates ServiceNow change records, and notifies the R&D team via Microsoft Teams."
tags:
- manufacturing
- sap
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: sap_recipe_managemen
port: 8080
tools:
- name: sap-recipe
description: "Given an execution date, run the sap recipe management change tracker process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.SAP_RECIPE_MANAGEMENT_CHANGE_TRACKER LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.SAP_RECIPE_MANAGEMENT_CHANGE_T_RESULTS SELECT * FROM staging"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
category: "manufacturing"
short_description: "SAP Recipe Management Change Tracker processing complete"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_sap_recipe_managemen_channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: servicenow
baseUri: "https://pg.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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves a SAP sales order by number, returning customer, items, delivery status, and value.
naftiko: "0.5"
info:
label: "SAP Sales Order Lookup"
description: "Retrieves a SAP sales order by number, returning customer, items, delivery status, and value."
tags:
- sales
- sap
- order-management
capability:
exposes:
- type: mcp
namespace: order-management
port: 8080
tools:
- name: get-sales-order
description: "Given a SAP sales order number, retrieve order details. Use for order status inquiries."
inputParameters:
- name: order_number
in: body
type: string
description: "The SAP sales order number."
call: "sap.get-sales-order"
with:
order_number: "{{order_number}}"
outputParameters:
- name: customer
type: string
mapping: "$.d.SoldToParty"
- name: net_value
type: string
mapping: "$.d.TotalNetAmount"
consumes:
- type: http
namespace: sap
baseUri: "https://pg-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('{{order_number}}')"
inputParameters:
- name: order_number
in: path
operations:
- name: get-sales-order
method: GET
Analyzes transportation costs from SAP in Snowflake, identifies routing optimizations, creates Jira action items, and notifies the logistics team via Microsoft Teams.
naftiko: "0.5"
info:
label: "SAP Transportation Cost Optimizer"
description: "Analyzes transportation costs from SAP in Snowflake, identifies routing optimizations, creates Jira action items, and notifies the logistics team via Microsoft Teams."
tags:
- logistics
- sap
- snowflake
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: sap_transportation_c
port: 8080
tools:
- name: sap-transportation
description: "Given an execution date, run the sap transportation cost optimizer process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.SAP_TRANSPORTATION_COST_OPTIMIZER LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.SAP_TRANSPORTATION_COST_OPTIMI_RESULTS SELECT * FROM staging"
- name: create-task
type: call
call: "jira.create-issue"
with:
project: "PGOPS"
issue_type: "Task"
summary: "SAP Transportation Cost Optimizer - review required"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_sap_transportation_c_channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: jira
baseUri: "https://pg.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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Monitors in-transit shipments in SAP via Snowflake, flags delayed deliveries, creates ServiceNow cases, and alerts the logistics team via Microsoft Teams.
naftiko: "0.5"
info:
label: "SAP Transportation Shipment Tracker"
description: "Monitors in-transit shipments in SAP via Snowflake, flags delayed deliveries, creates ServiceNow cases, and alerts the logistics team via Microsoft Teams."
tags:
- logistics
- sap
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: sap_transportation_s
port: 8080
tools:
- name: sap-transportation
description: "Given an execution date, run the sap transportation shipment tracker process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.SAP_TRANSPORTATION_SHIPMENT_TRACKER LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.SAP_TRANSPORTATION_SHIPMENT_TR_RESULTS SELECT * FROM staging"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
category: "logistics"
short_description: "SAP Transportation Shipment Tracker processing complete"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_sap_transportation_s_channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: servicenow
baseUri: "https://pg.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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves vendor master data from SAP by vendor number.
naftiko: "0.5"
info:
label: "SAP Vendor Master Lookup"
description: "Retrieves vendor master data from SAP by vendor number."
tags:
- procurement
- sap
- vendor-management
capability:
exposes:
- type: mcp
namespace: procurement
port: 8080
tools:
- name: get-vendor
description: "Given a SAP vendor number, retrieve vendor master data. Use for supplier verification."
inputParameters:
- name: vendor_number
in: body
type: string
description: "The SAP vendor number."
call: "sap.get-vendor"
with:
vendor_number: "{{vendor_number}}"
outputParameters:
- name: vendor_name
type: string
mapping: "$.d.SupplierName"
consumes:
- type: http
namespace: sap
baseUri: "https://pg-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: vendors
path: "/A_Supplier('{{vendor_number}}')"
inputParameters:
- name: vendor_number
in: path
operations:
- name: get-vendor
method: GET
Computes vendor performance scorecards from SAP data in Snowflake, flags underperforming suppliers, creates Jira review tasks, and notifies procurement via Microsoft Teams.
naftiko: "0.5"
info:
label: "SAP Vendor Performance Scorecard"
description: "Computes vendor performance scorecards from SAP data in Snowflake, flags underperforming suppliers, creates Jira review tasks, and notifies procurement via Microsoft Teams."
tags:
- procurement
- sap
- snowflake
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: sap_vendor_performan
port: 8080
tools:
- name: sap-vendor
description: "Given an execution date, run the sap vendor performance scorecard process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.SAP_VENDOR_PERFORMANCE_SCORECARD LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.SAP_VENDOR_PERFORMANCE_SCORECA_RESULTS SELECT * FROM staging"
- name: create-task
type: call
call: "jira.create-issue"
with:
project: "PGOPS"
issue_type: "Task"
summary: "SAP Vendor Performance Scorecard - review required"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_sap_vendor_performan_channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: jira
baseUri: "https://pg.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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Calculates warehouse space utilization from SAP data in Snowflake, flags facilities approaching capacity, and notifies the logistics team via Microsoft Teams.
naftiko: "0.5"
info:
label: "SAP Warehouse Space Utilization Report"
description: "Calculates warehouse space utilization from SAP data in Snowflake, flags facilities approaching capacity, and notifies the logistics team via Microsoft Teams."
tags:
- logistics
- sap
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: sap_warehouse_space_
port: 8080
tools:
- name: sap-warehouse
description: "Given an execution date, run the sap warehouse space utilization report process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.SAP_WAREHOUSE_SPACE_UTILIZATION_REPORT LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.SAP_WAREHOUSE_SPACE_UTILIZATIO_RESULTS SELECT * FROM staging"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_sap_warehouse_space__channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Submits a ServiceNow change request for a planned IT or manufacturing system change and notifies the change advisory board in Microsoft Teams.
naftiko: "0.5"
info:
label: "ServiceNow Change Management Request"
description: "Submits a ServiceNow change request for a planned IT or manufacturing system change and notifies the change advisory board in Microsoft Teams."
tags:
- itsm
- change-management
- servicenow
- microsoft-teams
- approval
capability:
exposes:
- type: mcp
namespace: change-ops
port: 8080
tools:
- name: submit-change-request
description: "Given a change description, affected system, planned start date, and CAB Teams channel, create a ServiceNow change request and notify the CAB."
inputParameters:
- name: change_description
in: body
type: string
description: "Full description of the planned change, scope, and rollback plan."
- name: affected_system
in: body
type: string
description: "The P&G system or service being changed."
- name: planned_start
in: body
type: string
description: "Planned change start datetime in ISO 8601 format."
- name: cab_channel_id
in: body
type: string
description: "Teams channel ID for the change advisory board."
steps:
- name: create-change
type: call
call: servicenow.create-change
with:
short_description: "Change: {{affected_system}} — {{change_description}}"
planned_start: "{{planned_start}}"
category: "application"
- name: notify-cab
type: call
call: msteams.send-message
with:
channel_id: "{{cab_channel_id}}"
text: "Change Request: {{affected_system}} | CHG: {{create-change.number}} | Planned: {{planned_start}} | Scope: {{change_description}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://pg.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: changes
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.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves a ServiceNow incident status, priority, and assignment group by number.
naftiko: "0.5"
info:
label: "ServiceNow Incident Status Lookup"
description: "Retrieves a ServiceNow incident status, priority, and assignment group by number."
tags:
- itsm
- servicenow
- incident-management
capability:
exposes:
- type: mcp
namespace: itsm
port: 8080
tools:
- name: get-incident-status
description: "Given a ServiceNow incident number, retrieve its current state. Use for status checks."
inputParameters:
- name: incident_number
in: body
type: string
description: "The incident number."
call: "servicenow.get-incident"
with:
incident_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://pg.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident?sysparm_query=number={{incident_number}}"
inputParameters:
- name: incident_number
in: query
operations:
- name: get-incident
method: GET
Executes a read-only SQL query against the P&G Snowflake data warehouse.
naftiko: "0.5"
info:
label: "Snowflake Query Executor"
description: "Executes a read-only SQL query against the P&G Snowflake data warehouse."
tags:
- data
- snowflake
- analytics
capability:
exposes:
- type: mcp
namespace: data
port: 8080
tools:
- name: execute-query
description: "Given a SQL statement, execute it against Snowflake and return results. Use for ad-hoc analytics."
inputParameters:
- name: sql_statement
in: body
type: string
description: "The SQL query to execute."
call: "snowflake.execute-statement"
with:
statement: "{{sql_statement}}"
outputParameters:
- name: row_count
type: integer
mapping: "$.data.rowCount"
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
Monitors Snowflake task execution for the retail analytics pipelines and alerts the data engineering team in Teams if failures are detected in the last 24 hours.
naftiko: "0.5"
info:
label: "Snowflake Retail Analytics Pipeline Monitor"
description: "Monitors Snowflake task execution for the retail analytics pipelines and alerts the data engineering team in Teams if failures are detected in the last 24 hours."
tags:
- data
- analytics
- snowflake
- monitoring
- microsoft-teams
- retail
capability:
exposes:
- type: mcp
namespace: retail-data-ops
port: 8080
tools:
- name: monitor-retail-pipelines
description: "Given a Snowflake database and schema for retail analytics, check for task failures in the past 24 hours and post an alert to the data engineering Teams channel."
inputParameters:
- name: database
in: body
type: string
description: "The Snowflake database name for retail analytics (e.g., 'RETAIL_ANALYTICS')."
- name: schema
in: body
type: string
description: "The Snowflake schema containing retail pipeline tasks."
- name: teams_channel_id
in: body
type: string
description: "Teams channel ID for data engineering alerts."
steps:
- name: check-failures
type: call
call: snowflake.query-task-history
with:
database: "{{database}}"
schema: "{{schema}}"
- name: post-alert
type: call
call: msteams.send-message
with:
channel_id: "{{teams_channel_id}}"
text: "Retail Pipeline Health ({{database}}.{{schema}}): {{check-failures.failed_count}} failures in 24h. Failed: {{check-failures.failed_task_names}}."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: task-history
path: "/databases/{{database}}/schemas/{{schema}}/tasks"
inputParameters:
- name: database
in: path
- name: schema
in: path
operations:
- name: query-task-history
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Executes a Splunk search query and returns matching events.
naftiko: "0.5"
info:
label: "Splunk Log Search"
description: "Executes a Splunk search query and returns matching events."
tags:
- security
- splunk
- logging
capability:
exposes:
- type: mcp
namespace: security
port: 8080
tools:
- name: search-logs
description: "Given a Splunk search query and time range, execute the search. Use for investigations."
inputParameters:
- name: search_query
in: body
type: string
description: "The Splunk SPL query."
- name: earliest_time
in: body
type: string
description: "Search start time."
call: "splunk.create-search"
with:
search: "{{search_query}}"
earliest_time: "{{earliest_time}}"
outputParameters:
- name: result_count
type: integer
mapping: "$.entry.content.resultCount"
consumes:
- type: http
namespace: splunk
baseUri: "https://pg-splunk.example.com:8089/services"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: searches
path: "/search/jobs"
operations:
- name: create-search
method: POST
Queries SAP S/4HANA for materials below safety stock at a given manufacturing plant and posts a restocking alert to the supply chain Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Supply Chain Inventory Low-Stock Alert"
description: "Queries SAP S/4HANA for materials below safety stock at a given manufacturing plant and posts a restocking alert to the supply chain Microsoft Teams channel."
tags:
- supply-chain
- sap
- inventory
- microsoft-teams
- manufacturing
capability:
exposes:
- type: mcp
namespace: supply-chain-ops
port: 8080
tools:
- name: alert-low-inventory
description: "Given a SAP plant code, query for materials at or below their safety stock threshold and post a restocking alert to the supply chain Teams channel."
inputParameters:
- name: plant_code
in: body
type: string
description: "The SAP plant code to check inventory for (e.g., 'US10')."
- name: teams_channel_id
in: body
type: string
description: "Teams channel ID for the supply chain alert."
steps:
- name: get-low-stock
type: call
call: sap.get-low-stock-materials
with:
plant: "{{plant_code}}"
- name: post-alert
type: call
call: msteams.send-message
with:
channel_id: "{{teams_channel_id}}"
text: "Inventory Alert — Plant {{plant_code}}: {{get-low-stock.count}} materials below safety stock. Critical SKUs: {{get-low-stock.critical_materials}}."
consumes:
- type: http
namespace: sap
baseUri: "https://pg-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: material-stock
path: "/A_MatlStkInAcctMod"
inputParameters:
- name: plant
in: query
operations:
- name: get-low-stock-materials
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Tracks packaging waste metrics from manufacturing in Snowflake, computes progress against sustainability goals, and notifies the ESG team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Sustainability Packaging Waste Tracker"
description: "Tracks packaging waste metrics from manufacturing in Snowflake, computes progress against sustainability goals, and notifies the ESG team via Microsoft Teams."
tags:
- sustainability
- manufacturing
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: sustainability_packa
port: 8080
tools:
- name: sustainability-packaging
description: "Given an execution date, run the sustainability packaging waste tracker process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.SUSTAINABILITY_PACKAGING_WASTE_TRACKER LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.SUSTAINABILITY_PACKAGING_WASTE_RESULTS SELECT * FROM staging"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_sustainability_packa_channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When a Temporal workflow fails, captures error details, creates a ServiceNow incident, logs in Snowflake, and notifies the platform team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Temporal Workflow Failure Handler"
description: "When a Temporal workflow fails, captures error details, creates a ServiceNow incident, logs in Snowflake, and notifies the platform team via Microsoft Teams."
tags:
- automation
- temporal
- servicenow
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: temporal_workflow_fa
port: 8080
tools:
- name: temporal-workflow
description: "Given an execution date, run the temporal workflow failure handler process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.TEMPORAL_WORKFLOW_FAILURE_HANDLER LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.TEMPORAL_WORKFLOW_FAILURE_HAND_RESULTS SELECT * FROM staging"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
category: "automation"
short_description: "Temporal Workflow Failure Handler processing complete"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_temporal_workflow_fa_channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: servicenow
baseUri: "https://pg.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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Calculates trade promotion ROI from Snowflake retail sales data, compares against planned spend, and sends performance digests to the trade marketing team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Trade Promotion ROI Calculator"
description: "Calculates trade promotion ROI from Snowflake retail sales data, compares against planned spend, and sends performance digests to the trade marketing team via Microsoft Teams."
tags:
- marketing
- trade-promotion
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: trade_promotion_roi_
port: 8080
tools:
- name: trade-promotion
description: "Given an execution date, run the trade promotion roi calculator process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.TRADE_PROMOTION_ROI_CALCULATOR LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.TRADE_PROMOTION_ROI_CALCULATOR_RESULTS SELECT * FROM staging"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_trade_promotion_roi__channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Extracts diversity metrics from Workday into Snowflake, refreshes Power BI dashboards, and distributes to HR leadership via Microsoft Teams.
naftiko: "0.5"
info:
label: "Workday Diversity Metrics Report"
description: "Extracts diversity metrics from Workday into Snowflake, refreshes Power BI dashboards, and distributes to HR leadership via Microsoft Teams."
tags:
- hr
- diversity
- workday
- snowflake
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: workday_diversity_me
port: 8080
tools:
- name: workday-diversity
description: "Given an execution date, run the workday diversity metrics report process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.WORKDAY_DIVERSITY_METRICS_REPORT LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.WORKDAY_DIVERSITY_METRICS_REPO_RESULTS SELECT * FROM staging"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_workday_diversity_me_channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Exports active headcount from Workday grouped by region and business unit, then posts a summary to the HR leadership Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Workday Headcount Snapshot by Region"
description: "Exports active headcount from Workday grouped by region and business unit, then posts a summary to the HR leadership Microsoft Teams channel."
tags:
- hr
- workforce-planning
- workday
- reporting
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-reporting
port: 8080
tools:
- name: get-regional-headcount
description: "Retrieve active employee headcount from Workday grouped by region and post a formatted headcount digest to the HR Teams channel."
inputParameters:
- name: as_of_date
in: body
type: string
description: "The snapshot date in YYYY-MM-DD format."
- name: teams_channel_id
in: body
type: string
description: "Teams channel ID for the HR leadership headcount report."
steps:
- name: export-headcount
type: call
call: workday.list-workers
with:
status: "active"
as_of_date: "{{as_of_date}}"
- name: post-summary
type: call
call: msteams.send-message
with:
channel_id: "{{teams_channel_id}}"
text: "P&G Headcount Snapshot ({{as_of_date}}): {{export-headcount.total}} active employees across {{export-headcount.region_count}} regions."
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: "/pg/workers"
inputParameters:
- name: status
in: query
- name: as_of_date
in: query
operations:
- name: list-workers
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Compares actual Workday headcount against plan in Snowflake, flags variances, refreshes Power BI dashboards, and notifies HR leadership via Microsoft Teams.
naftiko: "0.5"
info:
label: "Workday Headcount vs Plan Variance"
description: "Compares actual Workday headcount against plan in Snowflake, flags variances, refreshes Power BI dashboards, and notifies HR leadership via Microsoft Teams."
tags:
- hr
- workforce-planning
- workday
- snowflake
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: workday_headcount_vs
port: 8080
tools:
- name: workday-headcount
description: "Given an execution date, run the workday headcount vs plan variance process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.WORKDAY_HEADCOUNT_VS_PLAN_VARIANCE LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.WORKDAY_HEADCOUNT_VS_PLAN_VARI_RESULTS SELECT * FROM staging"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_workday_headcount_vs_channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Identifies employees with incomplete mandatory training in Workday, logs in Snowflake, creates ServiceNow follow-up tasks, and sends reminders via Microsoft Teams.
naftiko: "0.5"
info:
label: "Workday Learning Enrollment Reminder"
description: "Identifies employees with incomplete mandatory training in Workday, logs in Snowflake, creates ServiceNow follow-up tasks, and sends reminders via Microsoft Teams."
tags:
- hr
- learning
- workday
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: workday_learning_enr
port: 8080
tools:
- name: workday-learning
description: "Given an execution date, run the workday learning enrollment reminder process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.WORKDAY_LEARNING_ENROLLMENT_REMINDER LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.WORKDAY_LEARNING_ENROLLMENT_RE_RESULTS SELECT * FROM staging"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
category: "hr"
short_description: "Workday Learning Enrollment Reminder processing complete"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_workday_learning_enr_channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: servicenow
baseUri: "https://pg.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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When a new hire is created in Workday, opens a ServiceNow onboarding ticket, sends a Microsoft Teams welcome message, and provisions a SharePoint document workspace.
naftiko: "0.5"
info:
label: "Workday New Hire Onboarding Orchestrator"
description: "When a new hire is created in Workday, opens a ServiceNow onboarding ticket, sends a Microsoft Teams welcome message, and provisions a SharePoint document workspace."
tags:
- hr
- onboarding
- workday
- servicenow
- microsoft-teams
- sharepoint
capability:
exposes:
- type: mcp
namespace: hr-onboarding
port: 8080
tools:
- name: trigger-onboarding
description: "Given a Workday employee ID and start date, orchestrate the P&G onboarding sequence across ServiceNow, Microsoft Teams, and SharePoint."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID for the new P&G hire."
- name: start_date
in: body
type: string
description: "The new hire's start date in YYYY-MM-DD format."
steps:
- name: get-employee
type: call
call: workday.get-worker
with:
worker_id: "{{worker_id}}"
- name: create-snow-ticket
type: call
call: servicenow.create-incident
with:
short_description: "New hire onboarding: {{get-employee.full_name}}"
category: "hr_onboarding"
assigned_group: "IT_Onboarding"
- name: create-sharepoint-workspace
type: call
call: sharepoint.create-folder
with:
site_id: "hr-onboarding-site"
folder_path: "NewHires/{{get-employee.full_name}}_{{start_date}}"
- name: send-welcome
type: call
call: msteams.send-message
with:
channel_id: "hr-new-hires"
text: "Welcome to P&G, {{get-employee.full_name}}! Your onboarding ticket: {{create-snow-ticket.number}}. Start date: {{start_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: "/pg/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://pg.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: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.sharepoint_token"
resources:
- name: folders
path: "/sites/{{site_id}}/drive/root/children"
inputParameters:
- name: site_id
in: path
operations:
- name: create-folder
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Tracks aging of open requisitions from Workday in Snowflake, creates Jira follow-up tasks for stale positions, and alerts recruiting managers via Microsoft Teams.
naftiko: "0.5"
info:
label: "Workday Open Position Aging Report"
description: "Tracks aging of open requisitions from Workday in Snowflake, creates Jira follow-up tasks for stale positions, and alerts recruiting managers via Microsoft Teams."
tags:
- hr
- recruiting
- workday
- snowflake
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: workday_open_positio
port: 8080
tools:
- name: workday-open
description: "Given an execution date, run the workday open position aging report process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.WORKDAY_OPEN_POSITION_AGING_REPORT LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.WORKDAY_OPEN_POSITION_AGING_RE_RESULTS SELECT * FROM staging"
- name: create-task
type: call
call: "jira.create-issue"
with:
project: "PGOPS"
issue_type: "Task"
summary: "Workday Open Position Aging Report - review required"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_workday_open_positio_channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: jira
baseUri: "https://pg.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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Initiates performance calibration sessions by pulling ratings from Snowflake, creates Jira tasks for HR partners, and notifies managers via Microsoft Teams.
naftiko: "0.5"
info:
label: "Workday Performance Calibration Workflow"
description: "Initiates performance calibration sessions by pulling ratings from Snowflake, creates Jira tasks for HR partners, and notifies managers via Microsoft Teams."
tags:
- hr
- performance
- workday
- snowflake
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: workday_performance_
port: 8080
tools:
- name: workday-performance
description: "Given an execution date, run the workday performance calibration workflow process. Use for scheduled operations."
inputParameters:
- name: execution_date
in: body
type: string
description: "The execution date in YYYY-MM-DD format."
steps:
- name: get-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM ANALYTICS.WORKDAY_PERFORMANCE_CALIBRATION_WORKFLOW LIMIT 100"
- name: process-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.WORKDAY_PERFORMANCE_CALIBRATIO_RESULTS SELECT * FROM staging"
- name: create-task
type: call
call: "jira.create-issue"
with:
project: "PGOPS"
issue_type: "Task"
summary: "Workday Performance Calibration Workflow - review required"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.teams_workday_performance__channel"
text: "Process complete. Results logged."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pg.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: jira
baseUri: "https://pg.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/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Initiates a performance review cycle in Workday for a given P&G business unit and notifies all managers via Microsoft Teams to begin evaluations.
naftiko: "0.5"
info:
label: "Workday Performance Review Cycle Trigger"
description: "Initiates a performance review cycle in Workday for a given P&G business unit and notifies all managers via Microsoft Teams to begin evaluations."
tags:
- hr
- performance-management
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-performance
port: 8080
tools:
- name: trigger-review-cycle
description: "Given a business unit code and review period, initiate the Workday performance review cycle and notify all managers in the unit via Teams."
inputParameters:
- name: business_unit
in: body
type: string
description: "The P&G business unit code (e.g., 'NA_FABRIC', 'EMEA_BEAUTY')."
- name: review_period
in: body
type: string
description: "The review period label (e.g., 'Annual-2025')."
- name: due_date
in: body
type: string
description: "Review completion deadline in YYYY-MM-DD format."
- name: manager_channel_id
in: body
type: string
description: "Teams channel ID for manager notification."
steps:
- name: initiate-cycle
type: call
call: workday.create-review-cycle
with:
business_unit: "{{business_unit}}"
review_period: "{{review_period}}"
due_date: "{{due_date}}"
- name: notify-managers
type: call
call: msteams.send-message
with:
channel_id: "{{manager_channel_id}}"
text: "Performance Review Cycle '{{review_period}}' launched for {{business_unit}}. Complete all Workday evaluations by {{due_date}}. Cycle ID: {{initiate-cycle.cycle_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: review-cycles
path: "/pg/performanceReviews"
operations:
- name: create-review-cycle
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Looks up a Workday worker profile by employee ID, returning name, title, and department.
naftiko: "0.5"
info:
label: "Workday Worker Profile Lookup"
description: "Looks up a Workday worker profile by employee ID, returning name, title, and department."
tags:
- hr
- workday
- employee-data
capability:
exposes:
- type: mcp
namespace: hr
port: 8080
tools:
- name: get-worker-profile
description: "Given a Workday employee ID, retrieve the worker profile. Use for HR inquiries."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID."
call: "workday.get-worker"
with:
worker_id: "{{worker_id}}"
outputParameters:
- name: full_name
type: string
mapping: "$.worker.fullName"
- name: job_title
type: string
mapping: "$.worker.jobTitle"
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: "/pg/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET