General Mills Capabilities
Naftiko 0.5 capability definitions for General Mills - 100 capabilities showing integration workflows and service orchestrations.
Lists members of privileged Azure AD groups for General Mills quarterly access certifications and writes results to a SharePoint audit list.
naftiko: "0.5"
info:
label: "Azure AD Privileged Access Review"
description: "Lists members of privileged Azure AD groups for General Mills quarterly access certifications and writes results to a SharePoint audit list."
tags:
- identity
- security
- azure-ad
- access-review
capability:
exposes:
- type: mcp
namespace: access-review
port: 8080
tools:
- name: run-access-review
description: "Given an Azure AD group ID and SharePoint site and list IDs, retrieve all group members and write them to the SharePoint access review list. Use quarterly for privileged access certification at General Mills."
inputParameters:
- name: group_id
in: body
type: string
description: "The Azure AD group ID to audit."
- name: sharepoint_site_id
in: body
type: string
description: "The SharePoint site ID for audit records."
- name: sharepoint_list_id
in: body
type: string
description: "The SharePoint list ID for the review entries."
steps:
- name: list-members
type: call
call: "azure-ad-review.list-group-members"
with:
group_id: "{{group_id}}"
- name: write-audit-record
type: call
call: "sharepoint-audit.create-list-item"
with:
site_id: "{{sharepoint_site_id}}"
list_id: "{{sharepoint_list_id}}"
members: "{{list-members.value}}"
consumes:
- type: http
namespace: azure-ad-review
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.azure_ad_token"
resources:
- name: group-members
path: "/groups/{{group_id}}/members"
inputParameters:
- name: group_id
in: path
operations:
- name: list-group-members
method: GET
- type: http
namespace: sharepoint-audit
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: list-items
path: "/sites/{{site_id}}/lists/{{list_id}}/items"
inputParameters:
- name: site_id
in: path
- name: list_id
in: path
operations:
- name: create-list-item
method: POST
Checks Azure AD group memberships for a user to validate access rights.
naftiko: "0.5"
info:
label: "Azure AD User Group Membership Check"
description: "Checks Azure AD group memberships for a user to validate access rights."
tags:
- security
- identity
- azure-active-directory
- access
capability:
exposes:
- type: mcp
namespace: identity
port: 8080
tools:
- name: check-groups
description: "List Azure AD group memberships for access validation."
inputParameters:
- name: user_upn
type: string
description: "User principal name."
call: azuread.get-member-of
with:
upn: "{{user_upn}}"
outputParameters:
- name: groups
type: string
mapping: "$.value"
consumes:
- type: http
namespace: azuread
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: member-of
path: "/users/memberOf"
operations:
- name: get-member-of
method: GET
Queries Azure Cost Management for General Mills subscription spend anomalies and posts an alert to the FinOps Microsoft Teams channel when thresholds are exceeded.
naftiko: "0.5"
info:
label: "Azure Cost Anomaly Alert Handler"
description: "Queries Azure Cost Management for General Mills subscription spend anomalies and posts an alert to the FinOps Microsoft Teams channel when thresholds are exceeded."
tags:
- cloud
- finops
- azure
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: cloud-finops
port: 8080
tools:
- name: handle-cost-anomaly
description: "Given an Azure subscription ID and spend threshold, query Azure Cost Management and post an alert to the FinOps Teams channel if the threshold is exceeded. Use when responding to Azure cost anomaly notifications."
inputParameters:
- name: subscription_id
in: body
type: string
description: "The Azure subscription ID to audit."
- name: threshold_usd
in: body
type: number
description: "Spend threshold in USD; alert fires when current spend exceeds this."
steps:
- name: get-spend
type: call
call: "azure-cost.query-usage"
with:
subscription_id: "{{subscription_id}}"
- name: alert-finops
type: call
call: "msteams-finops.send-message"
with:
channel_id: "$secrets.teams_finops_channel_id"
text: "Azure Cost Alert — Subscription {{subscription_id}} at {{get-spend.total_cost}} {{get-spend.currency}} has crossed the ${{threshold_usd}} threshold. Review the billing dashboard."
consumes:
- type: http
namespace: azure-cost
baseUri: "https://management.azure.com/subscriptions"
authentication:
type: bearer
token: "$secrets.azure_management_token"
resources:
- name: cost-query
path: "/{{subscription_id}}/providers/Microsoft.CostManagement/query"
inputParameters:
- name: subscription_id
in: path
operations:
- name: query-usage
method: POST
- type: http
namespace: msteams-finops
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-message
method: POST
Handles releases by checking Azure DevOps pipeline, ServiceNow change, and notifying Teams.
naftiko: "0.5"
info:
label: "Azure DevOps Release Approval Handler"
description: "Handles releases by checking Azure DevOps pipeline, ServiceNow change, and notifying Teams."
tags:
- operations
- devops
- azure-devops
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: release-mgmt
port: 8080
tools:
- name: handle-release
description: "Handle release approval."
inputParameters:
- name: pipeline_id
type: string
description: "Pipeline ID."
- name: change_request
type: string
description: "Change request."
steps:
- name: get-pipeline
type: call
call: azuredevops.get-run
with:
pipeline_id: "{{pipeline_id}}"
- name: validate
type: call
call: servicenow.get-change
with:
number: "{{change_request}}"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "releases"
text: "Release: Pipeline {{pipeline_id}} ({{get-pipeline.status}})"
consumes:
- type: http
namespace: azuredevops
baseUri: "https://dev.azure.com/generalmills"
authentication:
type: bearer
token: "$secrets.azure_devops_token"
resources:
- name: pipelines
path: "/_apis/pipelines"
operations:
- name: get-run
method: GET
- type: http
namespace: servicenow
baseUri: "https://generalmills.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Monitors brand sentiment from Snowflake, creates Salesforce cases, and alerts brand management via Teams.
naftiko: "0.5"
info:
label: "Brand Sentiment Monitoring Responder"
description: "Monitors brand sentiment from Snowflake, creates Salesforce cases, and alerts brand management via Teams."
tags:
- marketing
- social
- snowflake
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: brand-monitoring
port: 8080
tools:
- name: respond-sentiment
description: "Monitor brand sentiment and respond to negative trends."
inputParameters:
- name: brand_name
type: string
description: "Brand name."
- name: threshold
type: number
description: "Negative threshold pct."
steps:
- name: get-sentiment
type: call
call: snowflake.execute-query
with:
warehouse: "SOCIAL_WH"
query: "SELECT negative_pct FROM sentiment WHERE brand='{{brand_name}}'"
- name: create-case
type: call
call: salesforce.create-case
with:
Subject: "Sentiment alert: {{brand_name}}"
- name: alert
type: call
call: msteams.send-message
with:
channel_id: "brand-mgmt"
text: "SENTIMENT: {{brand_name}} negative at {{get-sentiment.negative_pct}}%"
consumes:
- type: http
namespace: snowflake
baseUri: "https://generalmills.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: salesforce
baseUri: "https://generalmills.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: sobjects
path: "/sobjects"
operations:
- name: query
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Monitors co-manufacturer production by pulling Snowflake output data, comparing against SAP planned orders, and posting status to Teams.
naftiko: "0.5"
info:
label: "Co-Manufacturer Production Monitoring"
description: "Monitors co-manufacturer production by pulling Snowflake output data, comparing against SAP planned orders, and posting status to Teams."
tags:
- manufacturing
- supply-chain
- snowflake
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: co-mfg
port: 8080
tools:
- name: monitor-co-mfg
description: "Monitor co-manufacturer production output against plans."
inputParameters:
- name: co_mfg_id
type: string
description: "Co-manufacturer identifier."
- name: period
type: string
description: "Production period."
steps:
- name: get-output
type: call
call: snowflake.execute-query
with:
warehouse: "MFG_WH"
query: "SELECT sku, actual_units, planned_units FROM co_mfg_output WHERE mfg_id='{{co_mfg_id}}' AND period='{{period}}'"
- name: get-orders
type: call
call: sap.get-orders
with:
supplier: "{{co_mfg_id}}"
period: "{{period}}"
- name: post-status
type: call
call: msteams.send-message
with:
channel_id: "co-manufacturing"
text: "Co-mfg {{co_mfg_id}} ({{period}}): Actual {{get-output.total_units}} vs planned {{get-orders.planned_units}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://generalmills.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: sap
baseUri: "https://generalmills-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: orders
path: "/data"
operations:
- name: get-orders
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Monitors cold chain temperatures from Snowflake IoT data, flags excursions, and creates ServiceNow incidents for out-of-range events.
naftiko: "0.5"
info:
label: "Cold Chain Temperature Monitoring"
description: "Monitors cold chain temperatures from Snowflake IoT data, flags excursions, and creates ServiceNow incidents for out-of-range events."
tags:
- supply-chain
- quality
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: cold-chain
port: 8080
tools:
- name: monitor-cold-chain
description: "Monitor cold chain temperature excursions and create incidents."
inputParameters:
- name: shipment_id
type: string
description: "Shipment tracking ID."
- name: max_temp
type: number
description: "Maximum allowed temperature in Celsius."
steps:
- name: get-temps
type: call
call: snowflake.execute-query
with:
warehouse: "IOT_WH"
query: "SELECT timestamp, temp_celsius FROM cold_chain WHERE shipment='{{shipment_id}}' AND temp_celsius>{{max_temp}}"
- name: create-incident
type: call
call: servicenow.create-incident
with:
short_description: "Cold chain excursion: shipment {{shipment_id}}"
description: "{{get-temps.excursion_count}} temperature excursions above {{max_temp}}C"
- name: alert-team
type: call
call: msteams.send-message
with:
channel_id: "quality-alerts"
text: "COLD CHAIN ALERT: Shipment {{shipment_id}} had {{get-temps.excursion_count}} excursions"
consumes:
- type: http
namespace: snowflake
baseUri: "https://generalmills.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://generalmills.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Compiles competitive intelligence from Snowflake Circana data, updates Salesforce, and posts digest to Teams.
naftiko: "0.5"
info:
label: "Competitive Market Intelligence Digest"
description: "Compiles competitive intelligence from Snowflake Circana data, updates Salesforce, and posts digest to Teams."
tags:
- marketing
- analytics
- snowflake
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: market-intelligence
port: 8080
tools:
- name: generate-digest
description: "Generate competitive market intelligence digest."
inputParameters:
- name: category
type: string
description: "Product category."
- name: period
type: string
description: "Period."
steps:
- name: get-data
type: call
call: snowflake.execute-query
with:
warehouse: "MARKET_WH"
query: "SELECT brand, share FROM circana WHERE category='{{category}}'"
- name: update-sf
type: call
call: salesforce.update-report
with:
category: "{{category}}"
- name: post
type: call
call: msteams.send-message
with:
channel_id: "market-intel"
text: "Market digest for {{category}} ready"
consumes:
- type: http
namespace: snowflake
baseUri: "https://generalmills.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: salesforce
baseUri: "https://generalmills.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: sobjects
path: "/sobjects"
operations:
- name: query
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Analyzes consumer reviews from Snowflake, creates Jira tasks, and posts summary to Teams.
naftiko: "0.5"
info:
label: "Consumer Review Analysis Pipeline"
description: "Analyzes consumer reviews from Snowflake, creates Jira tasks, and posts summary to Teams."
tags:
- marketing
- quality
- snowflake
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: consumer-insights
port: 8080
tools:
- name: analyze-reviews
description: "Analyze consumer reviews for complaint trends."
inputParameters:
- name: product_line
type: string
description: "Product line."
- name: period_days
type: number
description: "Lookback days."
steps:
- name: get-reviews
type: call
call: snowflake.execute-query
with:
warehouse: "CONSUMER_WH"
query: "SELECT topic, count FROM reviews WHERE product='{{product_line}}'"
- name: create-task
type: call
call: jira.create-issue
with:
project_key: "PROD"
summary: "Reviews: {{product_line}}"
- name: post
type: call
call: msteams.send-message
with:
channel_id: "insights"
text: "Review analysis for {{product_line}} complete"
consumes:
- type: http
namespace: snowflake
baseUri: "https://generalmills.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: jira
baseUri: "https://generalmills.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Initiates CM audit from Ariba supplier data, Jira tasks, and SharePoint checklists.
naftiko: "0.5"
info:
label: "Contract Manufacturer Quality Audit"
description: "Initiates CM audit from Ariba supplier data, Jira tasks, and SharePoint checklists."
tags:
- quality
- procurement
- sap
- jira
- sharepoint
capability:
exposes:
- type: mcp
namespace: quality-audit
port: 8080
tools:
- name: initiate-audit
description: "Start contract manufacturer quality audit."
inputParameters:
- name: supplier_id
type: string
description: "Supplier ID."
- name: audit_type
type: string
description: "Audit type."
steps:
- name: get-supplier
type: call
call: ariba.get-supplier
with:
supplier_id: "{{supplier_id}}"
- name: create-task
type: call
call: jira.create-issue
with:
project_key: "QAUDIT"
summary: "CM Audit: {{get-supplier.name}}"
- name: share-checklist
type: call
call: sharepoint.copy-template
with:
template: "audit-{{audit_type}}"
destination: "audits/{{supplier_id}}"
consumes:
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/supplier-management/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: suppliers
path: "/suppliers"
operations:
- name: get-supplier
method: GET
- type: http
namespace: jira
baseUri: "https://generalmills.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/sites/drive/items"
operations:
- name: search-docs
method: GET
Handles contractor expiry by checking Okta, Workday dates, and creating ServiceNow tasks.
naftiko: "0.5"
info:
label: "Contractor Access Expiry Handler"
description: "Handles contractor expiry by checking Okta, Workday dates, and creating ServiceNow tasks."
tags:
- security
- identity
- okta
- workday
- servicenow
capability:
exposes:
- type: mcp
namespace: access-lifecycle
port: 8080
tools:
- name: handle-expiry
description: "Handle contractor access expiry."
inputParameters:
- name: contractor_email
type: string
description: "Contractor email."
steps:
- name: get-okta
type: call
call: okta.get-user
with:
email: "{{contractor_email}}"
- name: check-wd
type: call
call: workday.get-worker
with:
email: "{{contractor_email}}"
- name: create-task
type: call
call: servicenow.create-incident
with:
short_description: "Expiry: {{contractor_email}}"
consumes:
- type: http
namespace: okta
baseUri: "https://generalmills.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_api_token"
resources:
- name: users
path: "/users"
operations:
- name: get-user
method: GET
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/generalmills/workers"
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://generalmills.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
Routes complaints to quality by tracing batch in SAP, creating Jira investigation, and updating ServiceNow.
naftiko: "0.5"
info:
label: "Customer Complaint Quality Investigation"
description: "Routes complaints to quality by tracing batch in SAP, creating Jira investigation, and updating ServiceNow."
tags:
- quality
- customer-service
- sap
- jira
- servicenow
capability:
exposes:
- type: mcp
namespace: complaint-quality
port: 8080
tools:
- name: route-complaint
description: "Route customer complaint to quality investigation."
inputParameters:
- name: ticket_id
type: string
description: "ServiceNow ticket."
- name: batch_number
type: string
description: "Batch number."
- name: material_number
type: string
description: "Material number."
steps:
- name: trace
type: call
call: sap.get-batch
with:
batch: "{{batch_number}}"
material: "{{material_number}}"
- name: create-inv
type: call
call: jira.create-issue
with:
project_key: "QUAL"
summary: "Complaint: batch {{batch_number}}"
- name: update
type: call
call: servicenow.update-incident
with:
number: "{{ticket_id}}"
comment: "Investigation: {{create-inv.key}}"
consumes:
- type: http
namespace: sap
baseUri: "https://generalmills-s4.sap.com/sap/opu/odata/sap/API_BATCH_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-batch
method: GET
- type: http
namespace: jira
baseUri: "https://generalmills.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: servicenow
baseUri: "https://generalmills.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
Analyzes returns from SAP, Snowflake quality data, and creates Jira improvement tasks.
naftiko: "0.5"
info:
label: "Customer Returns Analysis"
description: "Analyzes returns from SAP, Snowflake quality data, and creates Jira improvement tasks."
tags:
- quality
- sales
- sap
- snowflake
- jira
capability:
exposes:
- type: mcp
namespace: returns-analytics
port: 8080
tools:
- name: analyze-returns
description: "Analyze customer return patterns."
inputParameters:
- name: material_number
type: string
description: "Material."
- name: period
type: string
description: "Period."
steps:
- name: get-returns
type: call
call: sap.get-returns
with:
material: "{{material_number}}"
- name: get-quality
type: call
call: snowflake.execute-query
with:
warehouse: "QUALITY_WH"
query: "SELECT reason FROM returns WHERE material='{{material_number}}'"
- name: create-task
type: call
call: jira.create-issue
with:
project_key: "QUAL"
summary: "Returns: {{material_number}}"
consumes:
- type: http
namespace: sap
baseUri: "https://generalmills-s4.sap.com/sap/opu/odata/sap/API_RETURNS_DELIVERY_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-returns
method: GET
- type: http
namespace: snowflake
baseUri: "https://generalmills.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: jira
baseUri: "https://generalmills.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
Checks production service health in Datadog including error rate, latency, and uptime.
naftiko: "0.5"
info:
label: "Datadog Service Health Check"
description: "Checks production service health in Datadog including error rate, latency, and uptime."
tags:
- operations
- monitoring
- datadog
- performance
capability:
exposes:
- type: mcp
namespace: observability
port: 8080
tools:
- name: check-service-health
description: "Check Datadog for service health metrics."
inputParameters:
- name: service_name
type: string
description: "Datadog service name."
- name: time_from
type: string
description: "Start timestamp."
call: datadog.query-metrics
with:
query: "avg:trace.errors{service:{{service_name}}}"
from: "{{time_from}}"
outputParameters:
- name: error_rate
type: string
mapping: "$.series[0].pointlist[0][1]"
- name: latency
type: string
mapping: "$.series[1].pointlist[0][1]"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: events
path: "/events"
operations:
- name: create-event
method: POST
Syncs demand forecasts from Snowflake with SAP inventory and creates planned production orders.
naftiko: "0.5"
info:
label: "Demand Forecast to Production Sync"
description: "Syncs demand forecasts from Snowflake with SAP inventory and creates planned production orders."
tags:
- supply-chain
- manufacturing
- snowflake
- sap
- planning
capability:
exposes:
- type: mcp
namespace: demand-planning
port: 8080
tools:
- name: sync-demand
description: "Synchronize demand forecasts with production planning."
inputParameters:
- name: category
type: string
description: "Product category."
- name: plant_code
type: string
description: "Plant code."
- name: weeks
type: number
description: "Planning weeks."
steps:
- name: get-forecast
type: call
call: snowflake.execute-query
with:
warehouse: "DEMAND_WH"
query: "SELECT sku, units FROM forecast WHERE category='{{category}}'"
- name: check-stock
type: call
call: sap.get-stock
with:
plant: "{{plant_code}}"
category: "{{category}}"
- name: create-orders
type: call
call: sap.create-planned-order
with:
plant: "{{plant_code}}"
data: "{{get-forecast.data}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://generalmills.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: sap
baseUri: "https://generalmills-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-stock
method: GET
- name: create-planned-order
method: POST
Monitors e-commerce pricing from Snowflake, flags MAP violations, creates Salesforce cases, alerts Teams.
naftiko: "0.5"
info:
label: "Digital Shelf Price Monitor"
description: "Monitors e-commerce pricing from Snowflake, flags MAP violations, creates Salesforce cases, alerts Teams."
tags:
- ecommerce
- sales
- snowflake
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pricing-ops
port: 8080
tools:
- name: monitor-pricing
description: "Monitor digital shelf pricing for MAP violations."
inputParameters:
- name: brand
type: string
description: "Brand name."
- name: marketplace
type: string
description: "Marketplace."
steps:
- name: get-prices
type: call
call: snowflake.execute-query
with:
warehouse: "ECOM_WH"
query: "SELECT sku, price FROM shelf WHERE brand='{{brand}}'"
- name: create-case
type: call
call: salesforce.create-case
with:
Subject: "MAP violation: {{brand}} on {{marketplace}}"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "pricing"
text: "MAP alert: {{brand}} on {{marketplace}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://generalmills.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: salesforce
baseUri: "https://generalmills.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: sobjects
path: "/sobjects"
operations:
- name: query
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Tracks distributor orders from Salesforce through SAP fulfillment and posts cash collection status to the finance Teams channel.
naftiko: "0.5"
info:
label: "Distributor Order to Cash Tracker"
description: "Tracks distributor orders from Salesforce through SAP fulfillment and posts cash collection status to the finance Teams channel."
tags:
- sales
- finance
- salesforce
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: order-to-cash
port: 8080
tools:
- name: track-order-to-cash
description: "Track distributor order through fulfillment and collection."
inputParameters:
- name: order_id
type: string
description: "Salesforce order ID."
steps:
- name: get-order
type: call
call: salesforce.get-order
with:
order_id: "{{order_id}}"
- name: get-fulfillment
type: call
call: sap.get-delivery-status
with:
order: "{{get-order.sap_reference}}"
- name: post-status
type: call
call: msteams.send-message
with:
channel_id: "finance-ar"
text: "Order {{order_id}}: Fulfillment {{get-fulfillment.status}}. Invoice: {{get-fulfillment.invoice_number}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://generalmills.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: orders
path: "/sobjects/Order"
operations:
- name: get-order
method: GET
- type: http
namespace: sap
baseUri: "https://generalmills-s4.sap.com/sap/opu/odata/sap/API_OUTBOUND_DELIVERY_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: deliveries
path: "/data"
operations:
- name: get-delivery-status
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Tracks fulfillment from Salesforce order, SAP picking, and updates ServiceNow customer ticket.
naftiko: "0.5"
info:
label: "E-commerce Order Fulfillment Tracker"
description: "Tracks fulfillment from Salesforce order, SAP picking, and updates ServiceNow customer ticket."
tags:
- ecommerce
- supply-chain
- salesforce
- sap
- servicenow
capability:
exposes:
- type: mcp
namespace: ecom-fulfillment
port: 8080
tools:
- name: track-fulfillment
description: "Track e-commerce order fulfillment."
inputParameters:
- name: order_id
type: string
description: "Salesforce order ID."
- name: ticket_id
type: string
description: "ServiceNow ticket."
steps:
- name: get-order
type: call
call: salesforce.get-order
with:
order_id: "{{order_id}}"
- name: check-picking
type: call
call: sap.get-delivery
with:
order: "{{get-order.sap_order}}"
- name: update-ticket
type: call
call: servicenow.update-incident
with:
number: "{{ticket_id}}"
comment: "Status: {{get-order.status}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://generalmills.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: sobjects
path: "/sobjects"
operations:
- name: query
method: GET
- type: http
namespace: sap
baseUri: "https://generalmills-s4.sap.com/sap/opu/odata/sap/API_OUTBOUND_DELIVERY_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-delivery
method: GET
- type: http
namespace: servicenow
baseUri: "https://generalmills.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
Generates learning paths from Workday skills, matches with training, and creates Jira development plans.
naftiko: "0.5"
info:
label: "Employee Learning Path Generator"
description: "Generates learning paths from Workday skills, matches with training, and creates Jira development plans."
tags:
- hr
- training
- workday
- jira
capability:
exposes:
- type: mcp
namespace: hr-learning
port: 8080
tools:
- name: generate-path
description: "Create personalized learning path."
inputParameters:
- name: employee_id
type: string
description: "Employee ID."
- name: target_role
type: string
description: "Target role."
steps:
- name: get-skills
type: call
call: workday.get-skills
with:
worker_id: "{{employee_id}}"
- name: create-plan
type: call
call: jira.create-issue
with:
project_key: "LEARN"
summary: "Learning: {{target_role}} for {{employee_id}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/generalmills/workers"
operations:
- name: get-worker
method: GET
- type: http
namespace: jira
baseUri: "https://generalmills.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
When a Workday termination is processed, disables the Azure AD account, opens a ServiceNow offboarding ticket, and notifies IT Security via Microsoft Teams.
naftiko: "0.5"
info:
label: "Employee Offboarding Workflow"
description: "When a Workday termination is processed, disables the Azure AD account, opens a ServiceNow offboarding ticket, and notifies IT Security via Microsoft Teams."
tags:
- hr
- offboarding
- workday
- azure-ad
- servicenow
- identity
capability:
exposes:
- type: mcp
namespace: hr-offboarding
port: 8080
tools:
- name: trigger-offboarding
description: "Given a Workday employee ID and termination date, disable the Azure AD account, open a ServiceNow offboarding ticket, and alert IT Security via Teams. Use immediately upon confirmed General Mills employee separation."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday worker ID of the departing employee."
- name: termination_date
in: body
type: string
description: "The employee's last working day in YYYY-MM-DD format."
steps:
- name: get-worker
type: call
call: "workday-off.get-worker"
with:
worker_id: "{{employee_id}}"
- name: disable-ad-account
type: call
call: "azure-ad-off.disable-user"
with:
user_id: "{{get-worker.azure_object_id}}"
- name: open-offboard-ticket
type: call
call: "servicenow-off.create-incident"
with:
category: "hr_offboarding"
short_description: "Offboarding: {{get-worker.full_name}} — last day {{termination_date}}"
assignment_group: "IT_Security"
consumes:
- type: http
namespace: workday-off
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/generalmills/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: azure-ad-off
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.azure_ad_token"
resources:
- name: users
path: "/users/{{user_id}}"
inputParameters:
- name: user_id
in: path
operations:
- name: disable-user
method: PATCH
- type: http
namespace: servicenow-off
baseUri: "https://generalmills.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 new hire is created in Workday, opens a ServiceNow IT onboarding ticket, provisions an Azure AD account, and sends a Microsoft Teams welcome message.
naftiko: "0.5"
info:
label: "Employee Onboarding Orchestrator"
description: "When a new hire is created in Workday, opens a ServiceNow IT onboarding ticket, provisions an Azure AD account, and sends a Microsoft Teams welcome message."
tags:
- hr
- onboarding
- workday
- servicenow
- azure-ad
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-onboarding
port: 8080
tools:
- name: trigger-onboarding
description: "Given a Workday employee ID and start date, orchestrate the full onboarding sequence across ServiceNow, Azure AD, and Microsoft Teams. Use when a new General Mills hire is confirmed and IT provisioning must begin."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday worker ID for the new hire."
- name: start_date
in: body
type: string
description: "The employee's start date in YYYY-MM-DD format."
steps:
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{employee_id}}"
- name: create-ad-account
type: call
call: "azure-ad.create-user"
with:
display_name: "{{get-employee.full_name}}"
department: "{{get-employee.department}}"
- name: open-it-ticket
type: call
call: "servicenow.create-incident"
with:
category: "hr_onboarding"
short_description: "New hire IT setup: {{get-employee.full_name}} — start {{start_date}}"
assignment_group: "IT_Onboarding"
- name: send-welcome
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{get-employee.work_email}}"
text: "Welcome to General Mills, {{get-employee.first_name}}! Your IT setup ticket is {{open-it-ticket.number}}. We look forward to your start on {{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: "/generalmills/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: azure-ad
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.azure_ad_token"
resources:
- name: users
path: "/users"
operations:
- name: create-user
method: POST
- type: http
namespace: servicenow
baseUri: "https://generalmills.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: chats
path: "/chats"
operations:
- name: send-message
method: POST
Verifies allergen declarations by checking SAP BOM ingredients, querying Snowflake allergen database, and creating Jira review tasks for discrepancies.
naftiko: "0.5"
info:
label: "Food Safety Allergen Verification"
description: "Verifies allergen declarations by checking SAP BOM ingredients, querying Snowflake allergen database, and creating Jira review tasks for discrepancies."
tags:
- quality
- food-safety
- sap
- snowflake
- jira
capability:
exposes:
- type: mcp
namespace: food-safety
port: 8080
tools:
- name: verify-allergens
description: "Verify allergen declarations against BOM and regulatory database."
inputParameters:
- name: material_number
type: string
description: "SAP material number."
- name: market
type: string
description: "Target market country code."
steps:
- name: get-ingredients
type: call
call: sap.get-bom
with:
material: "{{material_number}}"
- name: check-allergens
type: call
call: snowflake.execute-query
with:
warehouse: "FOOD_SAFETY_WH"
query: "SELECT allergen, status FROM allergen_db WHERE ingredient IN ({{get-ingredients.components}}) AND market='{{market}}'"
- name: create-review
type: call
call: jira.create-issue
with:
project_key: "FSAFETY"
summary: "Allergen verification: {{material_number}} for {{market}}"
consumes:
- type: http
namespace: sap
baseUri: "https://generalmills-s4.sap.com/sap/opu/odata/sap/API_BILL_OF_MATERIAL_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: bom
path: "/data"
operations:
- name: get-bom
method: GET
- type: http
namespace: snowflake
baseUri: "https://generalmills.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: jira
baseUri: "https://generalmills.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
When a GitHub Actions workflow fails on the main branch, creates a Jira bug and posts an alert to the engineering Microsoft Teams channel.
naftiko: "0.5"
info:
label: "GitHub Actions CI Failure Handler"
description: "When a GitHub Actions workflow fails on the main branch, creates a Jira bug and posts an alert to the engineering Microsoft Teams channel."
tags:
- devops
- cicd
- github
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: devops-cicd
port: 8080
tools:
- name: handle-pipeline-failure
description: "Given a GitHub Actions failure event, create a Jira Bug and post an alert to the engineering Teams channel. Use when a protected-branch workflow fails at General Mills."
inputParameters:
- name: repo
in: body
type: string
description: "The GitHub repository in owner/repo format."
- name: workflow_name
in: body
type: string
description: "The name of the failed GitHub Actions workflow."
- name: run_id
in: body
type: string
description: "The GitHub Actions run ID."
- name: branch
in: body
type: string
description: "The branch the workflow ran on."
- name: run_url
in: body
type: string
description: "Direct URL to the failed workflow run."
steps:
- name: create-jira-bug
type: call
call: "jira.create-issue"
with:
project_key: "ENG"
issuetype: "Bug"
summary: "[CI] {{repo}} / {{branch}} — {{workflow_name}} failed"
description: "Run {{run_id}} failed on {{branch}}.\nWorkflow: {{workflow_name}}\nURL: {{run_url}}"
- name: notify-engineering
type: call
call: "msteams-eng.send-message"
with:
channel_id: "$secrets.teams_engineering_channel_id"
text: "CI Failure: {{repo}} ({{branch}}) — {{workflow_name}} | Jira: {{create-jira-bug.key}} | Run: {{run_url}}"
consumes:
- type: http
namespace: jira
baseUri: "https://generalmills.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-eng
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-message
method: POST
Fetches critical Dependabot security alerts for a General Mills GitHub repository and creates Jira security issues for each unresolved vulnerability.
naftiko: "0.5"
info:
label: "GitHub Repository Security Alert Triage"
description: "Fetches critical Dependabot security alerts for a General Mills GitHub repository and creates Jira security issues for each unresolved vulnerability."
tags:
- security
- devops
- github
- jira
capability:
exposes:
- type: mcp
namespace: security-triage
port: 8080
tools:
- name: triage-dependabot-alerts
description: "Given a GitHub repository and Jira project key, fetch all open critical Dependabot alerts and create a Jira security issue for each. Use during General Mills security triage cycles or in response to vulnerability disclosures."
inputParameters:
- name: repo
in: body
type: string
description: "The GitHub repository in owner/repo format."
- name: jira_project_key
in: body
type: string
description: "The Jira project key for security issues (e.g., SEC)."
steps:
- name: get-alerts
type: call
call: "github-sec.list-dependabot-alerts"
with:
repo: "{{repo}}"
severity: "critical"
state: "open"
- name: create-security-issue
type: call
call: "jira-sec.create-issue"
with:
project_key: "{{jira_project_key}}"
issuetype: "Security"
summary: "Critical Dependabot alerts in {{repo}}: {{get-alerts.total_count}} open"
description: "Repository: {{repo}}\nOpen critical vulnerabilities: {{get-alerts.total_count}}\nReview: https://github.com/{{repo}}/security/dependabot"
consumes:
- type: http
namespace: github-sec
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: dependabot-alerts
path: "/repos/{{repo}}/dependabot/alerts"
inputParameters:
- name: repo
in: path
- name: severity
in: query
- name: state
in: query
operations:
- name: list-dependabot-alerts
method: GET
- type: http
namespace: jira-sec
baseUri: "https://generalmills.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
Tracks GMP training compliance by pulling Workday certifications, checking overdue trainings in Snowflake, and creating ServiceNow remediation tasks.
naftiko: "0.5"
info:
label: "GMP Training Compliance Tracker"
description: "Tracks GMP training compliance by pulling Workday certifications, checking overdue trainings in Snowflake, and creating ServiceNow remediation tasks."
tags:
- quality
- manufacturing
- workday
- snowflake
- servicenow
capability:
exposes:
- type: mcp
namespace: gmp-compliance
port: 8080
tools:
- name: track-gmp-compliance
description: "Track GMP training compliance across the workforce."
inputParameters:
- name: plant_code
type: string
description: "Plant code."
- name: department
type: string
description: "Department name."
steps:
- name: get-certifications
type: call
call: workday.get-certifications
with:
plant: "{{plant_code}}"
department: "{{department}}"
- name: check-overdue
type: call
call: snowflake.execute-query
with:
warehouse: "HR_WH"
query: "SELECT employee_id, training, days_overdue FROM gmp_compliance WHERE plant='{{plant_code}}' AND overdue=true"
- name: create-remediation
type: call
call: servicenow.create-incident
with:
short_description: "GMP training overdue: {{plant_code}} {{department}}"
description: "{{check-overdue.count}} employees with overdue GMP training"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: certifications
path: "/generalmills/certifications"
operations:
- name: get-certifications
method: GET
- type: http
namespace: snowflake
baseUri: "https://generalmills.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://generalmills.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
Retrieves web traffic metrics from Google Analytics for a brand website.
naftiko: "0.5"
info:
label: "Google Analytics Web Traffic Report"
description: "Retrieves web traffic metrics from Google Analytics for a brand website."
tags:
- marketing
- analytics
- google-analytics
- web
capability:
exposes:
- type: mcp
namespace: web-analytics
port: 8080
tools:
- name: get-traffic
description: "Fetch web traffic data from Google Analytics."
inputParameters:
- name: property_id
type: string
description: "GA4 property ID."
- name: date_from
type: string
description: "Start date."
- name: date_to
type: string
description: "End date."
call: ga.run-report
with:
property: "{{property_id}}"
startDate: "{{date_from}}"
outputParameters:
- name: sessions
type: string
mapping: "$.rows[0].metricValues[0].value"
- name: conversion_rate
type: string
mapping: "$.rows[0].metricValues[1].value"
consumes:
- type: http
namespace: ga
baseUri: "https://analyticsdata.googleapis.com/v1beta"
authentication:
type: bearer
token: "$secrets.google_analytics_token"
resources:
- name: reports
path: "/properties/runReport"
operations:
- name: run-report
method: POST
Retrieves Jira project backlog summary with issue counts by priority and status.
naftiko: "0.5"
info:
label: "Jira Project Backlog Summary"
description: "Retrieves Jira project backlog summary with issue counts by priority and status."
tags:
- project-management
- operations
- jira
- reporting
capability:
exposes:
- type: mcp
namespace: project-ops
port: 8080
tools:
- name: get-backlog
description: "Get Jira project backlog summary."
inputParameters:
- name: project_key
type: string
description: "Jira project key."
call: jira.search-issues
with:
jql: "project={{project_key}} AND status!=Done"
outputParameters:
- name: total
type: string
mapping: "$.total"
- name: issues
type: string
mapping: "$.issues"
consumes:
- type: http
namespace: jira
baseUri: "https://generalmills.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
Fetches all open Jira issues in the current sprint for a General Mills engineering project and posts a backlog status summary to the engineering Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Jira Sprint Backlog Health Digest"
description: "Fetches all open Jira issues in the current sprint for a General Mills engineering project and posts a backlog status summary to the engineering Microsoft Teams channel."
tags:
- devops
- jira
- microsoft-teams
- reporting
- engineering
capability:
exposes:
- type: mcp
namespace: devops-reporting
port: 8080
tools:
- name: digest-sprint-backlog
description: "Given a Jira project key and Teams channel, query open sprint issues and post a backlog health summary. Use for daily stand-up prep or sprint review briefings at General Mills."
inputParameters:
- name: project_key
in: body
type: string
description: "The Jira project key (e.g., TECH, GMILS)."
- name: channel_id
in: body
type: string
description: "The Microsoft Teams channel ID to post the digest to."
steps:
- name: get-issues
type: call
call: "jira-sprint.search-issues"
with:
jql: "project={{project_key}} AND sprint in openSprints() ORDER BY status ASC"
- name: post-digest
type: call
call: "msteams-sprint.send-message"
with:
channel_id: "{{channel_id}}"
text: "Sprint Backlog ({{project_key}}): {{get-issues.total}} open — To Do: {{get-issues.todo_count}}, In Progress: {{get-issues.inprogress_count}}, In Review: {{get-issues.review_count}}."
consumes:
- type: http
namespace: jira-sprint
baseUri: "https://generalmills.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issue-search
path: "/search"
inputParameters:
- name: jql
in: query
operations:
- name: search-issues
method: GET
- type: http
namespace: msteams-sprint
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-message
method: POST
Fetches LinkedIn campaign performance analytics for General Mills brand pages and posts a summary to the marketing Microsoft Teams channel.
naftiko: "0.5"
info:
label: "LinkedIn Brand Campaign Performance Digest"
description: "Fetches LinkedIn campaign performance analytics for General Mills brand pages and posts a summary to the marketing Microsoft Teams channel."
tags:
- marketing
- linkedin
- microsoft-teams
- reporting
- social
capability:
exposes:
- type: mcp
namespace: social-reporting
port: 8080
tools:
- name: digest-linkedin-campaign
description: "Given a LinkedIn campaign ID and date range, fetch impressions, clicks, and engagement metrics and post a performance summary to the marketing Teams channel. Use for weekly brand and campaign performance reviews."
inputParameters:
- name: campaign_id
in: body
type: string
description: "The LinkedIn campaign ID to retrieve analytics for."
- name: start_date
in: body
type: string
description: "Report start date in YYYY-MM-DD format."
- name: end_date
in: body
type: string
description: "Report end date in YYYY-MM-DD format."
steps:
- name: get-analytics
type: call
call: "linkedin-analytics.get-campaign-stats"
with:
campaign_id: "{{campaign_id}}"
start_date: "{{start_date}}"
end_date: "{{end_date}}"
- name: post-summary
type: call
call: "msteams-marketing.send-message"
with:
channel_id: "$secrets.teams_marketing_channel_id"
text: "LinkedIn Campaign {{campaign_id}} ({{start_date}} — {{end_date}}): Impressions={{get-analytics.impressions}}, Clicks={{get-analytics.clicks}}, CTR={{get-analytics.ctr}}%."
consumes:
- type: http
namespace: linkedin-analytics
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: campaign-analytics
path: "/adAnalyticsV2"
inputParameters:
- name: q
in: query
value: "analytics"
- name: pivot
in: query
value: "CAMPAIGN"
operations:
- name: get-campaign-stats
method: GET
- type: http
namespace: msteams-marketing
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-message
method: POST
Enriches talent pipeline from Workday requisitions, LinkedIn data, and Jira sourcing tasks.
naftiko: "0.5"
info:
label: "LinkedIn Talent Pipeline Enrichment"
description: "Enriches talent pipeline from Workday requisitions, LinkedIn data, and Jira sourcing tasks."
tags:
- hr
- recruiting
- workday
- linkedin
- jira
capability:
exposes:
- type: mcp
namespace: talent-acquisition
port: 8080
tools:
- name: enrich-pipeline
description: "Enrich talent pipeline."
inputParameters:
- name: department
type: string
description: "Department."
steps:
- name: get-reqs
type: call
call: workday.get-positions
with:
department: "{{department}}"
- name: create-tasks
type: call
call: jira.create-issue
with:
project_key: "RECRUIT"
summary: "Sourcing: {{department}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/generalmills/workers"
operations:
- name: get-worker
method: GET
- type: http
namespace: jira
baseUri: "https://generalmills.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Handles line downtime by creating ServiceNow incident, updating SAP status, and alerting operations via Teams.
naftiko: "0.5"
info:
label: "Manufacturing Line Downtime Handler"
description: "Handles line downtime by creating ServiceNow incident, updating SAP status, and alerting operations via Teams."
tags:
- manufacturing
- operations
- servicenow
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: mfg-ops
port: 8080
tools:
- name: handle-downtime
description: "Respond to manufacturing line downtime."
inputParameters:
- name: production_line
type: string
description: "Line ID."
- name: plant_code
type: string
description: "Plant code."
- name: reason
type: string
description: "Downtime reason."
steps:
- name: create-incident
type: call
call: servicenow.create-incident
with:
short_description: "Line down: {{production_line}}"
urgency: "1"
- name: update-sap
type: call
call: sap.update-status
with:
plant: "{{plant_code}}"
line: "{{production_line}}"
- name: alert-ops
type: call
call: msteams.send-message
with:
channel_id: "plant-ops"
text: "LINE DOWN: {{production_line}}. Reason: {{reason}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://generalmills.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: sap
baseUri: "https://generalmills-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: update-status
method: PATCH
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Coordinates launch by creating Salesforce campaign, Meta ads, and notifying marketing via Teams.
naftiko: "0.5"
info:
label: "Marketing Campaign Launch Coordinator"
description: "Coordinates launch by creating Salesforce campaign, Meta ads, and notifying marketing via Teams."
tags:
- marketing
- campaigns
- salesforce
- meta
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: campaign-ops
port: 8080
tools:
- name: launch-campaign
description: "Orchestrate marketing campaign launch."
inputParameters:
- name: campaign_name
type: string
description: "Campaign name."
- name: brand
type: string
description: "Brand."
- name: start_date
type: string
description: "Start date."
- name: budget
type: number
description: "Budget USD."
steps:
- name: create-campaign
type: call
call: salesforce.create-campaign
with:
Name: "{{campaign_name}}"
Brand: "{{brand}}"
- name: activate-ads
type: call
call: meta.activate
with:
name: "{{campaign_name}}"
status: "ACTIVE"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "marketing"
text: "Campaign '{{campaign_name}}' launched for {{brand}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://generalmills.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: sobjects
path: "/sobjects"
operations:
- name: query
method: GET
- type: http
namespace: meta
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.meta_token"
resources:
- name: campaigns
path: "/campaigns"
operations:
- name: get-insights
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Generates media mix reports from Snowflake, refreshes Power BI, and posts summary to Teams.
naftiko: "0.5"
info:
label: "Media Mix Optimization Report"
description: "Generates media mix reports from Snowflake, refreshes Power BI, and posts summary to Teams."
tags:
- marketing
- analytics
- snowflake
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: media-planning
port: 8080
tools:
- name: gen-media-report
description: "Generate media mix optimization report."
inputParameters:
- name: brand
type: string
description: "Brand."
- name: date_from
type: string
description: "Start."
- name: date_to
type: string
description: "End."
steps:
- name: get-data
type: call
call: snowflake.execute-query
with:
warehouse: "MARKETING_WH"
query: "SELECT channel, roas FROM media WHERE brand='{{brand}}'"
- name: refresh
type: call
call: powerbi.refresh-dataset
with:
datasetId: "media-mix"
- name: post
type: call
call: msteams.send-message
with:
channel_id: "media"
text: "Media report for {{brand}} ready"
consumes:
- type: http
namespace: snowflake
baseUri: "https://generalmills.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets"
operations:
- name: refresh-dataset
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Retrieves Meta Ads campaign performance metrics for a campaign and date range.
naftiko: "0.5"
info:
label: "Meta Ad Campaign Performance Lookup"
description: "Retrieves Meta Ads campaign performance metrics for a campaign and date range."
tags:
- marketing
- social
- meta
- reporting
capability:
exposes:
- type: mcp
namespace: social-ads
port: 8080
tools:
- name: get-campaign-insights
description: "Fetch Meta Ads campaign insights."
inputParameters:
- name: campaign_id
type: string
description: "Meta campaign ID."
- name: date_from
type: string
description: "Start date."
- name: date_to
type: string
description: "End date."
call: meta.get-insights
with:
campaign_id: "{{campaign_id}}"
since: "{{date_from}}"
outputParameters:
- name: impressions
type: string
mapping: "$.data[0].impressions"
- name: spend
type: string
mapping: "$.data[0].spend"
consumes:
- type: http
namespace: meta
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.meta_token"
resources:
- name: campaigns
path: "/campaigns"
operations:
- name: get-insights
method: GET
Queries Microsoft Graph for General Mills Microsoft 365 license assignments and consumption for IT cost allocation and renewal planning.
naftiko: "0.5"
info:
label: "Microsoft 365 License Utilization Report"
description: "Queries Microsoft Graph for General Mills Microsoft 365 license assignments and consumption for IT cost allocation and renewal planning."
tags:
- identity
- microsoft-365
- reporting
- it-finance
capability:
exposes:
- type: mcp
namespace: m365-reporting
port: 8080
tools:
- name: get-license-utilization
description: "Query Microsoft Graph for all subscribed Microsoft 365 SKUs and consumed unit counts. Use for monthly IT license chargeback, compliance audits, and renewal planning at General Mills."
call: "msgraph-lic.get-subscribed-skus"
outputParameters:
- name: skus
type: array
mapping: "$.value"
consumes:
- type: http
namespace: msgraph-lic
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: subscribed-skus
path: "/subscribedSkus"
operations:
- name: get-subscribed-skus
method: GET
Orchestrates NPD gate reviews by pulling project status from Jira, financial projections from Snowflake, and posting review summary to Teams.
naftiko: "0.5"
info:
label: "New Product Development Gate Review"
description: "Orchestrates NPD gate reviews by pulling project status from Jira, financial projections from Snowflake, and posting review summary to Teams."
tags:
- r-and-d
- innovation
- jira
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: npd-gates
port: 8080
tools:
- name: conduct-gate-review
description: "Conduct NPD gate review by gathering project status and financials."
inputParameters:
- name: project_key
type: string
description: "Jira project key for NPD."
- name: gate_number
type: number
description: "Gate review number."
steps:
- name: get-project-status
type: call
call: jira.get-issue
with:
issue_key: "{{project_key}}"
- name: get-financials
type: call
call: snowflake.execute-query
with:
warehouse: "FINANCE_WH"
query: "SELECT npv, roi_pct, payback_months FROM npd_financials WHERE project='{{project_key}}'"
- name: post-review
type: call
call: msteams.send-message
with:
channel_id: "npd-reviews"
text: "Gate {{gate_number}} review for {{project_key}}: NPV ${{get-financials.npv}}, ROI {{get-financials.roi_pct}}%"
consumes:
- type: http
namespace: jira
baseUri: "https://generalmills.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: get-issue
method: GET
- type: http
namespace: snowflake
baseUri: "https://generalmills.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Onboards new SKU by creating SAP material, Salesforce product, and notifying supply chain via Teams.
naftiko: "0.5"
info:
label: "New SKU Onboarding Workflow"
description: "Onboards new SKU by creating SAP material, Salesforce product, and notifying supply chain via Teams."
tags:
- supply-chain
- sales
- sap
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: sku-management
port: 8080
tools:
- name: onboard-sku
description: "Orchestrate new SKU onboarding."
inputParameters:
- name: sku_name
type: string
description: "Product name."
- name: category
type: string
description: "Category."
- name: unit_cost
type: number
description: "Unit cost."
steps:
- name: create-material
type: call
call: sap.create-material
with:
description: "{{sku_name}}"
group: "{{category}}"
- name: create-product
type: call
call: salesforce.create-product
with:
Name: "{{sku_name}}"
ProductCode: "{{create-material.number}}"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "supply-chain"
text: "New SKU: {{sku_name}} ({{create-material.number}})"
consumes:
- type: http
namespace: sap
baseUri: "https://generalmills-s4.sap.com/sap/opu/odata/sap/API_PRODUCT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: create-material
method: POST
- type: http
namespace: salesforce
baseUri: "https://generalmills.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: sobjects
path: "/sobjects"
operations:
- name: query
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Checks nutrition label compliance by pulling recipe data from SAP, validating against regulatory requirements in Snowflake, and creating Jira tasks.
naftiko: "0.5"
info:
label: "Nutrition Label Compliance Check"
description: "Checks nutrition label compliance by pulling recipe data from SAP, validating against regulatory requirements in Snowflake, and creating Jira tasks."
tags:
- quality
- regulatory
- sap
- snowflake
- jira
capability:
exposes:
- type: mcp
namespace: label-compliance
port: 8080
tools:
- name: check-nutrition-label
description: "Check nutrition label compliance against regulations."
inputParameters:
- name: material_number
type: string
description: "SAP material number."
- name: target_market
type: string
description: "Target market country code."
steps:
- name: get-recipe
type: call
call: sap.get-recipe
with:
material: "{{material_number}}"
- name: check-regs
type: call
call: snowflake.execute-query
with:
warehouse: "REGULATORY_WH"
query: "SELECT requirement, compliant FROM label_regs WHERE market='{{target_market}}' AND material='{{material_number}}'"
- name: create-task
type: call
call: jira.create-issue
with:
project_key: "REGULATORY"
summary: "Label compliance: {{material_number}} for {{target_market}}"
description: "Non-compliant items: {{check-regs.non_compliant_count}}"
consumes:
- type: http
namespace: sap
baseUri: "https://generalmills-s4.sap.com/sap/opu/odata/sap/API_RECIPE_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: recipes
path: "/data"
operations:
- name: get-recipe
method: GET
- type: http
namespace: snowflake
baseUri: "https://generalmills.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: jira
baseUri: "https://generalmills.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
Audits privileged Okta accounts against Workday employment, creating ServiceNow review tasks.
naftiko: "0.5"
info:
label: "Okta Privileged Access Audit"
description: "Audits privileged Okta accounts against Workday employment, creating ServiceNow review tasks."
tags:
- security
- identity
- okta
- workday
- servicenow
capability:
exposes:
- type: mcp
namespace: security-audit
port: 8080
tools:
- name: audit-access
description: "Audit privileged access."
inputParameters:
- name: role_type
type: string
description: "Okta admin role type."
steps:
- name: get-admins
type: call
call: okta.list-admins
with:
role_type: "{{role_type}}"
- name: check-employment
type: call
call: workday.get-active
with:
emails: "{{get-admins.emails}}"
- name: create-review
type: call
call: servicenow.create-incident
with:
short_description: "Access audit: {{role_type}}"
consumes:
- type: http
namespace: okta
baseUri: "https://generalmills.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_api_token"
resources:
- name: users
path: "/users"
operations:
- name: get-user
method: GET
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/generalmills/workers"
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://generalmills.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
Checks packaging sustainability from SAP BOM, Snowflake compliance data, and creates Jira tasks.
naftiko: "0.5"
info:
label: "Packaging Sustainability Compliance Check"
description: "Checks packaging sustainability from SAP BOM, Snowflake compliance data, and creates Jira tasks."
tags:
- sustainability
- quality
- sap
- snowflake
- jira
capability:
exposes:
- type: mcp
namespace: sustainability
port: 8080
tools:
- name: check-packaging
description: "Verify packaging sustainability compliance."
inputParameters:
- name: material_number
type: string
description: "Material number."
- name: plant_code
type: string
description: "Plant code."
steps:
- name: get-bom
type: call
call: sap.get-bom
with:
material: "{{material_number}}"
plant: "{{plant_code}}"
- name: check
type: call
call: snowflake.execute-query
with:
warehouse: "SUSTAINABILITY_WH"
query: "SELECT recyclable_pct FROM packaging WHERE material IN ({{get-bom.components}})"
- name: create-task
type: call
call: jira.create-issue
with:
project_key: "SUSTAIN"
summary: "Packaging: {{material_number}}"
consumes:
- type: http
namespace: sap
baseUri: "https://generalmills-s4.sap.com/sap/opu/odata/sap/API_BILL_OF_MATERIAL_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-bom
method: GET
- type: http
namespace: snowflake
baseUri: "https://generalmills.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: jira
baseUri: "https://generalmills.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Monitors plant energy from Snowflake IoT data, creates ServiceNow tasks, and alerts via Teams.
naftiko: "0.5"
info:
label: "Plant Energy Consumption Monitor"
description: "Monitors plant energy from Snowflake IoT data, creates ServiceNow tasks, and alerts via Teams."
tags:
- manufacturing
- sustainability
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: energy-monitoring
port: 8080
tools:
- name: monitor-energy
description: "Monitor plant energy against targets."
inputParameters:
- name: plant_code
type: string
description: "Plant code."
- name: date
type: string
description: "Date."
steps:
- name: get-data
type: call
call: snowflake.execute-query
with:
warehouse: "IOT_WH"
query: "SELECT kwh FROM energy WHERE plant='{{plant_code}}'"
- name: create-task
type: call
call: servicenow.create-incident
with:
short_description: "Energy anomaly: {{plant_code}}"
- name: alert
type: call
call: msteams.send-message
with:
channel_id: "sustainability"
text: "Energy alert: {{plant_code}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://generalmills.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://generalmills.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Generates maintenance reports from SAP orders, Snowflake equipment history, and posts to Teams.
naftiko: "0.5"
info:
label: "Plant Maintenance Schedule Report"
description: "Generates maintenance reports from SAP orders, Snowflake equipment history, and posts to Teams."
tags:
- manufacturing
- operations
- sap
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: maintenance-reporting
port: 8080
tools:
- name: gen-schedule
description: "Generate maintenance schedule report."
inputParameters:
- name: plant_code
type: string
description: "Plant code."
- name: weeks
type: number
description: "Weeks ahead."
steps:
- name: get-orders
type: call
call: sap.get-orders
with:
plant: "{{plant_code}}"
- name: get-history
type: call
call: snowflake.execute-query
with:
warehouse: "MFG_WH"
query: "SELECT mtbf FROM equipment WHERE plant='{{plant_code}}'"
- name: post
type: call
call: msteams.send-message
with:
channel_id: "maintenance"
text: "Maintenance for {{plant_code}}: {{get-orders.count}} orders"
consumes:
- type: http
namespace: sap
baseUri: "https://generalmills-s4.sap.com/sap/opu/odata/sap/API_MAINTENANCEORDER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-orders
method: GET
- type: http
namespace: snowflake
baseUri: "https://generalmills.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Triggers an on-demand Power BI dataset refresh for General Mills consumer brand performance dashboards used by the marketing and finance teams.
naftiko: "0.5"
info:
label: "Power BI Consumer Brand Dashboard Refresh"
description: "Triggers an on-demand Power BI dataset refresh for General Mills consumer brand performance dashboards used by the marketing and finance teams."
tags:
- data
- analytics
- power-bi
- marketing
- reporting
capability:
exposes:
- type: mcp
namespace: brand-analytics
port: 8080
tools:
- name: refresh-brand-dashboard
description: "Given a Power BI workspace ID and dataset ID, trigger an on-demand dataset refresh. Use when consumer brand or retail sales data must be reflected in dashboards outside the scheduled refresh window."
inputParameters:
- name: workspace_id
in: body
type: string
description: "The Power BI workspace (group) ID."
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID to refresh."
call: "powerbi.refresh-dataset"
with:
workspace_id: "{{workspace_id}}"
dataset_id: "{{dataset_id}}"
outputParameters:
- name: request_id
type: string
mapping: "$.requestId"
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: dataset-refreshes
path: "/groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: workspace_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
Checks Power BI dataset refresh status and returns last refresh time.
naftiko: "0.5"
info:
label: "Power BI Dataset Refresh Status"
description: "Checks Power BI dataset refresh status and returns last refresh time."
tags:
- analytics
- reporting
- power-bi
- data
capability:
exposes:
- type: mcp
namespace: bi-reporting
port: 8080
tools:
- name: check-refresh
description: "Check Power BI dataset refresh status."
inputParameters:
- name: dataset_id
type: string
description: "Power BI dataset ID."
call: powerbi.get-refresh
with:
datasetId: "{{dataset_id}}"
outputParameters:
- name: status
type: string
mapping: "$.value[0].status"
- name: end_time
type: string
mapping: "$.value[0].endTime"
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets"
operations:
- name: refresh-dataset
method: POST
Triggers a Power BI dataset refresh and posts a dashboard link to the General Mills executive leadership Microsoft Teams channel before leadership briefings.
naftiko: "0.5"
info:
label: "Power BI Executive Reporting Digest"
description: "Triggers a Power BI dataset refresh and posts a dashboard link to the General Mills executive leadership Microsoft Teams channel before leadership briefings."
tags:
- reporting
- power-bi
- microsoft-teams
- executive
capability:
exposes:
- type: mcp
namespace: exec-reporting
port: 8080
tools:
- name: publish-exec-dashboard
description: "Given Power BI workspace and dataset IDs and a dashboard URL, trigger a refresh and post the dashboard link to the executive Teams channel. Use before weekly leadership briefings or board reporting cycles."
inputParameters:
- name: workspace_id
in: body
type: string
description: "The Power BI workspace ID."
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID to refresh."
- name: dashboard_url
in: body
type: string
description: "The Power BI dashboard URL to share with leadership."
steps:
- name: refresh-dataset
type: call
call: "powerbi-exec.refresh-dataset"
with:
workspace_id: "{{workspace_id}}"
dataset_id: "{{dataset_id}}"
- name: post-link
type: call
call: "msteams-exec.send-message"
with:
channel_id: "$secrets.teams_exec_channel_id"
text: "Executive dashboard refreshed and ready for review: {{dashboard_url}} (Request ID: {{refresh-dataset.requestId}})"
consumes:
- type: http
namespace: powerbi-exec
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: dataset-refreshes
path: "/groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: workspace_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
- type: http
namespace: msteams-exec
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-message
method: POST
Reviews private label contracts by pulling data from Salesforce, checking pricing in SAP, and creating Jira approval tasks.
naftiko: "0.5"
info:
label: "Private Label Contract Review Workflow"
description: "Reviews private label contracts by pulling data from Salesforce, checking pricing in SAP, and creating Jira approval tasks."
tags:
- sales
- procurement
- salesforce
- sap
- jira
capability:
exposes:
- type: mcp
namespace: contract-mgmt
port: 8080
tools:
- name: review-pl-contract
description: "Review a private label contract across CRM, ERP, and project systems."
inputParameters:
- name: contract_id
type: string
description: "Salesforce contract ID."
steps:
- name: get-contract
type: call
call: salesforce.get-contract
with:
contract_id: "{{contract_id}}"
- name: check-pricing
type: call
call: sap.get-pricing
with:
customer: "{{get-contract.customer_id}}"
materials: "{{get-contract.product_list}}"
- name: create-approval
type: call
call: jira.create-issue
with:
project_key: "CONTRACTS"
summary: "PL Contract Review: {{get-contract.customer_name}}"
description: "Contract value: {{get-contract.total_value}}. Margin: {{check-pricing.margin_pct}}%"
consumes:
- type: http
namespace: salesforce
baseUri: "https://generalmills.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: contracts
path: "/sobjects/Contract"
operations:
- name: get-contract
method: GET
- type: http
namespace: sap
baseUri: "https://generalmills-s4.sap.com/sap/opu/odata/sap/API_SALES_ORDER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: pricing
path: "/data"
operations:
- name: get-pricing
method: GET
- type: http
namespace: jira
baseUri: "https://generalmills.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Analyzes costing variances between SAP standard and Snowflake actual costs, creating Jira reviews.
naftiko: "0.5"
info:
label: "Product Costing Variance Analyzer"
description: "Analyzes costing variances between SAP standard and Snowflake actual costs, creating Jira reviews."
tags:
- finance
- manufacturing
- sap
- snowflake
- jira
capability:
exposes:
- type: mcp
namespace: cost-analytics
port: 8080
tools:
- name: analyze-variance
description: "Analyze product costing variances."
inputParameters:
- name: material_number
type: string
description: "Material number."
- name: period
type: string
description: "Period."
steps:
- name: get-standard
type: call
call: sap.get-cost
with:
material: "{{material_number}}"
- name: get-actual
type: call
call: snowflake.execute-query
with:
warehouse: "FINANCE_WH"
query: "SELECT actual_cost FROM costs WHERE material='{{material_number}}'"
- name: create-review
type: call
call: jira.create-issue
with:
project_key: "FIN"
summary: "Variance: {{material_number}} ({{period}})"
consumes:
- type: http
namespace: sap
baseUri: "https://generalmills-s4.sap.com/sap/opu/odata/sap/API_PRODUCT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-cost
method: GET
- type: http
namespace: snowflake
baseUri: "https://generalmills.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: jira
baseUri: "https://generalmills.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Traces affected batch in SAP, creates ServiceNow incident, and alerts quality team via Teams.
naftiko: "0.5"
info:
label: "Product Recall Investigation Orchestrator"
description: "Traces affected batch in SAP, creates ServiceNow incident, and alerts quality team via Teams."
tags:
- quality
- supply-chain
- sap
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: quality-ops
port: 8080
tools:
- name: investigate-recall
description: "Orchestrate product recall investigation."
inputParameters:
- name: batch_number
type: string
description: "Batch number."
- name: material_number
type: string
description: "Material number."
- name: severity
type: string
description: "Severity level."
steps:
- name: trace-batch
type: call
call: sap.get-batch-details
with:
batch: "{{batch_number}}"
material: "{{material_number}}"
- name: create-incident
type: call
call: servicenow.create-incident
with:
short_description: "Recall: batch {{batch_number}}"
urgency: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-message
with:
channel_id: "quality-alerts"
text: "RECALL: Batch {{batch_number}}. Incident: {{create-incident.number}}"
consumes:
- type: http
namespace: sap
baseUri: "https://generalmills-s4.sap.com/sap/opu/odata/sap/API_BATCH_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-batch-details
method: GET
- type: http
namespace: servicenow
baseUri: "https://generalmills.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Monitors product shelf life by checking SAP batch expiry dates, identifying at-risk inventory in Snowflake, and alerting supply chain via Teams.
naftiko: "0.5"
info:
label: "Product Shelf Life Monitoring"
description: "Monitors product shelf life by checking SAP batch expiry dates, identifying at-risk inventory in Snowflake, and alerting supply chain via Teams."
tags:
- quality
- supply-chain
- sap
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: shelf-life
port: 8080
tools:
- name: monitor-shelf-life
description: "Monitor product shelf life and alert on expiring inventory."
inputParameters:
- name: plant_code
type: string
description: "SAP plant code."
- name: days_threshold
type: number
description: "Days until expiry threshold."
steps:
- name: get-expiring
type: call
call: sap.get-expiring-batches
with:
plant: "{{plant_code}}"
threshold: "{{days_threshold}}"
- name: get-inventory-value
type: call
call: snowflake.execute-query
with:
warehouse: "SC_WH"
query: "SELECT sum(value) FROM inventory WHERE plant='{{plant_code}}' AND days_to_expiry<={{days_threshold}}"
- name: alert-team
type: call
call: msteams.send-message
with:
channel_id: "supply-chain"
text: "Shelf life alert: {{get-expiring.count}} batches expiring within {{days_threshold}} days at {{plant_code}}"
consumes:
- type: http
namespace: sap
baseUri: "https://generalmills-s4.sap.com/sap/opu/odata/sap/API_BATCH_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: batches
path: "/data"
operations:
- name: get-expiring-batches
method: GET
- type: http
namespace: snowflake
baseUri: "https://generalmills.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Releases production batch after QA by checking SAP inspection, updating status, and notifying logistics via Teams.
naftiko: "0.5"
info:
label: "Production Batch Release Workflow"
description: "Releases production batch after QA by checking SAP inspection, updating status, and notifying logistics via Teams."
tags:
- manufacturing
- quality
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: batch-release
port: 8080
tools:
- name: release-batch
description: "Release production batch after QA."
inputParameters:
- name: batch_number
type: string
description: "Batch number."
- name: material_number
type: string
description: "Material number."
steps:
- name: check-qa
type: call
call: sap.get-inspection
with:
batch: "{{batch_number}}"
material: "{{material_number}}"
- name: release
type: call
call: sap.update-batch
with:
batch: "{{batch_number}}"
status: "RELEASED"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "logistics"
text: "Batch {{batch_number}} released. QA: {{check-qa.decision}}"
consumes:
- type: http
namespace: sap
baseUri: "https://generalmills-s4.sap.com/sap/opu/odata/sap/API_INSPECTIONLOT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-inspection
method: GET
- name: update-batch
method: PATCH
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Optimizes scheduling from Snowflake demand, SAP capacity, and Jira schedule proposals.
naftiko: "0.5"
info:
label: "Production Scheduling Optimizer"
description: "Optimizes scheduling from Snowflake demand, SAP capacity, and Jira schedule proposals."
tags:
- manufacturing
- supply-chain
- snowflake
- sap
- jira
capability:
exposes:
- type: mcp
namespace: production-planning
port: 8080
tools:
- name: optimize-schedule
description: "Optimize production scheduling."
inputParameters:
- name: plant_code
type: string
description: "Plant code."
- name: period
type: string
description: "Period."
steps:
- name: get-demand
type: call
call: snowflake.execute-query
with:
warehouse: "DEMAND_WH"
query: "SELECT sku, units FROM demand WHERE plant='{{plant_code}}'"
- name: get-capacity
type: call
call: sap.get-capacity
with:
plant: "{{plant_code}}"
- name: create-schedule
type: call
call: jira.create-issue
with:
project_key: "PROD"
summary: "Schedule: {{plant_code}} {{period}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://generalmills.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: sap
baseUri: "https://generalmills-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-capacity
method: GET
- type: http
namespace: jira
baseUri: "https://generalmills.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Analyzes yield from SAP planned vs actual, Snowflake waste trends, and creates Jira improvement tasks.
naftiko: "0.5"
info:
label: "Production Yield Analysis"
description: "Analyzes yield from SAP planned vs actual, Snowflake waste trends, and creates Jira improvement tasks."
tags:
- manufacturing
- quality
- sap
- snowflake
- jira
capability:
exposes:
- type: mcp
namespace: production-analytics
port: 8080
tools:
- name: analyze-yield
description: "Analyze production yield."
inputParameters:
- name: line
type: string
description: "Production line."
- name: plant_code
type: string
description: "Plant code."
- name: period
type: string
description: "Period."
steps:
- name: get-yield
type: call
call: sap.get-confirmations
with:
plant: "{{plant_code}}"
line: "{{line}}"
- name: get-waste
type: call
call: snowflake.execute-query
with:
warehouse: "MFG_WH"
query: "SELECT waste_pct FROM waste WHERE line='{{line}}'"
- name: create-task
type: call
call: jira.create-issue
with:
project_key: "MFG"
summary: "Yield: {{line}} ({{period}})"
consumes:
- type: http
namespace: sap
baseUri: "https://generalmills-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-confirmations
method: GET
- type: http
namespace: snowflake
baseUri: "https://generalmills.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: jira
baseUri: "https://generalmills.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Handles shortages by checking SAP stock, identifying affected orders, and creating Ariba procurement requests.
naftiko: "0.5"
info:
label: "Raw Material Shortage Alert Handler"
description: "Handles shortages by checking SAP stock, identifying affected orders, and creating Ariba procurement requests."
tags:
- supply-chain
- procurement
- sap
- manufacturing
capability:
exposes:
- type: mcp
namespace: supply-ops
port: 8080
tools:
- name: handle-shortage
description: "Handle raw material shortage."
inputParameters:
- name: material_number
type: string
description: "Material number."
- name: plant_code
type: string
description: "Plant code."
- name: reorder_qty
type: number
description: "Reorder quantity."
steps:
- name: check-stock
type: call
call: sap.get-stock
with:
material: "{{material_number}}"
plant: "{{plant_code}}"
- name: get-orders
type: call
call: sap.get-orders
with:
material: "{{material_number}}"
- name: create-req
type: call
call: ariba.create-requisition
with:
material: "{{material_number}}"
quantity: "{{reorder_qty}}"
consumes:
- type: http
namespace: sap
baseUri: "https://generalmills-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-stock
method: GET
- name: get-orders
method: GET
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/supplier-management/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: suppliers
path: "/suppliers"
operations:
- name: get-supplier
method: GET
Tracks regulatory compliance from Jira submissions, SharePoint docs, and Power BI dashboard.
naftiko: "0.5"
info:
label: "Regulatory Document Compliance Tracker"
description: "Tracks regulatory compliance from Jira submissions, SharePoint docs, and Power BI dashboard."
tags:
- regulatory
- quality
- jira
- sharepoint
- power-bi
capability:
exposes:
- type: mcp
namespace: regulatory-ops
port: 8080
tools:
- name: track-compliance
description: "Track regulatory submission status."
inputParameters:
- name: submission_id
type: string
description: "Jira submission key."
steps:
- name: get-status
type: call
call: jira.get-issue
with:
issue_key: "{{submission_id}}"
- name: check-docs
type: call
call: sharepoint.list-folder
with:
folder: "{{submission_id}}"
- name: refresh
type: call
call: powerbi.refresh-dataset
with:
datasetId: "regulatory-tracker"
consumes:
- type: http
namespace: jira
baseUri: "https://generalmills.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/sites/drive/items"
operations:
- name: search-docs
method: GET
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets"
operations:
- name: refresh-dataset
method: POST
Audits planogram compliance from Salesforce visits, Snowflake metrics, and Jira follow-ups.
naftiko: "0.5"
info:
label: "Retail Planogram Compliance Audit"
description: "Audits planogram compliance from Salesforce visits, Snowflake metrics, and Jira follow-ups."
tags:
- sales
- retail
- salesforce
- snowflake
- jira
capability:
exposes:
- type: mcp
namespace: retail-compliance
port: 8080
tools:
- name: audit-planogram
description: "Audit planogram compliance."
inputParameters:
- name: region
type: string
description: "Region."
- name: audit_week
type: string
description: "Audit week."
steps:
- name: get-visits
type: call
call: salesforce.get-visits
with:
region: "{{region}}"
- name: get-compliance
type: call
call: snowflake.execute-query
with:
warehouse: "RETAIL_WH"
query: "SELECT score FROM planogram WHERE region='{{region}}'"
- name: create-followup
type: call
call: jira.create-issue
with:
project_key: "RETAIL"
summary: "Planogram: {{region}} week {{audit_week}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://generalmills.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: sobjects
path: "/sobjects"
operations:
- name: query
method: GET
- type: http
namespace: snowflake
baseUri: "https://generalmills.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: jira
baseUri: "https://generalmills.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Orchestrates shelf audits from Salesforce data, Snowflake compliance, and Jira follow-ups.
naftiko: "0.5"
info:
label: "Retail Shelf Audit Orchestrator"
description: "Orchestrates shelf audits from Salesforce data, Snowflake compliance, and Jira follow-ups."
tags:
- sales
- retail
- salesforce
- snowflake
- jira
capability:
exposes:
- type: mcp
namespace: retail-ops
port: 8080
tools:
- name: run-audit
description: "Orchestrate retail shelf audit."
inputParameters:
- name: account_id
type: string
description: "Salesforce account ID."
- name: audit_period
type: string
description: "Period."
steps:
- name: get-account
type: call
call: salesforce.get-account
with:
account_id: "{{account_id}}"
- name: get-compliance
type: call
call: snowflake.execute-query
with:
warehouse: "RETAIL_WH"
query: "SELECT score FROM audit WHERE account='{{account_id}}'"
- name: create-followup
type: call
call: jira.create-issue
with:
project_key: "RETAIL"
summary: "Audit: {{get-account.name}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://generalmills.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: sobjects
path: "/sobjects"
operations:
- name: query
method: GET
- type: http
namespace: snowflake
baseUri: "https://generalmills.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: jira
baseUri: "https://generalmills.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
Updates a Salesforce customer account record with new contact, industry, or revenue information from the General Mills CRM team.
naftiko: "0.5"
info:
label: "Salesforce Customer Account Update"
description: "Updates a Salesforce customer account record with new contact, industry, or revenue information from the General Mills CRM team."
tags:
- crm
- sales
- salesforce
capability:
exposes:
- type: mcp
namespace: crm-accounts
port: 8080
tools:
- name: update-customer-account
description: "Given a Salesforce account ID and updated attributes, patch the account record. Use when CRM operations refreshes retailer or distributor account data for the General Mills sales team."
inputParameters:
- name: account_id
in: body
type: string
description: "The Salesforce account ID (18-character SFDC ID)."
- name: industry
in: body
type: string
description: "Updated industry classification."
- name: annual_revenue
in: body
type: number
description: "Updated annual revenue estimate."
- name: phone
in: body
type: string
description: "Updated main phone number for the account."
call: "salesforce-crm.update-account"
with:
account_id: "{{account_id}}"
industry: "{{industry}}"
annual_revenue: "{{annual_revenue}}"
phone: "{{phone}}"
outputParameters:
- name: success
type: boolean
mapping: "$.success"
consumes:
- type: http
namespace: salesforce-crm
baseUri: "https://generalmills.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: update-account
method: PATCH
When a Salesforce opportunity closes as Closed-Won, opens a ServiceNow customer onboarding ticket and notifies the account owner via Microsoft Teams.
naftiko: "0.5"
info:
label: "Salesforce Customer Onboarding Trigger"
description: "When a Salesforce opportunity closes as Closed-Won, opens a ServiceNow customer onboarding ticket and notifies the account owner via Microsoft Teams."
tags:
- crm
- sales
- salesforce
- servicenow
- customer-onboarding
capability:
exposes:
- type: mcp
namespace: customer-onboarding
port: 8080
tools:
- name: trigger-customer-onboarding
description: "Given a Salesforce opportunity ID, retrieve account details, open a ServiceNow onboarding ticket, and notify the account owner via Teams. Use when a new General Mills retail or food service customer deal is closed."
inputParameters:
- name: opportunity_id
in: body
type: string
description: "The Salesforce opportunity ID that was closed-won."
steps:
- name: get-opportunity
type: call
call: "salesforce-won.get-opportunity"
with:
opportunity_id: "{{opportunity_id}}"
- name: open-onboard-ticket
type: call
call: "servicenow-won.create-incident"
with:
category: "customer_onboarding"
short_description: "New customer onboarding: {{get-opportunity.account_name}}"
description: "Opportunity {{opportunity_id}}, value ${{get-opportunity.amount}}, closed {{get-opportunity.close_date}}"
- name: notify-owner
type: call
call: "msteams-won.send-message"
with:
recipient_upn: "{{get-opportunity.owner_email}}"
text: "Opportunity {{opportunity_id}} ({{get-opportunity.account_name}}) is Closed-Won! Onboarding ticket: {{open-onboard-ticket.number}}. Implementation begins."
consumes:
- type: http
namespace: salesforce-won
baseUri: "https://generalmills.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity/{{opportunity_id}}"
inputParameters:
- name: opportunity_id
in: path
operations:
- name: get-opportunity
method: GET
- type: http
namespace: servicenow-won
baseUri: "https://generalmills.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-won
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chats
path: "/chats"
operations:
- name: send-message
method: POST
Fetches open Salesforce opportunities above a threshold for a General Mills sales region and posts a pipeline summary to the sales Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Salesforce Opportunity Pipeline Digest"
description: "Fetches open Salesforce opportunities above a threshold for a General Mills sales region and posts a pipeline summary to the sales Microsoft Teams channel."
tags:
- crm
- sales
- salesforce
- microsoft-teams
- reporting
capability:
exposes:
- type: mcp
namespace: crm-pipeline
port: 8080
tools:
- name: digest-opportunity-pipeline
description: "Given a sales region and minimum deal value, query Salesforce for open opportunities and post a pipeline summary to the sales Teams channel. Use for weekly pipeline reviews and sales leadership briefings."
inputParameters:
- name: region
in: body
type: string
description: "Sales region to filter opportunities (e.g., North America, EMEA)."
- name: min_amount
in: body
type: number
description: "Minimum opportunity value in USD to include."
steps:
- name: query-pipeline
type: call
call: "salesforce-pipeline.query-opportunities"
with:
region: "{{region}}"
min_amount: "{{min_amount}}"
- name: post-summary
type: call
call: "msteams-pipeline.send-message"
with:
channel_id: "$secrets.teams_sales_channel_id"
text: "Sales Pipeline ({{region}}, >${{min_amount}}): {{query-pipeline.total_count}} opportunities totaling ${{query-pipeline.total_value}}."
consumes:
- type: http
namespace: salesforce-pipeline
baseUri: "https://generalmills.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/query"
inputParameters:
- name: q
in: query
operations:
- name: query-opportunities
method: GET
- type: http
namespace: msteams-pipeline
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-message
method: POST
Retrieves the sales opportunity pipeline from Salesforce for a business unit.
naftiko: "0.5"
info:
label: "Salesforce Opportunity Pipeline Lookup"
description: "Retrieves the sales opportunity pipeline from Salesforce for a business unit."
tags:
- sales
- crm
- salesforce
- reporting
capability:
exposes:
- type: mcp
namespace: crm-sales
port: 8080
tools:
- name: get-pipeline
description: "Look up Salesforce opportunity pipeline by business unit."
inputParameters:
- name: business_unit
type: string
description: "Business unit name."
call: salesforce.get-pipeline
with:
bu: "{{business_unit}}"
outputParameters:
- name: total_value
type: string
mapping: "$.totalSize"
- name: opportunities
type: string
mapping: "$.records"
consumes:
- type: http
namespace: salesforce
baseUri: "https://generalmills.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: sobjects
path: "/sobjects"
operations:
- name: query
method: GET
Opens a Salesforce case for a retail trade promotion request linked to the customer account, enabling the General Mills trade marketing team to track promotions.
naftiko: "0.5"
info:
label: "Salesforce Trade Promotion Case Creator"
description: "Opens a Salesforce case for a retail trade promotion request linked to the customer account, enabling the General Mills trade marketing team to track promotions."
tags:
- crm
- marketing
- salesforce
- trade-promotion
capability:
exposes:
- type: mcp
namespace: trade-marketing
port: 8080
tools:
- name: create-promotion-case
description: "Given a Salesforce account ID, promotion type, and start/end dates, create a Salesforce case to track a retail trade promotion. Use when General Mills trade marketing initiates a promotional program with a retail partner."
inputParameters:
- name: account_id
in: body
type: string
description: "The Salesforce retailer account ID."
- name: promotion_type
in: body
type: string
description: "Type of promotion (e.g., price reduction, display feature, coupon)."
- name: start_date
in: body
type: string
description: "Promotion start date in YYYY-MM-DD format."
- name: end_date
in: body
type: string
description: "Promotion end date in YYYY-MM-DD format."
call: "salesforce-promo.create-case"
with:
account_id: "{{account_id}}"
subject: "Trade Promotion: {{promotion_type}} ({{start_date}} to {{end_date}})"
type: "Trade Promotion"
outputParameters:
- name: case_number
type: string
mapping: "$.caseNumber"
- name: case_id
type: string
mapping: "$.id"
consumes:
- type: http
namespace: salesforce-promo
baseUri: "https://generalmills.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
Traces a product batch through SAP to retrieve production origins and component lots.
naftiko: "0.5"
info:
label: "SAP Batch Traceability Lookup"
description: "Traces a product batch through SAP to retrieve production origins and component lots."
tags:
- quality
- supply-chain
- sap
- traceability
capability:
exposes:
- type: mcp
namespace: erp-traceability
port: 8080
tools:
- name: trace-batch
description: "Trace a product batch in SAP for production details."
inputParameters:
- name: batch_number
type: string
description: "SAP batch number."
- name: material_number
type: string
description: "SAP material number."
call: sap.get-batch-trace
with:
batch: "{{batch_number}}"
material: "{{material_number}}"
outputParameters:
- name: plant
type: string
mapping: "$.d.ProductionPlant"
- name: date
type: string
mapping: "$.d.ManufactureDate"
consumes:
- type: http
namespace: sap
baseUri: "https://generalmills-s4.sap.com/sap/opu/odata/sap/API_BATCH_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-batch-trace
method: GET
Retrieves the bill of materials for a finished product from SAP including component materials and quantities.
naftiko: "0.5"
info:
label: "SAP Bill of Materials Lookup"
description: "Retrieves the bill of materials for a finished product from SAP including component materials and quantities."
tags:
- manufacturing
- r-and-d
- sap
- erp
capability:
exposes:
- type: mcp
namespace: erp-engineering
port: 8080
tools:
- name: get-bom
description: "Retrieve BOM from SAP for a material. Returns component list with quantities."
inputParameters:
- name: material_number
type: string
description: "SAP material number."
- name: plant_code
type: string
description: "SAP plant code."
call: sap.get-bom
with:
material: "{{material_number}}"
plant: "{{plant_code}}"
outputParameters:
- name: bom_number
type: string
mapping: "$.d.BillOfMaterial"
- name: components
type: string
mapping: "$.d.to_BillOfMaterialItem.results"
consumes:
- type: http
namespace: sap
baseUri: "https://generalmills-s4.sap.com/sap/opu/odata/sap/API_BILL_OF_MATERIAL_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-bom
method: GET
Retrieves actual spending for a cost center from SAP for a fiscal period.
naftiko: "0.5"
info:
label: "SAP Cost Center Actuals Lookup"
description: "Retrieves actual spending for a cost center from SAP for a fiscal period."
tags:
- finance
- operations
- sap
- erp
capability:
exposes:
- type: mcp
namespace: finance-reporting
port: 8080
tools:
- name: get-actuals
description: "Look up cost center actuals in SAP."
inputParameters:
- name: cost_center
type: string
description: "SAP cost center ID."
- name: period
type: string
description: "Fiscal period."
call: sap.get-actuals
with:
cost_center: "{{cost_center}}"
period: "{{period}}"
outputParameters:
- name: total
type: string
mapping: "$.d.TotalAmount"
- name: currency
type: string
mapping: "$.d.Currency"
consumes:
- type: http
namespace: sap
baseUri: "https://generalmills-s4.sap.com/sap/opu/odata/sap/API_OPLACCTGDOCITEMCUBE_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-actuals
method: GET
Monitors budgets from SAP actuals, Snowflake plans, and alerts via Teams.
naftiko: "0.5"
info:
label: "SAP Cost Center Budget Monitor"
description: "Monitors budgets from SAP actuals, Snowflake plans, and alerts via Teams."
tags:
- finance
- operations
- sap
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: budget-monitoring
port: 8080
tools:
- name: monitor-budget
description: "Monitor cost center budget."
inputParameters:
- name: cost_center
type: string
description: "Cost center."
- name: period
type: string
description: "Period."
- name: threshold
type: number
description: "Threshold pct."
steps:
- name: get-actuals
type: call
call: sap.get-actuals
with:
cc: "{{cost_center}}"
period: "{{period}}"
- name: get-plan
type: call
call: snowflake.execute-query
with:
warehouse: "FINANCE_WH"
query: "SELECT planned FROM budget WHERE cc='{{cost_center}}'"
- name: alert
type: call
call: msteams.send-message
with:
channel_id: "finance"
text: "Budget: {{cost_center}} at {{get-plan.consumed_pct}}%"
consumes:
- type: http
namespace: sap
baseUri: "https://generalmills-s4.sap.com/sap/opu/odata/sap/API_OPLACCTGDOCITEMCUBE_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-actuals
method: GET
- type: http
namespace: snowflake
baseUri: "https://generalmills.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Queries SAP S/4HANA for procurement and operating spend by cost center for a fiscal period for General Mills financial close and budget variance reporting.
naftiko: "0.5"
info:
label: "SAP Cost Center Spend Report"
description: "Queries SAP S/4HANA for procurement and operating spend by cost center for a fiscal period for General Mills financial close and budget variance reporting."
tags:
- finance
- erp
- sap
- reporting
capability:
exposes:
- type: mcp
namespace: finance-reporting
port: 8080
tools:
- name: get-spend-by-cost-center
description: "Given a fiscal year, period, and optional cost center code, return total spend actuals from SAP S/4HANA. Use for monthly budget variance reviews, quarterly financial close, and executive cost reporting."
inputParameters:
- name: fiscal_year
in: body
type: string
description: "The SAP fiscal year (e.g., 2025)."
- name: period
in: body
type: string
description: "The fiscal period number (1-12)."
- name: cost_center
in: body
type: string
description: "Optional SAP cost center code to filter results."
call: "sap-cca.get-cost-center-actuals"
with:
fiscal_year: "{{fiscal_year}}"
period: "{{period}}"
cost_center: "{{cost_center}}"
outputParameters:
- name: total_actuals
type: number
mapping: "$.d.results[0].AmountInCoCodeCurrency"
- name: currency
type: string
mapping: "$.d.results[0].CompanyCodeCurrency"
consumes:
- type: http
namespace: sap-cca
baseUri: "https://generalmills-s4.sap.com/sap/opu/odata/sap/FAC_COSTCENTER_0001"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: cost-center-actuals
path: "/CostCenterActuals"
inputParameters:
- name: fiscal_year
in: query
- name: period
in: query
- name: cost_center
in: query
operations:
- name: get-cost-center-actuals
method: GET
Processes credit memos by validating SAP invoice, creating credit doc, and updating Salesforce account.
naftiko: "0.5"
info:
label: "SAP Credit Memo Processing"
description: "Processes credit memos by validating SAP invoice, creating credit doc, and updating Salesforce account."
tags:
- finance
- sales
- sap
- salesforce
capability:
exposes:
- type: mcp
namespace: finance-ar
port: 8080
tools:
- name: process-credit-memo
description: "Process credit memo."
inputParameters:
- name: invoice_number
type: string
description: "Invoice number."
- name: credit_amount
type: number
description: "Credit amount."
- name: reason
type: string
description: "Reason."
steps:
- name: validate
type: call
call: sap.get-invoice
with:
invoice: "{{invoice_number}}"
- name: create-credit
type: call
call: sap.create-credit-memo
with:
reference: "{{invoice_number}}"
amount: "{{credit_amount}}"
- name: update-account
type: call
call: salesforce.update-account
with:
id: "{{validate.customer_id}}"
credit: "{{credit_amount}}"
consumes:
- type: http
namespace: sap
baseUri: "https://generalmills-s4.sap.com/sap/opu/odata/sap/API_BILLING_DOCUMENT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-invoice
method: GET
- name: create-credit-memo
method: POST
- type: http
namespace: salesforce
baseUri: "https://generalmills.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: sobjects
path: "/sobjects"
operations:
- name: query
method: GET
Orchestrates monthly close by running SAP tasks, validating Snowflake balances, and posting status to Teams.
naftiko: "0.5"
info:
label: "SAP Financial Period Close Orchestrator"
description: "Orchestrates monthly close by running SAP tasks, validating Snowflake balances, and posting status to Teams."
tags:
- finance
- operations
- sap
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: finance-close
port: 8080
tools:
- name: close-period
description: "Orchestrate financial period close."
inputParameters:
- name: period
type: string
description: "Fiscal period."
- name: company_code
type: string
description: "Company code."
steps:
- name: check-items
type: call
call: sap.get-open-items
with:
code: "{{company_code}}"
period: "{{period}}"
- name: validate
type: call
call: snowflake.execute-query
with:
warehouse: "FINANCE_WH"
query: "SELECT * FROM recon WHERE code='{{company_code}}'"
- name: post
type: call
call: msteams.send-message
with:
channel_id: "finance-close"
text: "Period {{period}}: Open items {{check-items.count}}"
consumes:
- type: http
namespace: sap
baseUri: "https://generalmills-s4.sap.com/sap/opu/odata/sap/API_OPLACCTGDOCITEMCUBE_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-open-items
method: GET
- type: http
namespace: snowflake
baseUri: "https://generalmills.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Confirms goods receipt in SAP S/4HANA for a purchase order, returning receipt document and quantity.
naftiko: "0.5"
info:
label: "SAP Goods Receipt Confirmation"
description: "Confirms goods receipt in SAP S/4HANA for a purchase order, returning receipt document and quantity."
tags:
- supply-chain
- manufacturing
- sap
- erp
capability:
exposes:
- type: mcp
namespace: erp-logistics
port: 8080
tools:
- name: confirm-goods-receipt
description: "Confirm goods receipt against a PO. Returns receipt doc, quantity, and posting date."
inputParameters:
- name: po_number
type: string
description: "SAP purchase order number."
- name: plant_code
type: string
description: "SAP plant code."
call: sap.post-goods-receipt
with:
po_number: "{{po_number}}"
plant: "{{plant_code}}"
outputParameters:
- name: receipt_doc
type: string
mapping: "$.d.MaterialDocumentNumber"
- name: quantity
type: string
mapping: "$.d.QuantityReceived"
consumes:
- type: http
namespace: sap
baseUri: "https://generalmills-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_DOCUMENT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: post-goods-receipt
method: POST
Creates intercompany transfers in SAP, updates Snowflake forecasts, and notifies via Teams.
naftiko: "0.5"
info:
label: "SAP Intercompany Transfer Workflow"
description: "Creates intercompany transfers in SAP, updates Snowflake forecasts, and notifies via Teams."
tags:
- supply-chain
- logistics
- sap
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: intercompany
port: 8080
tools:
- name: create-transfer
description: "Create intercompany stock transfer."
inputParameters:
- name: material
type: string
description: "Material."
- name: from_plant
type: string
description: "Source plant."
- name: to_plant
type: string
description: "Target plant."
- name: quantity
type: number
description: "Quantity."
steps:
- name: transfer
type: call
call: sap.create-transfer
with:
material: "{{material}}"
from: "{{from_plant}}"
to: "{{to_plant}}"
- name: update
type: call
call: snowflake.execute-query
with:
warehouse: "SC_WH"
query: "CALL update_forecast('{{to_plant}}', '{{material}}', {{quantity}})"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "logistics"
text: "Transfer: {{quantity}} of {{material}} from {{from_plant}} to {{to_plant}}"
consumes:
- type: http
namespace: sap
baseUri: "https://generalmills-s4.sap.com/sap/opu/odata/sap/API_STOCK_TRANSFER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: create-transfer
method: POST
- type: http
namespace: snowflake
baseUri: "https://generalmills.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Creates maintenance orders in SAP from ServiceNow requests and notifies team via Teams.
naftiko: "0.5"
info:
label: "SAP Maintenance Order Creation"
description: "Creates maintenance orders in SAP from ServiceNow requests and notifies team via Teams."
tags:
- manufacturing
- operations
- sap
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: plant-maintenance
port: 8080
tools:
- name: create-order
description: "Create maintenance order."
inputParameters:
- name: snow_ticket
type: string
description: "ServiceNow ticket."
- name: equipment_id
type: string
description: "Equipment ID."
- name: priority
type: string
description: "Priority."
steps:
- name: get-request
type: call
call: servicenow.get-request
with:
number: "{{snow_ticket}}"
- name: create-order
type: call
call: sap.create-order
with:
equipment: "{{equipment_id}}"
priority: "{{priority}}"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "maintenance"
text: "Maintenance order for {{equipment_id}}. Priority: {{priority}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://generalmills.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: sap
baseUri: "https://generalmills-s4.sap.com/sap/opu/odata/sap/API_MAINTENANCEORDER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: create-order
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Creates a new SAP purchase order for a General Mills procurement request, links it to the appropriate cost center, and notifies the requester via Microsoft Teams.
naftiko: "0.5"
info:
label: "SAP Purchase Order Creation"
description: "Creates a new SAP purchase order for a General Mills procurement request, links it to the appropriate cost center, and notifies the requester via Microsoft Teams."
tags:
- finance
- procurement
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: procurement-ops
port: 8080
tools:
- name: create-purchase-order
description: "Given supplier ID, cost center, item description, and amount, create a SAP S/4HANA purchase order and send a confirmation to the requester via Microsoft Teams. Use when fulfilling General Mills procurement requests."
inputParameters:
- name: supplier_id
in: body
type: string
description: "The SAP vendor/supplier number."
- name: cost_center
in: body
type: string
description: "The SAP cost center to charge the purchase to."
- name: item_description
in: body
type: string
description: "Description of the goods or services being purchased."
- name: amount
in: body
type: number
description: "Total purchase order value."
- name: requester_upn
in: body
type: string
description: "Microsoft Teams UPN of the procurement requester."
steps:
- name: create-po
type: call
call: "sap-create-po.create-purchase-order"
with:
supplier_id: "{{supplier_id}}"
cost_center: "{{cost_center}}"
item_description: "{{item_description}}"
amount: "{{amount}}"
- name: notify-requester
type: call
call: "msteams-procure.send-message"
with:
recipient_upn: "{{requester_upn}}"
text: "Purchase order {{create-po.po_number}} created for ${{amount}} against cost center {{cost_center}}. Status: {{create-po.status}}."
consumes:
- type: http
namespace: sap-create-po
baseUri: "https://generalmills-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"
operations:
- name: create-purchase-order
method: POST
- type: http
namespace: msteams-procure
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chats
path: "/chats"
operations:
- name: send-message
method: POST
Retrieves product recipe details from SAP including ingredients, process parameters, and yield specifications.
naftiko: "0.5"
info:
label: "SAP Recipe Management Lookup"
description: "Retrieves product recipe details from SAP including ingredients, process parameters, and yield specifications."
tags:
- manufacturing
- r-and-d
- sap
- erp
capability:
exposes:
- type: mcp
namespace: recipe-mgmt
port: 8080
tools:
- name: get-recipe
description: "Look up a product recipe in SAP by material number. Returns ingredients, process steps, and yield."
inputParameters:
- name: material_number
type: string
description: "SAP material number."
call: sap.get-recipe
with:
material: "{{material_number}}"
outputParameters:
- name: recipe_id
type: string
mapping: "$.d.RecipeId"
- name: ingredients
type: string
mapping: "$.d.Ingredients"
- name: yield_pct
type: string
mapping: "$.d.PlannedYield"
consumes:
- type: http
namespace: sap
baseUri: "https://generalmills-s4.sap.com/sap/opu/odata/sap/API_RECIPE_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: recipes
path: "/A_Recipe"
operations:
- name: get-recipe
method: GET
Looks up a General Mills SAP S/4HANA purchase order by number and returns header status, vendor, total value, and currency.
naftiko: "0.5"
info:
label: "SAP S/4HANA Purchase Order Lookup"
description: "Looks up a General Mills SAP S/4HANA purchase order by number and returns header status, vendor, total value, and currency."
tags:
- finance
- erp
- sap
- procurement
capability:
exposes:
- type: mcp
namespace: erp-procurement
port: 8080
tools:
- name: get-purchase-order
description: "Given a SAP PO number, return status, vendor name, total value, and currency. Use when auditing procurement spend, resolving supplier invoicing queries, or preparing for financial close."
inputParameters:
- name: po_number
in: body
type: string
description: "The SAP S/4HANA purchase order number."
call: "sap-s4.get-po"
with:
po_number: "{{po_number}}"
outputParameters:
- name: status
type: string
mapping: "$.d.OverallStatus"
- name: vendor
type: string
mapping: "$.d.Supplier.CompanyName"
- name: total_value
type: number
mapping: "$.d.TotalAmount"
- name: currency
type: string
mapping: "$.d.TransactionCurrency"
consumes:
- type: http
namespace: sap-s4
baseUri: "https://generalmills-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
Submits a supplier invoice to SAP S/4HANA accounts payable, links it to the PO, and notifies the approving manager via Microsoft Teams.
naftiko: "0.5"
info:
label: "SAP Supplier Invoice Submission"
description: "Submits a supplier invoice to SAP S/4HANA accounts payable, links it to the PO, and notifies the approving manager via Microsoft Teams."
tags:
- finance
- accounts-payable
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: ap-processing
port: 8080
tools:
- name: submit-supplier-invoice
description: "Given invoice details and a linked SAP PO number, create the invoice record in SAP S/4HANA and notify the finance manager in Microsoft Teams for approval. Use during General Mills accounts-payable processing."
inputParameters:
- name: po_number
in: body
type: string
description: "The SAP PO number this invoice is billed against."
- name: invoice_number
in: body
type: string
description: "The supplier invoice number."
- name: amount
in: body
type: number
description: "Invoice total in the PO currency."
- name: approver_upn
in: body
type: string
description: "Microsoft Teams UPN of the finance approver."
steps:
- name: create-invoice
type: call
call: "sap-ap.create-supplier-invoice"
with:
po_number: "{{po_number}}"
invoice_number: "{{invoice_number}}"
amount: "{{amount}}"
- name: notify-approver
type: call
call: "msteams-ap.send-message"
with:
recipient_upn: "{{approver_upn}}"
text: "Invoice {{invoice_number}} for SAP PO {{po_number}} (${{amount}}) has been submitted. Invoice ID: {{create-invoice.invoice_id}}. Please review and approve in SAP."
consumes:
- type: http
namespace: sap-ap
baseUri: "https://generalmills-s4.sap.com/sap/opu/odata/sap/API_SUPPLIERINVOICE_PROCESS_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: supplier-invoices
path: "/A_SupplierInvoice"
operations:
- name: create-supplier-invoice
method: POST
- type: http
namespace: msteams-ap
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chats
path: "/chats"
operations:
- name: send-message
method: POST
Tracks shipments from SAP delivery docs and updates Salesforce orders with tracking info.
naftiko: "0.5"
info:
label: "SAP Transport Shipment Tracker"
description: "Tracks shipments from SAP delivery docs and updates Salesforce orders with tracking info."
tags:
- supply-chain
- logistics
- sap
- salesforce
capability:
exposes:
- type: mcp
namespace: logistics-tracking
port: 8080
tools:
- name: track-shipment
description: "Track outbound shipment."
inputParameters:
- name: delivery_number
type: string
description: "SAP delivery number."
- name: sf_order_id
type: string
description: "Salesforce order ID."
steps:
- name: get-delivery
type: call
call: sap.get-delivery
with:
delivery: "{{delivery_number}}"
- name: update-order
type: call
call: salesforce.update-order
with:
order_id: "{{sf_order_id}}"
tracking: "{{get-delivery.tracking}}"
consumes:
- type: http
namespace: sap
baseUri: "https://generalmills-s4.sap.com/sap/opu/odata/sap/API_OUTBOUND_DELIVERY_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-delivery
method: GET
- type: http
namespace: salesforce
baseUri: "https://generalmills.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: sobjects
path: "/sobjects"
operations:
- name: query
method: GET
Retrieves vendor payment terms and credit limit from SAP.
naftiko: "0.5"
info:
label: "SAP Vendor Payment Terms Lookup"
description: "Retrieves vendor payment terms and credit limit from SAP."
tags:
- finance
- procurement
- sap
- erp
capability:
exposes:
- type: mcp
namespace: erp-finance
port: 8080
tools:
- name: get-payment-terms
description: "Look up vendor payment terms in SAP."
inputParameters:
- name: vendor_number
type: string
description: "SAP vendor number."
call: sap.get-vendor-terms
with:
vendor: "{{vendor_number}}"
outputParameters:
- name: payment_terms
type: string
mapping: "$.d.PaymentTerms"
- name: credit_limit
type: string
mapping: "$.d.CreditLimit"
consumes:
- type: http
namespace: sap
baseUri: "https://generalmills-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-vendor-terms
method: GET
Posts warehouse transfers in SAP, updates Snowflake inventory, and confirms via Teams.
naftiko: "0.5"
info:
label: "SAP Warehouse Transfer Posting"
description: "Posts warehouse transfers in SAP, updates Snowflake inventory, and confirms via Teams."
tags:
- supply-chain
- logistics
- sap
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: warehouse-ops
port: 8080
tools:
- name: post-transfer
description: "Post warehouse transfer."
inputParameters:
- name: material
type: string
description: "Material."
- name: from_loc
type: string
description: "Source."
- name: to_loc
type: string
description: "Target."
- name: quantity
type: number
description: "Quantity."
steps:
- name: transfer
type: call
call: sap.post-transfer
with:
material: "{{material}}"
from: "{{from_loc}}"
- name: update
type: call
call: snowflake.execute-query
with:
warehouse: "SC_WH"
query: "CALL update_inv('{{material}}', {{quantity}})"
- name: confirm
type: call
call: msteams.send-message
with:
channel_id: "warehouse"
text: "Transfer: {{quantity}} of {{material}} to {{to_loc}}"
consumes:
- type: http
namespace: sap
baseUri: "https://generalmills-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_DOCUMENT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: post-transfer
method: POST
- type: http
namespace: snowflake
baseUri: "https://generalmills.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Queries ServiceNow for the status of the latest scheduled backup job and alerts the General Mills IT operations Teams channel if backup failed or is overdue.
naftiko: "0.5"
info:
label: "ServiceNow Backup Verification Check"
description: "Queries ServiceNow for the status of the latest scheduled backup job and alerts the General Mills IT operations Teams channel if backup failed or is overdue."
tags:
- itsm
- operations
- servicenow
- microsoft-teams
- backup
capability:
exposes:
- type: mcp
namespace: backup-verification
port: 8080
tools:
- name: verify-backup-status
description: "Query ServiceNow for the latest backup job record and post a Teams alert summarizing status. Use as part of daily General Mills IT operations checks."
inputParameters:
- name: backup_job_name
in: body
type: string
description: "The ServiceNow scheduled job name for the backup to verify."
steps:
- name: get-backup-record
type: call
call: "servicenow-bkp.get-backup-record"
with:
job_name: "{{backup_job_name}}"
- name: post-status
type: call
call: "msteams-bkp.send-message"
with:
channel_id: "$secrets.teams_it_ops_channel_id"
text: "Backup Check — {{backup_job_name}}: Status={{get-backup-record.status}}, Last run={{get-backup-record.last_run_date}}. Investigate if status is not 'Success'."
consumes:
- type: http
namespace: servicenow-bkp
baseUri: "https://generalmills.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: backup-records
path: "/table/scheduled_job"
inputParameters:
- name: job_name
in: query
operations:
- name: get-backup-record
method: GET
- type: http
namespace: msteams-bkp
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-message
method: POST
Creates a ServiceNow change request for a planned General Mills IT or infrastructure change with risk-based routing.
naftiko: "0.5"
info:
label: "ServiceNow Change Request Creation"
description: "Creates a ServiceNow change request for a planned General Mills IT or infrastructure change with risk-based routing."
tags:
- itsm
- change-management
- servicenow
capability:
exposes:
- type: mcp
namespace: change-mgmt
port: 8080
tools:
- name: create-change-request
description: "Given change description, risk level, and implementation window, create a ServiceNow change request. Use when planning IT, application, or infrastructure changes in the General Mills environment."
inputParameters:
- name: short_description
in: body
type: string
description: "Brief description of the change."
- name: risk
in: body
type: string
description: "Risk level: low, medium, or high."
- name: start_date
in: body
type: string
description: "Planned implementation start in ISO 8601 format."
- name: end_date
in: body
type: string
description: "Planned implementation end in ISO 8601 format."
call: "servicenow-chg.create-change"
with:
short_description: "{{short_description}}"
risk: "{{risk}}"
start_date: "{{start_date}}"
end_date: "{{end_date}}"
outputParameters:
- name: change_number
type: string
mapping: "$.result.number"
- name: state
type: string
mapping: "$.result.state"
consumes:
- type: http
namespace: servicenow-chg
baseUri: "https://generalmills.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: change-requests
path: "/table/change_request"
operations:
- name: create-change
method: POST
Retrieves current status of a ServiceNow incident including priority and assignment.
naftiko: "0.5"
info:
label: "ServiceNow Incident Status Lookup"
description: "Retrieves current status of a ServiceNow incident including priority and assignment."
tags:
- operations
- it-service
- servicenow
- incident
capability:
exposes:
- type: mcp
namespace: it-service-mgmt
port: 8080
tools:
- name: get-incident
description: "Look up ServiceNow incident status."
inputParameters:
- name: incident_number
type: string
description: "ServiceNow incident number."
call: servicenow.get-incident
with:
number: "{{incident_number}}"
outputParameters:
- name: state
type: string
mapping: "$.result.state"
- name: priority
type: string
mapping: "$.result.priority"
consumes:
- type: http
namespace: servicenow
baseUri: "https://generalmills.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
Escalates a ServiceNow incident to P1, assigns the on-call engineering group, and broadcasts an alert to the General Mills IT operations Microsoft Teams channel.
naftiko: "0.5"
info:
label: "ServiceNow P1 Incident Escalation"
description: "Escalates a ServiceNow incident to P1, assigns the on-call engineering group, and broadcasts an alert to the General Mills IT operations Microsoft Teams channel."
tags:
- itsm
- incident-response
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: it-incident-ops
port: 8080
tools:
- name: escalate-to-p1
description: "Given a ServiceNow incident number and escalation reason, update priority to P1, reassign to the on-call group, and post a critical alert to the IT operations Teams channel. Use when an incident is confirmed as business-critical at General Mills."
inputParameters:
- name: incident_number
in: body
type: string
description: "The ServiceNow incident number (e.g., INC0012345)."
- name: escalation_reason
in: body
type: string
description: "Reason for the P1 escalation."
steps:
- name: update-incident
type: call
call: "servicenow-itsm.patch-incident"
with:
number: "{{incident_number}}"
priority: "1"
assignment_group: "GM_IT_Critical_OnCall"
work_notes: "P1 escalation: {{escalation_reason}}"
- name: alert-it-ops
type: call
call: "msteams-itsm.send-message"
with:
channel_id: "$secrets.teams_it_ops_channel_id"
text: "P1 ESCALATION: {{incident_number}} — {{escalation_reason}}. Assigned to GM IT Critical On-Call. Immediate response required."
consumes:
- type: http
namespace: servicenow-itsm
baseUri: "https://generalmills.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident/{{number}}"
inputParameters:
- name: number
in: path
operations:
- name: patch-incident
method: PATCH
- type: http
namespace: msteams-itsm
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-message
method: POST
Searches SharePoint for documents matching a keyword.
naftiko: "0.5"
info:
label: "SharePoint Document Search"
description: "Searches SharePoint for documents matching a keyword."
tags:
- operations
- documents
- sharepoint
- search
capability:
exposes:
- type: mcp
namespace: doc-management
port: 8080
tools:
- name: search-docs
description: "Search SharePoint for documents."
inputParameters:
- name: keyword
type: string
description: "Search keyword."
- name: site_id
type: string
description: "SharePoint site ID."
call: sharepoint.search
with:
siteId: "{{site_id}}"
query: "{{keyword}}"
outputParameters:
- name: results
type: string
mapping: "$.value"
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/sites/drive/items"
operations:
- name: search-docs
method: GET
Queries Snowflake for retail POS analytics including velocity, distribution, and share data.
naftiko: "0.5"
info:
label: "Snowflake Retail POS Analytics Query"
description: "Queries Snowflake for retail POS analytics including velocity, distribution, and share data."
tags:
- analytics
- sales
- snowflake
- retail
capability:
exposes:
- type: mcp
namespace: retail-analytics
port: 8080
tools:
- name: query-pos-data
description: "Query Snowflake retail POS data for a category and retailer."
inputParameters:
- name: category
type: string
description: "Product category."
- name: retailer
type: string
description: "Retail account."
- name: date_from
type: string
description: "Start date."
call: snowflake.execute-query
with:
warehouse: "RETAIL_ANALYTICS_WH"
query: "SELECT * FROM pos WHERE category='{{category}}'"
outputParameters:
- name: data
type: string
mapping: "$.data"
consumes:
- type: http
namespace: snowflake
baseUri: "https://generalmills.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
Queries Snowflake for supply chain KPIs including fill rate, OTIF, and inventory turns.
naftiko: "0.5"
info:
label: "Snowflake Supply Chain KPI Query"
description: "Queries Snowflake for supply chain KPIs including fill rate, OTIF, and inventory turns."
tags:
- supply-chain
- analytics
- snowflake
- reporting
capability:
exposes:
- type: mcp
namespace: sc-analytics
port: 8080
tools:
- name: query-sc-kpis
description: "Query supply chain KPIs from Snowflake."
inputParameters:
- name: region
type: string
description: "Region code."
- name: period
type: string
description: "Period."
call: snowflake.execute-query
with:
warehouse: "SC_ANALYTICS_WH"
query: "SELECT fill_rate, otif FROM sc_kpis WHERE region='{{region}}'"
outputParameters:
- name: fill_rate
type: string
mapping: "$.data[0].fill_rate"
- name: otif
type: string
mapping: "$.data[0].otif"
consumes:
- type: http
namespace: snowflake
baseUri: "https://generalmills.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
Triggers store-level replenishment by querying Snowflake POS data, checking SAP DC inventory, and creating Salesforce replenishment orders.
naftiko: "0.5"
info:
label: "Store Level Inventory Replenishment"
description: "Triggers store-level replenishment by querying Snowflake POS data, checking SAP DC inventory, and creating Salesforce replenishment orders."
tags:
- supply-chain
- sales
- snowflake
- sap
- salesforce
capability:
exposes:
- type: mcp
namespace: replenishment
port: 8080
tools:
- name: trigger-replenishment
description: "Trigger store replenishment based on POS velocity and DC inventory."
inputParameters:
- name: retailer
type: string
description: "Retailer account name."
- name: region
type: string
description: "Sales region."
steps:
- name: get-pos-velocity
type: call
call: snowflake.execute-query
with:
warehouse: "RETAIL_WH"
query: "SELECT sku, velocity, weeks_of_supply FROM pos WHERE retailer='{{retailer}}' AND region='{{region}}' AND weeks_of_supply<2"
- name: check-dc-stock
type: call
call: sap.get-dc-inventory
with:
region: "{{region}}"
skus: "{{get-pos-velocity.skus}}"
- name: create-order
type: call
call: salesforce.create-replenishment
with:
retailer: "{{retailer}}"
items: "{{get-pos-velocity.data}}"
available: "{{check-dc-stock.levels}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://generalmills.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: sap
baseUri: "https://generalmills-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: "/data"
operations:
- name: get-dc-inventory
method: GET
- type: http
namespace: salesforce
baseUri: "https://generalmills.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: orders
path: "/sobjects/Order"
operations:
- name: create-replenishment
method: POST
Generates supplier scorecards from Ariba delivery data, Snowflake quality metrics, and posts to Teams.
naftiko: "0.5"
info:
label: "Supplier Performance Scorecard Generator"
description: "Generates supplier scorecards from Ariba delivery data, Snowflake quality metrics, and posts to Teams."
tags:
- procurement
- supply-chain
- sap
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: procurement-analytics
port: 8080
tools:
- name: generate-scorecard
description: "Generate supplier performance scorecard."
inputParameters:
- name: supplier_id
type: string
description: "Ariba supplier ID."
- name: period
type: string
description: "Period."
steps:
- name: get-delivery
type: call
call: ariba.get-performance
with:
supplier_id: "{{supplier_id}}"
period: "{{period}}"
- name: get-quality
type: call
call: snowflake.execute-query
with:
warehouse: "PROCUREMENT_WH"
query: "SELECT defect_rate FROM supplier_quality WHERE supplier='{{supplier_id}}'"
- name: post
type: call
call: msteams.send-message
with:
channel_id: "procurement"
text: "Supplier {{supplier_id}}: OTD {{get-delivery.on_time_rate}}%"
consumes:
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/supplier-management/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: suppliers
path: "/suppliers"
operations:
- name: get-supplier
method: GET
- type: http
namespace: snowflake
baseUri: "https://generalmills.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Assesses risk from Snowflake supplier data, Ariba status, and posts alerts to Teams.
naftiko: "0.5"
info:
label: "Supply Chain Risk Assessment"
description: "Assesses risk from Snowflake supplier data, Ariba status, and posts alerts to Teams."
tags:
- supply-chain
- procurement
- snowflake
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: supply-risk
port: 8080
tools:
- name: assess-risk
description: "Assess supply chain risk."
inputParameters:
- name: material_group
type: string
description: "Material group."
steps:
- name: get-data
type: call
call: snowflake.execute-query
with:
warehouse: "SC_WH"
query: "SELECT supplier, share FROM concentration WHERE group='{{material_group}}'"
- name: get-risk
type: call
call: ariba.get-risk
with:
group: "{{material_group}}"
- name: post
type: call
call: msteams.send-message
with:
channel_id: "supply-risk"
text: "Risk for {{material_group}}: Top share {{get-data.top_share}}%"
consumes:
- type: http
namespace: snowflake
baseUri: "https://generalmills.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/supplier-management/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: suppliers
path: "/suppliers"
operations:
- name: get-supplier
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Triggers a Terraform Cloud plan-and-apply run for a General Mills infrastructure workspace following an approved change request.
naftiko: "0.5"
info:
label: "Terraform Cloud Infrastructure Run"
description: "Triggers a Terraform Cloud plan-and-apply run for a General Mills infrastructure workspace following an approved change request."
tags:
- cloud
- infrastructure
- terraform
- devops
capability:
exposes:
- type: mcp
namespace: infra-provisioning
port: 8080
tools:
- name: trigger-terraform-run
description: "Given a Terraform Cloud workspace ID and run message, trigger a new plan-and-apply run. Use when deploying approved General Mills infrastructure changes to cloud environments."
inputParameters:
- name: workspace_id
in: body
type: string
description: "The Terraform Cloud workspace ID (e.g., ws-xxxxxxxxxxxxxxxx)."
- name: message
in: body
type: string
description: "Human-readable message describing the reason for this run."
call: "terraform-cloud.create-run"
with:
workspace_id: "{{workspace_id}}"
message: "{{message}}"
outputParameters:
- name: run_id
type: string
mapping: "$.data.id"
- name: status
type: string
mapping: "$.data.attributes.status"
consumes:
- type: http
namespace: terraform-cloud
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: runs
path: "/runs"
operations:
- name: create-run
method: POST
Generates TPE by pulling Salesforce promotions, Snowflake sales, and refreshing Power BI.
naftiko: "0.5"
info:
label: "Trade Promotion Effectiveness Report"
description: "Generates TPE by pulling Salesforce promotions, Snowflake sales, and refreshing Power BI."
tags:
- sales
- marketing
- salesforce
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: trade-analytics
port: 8080
tools:
- name: generate-tpe
description: "Generate trade promotion effectiveness report."
inputParameters:
- name: promotion_id
type: string
description: "Salesforce promotion ID."
- name: date_from
type: string
description: "Start date."
- name: date_to
type: string
description: "End date."
steps:
- name: get-promo
type: call
call: salesforce.get-promotion
with:
promotion_id: "{{promotion_id}}"
- name: get-sales
type: call
call: snowflake.execute-query
with:
warehouse: "SALES_WH"
query: "SELECT revenue FROM pos WHERE promo='{{promotion_id}}'"
- name: refresh
type: call
call: powerbi.refresh-dataset
with:
datasetId: "trade-promotion-effectiveness"
consumes:
- type: http
namespace: salesforce
baseUri: "https://generalmills.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: sobjects
path: "/sobjects"
operations:
- name: query
method: GET
- type: http
namespace: snowflake
baseUri: "https://generalmills.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets"
operations:
- name: refresh-dataset
method: POST
Performs three-way match between SAP PO, goods receipt, and invoice, routing exceptions to ServiceNow.
naftiko: "0.5"
info:
label: "Vendor Invoice Three-Way Match"
description: "Performs three-way match between SAP PO, goods receipt, and invoice, routing exceptions to ServiceNow."
tags:
- finance
- procurement
- sap
- servicenow
capability:
exposes:
- type: mcp
namespace: ap-automation
port: 8080
tools:
- name: three-way-match
description: "Perform three-way match for vendor invoice."
inputParameters:
- name: invoice_number
type: string
description: "Invoice number."
- name: po_number
type: string
description: "PO number."
steps:
- name: get-po
type: call
call: sap.get-po
with:
po_number: "{{po_number}}"
- name: get-receipt
type: call
call: sap.get-receipt
with:
po_number: "{{po_number}}"
- name: create-exception
type: call
call: servicenow.create-incident
with:
short_description: "Mismatch: {{invoice_number}} vs PO {{po_number}}"
consumes:
- type: http
namespace: sap
baseUri: "https://generalmills-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-po
method: GET
- name: get-receipt
method: GET
- type: http
namespace: servicenow
baseUri: "https://generalmills.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
Analyzes warehouse capacity from SAP, demand from Snowflake, and refreshes Power BI dashboard.
naftiko: "0.5"
info:
label: "Warehouse Capacity Planning Orchestrator"
description: "Analyzes warehouse capacity from SAP, demand from Snowflake, and refreshes Power BI dashboard."
tags:
- supply-chain
- logistics
- sap
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: warehouse-planning
port: 8080
tools:
- name: plan-capacity
description: "Analyze warehouse capacity."
inputParameters:
- name: warehouse_id
type: string
description: "Warehouse number."
- name: weeks
type: number
description: "Forecast weeks."
steps:
- name: get-util
type: call
call: sap.get-warehouse-stock
with:
warehouse: "{{warehouse_id}}"
- name: get-forecast
type: call
call: snowflake.execute-query
with:
warehouse: "SC_WH"
query: "SELECT pallets FROM forecast WHERE id='{{warehouse_id}}'"
- name: refresh
type: call
call: powerbi.refresh-dataset
with:
datasetId: "warehouse-capacity"
consumes:
- type: http
namespace: sap
baseUri: "https://generalmills-s4.sap.com/sap/opu/odata/sap/API_WAREHOUSE_STOCK_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-warehouse-stock
method: GET
- type: http
namespace: snowflake
baseUri: "https://generalmills.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets"
operations:
- name: refresh-dataset
method: POST
Tracks waste reduction initiatives by pulling manufacturing waste data from Snowflake, comparing to targets, and posting progress to Teams.
naftiko: "0.5"
info:
label: "Waste Reduction Initiative Tracker"
description: "Tracks waste reduction initiatives by pulling manufacturing waste data from Snowflake, comparing to targets, and posting progress to Teams."
tags:
- manufacturing
- sustainability
- snowflake
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: waste-reduction
port: 8080
tools:
- name: track-waste-reduction
description: "Track waste reduction progress against targets."
inputParameters:
- name: plant_code
type: string
description: "Plant code."
- name: initiative_id
type: string
description: "Jira initiative key."
steps:
- name: get-waste-data
type: call
call: snowflake.execute-query
with:
warehouse: "MFG_WH"
query: "SELECT waste_type, current_pct, target_pct FROM waste_tracking WHERE plant='{{plant_code}}'"
- name: update-initiative
type: call
call: jira.update-issue
with:
issue_key: "{{initiative_id}}"
comment: "Current waste: {{get-waste-data.current_total}}%. Target: {{get-waste-data.target_total}}%"
- name: post-progress
type: call
call: msteams.send-message
with:
channel_id: "sustainability"
text: "Waste reduction at {{plant_code}}: {{get-waste-data.current_total}}% (target: {{get-waste-data.target_total}}%)"
consumes:
- type: http
namespace: snowflake
baseUri: "https://generalmills.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: jira
baseUri: "https://generalmills.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: update-issue
method: PUT
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Generates diversity metrics from Workday, enriches with Snowflake analytics, refreshes Power BI.
naftiko: "0.5"
info:
label: "Workday Diversity Metrics Report"
description: "Generates diversity metrics from Workday, enriches with Snowflake analytics, refreshes Power BI."
tags:
- hr
- analytics
- workday
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: hr-analytics
port: 8080
tools:
- name: generate-diversity
description: "Generate workforce diversity metrics."
inputParameters:
- name: business_unit
type: string
description: "Business unit."
- name: period
type: string
description: "Period."
steps:
- name: get-demo
type: call
call: workday.get-demographics
with:
bu: "{{business_unit}}"
- name: get-analytics
type: call
call: snowflake.execute-query
with:
warehouse: "HR_WH"
query: "SELECT diversity_index FROM metrics WHERE bu='{{business_unit}}'"
- name: refresh
type: call
call: powerbi.refresh-dataset
with:
datasetId: "diversity-dashboard"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/generalmills/workers"
operations:
- name: get-worker
method: GET
- type: http
namespace: snowflake
baseUri: "https://generalmills.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets"
operations:
- name: refresh-dataset
method: POST
Exports current General Mills headcount grouped by department and cost center from Workday for quarterly workforce planning and executive reporting.
naftiko: "0.5"
info:
label: "Workday Headcount Export for Finance"
description: "Exports current General Mills headcount grouped by department and cost center from Workday for quarterly workforce planning and executive reporting."
tags:
- hr
- reporting
- workday
- headcount
- finance
capability:
exposes:
- type: mcp
namespace: hr-reporting
port: 8080
tools:
- name: get-headcount-by-department
description: "Returns active General Mills employees grouped by department and cost center from Workday. Use for headcount planning, budget reviews, and HR analytics."
call: "workday-hcm.headcount-export"
outputParameters:
- name: employees
type: array
mapping: "$.data"
- name: total_count
type: number
mapping: "$.total"
consumes:
- type: http
namespace: workday-hcm
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers-export
path: "/generalmills/workers"
inputParameters:
- name: format
in: query
value: "json"
operations:
- name: headcount-export
method: GET
Retrieves headcount data from Workday by department including active employees and open positions.
naftiko: "0.5"
info:
label: "Workday Headcount Report Lookup"
description: "Retrieves headcount data from Workday by department including active employees and open positions."
tags:
- hr
- workforce
- workday
- reporting
capability:
exposes:
- type: mcp
namespace: hr-reporting
port: 8080
tools:
- name: get-headcount
description: "Get headcount report from Workday by department."
inputParameters:
- name: department
type: string
description: "Department name."
call: workday.get-headcount
with:
department: "{{department}}"
outputParameters:
- name: active_count
type: string
mapping: "$.headcount.active"
- name: open_positions
type: string
mapping: "$.headcount.open"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/generalmills/workers"
operations:
- name: get-worker
method: GET
Fetches approved open job requisitions from Workday Recruiting and publishes them to the General Mills LinkedIn company page.
naftiko: "0.5"
info:
label: "Workday Open Requisition to LinkedIn Publisher"
description: "Fetches approved open job requisitions from Workday Recruiting and publishes them to the General Mills LinkedIn company page."
tags:
- hr
- recruiting
- workday
- linkedin
capability:
exposes:
- type: mcp
namespace: talent-publishing
port: 8080
tools:
- name: publish-job-to-linkedin
description: "Given a Workday job requisition ID, fetch job details from Workday and post the role to the General Mills LinkedIn company page. Use when a recruiter approves a role for external publication."
inputParameters:
- name: requisition_id
in: body
type: string
description: "The Workday job requisition ID to publish."
steps:
- name: get-requisition
type: call
call: "workday-jobs.get-job-requisition"
with:
requisition_id: "{{requisition_id}}"
- name: post-to-linkedin
type: call
call: "linkedin-jobs.create-job-posting"
with:
title: "{{get-requisition.job_title}}"
description: "{{get-requisition.job_description}}"
location: "{{get-requisition.location}}"
company_id: "$secrets.linkedin_gm_company_id"
consumes:
- type: http
namespace: workday-jobs
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: job-requisitions
path: "/generalmills/jobRequisitions/{{requisition_id}}"
inputParameters:
- name: requisition_id
in: path
operations:
- name: get-job-requisition
method: GET
- type: http
namespace: linkedin-jobs
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: job-postings
path: "/simpleJobPostings"
operations:
- name: create-job-posting
method: POST
When a Workday role change is approved, updates Azure AD group membership to reflect the new role and notifies the employee via Microsoft Teams.
naftiko: "0.5"
info:
label: "Workday Role Change Access Provisioner"
description: "When a Workday role change is approved, updates Azure AD group membership to reflect the new role and notifies the employee via Microsoft Teams."
tags:
- hr
- identity
- workday
- azure-ad
- microsoft-teams
- role-change
capability:
exposes:
- type: mcp
namespace: hr-role-change
port: 8080
tools:
- name: sync-role-change
description: "Given a Workday employee ID, new role, and Azure AD group ID, update group membership and send a Teams notification to the employee. Use when an internal transfer or promotion is finalized in Workday at General Mills."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday worker ID of the employee changing roles."
- name: new_role
in: body
type: string
description: "The new job title."
- name: new_ad_group
in: body
type: string
description: "Azure AD group ID for the new role's access."
steps:
- name: get-worker
type: call
call: "workday-role.get-worker"
with:
worker_id: "{{employee_id}}"
- name: add-to-group
type: call
call: "azure-ad-role.add-group-member"
with:
group_id: "{{new_ad_group}}"
user_id: "{{get-worker.azure_object_id}}"
- name: notify-employee
type: call
call: "msteams-role.send-message"
with:
recipient_upn: "{{get-worker.work_email}}"
text: "Your role has been updated to {{new_role}}. Your system access has been provisioned. Welcome to your new position!"
consumes:
- type: http
namespace: workday-role
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/generalmills/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: azure-ad-role
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.azure_ad_token"
resources:
- name: group-members
path: "/groups/{{group_id}}/members/$ref"
inputParameters:
- name: group_id
in: path
operations:
- name: add-group-member
method: POST
- type: http
namespace: msteams-role
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chats
path: "/chats"
operations:
- name: send-message
method: POST
Retrieves employee time off balances from Workday.
naftiko: "0.5"
info:
label: "Workday Time Off Balance Lookup"
description: "Retrieves employee time off balances from Workday."
tags:
- hr
- workforce
- workday
- time-off
capability:
exposes:
- type: mcp
namespace: hr-time-mgmt
port: 8080
tools:
- name: get-time-off
description: "Look up time off balances in Workday."
inputParameters:
- name: employee_id
type: string
description: "Workday employee ID."
call: workday.get-time-off
with:
worker_id: "{{employee_id}}"
outputParameters:
- name: vacation
type: string
mapping: "$.balance.vacation"
- name: sick
type: string
mapping: "$.balance.sick"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/generalmills/workers"
operations:
- name: get-worker
method: GET
Returns approval status and date coverage for a General Mills employee time-off request from Workday.
naftiko: "0.5"
info:
label: "Workday Time-Off Request Status Lookup"
description: "Returns approval status and date coverage for a General Mills employee time-off request from Workday."
tags:
- hr
- workday
- time-off
capability:
exposes:
- type: mcp
namespace: hr-time
port: 8080
tools:
- name: get-time-off-request
description: "Given a Workday worker ID and time-off request ID, return current approval status and covered dates. Use when employees or managers need to verify leave approval status."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID of the employee."
- name: request_id
in: body
type: string
description: "The Workday time-off request ID."
call: "workday-pto.get-time-off-request"
with:
worker_id: "{{worker_id}}"
request_id: "{{request_id}}"
outputParameters:
- name: status
type: string
mapping: "$.data.overallStatus"
- name: start_date
type: string
mapping: "$.data.startDate"
- name: end_date
type: string
mapping: "$.data.endDate"
consumes:
- type: http
namespace: workday-pto
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: time-off-requests
path: "/generalmills/workers/{{worker_id}}/timeOffRequests/{{request_id}}"
inputParameters:
- name: worker_id
in: path
- name: request_id
in: path
operations:
- name: get-time-off-request
method: GET