Bayer Capabilities
Naftiko 0.5 capability definitions for Bayer - 100 capabilities showing integration workflows and service orchestrations.
Tracks logistics from SAP and Snowflake, notifying via Teams.
naftiko: "0.5"
info:
label: "Agricultural Supply Chain Logistics Tracker"
description: "Tracks logistics from SAP and Snowflake, notifying via Teams."
tags:
- agriculture
- supply-chain
- sap
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: agricultural-ops
port: 8080
tools:
- name: agricultural-logistics-tracker
description: "Tracks logistics from SAP and Snowflake, notifying via Teams."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: get-sap-data
type: call
call: "sap.get-partner"
with:
filter: "BusinessPartnerCategory eq 1"
- name: query-data
type: call
call: "snowflake.run-query"
with:
statement: "SELECT * FROM analytics.summary LIMIT 100"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "Agricultural Supply Chain Logistics Tracker completed successfully."
consumes:
- type: http
namespace: sap
baseUri: "https://bayer-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: partners
path: "/A_BusinessPartner"
operations:
- name: get-partner
method: GET
- type: http
namespace: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Generates analytics from Datadog, Snowflake, and Power BI.
naftiko: "0.5"
info:
label: "API Platform Usage Analytics Generator"
description: "Generates analytics from Datadog, Snowflake, and Power BI."
tags:
- platform-engineering
- datadog
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: api-ops
port: 8080
tools:
- name: api-usage-analytics
description: "Generates analytics from Datadog, Snowflake, and Power BI."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: check-monitors
type: call
call: "datadog.get-monitors"
with:
tags: "service:{{service_name}}"
- name: query-data
type: call
call: "snowflake.run-query"
with:
statement: "SELECT * FROM analytics.summary LIMIT 100"
- name: refresh-dashboard
type: call
call: "powerbi.trigger-refresh"
with:
dataset_id: "$secrets.dashboard_dataset_id"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
resources:
- name: monitors
path: "/monitor"
operations:
- name: get-monitors
method: GET
- type: http
namespace: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-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/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: trigger-refresh
method: POST
Tracks variances from SAP and Snowflake, notifying via Teams.
naftiko: "0.5"
info:
label: "Clinical Study Budget Variance Tracker"
description: "Tracks variances from SAP and Snowflake, notifying via Teams."
tags:
- clinical
- finance
- sap
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: clinical-ops
port: 8080
tools:
- name: clinical-budget-variance
description: "Tracks variances from SAP and Snowflake, notifying via Teams."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: get-sap-data
type: call
call: "sap.get-partner"
with:
filter: "BusinessPartnerCategory eq 1"
- name: query-data
type: call
call: "snowflake.run-query"
with:
statement: "SELECT * FROM analytics.summary LIMIT 100"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "Clinical Study Budget Variance Tracker completed successfully."
consumes:
- type: http
namespace: sap
baseUri: "https://bayer-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: partners
path: "/A_BusinessPartner"
operations:
- name: get-partner
method: GET
- type: http
namespace: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Reconciles clinical data from Snowflake and notifies via Teams.
naftiko: "0.5"
info:
label: "Clinical Data Management Reconciliation"
description: "Reconciles clinical data from Snowflake and notifies via Teams."
tags:
- clinical
- data-management
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: clinical-ops
port: 8080
tools:
- name: clinical-data-reconciliation
description: "Reconciles clinical data from Snowflake and notifies via Teams."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: query-data
type: call
call: "snowflake.run-query"
with:
statement: "SELECT * FROM analytics.summary LIMIT 100"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "Clinical Data Management Reconciliation completed successfully."
consumes:
- type: http
namespace: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Orchestrates safety reporting from Snowflake and Teams.
naftiko: "0.5"
info:
label: "Clinical Trial Safety Reporting Workflow"
description: "Orchestrates safety reporting from Snowflake and Teams."
tags:
- clinical
- pharmacovigilance
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: clinical-ops
port: 8080
tools:
- name: clinical-safety-reporting
description: "Orchestrates safety reporting from Snowflake and Teams."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: query-data
type: call
call: "snowflake.run-query"
with:
statement: "SELECT * FROM analytics.summary LIMIT 100"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "Clinical Trial Safety Reporting Workflow completed successfully."
consumes:
- type: http
namespace: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves a clinical trial protocol or results document from SharePoint and generates a structured scientific summary using OpenAI, supporting Bayer's pharmaceutical research workflows.
naftiko: "0.5"
info:
label: "Clinical Trial Document Summarization"
description: "Retrieves a clinical trial protocol or results document from SharePoint and generates a structured scientific summary using OpenAI, supporting Bayer's pharmaceutical research workflows."
tags:
- ai
- pharma
- openai
- sharepoint
- document-processing
- r-and-d
capability:
exposes:
- type: mcp
namespace: rd-ai
port: 8080
tools:
- name: summarize-clinical-document
description: "Given a SharePoint site ID and document item ID containing a clinical trial protocol or results report, generate a structured scientific summary using OpenAI GPT-4o. Returns key endpoints, safety signals, and conclusions."
inputParameters:
- name: site_id
in: body
type: string
description: "The SharePoint site ID where the clinical document is stored."
- name: item_id
in: body
type: string
description: "The SharePoint drive item ID for the clinical document."
- name: document_type
in: body
type: string
description: "Document type: 'clinical protocol', 'interim results', 'final study report', or 'safety report'."
steps:
- name: get-document
type: call
call: "sharepoint.get-document-content"
with:
site_id: "{{site_id}}"
item_id: "{{item_id}}"
- name: generate-summary
type: call
call: "openai.create-chat-completion"
with:
model: "gpt-4o"
system_prompt: "You are a pharmaceutical research scientist. Summarize this {{document_type}} document highlighting primary endpoints, safety signals, patient population, dosing, and key conclusions."
user_message: "{{get-document.content}}"
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: document-content
path: "/sites/{{site_id}}/drive/items/{{item_id}}/content"
inputParameters:
- name: site_id
in: path
- name: item_id
in: path
operations:
- name: get-document-content
method: GET
- type: http
namespace: openai
baseUri: "https://api.openai.com/v1"
authentication:
type: bearer
token: "$secrets.openai_api_key"
resources:
- name: chat-completions
path: "/chat/completions"
operations:
- name: create-chat-completion
method: POST
Onboards sites via ServiceNow, Snowflake tracking, and Teams notification.
naftiko: "0.5"
info:
label: "Clinical Trial Site Onboarding"
description: "Onboards sites via ServiceNow, Snowflake tracking, and Teams notification."
tags:
- clinical
- servicenow
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: clinical-ops
port: 8080
tools:
- name: clinical-trial-site-onboarding
description: "Onboards sites via ServiceNow, Snowflake tracking, and Teams notification."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: create-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "Clinical Trial Site Onboarding action required"
category: "automated"
assigned_group: "Operations"
- name: query-data
type: call
call: "snowflake.run-query"
with:
statement: "SELECT * FROM analytics.summary LIMIT 100"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "Clinical Trial Site Onboarding completed successfully."
consumes:
- type: http
namespace: servicenow
baseUri: "https://bayer.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: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
When an Azure cost anomaly is detected, annotates the event in Datadog, opens a ServiceNow change request for FinOps review, and notifies the Cloud Cost Management team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Cloud Cost Anomaly Response"
description: "When an Azure cost anomaly is detected, annotates the event in Datadog, opens a ServiceNow change request for FinOps review, and notifies the Cloud Cost Management team via Microsoft Teams."
tags:
- finops
- cloud
- azure
- datadog
- servicenow
- cost-management
capability:
exposes:
- type: mcp
namespace: finops
port: 8080
tools:
- name: handle-cost-anomaly
description: "Given an Azure service name, overage in EUR, and subscription ID, create a Datadog event annotation, open a ServiceNow change request, and notify the FinOps Teams channel."
inputParameters:
- name: azure_service
in: body
type: string
description: "Azure service with the cost anomaly, e.g. 'Azure Machine Learning'."
- name: overage_eur
in: body
type: number
description: "Estimated cost overage in EUR."
- name: subscription_id
in: body
type: string
description: "The Azure subscription ID where the anomaly was detected."
steps:
- name: annotate-datadog
type: call
call: "datadog.create-event"
with:
title: "Azure Cost Anomaly: {{azure_service}}"
text: "Subscription {{subscription_id}} — overage: €{{overage_eur}}"
alert_type: "warning"
- name: open-change-request
type: call
call: "servicenow.create-change"
with:
short_description: "FinOps review: {{azure_service}} overage €{{overage_eur}}"
category: "finops"
justification: "Azure anomaly on subscription {{subscription_id}}"
- name: notify-finops
type: call
call: "msteams.post-channel-message"
with:
channel: "cloud-cost-management"
message: "Cost anomaly: {{azure_service}} | Overage: €{{overage_eur}} | SNOW: {{open-change-request.number}} | Datadog: {{annotate-datadog.url}}"
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
- type: http
namespace: servicenow
baseUri: "https://bayer.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: changes
path: "/table/change_request"
operations:
- name: create-change
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.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: post-channel-message
method: POST
Monitors cold chain from Snowflake, ServiceNow, and Teams.
naftiko: "0.5"
info:
label: "Supply Chain Cold Chain Monitoring"
description: "Monitors cold chain from Snowflake, ServiceNow, and Teams."
tags:
- supply-chain
- quality
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: cold-ops
port: 8080
tools:
- name: cold-chain-monitoring
description: "Monitors cold chain from Snowflake, ServiceNow, and Teams."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: query-data
type: call
call: "snowflake.run-query"
with:
statement: "SELECT * FROM analytics.summary LIMIT 100"
- name: create-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "Supply Chain Cold Chain Monitoring action required"
category: "automated"
assigned_group: "Operations"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "Supply Chain Cold Chain Monitoring completed successfully."
consumes:
- type: http
namespace: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://bayer.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Syncs compensation from SuccessFactors to Snowflake, notifying via Teams.
naftiko: "0.5"
info:
label: "Workday Compensation Planning Sync"
description: "Syncs compensation from SuccessFactors to Snowflake, notifying via Teams."
tags:
- hr
- compensation
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: compensation-ops
port: 8080
tools:
- name: compensation-planning-sync
description: "Syncs compensation from SuccessFactors to Snowflake, notifying via Teams."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: query-data
type: call
call: "snowflake.run-query"
with:
statement: "SELECT * FROM analytics.summary LIMIT 100"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "Workday Compensation Planning Sync completed successfully."
consumes:
- type: http
namespace: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves Confluence page.
naftiko: "0.5"
info:
label: "Confluence Page Lookup"
description: "Retrieves Confluence page."
tags:
- knowledge-management
- confluence
capability:
exposes:
- type: mcp
namespace: km-docs
port: 8080
tools:
- name: get-page
description: "Look up page."
inputParameters:
- name: page_id
in: body
type: string
description: "Page ID."
call: "confluence.get-page"
with:
page_id: "{{page_id}}"
outputParameters:
- name: title
type: string
mapping: "$.title"
consumes:
- type: http
namespace: confluence
baseUri: "https://bayer.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content/{{page_id}}"
inputParameters:
- name: page_id
in: path
operations:
- name: get-page
method: GET
When a critical Datadog alert fires for a Bayer platform, creates a ServiceNow P1 incident, pages the on-call engineer via PagerDuty, and opens a war-room notification in Microsoft Teams.
naftiko: "0.5"
info:
label: "Critical IT Incident Response Workflow"
description: "When a critical Datadog alert fires for a Bayer platform, creates a ServiceNow P1 incident, pages the on-call engineer via PagerDuty, and opens a war-room notification in Microsoft Teams."
tags:
- itsm
- incident-response
- datadog
- servicenow
- pagerduty
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: incident-ops
port: 8080
tools:
- name: handle-critical-incident
description: "Given a Datadog monitor ID, severity, and affected service, create a ServiceNow P1 incident, page PagerDuty on-call, and post a war-room alert to Teams."
inputParameters:
- name: monitor_id
in: body
type: string
description: "The Datadog monitor ID that triggered the critical alert."
- name: affected_service
in: body
type: string
description: "The affected service or platform name, e.g. 'SAP ERP Production', 'Clinical Data Portal'."
- name: alert_message
in: body
type: string
description: "The Datadog alert message describing the failure condition."
steps:
- name: create-p1-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "P1: {{affected_service}} — {{alert_message}}"
urgency: "1"
impact: "1"
category: "infrastructure"
- name: page-oncall
type: call
call: "pagerduty.create-incident"
with:
title: "CRITICAL: {{affected_service}} — {{alert_message}}"
service_id: "$secrets.pagerduty_service_id"
severity: "critical"
body: "Monitor: {{monitor_id}} | SNOW: {{create-p1-incident.number}}"
- name: open-war-room
type: call
call: "msteams.post-channel-message"
with:
channel: "incident-war-room"
message: "P1 INCIDENT: {{affected_service}} | {{alert_message}} | SNOW: {{create-p1-incident.number}} | PD: {{page-oncall.id}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://bayer.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: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.pagerduty_api_key"
placement: header
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Refreshes dashboards from Snowflake, Power BI, and Teams.
naftiko: "0.5"
info:
label: "Power BI Crop Science Analytics Refresh"
description: "Refreshes dashboards from Snowflake, Power BI, and Teams."
tags:
- agriculture
- analytics
- snowflake
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: crop-ops
port: 8080
tools:
- name: crop-science-analytics-refresh
description: "Refreshes dashboards from Snowflake, Power BI, and Teams."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: query-data
type: call
call: "snowflake.run-query"
with:
statement: "SELECT * FROM analytics.summary LIMIT 100"
- name: refresh-dashboard
type: call
call: "powerbi.trigger-refresh"
with:
dataset_id: "$secrets.dashboard_dataset_id"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "Power BI Crop Science Analytics Refresh completed successfully."
consumes:
- type: http
namespace: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-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/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: trigger-refresh
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Integrates field trial data by loading to Snowflake, checking quality, and notifying via Teams.
naftiko: "0.5"
info:
label: "Crop Science Field Trial Data Integration"
description: "Integrates field trial data by loading to Snowflake, checking quality, and notifying via Teams."
tags:
- agriculture
- research
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: crop-ops
port: 8080
tools:
- name: crop-science-field-trial-integration
description: "Integrates field trial data by loading to Snowflake, checking quality, and notifying via Teams."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: query-data
type: call
call: "snowflake.run-query"
with:
statement: "SELECT * FROM analytics.summary LIMIT 100"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "Crop Science Field Trial Data Integration completed successfully."
consumes:
- type: http
namespace: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Tracks registrations from Snowflake, SharePoint, and Teams.
naftiko: "0.5"
info:
label: "Crop Science Product Registration Tracker"
description: "Tracks registrations from Snowflake, SharePoint, and Teams."
tags:
- agriculture
- regulatory
- snowflake
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: crop-ops
port: 8080
tools:
- name: crop-science-registration
description: "Tracks registrations from Snowflake, SharePoint, and Teams."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: query-data
type: call
call: "snowflake.run-query"
with:
statement: "SELECT * FROM analytics.summary LIMIT 100"
- name: get-documents
type: call
call: "sharepoint.list-items"
with:
site_id: "$secrets.default_site_id"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "Crop Science Product Registration Tracker completed successfully."
consumes:
- type: http
namespace: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: drives
path: "/sites/{{site_id}}/drives"
inputParameters:
- name: site_id
in: path
operations:
- name: list-items
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Assembles dossiers from SharePoint, Snowflake, and Teams.
naftiko: "0.5"
info:
label: "Crop Science Regulatory Dossier Assembly"
description: "Assembles dossiers from SharePoint, Snowflake, and Teams."
tags:
- agriculture
- regulatory
- sharepoint
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: crop-ops
port: 8080
tools:
- name: crop-science-regulatory-dossier
description: "Assembles dossiers from SharePoint, Snowflake, and Teams."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: get-documents
type: call
call: "sharepoint.list-items"
with:
site_id: "$secrets.default_site_id"
- name: query-data
type: call
call: "snowflake.run-query"
with:
statement: "SELECT * FROM analytics.summary LIMIT 100"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "Crop Science Regulatory Dossier Assembly completed successfully."
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: drives
path: "/sites/{{site_id}}/drives"
inputParameters:
- name: site_id
in: path
operations:
- name: list-items
method: GET
- type: http
namespace: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Monitors SLAs from Snowflake, creating ServiceNow tickets and Teams alerts.
naftiko: "0.5"
info:
label: "Data Pipeline SLA Monitor and Escalator"
description: "Monitors SLAs from Snowflake, creating ServiceNow tickets and Teams alerts."
tags:
- data-engineering
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: data-ops
port: 8080
tools:
- name: data-pipeline-sla-monitor
description: "Monitors SLAs from Snowflake, creating ServiceNow tickets and Teams alerts."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: query-data
type: call
call: "snowflake.run-query"
with:
statement: "SELECT * FROM analytics.summary LIMIT 100"
- name: create-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "Data Pipeline SLA Monitor and Escalator action required"
category: "automated"
assigned_group: "Operations"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "Data Pipeline SLA Monitor and Escalator completed successfully."
consumes:
- type: http
namespace: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://bayer.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Checks platform health from Datadog.
naftiko: "0.5"
info:
label: "Datadog Platform Health Check"
description: "Checks platform health from Datadog."
tags:
- observability
- datadog
capability:
exposes:
- type: mcp
namespace: observability-platform
port: 8080
tools:
- name: check-health
description: "Check health."
inputParameters:
- name: env
in: body
type: string
description: "Environment."
call: "datadog.get-monitor-status"
with:
env: "{{env}}"
outputParameters:
- name: status
type: string
mapping: "$.overall_state"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
resources:
- name: monitors
path: "/monitor"
operations:
- name: get-monitor-status
method: GET
Queries Datadog for SLO compliance metrics across Bayer's production platforms and posts a daily health digest to the Operations Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Datadog Platform SLO Monitoring Digest"
description: "Queries Datadog for SLO compliance metrics across Bayer's production platforms and posts a daily health digest to the Operations Microsoft Teams channel."
tags:
- observability
- monitoring
- datadog
- slo
- microsoft-teams
- reporting
capability:
exposes:
- type: mcp
namespace: platform-observability
port: 8080
tools:
- name: digest-platform-slos
description: "Query Datadog SLOs tagged for a target environment and time window, then post a structured daily health report to the Operations Teams channel."
inputParameters:
- name: environment
in: body
type: string
description: "Target environment: 'production', 'staging', or 'dr'."
- name: time_window_hours
in: body
type: integer
description: "Look-back window in hours. Typically 24."
steps:
- name: get-slos
type: call
call: "datadog.list-slos"
with:
tags: "env:{{environment}}"
limit: "50"
- name: post-digest
type: call
call: "msteams.post-channel-message"
with:
channel: "platform-operations"
message: "SLO Report ({{environment}}, last {{time_window_hours}}h): {{get-slos.passing}} passing, {{get-slos.failing}} failing. Compliance: {{get-slos.compliance_pct}}%"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: slos
path: "/slo"
operations:
- name: list-slos
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Creates incidents from Datadog SLO breaches and notifies via Teams.
naftiko: "0.5"
info:
label: "Datadog SLO Breach to ServiceNow"
description: "Creates incidents from Datadog SLO breaches and notifies via Teams."
tags:
- observability
- datadog
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: datadog-ops
port: 8080
tools:
- name: datadog-slo-breach-servicenow
description: "Creates incidents from Datadog SLO breaches and notifies via Teams."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: check-monitors
type: call
call: "datadog.get-monitors"
with:
tags: "service:{{service_name}}"
- name: create-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "Datadog SLO Breach to ServiceNow action required"
category: "automated"
assigned_group: "Operations"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "Datadog SLO Breach to ServiceNow completed successfully."
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
resources:
- name: monitors
path: "/monitor"
operations:
- name: get-monitors
method: GET
- type: http
namespace: servicenow
baseUri: "https://bayer.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Processes surveys from Snowflake and posts to Teams.
naftiko: "0.5"
info:
label: "Employee Engagement Survey Processor"
description: "Processes surveys from Snowflake and posts to Teams."
tags:
- hr
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: employee-ops
port: 8080
tools:
- name: employee-engagement-survey
description: "Processes surveys from Snowflake and posts to Teams."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: query-data
type: call
call: "snowflake.run-query"
with:
statement: "SELECT * FROM analytics.summary LIMIT 100"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "Employee Engagement Survey Processor completed successfully."
consumes:
- type: http
namespace: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
When an employee termination is processed in SAP SuccessFactors, disables their Microsoft 365 account, revokes Okta sessions, and opens a ServiceNow offboarding ticket for equipment recovery.
naftiko: "0.5"
info:
label: "Employee Offboarding and Access Revocation"
description: "When an employee termination is processed in SAP SuccessFactors, disables their Microsoft 365 account, revokes Okta sessions, and opens a ServiceNow offboarding ticket for equipment recovery."
tags:
- hr
- offboarding
- sap-successfactors
- okta
- servicenow
- microsoft-graph
capability:
exposes:
- type: mcp
namespace: hr-offboarding
port: 8080
tools:
- name: trigger-employee-offboarding
description: "Given a SuccessFactors employee ID and termination date, disable their Microsoft 365 account, revoke all Okta sessions, and create a ServiceNow offboarding checklist ticket."
inputParameters:
- name: employee_id
in: body
type: string
description: "The SAP SuccessFactors employee ID for the departing employee."
- name: termination_date
in: body
type: string
description: "The employee's last day in ISO 8601 format (YYYY-MM-DD)."
steps:
- name: get-employee
type: call
call: "successfactors.get-employee"
with:
employee_id: "{{employee_id}}"
- name: disable-m365
type: call
call: "msgraph.disable-user"
with:
user_id: "{{get-employee.work_email}}"
- name: revoke-okta
type: call
call: "okta.revoke-user-sessions"
with:
user_login: "{{get-employee.work_email}}"
- name: create-offboarding-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "Offboarding: {{get-employee.full_name}} — last day {{termination_date}}"
category: "hr_offboarding"
assignment_group: "IT_Asset_Recovery"
consumes:
- type: http
namespace: successfactors
baseUri: "https://api4.successfactors.com/odata/v2"
authentication:
type: bearer
token: "$secrets.successfactors_token"
resources:
- name: employees
path: "/PerPerson({{employee_id}})"
inputParameters:
- name: employee_id
in: path
operations:
- name: get-employee
method: GET
- type: http
namespace: msgraph
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: users
path: "/users/{{user_id}}"
inputParameters:
- name: user_id
in: path
operations:
- name: disable-user
method: PATCH
- type: http
namespace: okta
baseUri: "https://bayer.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: user-sessions
path: "/users/{{user_login}}/sessions"
inputParameters:
- name: user_login
in: path
operations:
- name: revoke-user-sessions
method: DELETE
- type: http
namespace: servicenow
baseUri: "https://bayer.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
Deprovisions employees across Okta, ServiceNow, and Snowflake.
naftiko: "0.5"
info:
label: "Employee Offboarding Access Deprovisioning"
description: "Deprovisions employees across Okta, ServiceNow, and Snowflake."
tags:
- hr
- offboarding
- okta
- servicenow
- snowflake
capability:
exposes:
- type: mcp
namespace: employee-ops
port: 8080
tools:
- name: employee-offboarding-deprovisioning
description: "Deprovisions employees across Okta, ServiceNow, and Snowflake."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: check-identity
type: call
call: "okta.get-users"
with:
filter: "status eq ACTIVE"
- name: create-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "Employee Offboarding Access Deprovisioning action required"
category: "automated"
assigned_group: "Operations"
- name: query-data
type: call
call: "snowflake.run-query"
with:
statement: "SELECT * FROM analytics.summary LIMIT 100"
consumes:
- type: http
namespace: okta
baseUri: "https://bayer.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_token"
resources:
- name: users
path: "/users"
operations:
- name: get-users
method: GET
- type: http
namespace: servicenow
baseUri: "https://bayer.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: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
Provisions new hires across Okta, ServiceNow, and Teams.
naftiko: "0.5"
info:
label: "Employee Onboarding Cross-System Provisioning"
description: "Provisions new hires across Okta, ServiceNow, and Teams."
tags:
- hr
- onboarding
- okta
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: employee-ops
port: 8080
tools:
- name: employee-onboarding-provisioning
description: "Provisions new hires across Okta, ServiceNow, and Teams."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: check-identity
type: call
call: "okta.get-users"
with:
filter: "status eq ACTIVE"
- name: create-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "Employee Onboarding Cross-System Provisioning action required"
category: "automated"
assigned_group: "Operations"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "Employee Onboarding Cross-System Provisioning completed successfully."
consumes:
- type: http
namespace: okta
baseUri: "https://bayer.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_token"
resources:
- name: users
path: "/users"
operations:
- name: get-users
method: GET
- type: http
namespace: servicenow
baseUri: "https://bayer.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Syncs master data across SAP, Snowflake, Salesforce, and Teams.
naftiko: "0.5"
info:
label: "Enterprise Master Data Sync Orchestrator"
description: "Syncs master data across SAP, Snowflake, Salesforce, and Teams."
tags:
- data-governance
- sap
- snowflake
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: enterprise-ops
port: 8080
tools:
- name: enterprise-master-data-sync
description: "Syncs master data across SAP, Snowflake, Salesforce, and Teams."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: get-sap-data
type: call
call: "sap.get-partner"
with:
filter: "BusinessPartnerCategory eq 1"
- name: query-data
type: call
call: "snowflake.run-query"
with:
statement: "SELECT * FROM analytics.summary LIMIT 100"
- name: get-sf-data
type: call
call: "salesforce.query"
with:
q: "SELECT Id, Name FROM Account LIMIT 10"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "Enterprise Master Data Sync Orchestrator completed successfully."
consumes:
- type: http
namespace: sap
baseUri: "https://bayer-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: partners
path: "/A_BusinessPartner"
operations:
- name: get-partner
method: GET
- type: http
namespace: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: salesforce
baseUri: "https://login.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: sobjects
path: "/sobjects/Account"
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: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Orchestrates close from SAP, Snowflake, and Teams.
naftiko: "0.5"
info:
label: "Financial Period Close Checklist"
description: "Orchestrates close from SAP, Snowflake, and Teams."
tags:
- finance
- sap
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: financial-ops
port: 8080
tools:
- name: financial-period-close-checklist
description: "Orchestrates close from SAP, Snowflake, and Teams."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: get-sap-data
type: call
call: "sap.get-partner"
with:
filter: "BusinessPartnerCategory eq 1"
- name: query-data
type: call
call: "snowflake.run-query"
with:
statement: "SELECT * FROM analytics.summary LIMIT 100"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "Financial Period Close Checklist completed successfully."
consumes:
- type: http
namespace: sap
baseUri: "https://bayer-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: partners
path: "/A_BusinessPartner"
operations:
- name: get-partner
method: GET
- type: http
namespace: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
When a GitHub Actions deployment to a Bayer production environment fails, creates a Jira incident ticket and notifies the DevOps engineering team via Microsoft Teams.
naftiko: "0.5"
info:
label: "GitHub Deployment Pipeline Failure Handler"
description: "When a GitHub Actions deployment to a Bayer production environment fails, creates a Jira incident ticket and notifies the DevOps engineering team via Microsoft Teams."
tags:
- devops
- ci-cd
- github
- jira
- microsoft-teams
- deployment
capability:
exposes:
- type: mcp
namespace: devops-cicd
port: 8080
tools:
- name: handle-deployment-failure
description: "Given a failed GitHub Actions workflow run ID and repository, fetch run details, open a Jira incident, and post a failure notification to the DevOps Teams channel."
inputParameters:
- name: repo_full_name
in: body
type: string
description: "The GitHub repository full name, e.g. 'bayer-group/crop-science-api'."
- name: run_id
in: body
type: integer
description: "The failed GitHub Actions workflow run ID."
- name: branch
in: body
type: string
description: "The target branch, typically 'main' or 'release'."
steps:
- name: get-run
type: call
call: "github.get-workflow-run"
with:
repo: "{{repo_full_name}}"
run_id: "{{run_id}}"
- name: create-jira-incident
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Incident"
summary: "Deployment failure: {{repo_full_name}} on {{branch}}"
description: "Run: {{run_id}} | Conclusion: {{get-run.conclusion}} | URL: {{get-run.html_url}}"
- name: alert-devops
type: call
call: "msteams.post-channel-message"
with:
channel: "devops-alerts"
message: "Deployment FAILED: {{repo_full_name}} | Branch: {{branch}} | Jira: {{create-jira-incident.key}} | Run: {{get-run.html_url}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: workflow-runs
path: "/repos/{{repo}}/actions/runs/{{run_id}}"
inputParameters:
- name: repo
in: path
- name: run_id
in: path
operations:
- name: get-workflow-run
method: GET
- type: http
namespace: jira
baseUri: "https://bayer.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Creates Jira tickets from GitHub failures, alerting via Teams.
naftiko: "0.5"
info:
label: "GitHub Pipeline Failure to Jira"
description: "Creates Jira tickets from GitHub failures, alerting via Teams."
tags:
- devops
- github
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: github-ops
port: 8080
tools:
- name: github-pipeline-failure-jira
description: "Creates Jira tickets from GitHub failures, alerting via Teams."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: get-repo-info
type: call
call: "github.get-repo"
with:
repo: "{{repo_name}}"
- name: create-task
type: call
call: "jira.create-issue"
with:
project: "OPS"
summary: "GitHub Pipeline Failure to Jira follow-up"
issue_type: "Task"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "GitHub Pipeline Failure to Jira completed successfully."
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: repos
path: "/repos/{{repo}}"
inputParameters:
- name: repo
in: path
operations:
- name: get-repo
method: GET
- type: http
namespace: jira
baseUri: "https://bayer.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves GitHub repo metadata.
naftiko: "0.5"
info:
label: "GitHub Repo Metadata Lookup"
description: "Retrieves GitHub repo metadata."
tags:
- devops
- github
capability:
exposes:
- type: mcp
namespace: devops-repos
port: 8080
tools:
- name: get-metadata
description: "Look up repo."
inputParameters:
- name: repo
in: body
type: string
description: "Repo (org/repo)."
call: "github.get-repo"
with:
repo: "{{repo}}"
outputParameters:
- name: language
type: string
mapping: "$.language"
- name: default_branch
type: string
mapping: "$.default_branch"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: repos
path: "/repos/{{repo}}"
inputParameters:
- name: repo
in: path
operations:
- name: get-repo
method: GET
Orchestrates scanning from GitHub, Jira, and Teams.
naftiko: "0.5"
info:
label: "GitHub Security Scanning Orchestrator"
description: "Orchestrates scanning from GitHub, Jira, and Teams."
tags:
- security
- devops
- github
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: github-ops
port: 8080
tools:
- name: github-security-scanning
description: "Orchestrates scanning from GitHub, Jira, and Teams."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: get-repo-info
type: call
call: "github.get-repo"
with:
repo: "{{repo_name}}"
- name: create-task
type: call
call: "jira.create-issue"
with:
project: "OPS"
summary: "GitHub Security Scanning Orchestrator follow-up"
issue_type: "Task"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "GitHub Security Scanning Orchestrator completed successfully."
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: repos
path: "/repos/{{repo}}"
inputParameters:
- name: repo
in: path
operations:
- name: get-repo
method: GET
- type: http
namespace: jira
baseUri: "https://bayer.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Submits changes via ServiceNow, Snowflake impact, and Teams.
naftiko: "0.5"
info:
label: "IT Change Advisory Board Submission"
description: "Submits changes via ServiceNow, Snowflake impact, and Teams."
tags:
- it-service-management
- servicenow
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: it-ops
port: 8080
tools:
- name: it-change-advisory-board
description: "Submits changes via ServiceNow, Snowflake impact, and Teams."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: create-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "IT Change Advisory Board Submission action required"
category: "automated"
assigned_group: "Operations"
- name: query-data
type: call
call: "snowflake.run-query"
with:
statement: "SELECT * FROM analytics.summary LIMIT 100"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "IT Change Advisory Board Submission completed successfully."
consumes:
- type: http
namespace: servicenow
baseUri: "https://bayer.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: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Checks DR from ServiceNow, Snowflake, and Teams.
naftiko: "0.5"
info:
label: "IT Disaster Recovery Readiness Check"
description: "Checks DR from ServiceNow, Snowflake, and Teams."
tags:
- infrastructure
- servicenow
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: it-ops
port: 8080
tools:
- name: it-disaster-recovery
description: "Checks DR from ServiceNow, Snowflake, and Teams."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: create-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "IT Disaster Recovery Readiness Check action required"
category: "automated"
assigned_group: "Operations"
- name: query-data
type: call
call: "snowflake.run-query"
with:
statement: "SELECT * FROM analytics.summary LIMIT 100"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "IT Disaster Recovery Readiness Check completed successfully."
consumes:
- type: http
namespace: servicenow
baseUri: "https://bayer.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: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Triages vulnerabilities via ServiceNow and Teams alerts.
naftiko: "0.5"
info:
label: "IT Security Vulnerability Triage"
description: "Triages vulnerabilities via ServiceNow and Teams alerts."
tags:
- security
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: it-ops
port: 8080
tools:
- name: it-security-vulnerability-triage
description: "Triages vulnerabilities via ServiceNow and Teams alerts."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: create-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "IT Security Vulnerability Triage action required"
category: "automated"
assigned_group: "Operations"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "IT Security Vulnerability Triage completed successfully."
consumes:
- type: http
namespace: servicenow
baseUri: "https://bayer.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Facilitates planning from Jira and Snowflake, posting to Teams.
naftiko: "0.5"
info:
label: "Jira Sprint Planning Facilitator"
description: "Facilitates planning from Jira and Snowflake, posting to Teams."
tags:
- project-management
- jira
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: jira-ops
port: 8080
tools:
- name: jira-sprint-planning
description: "Facilitates planning from Jira and Snowflake, posting to Teams."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: create-task
type: call
call: "jira.create-issue"
with:
project: "OPS"
summary: "Jira Sprint Planning Facilitator follow-up"
issue_type: "Task"
- name: query-data
type: call
call: "snowflake.run-query"
with:
statement: "SELECT * FROM analytics.summary LIMIT 100"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "Jira Sprint Planning Facilitator completed successfully."
consumes:
- type: http
namespace: jira
baseUri: "https://bayer.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: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Checks Jira sprint status.
naftiko: "0.5"
info:
label: "Jira Board Sprint Status"
description: "Checks Jira sprint status."
tags:
- project-management
- jira
capability:
exposes:
- type: mcp
namespace: pm-sprint
port: 8080
tools:
- name: get-sprint
description: "Check sprint."
inputParameters:
- name: board_id
in: body
type: string
description: "Board ID."
call: "jira.get-active-sprint"
with:
board_id: "{{board_id}}"
outputParameters:
- name: name
type: string
mapping: "$.values[0].name"
- name: state
type: string
mapping: "$.values[0].state"
consumes:
- type: http
namespace: jira
baseUri: "https://bayer.atlassian.net/rest/agile/1.0"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: sprints
path: "/board/{{board_id}}/sprint"
inputParameters:
- name: board_id
in: path
operations:
- name: get-active-sprint
method: GET
Retrieves sprint data from Jira for a Bayer engineering team, calculates velocity metrics, and posts a sprint velocity summary to the Engineering Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Jira Sprint Velocity Reporting"
description: "Retrieves sprint data from Jira for a Bayer engineering team, calculates velocity metrics, and posts a sprint velocity summary to the Engineering Microsoft Teams channel."
tags:
- devops
- jira
- agile
- reporting
- microsoft-teams
- engineering
capability:
exposes:
- type: mcp
namespace: agile-reporting
port: 8080
tools:
- name: publish-sprint-velocity-report
description: "Given a Jira board ID and completed sprint ID, retrieve sprint issue data, compute velocity, and post a sprint performance summary to the Engineering Teams channel."
inputParameters:
- name: board_id
in: body
type: integer
description: "The Jira board ID for the engineering team."
- name: sprint_id
in: body
type: integer
description: "The completed sprint ID to report on."
steps:
- name: get-sprint
type: call
call: "jira.get-sprint"
with:
board_id: "{{board_id}}"
sprint_id: "{{sprint_id}}"
- name: get-sprint-issues
type: call
call: "jira.list-sprint-issues"
with:
sprint_id: "{{sprint_id}}"
- name: post-velocity-report
type: call
call: "msteams.post-channel-message"
with:
channel: "engineering-metrics"
message: "Sprint {{get-sprint.name}}: {{get-sprint-issues.completed_points}} story pts | {{get-sprint-issues.count}} issues closed | Velocity: {{get-sprint-issues.velocity}}"
consumes:
- type: http
namespace: jira
baseUri: "https://bayer.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: sprints
path: "/board/{{board_id}}/sprint/{{sprint_id}}"
inputParameters:
- name: board_id
in: path
- name: sprint_id
in: path
operations:
- name: get-sprint
method: GET
- name: sprint-issues
path: "/sprint/{{sprint_id}}/issue"
inputParameters:
- name: sprint_id
in: path
operations:
- name: list-sprint-issues
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Escalates overdue training via ServiceNow and Teams.
naftiko: "0.5"
info:
label: "Workday Learning Compliance Escalation"
description: "Escalates overdue training via ServiceNow and Teams."
tags:
- hr
- compliance
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: learning-ops
port: 8080
tools:
- name: learning-compliance-escalation
description: "Escalates overdue training via ServiceNow and Teams."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: create-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "Workday Learning Compliance Escalation action required"
category: "automated"
assigned_group: "Operations"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "Workday Learning Compliance Escalation completed successfully."
consumes:
- type: http
namespace: servicenow
baseUri: "https://bayer.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Pulls LinkedIn Talent Solutions job posting metrics and career page follower data to produce a weekly employer brand digest for the Talent Acquisition Teams channel at Bayer.
naftiko: "0.5"
info:
label: "LinkedIn Employer Brand and Talent Campaign Report"
description: "Pulls LinkedIn Talent Solutions job posting metrics and career page follower data to produce a weekly employer brand digest for the Talent Acquisition Teams channel at Bayer."
tags:
- hr
- recruiting
- linkedin
- microsoft-teams
- reporting
- employer-brand
capability:
exposes:
- type: mcp
namespace: talent-brand
port: 8080
tools:
- name: digest-linkedin-talent-metrics
description: "Given a LinkedIn organization URN and date range, fetch job posting performance and follower growth metrics, then post a weekly talent brand digest to the Talent Acquisition Teams channel."
inputParameters:
- name: org_urn
in: body
type: string
description: "The LinkedIn organization URN for Bayer."
- 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-linkedin-metrics
type: call
call: "linkedin.get-follower-stats"
with:
organizationalEntity: "{{org_urn}}"
- name: get-job-metrics
type: call
call: "linkedin.get-job-postings"
with:
organizationalEntity: "{{org_urn}}"
- name: post-digest
type: call
call: "msteams.post-channel-message"
with:
channel: "talent-acquisition"
message: "LinkedIn Talent Report ({{start_date}} to {{end_date}}): Followers {{get-linkedin-metrics.followerCount}}, Job views {{get-job-metrics.views}}, Applications {{get-job-metrics.applications}}"
consumes:
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: follower-stats
path: "/organizationalEntityFollowerStatistics"
operations:
- name: get-follower-stats
method: GET
- name: job-postings
path: "/jobPostings"
operations:
- name: get-job-postings
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Orchestrates campaigns from LinkedIn, Snowflake, and Teams.
naftiko: "0.5"
info:
label: "LinkedIn Employer Brand Campaign Orchestrator"
description: "Orchestrates campaigns from LinkedIn, Snowflake, and Teams."
tags:
- hr
- marketing
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: linkedin-ops
port: 8080
tools:
- name: linkedin-employer-brand
description: "Orchestrates campaigns from LinkedIn, Snowflake, and Teams."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: query-data
type: call
call: "snowflake.run-query"
with:
statement: "SELECT * FROM analytics.summary LIMIT 100"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "LinkedIn Employer Brand Campaign Orchestrator completed successfully."
consumes:
- type: http
namespace: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves LinkedIn page analytics.
naftiko: "0.5"
info:
label: "LinkedIn Company Page Analytics"
description: "Retrieves LinkedIn page analytics."
tags:
- marketing
- linkedin
capability:
exposes:
- type: mcp
namespace: marketing-social
port: 8080
tools:
- name: get-analytics
description: "Get analytics."
inputParameters:
- name: time_range
in: body
type: string
description: "Time range."
call: "linkedin.get-analytics"
with:
range: "{{time_range}}"
outputParameters:
- name: impressions
type: string
mapping: "$.impressions"
consumes:
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: analytics
path: "/organizationalEntityShareStatistics"
operations:
- name: get-analytics
method: GET
Generates analytics from Snowflake, Power BI, and Teams.
naftiko: "0.5"
info:
label: "Pharmaceutical Market Access Analytics"
description: "Generates analytics from Snowflake, Power BI, and Teams."
tags:
- commercial
- market-access
- snowflake
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: market-ops
port: 8080
tools:
- name: market-access-analytics
description: "Generates analytics from Snowflake, Power BI, and Teams."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: query-data
type: call
call: "snowflake.run-query"
with:
statement: "SELECT * FROM analytics.summary LIMIT 100"
- name: refresh-dashboard
type: call
call: "powerbi.trigger-refresh"
with:
dataset_id: "$secrets.dashboard_dataset_id"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "Pharmaceutical Market Access Analytics completed successfully."
consumes:
- type: http
namespace: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-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/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: trigger-refresh
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Checks Entra user status.
naftiko: "0.5"
info:
label: "Microsoft Entra User Check"
description: "Checks Entra user status."
tags:
- identity
- microsoft-entra
capability:
exposes:
- type: mcp
namespace: identity-status
port: 8080
tools:
- name: check-user
description: "Check user."
inputParameters:
- name: upn
in: body
type: string
description: "UPN."
call: "msgraph.get-user"
with:
upn: "{{upn}}"
outputParameters:
- name: enabled
type: boolean
mapping: "$.accountEnabled"
consumes:
- type: http
namespace: msgraph
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: users
path: "/users/{{upn}}"
inputParameters:
- name: upn
in: path
operations:
- name: get-user
method: GET
When a new hire is created in SAP SuccessFactors, provisions an Active Directory account via Microsoft Graph, opens a ServiceNow IT onboarding ticket, and sends a Microsoft Teams welcome message.
naftiko: "0.5"
info:
label: "New Employee Onboarding Orchestrator"
description: "When a new hire is created in SAP SuccessFactors, provisions an Active Directory account via Microsoft Graph, opens a ServiceNow IT onboarding ticket, and sends a Microsoft Teams welcome message."
tags:
- hr
- onboarding
- sap-successfactors
- servicenow
- microsoft-graph
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-onboarding
port: 8080
tools:
- name: trigger-employee-onboarding
description: "Given a SuccessFactors employee ID and start date, provision an Active Directory account via Microsoft Graph, open a ServiceNow IT onboarding ticket, and send a Teams welcome message."
inputParameters:
- name: employee_id
in: body
type: string
description: "The SAP SuccessFactors employee ID for the new hire."
- name: start_date
in: body
type: string
description: "The employee's start date in ISO 8601 format (YYYY-MM-DD)."
- name: division
in: body
type: string
description: "Bayer division the employee is joining: 'Pharmaceuticals', 'Consumer Health', or 'Crop Science'."
steps:
- name: get-employee
type: call
call: "successfactors.get-employee"
with:
employee_id: "{{employee_id}}"
- name: provision-ad
type: call
call: "msgraph.create-user"
with:
displayName: "{{get-employee.full_name}}"
userPrincipalName: "{{get-employee.work_email}}"
department: "{{division}}"
- name: create-it-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "IT Onboarding: {{get-employee.full_name}} — starts {{start_date}}"
category: "hr_onboarding"
assignment_group: "IT_Onboarding"
- name: send-welcome
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{get-employee.work_email}}"
message: "Welcome to Bayer, {{get-employee.first_name}}! Your IT setup ticket is {{create-it-ticket.number}}."
consumes:
- type: http
namespace: successfactors
baseUri: "https://api4.successfactors.com/odata/v2"
authentication:
type: bearer
token: "$secrets.successfactors_token"
resources:
- name: employees
path: "/PerPerson({{employee_id}})"
inputParameters:
- name: employee_id
in: path
operations:
- name: get-employee
method: GET
- type: http
namespace: msgraph
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: users
path: "/users"
operations:
- name: create-user
method: POST
- type: http
namespace: servicenow
baseUri: "https://bayer.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: mail
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Generates digests from Jira, Snowflake, and Teams.
naftiko: "0.5"
info:
label: "Cross-Functional OKR Tracking Digest"
description: "Generates digests from Jira, Snowflake, and Teams."
tags:
- project-management
- jira
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: okr-ops
port: 8080
tools:
- name: okr-tracking-digest
description: "Generates digests from Jira, Snowflake, and Teams."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: create-task
type: call
call: "jira.create-issue"
with:
project: "OPS"
summary: "Cross-Functional OKR Tracking Digest follow-up"
issue_type: "Task"
- name: query-data
type: call
call: "snowflake.run-query"
with:
statement: "SELECT * FROM analytics.summary LIMIT 100"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "Cross-Functional OKR Tracking Digest completed successfully."
consumes:
- type: http
namespace: jira
baseUri: "https://bayer.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: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves all Okta application assignments and group memberships for a user and posts a formatted access certification report to the Cybersecurity Microsoft Teams channel for quarterly review.
naftiko: "0.5"
info:
label: "Okta Identity Access Review"
description: "Retrieves all Okta application assignments and group memberships for a user and posts a formatted access certification report to the Cybersecurity Microsoft Teams channel for quarterly review."
tags:
- identity
- security
- okta
- microsoft-teams
- access-review
- compliance
capability:
exposes:
- type: mcp
namespace: access-review
port: 8080
tools:
- name: certify-user-access
description: "Given an Okta user login, retrieve all application assignments and group memberships, and post a structured access report to the Cybersecurity Teams channel for quarterly access certification."
inputParameters:
- name: user_login
in: body
type: string
description: "The Okta user login (email) to certify."
steps:
- name: get-user-apps
type: call
call: "okta.list-user-apps"
with:
user_login: "{{user_login}}"
- name: get-user-groups
type: call
call: "okta.list-user-groups"
with:
user_login: "{{user_login}}"
- name: post-cert-report
type: call
call: "msteams.post-channel-message"
with:
channel: "cybersecurity-access-certs"
message: "Access cert for {{user_login}}: {{get-user-apps.count}} apps | {{get-user-groups.count}} groups | Apps: {{get-user-apps.names}}"
consumes:
- type: http
namespace: okta
baseUri: "https://bayer.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: user-apps
path: "/users/{{user_login}}/appLinks"
inputParameters:
- name: user_login
in: path
operations:
- name: list-user-apps
method: GET
- name: user-groups
path: "/users/{{user_login}}/groups"
inputParameters:
- name: user_login
in: path
operations:
- name: list-user-groups
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Manages identity lifecycle across Okta, ServiceNow, and Snowflake.
naftiko: "0.5"
info:
label: "Okta Identity Lifecycle Orchestrator"
description: "Manages identity lifecycle across Okta, ServiceNow, and Snowflake."
tags:
- identity
- okta
- servicenow
- snowflake
capability:
exposes:
- type: mcp
namespace: okta-ops
port: 8080
tools:
- name: okta-identity-lifecycle
description: "Manages identity lifecycle across Okta, ServiceNow, and Snowflake."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: check-identity
type: call
call: "okta.get-users"
with:
filter: "status eq ACTIVE"
- name: create-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "Okta Identity Lifecycle Orchestrator action required"
category: "automated"
assigned_group: "Operations"
- name: query-data
type: call
call: "snowflake.run-query"
with:
statement: "SELECT * FROM analytics.summary LIMIT 100"
consumes:
- type: http
namespace: okta
baseUri: "https://bayer.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_token"
resources:
- name: users
path: "/users"
operations:
- name: get-users
method: GET
- type: http
namespace: servicenow
baseUri: "https://bayer.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: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
Retrieves Okta user profile.
naftiko: "0.5"
info:
label: "Okta User Profile Lookup"
description: "Retrieves Okta user profile."
tags:
- identity
- okta
capability:
exposes:
- type: mcp
namespace: identity-user
port: 8080
tools:
- name: get-user
description: "Look up Okta user."
inputParameters:
- name: email
in: body
type: string
description: "User email."
call: "okta.get-user"
with:
email: "{{email}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: name
type: string
mapping: "$.profile.displayName"
consumes:
- type: http
namespace: okta
baseUri: "https://bayer.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_token"
resources:
- name: users
path: "/users/{{email}}"
inputParameters:
- name: email
in: path
operations:
- name: get-user
method: GET
Scans compliance from GitHub, Snowflake, and Jira.
naftiko: "0.5"
info:
label: "GitHub Open Source Compliance Scanner"
description: "Scans compliance from GitHub, Snowflake, and Jira."
tags:
- security
- compliance
- github
- snowflake
- jira
capability:
exposes:
- type: mcp
namespace: open-ops
port: 8080
tools:
- name: open-source-compliance
description: "Scans compliance from GitHub, Snowflake, and Jira."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: get-repo-info
type: call
call: "github.get-repo"
with:
repo: "{{repo_name}}"
- name: query-data
type: call
call: "snowflake.run-query"
with:
statement: "SELECT * FROM analytics.summary LIMIT 100"
- name: create-task
type: call
call: "jira.create-issue"
with:
project: "OPS"
summary: "GitHub Open Source Compliance Scanner follow-up"
issue_type: "Task"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: repos
path: "/repos/{{repo}}"
inputParameters:
- name: repo
in: path
operations:
- name: get-repo
method: GET
- type: http
namespace: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira
baseUri: "https://bayer.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 PagerDuty incident.
naftiko: "0.5"
info:
label: "PagerDuty Incident Status"
description: "Checks PagerDuty incident."
tags:
- observability
- pagerduty
capability:
exposes:
- type: mcp
namespace: ops-incident
port: 8080
tools:
- name: check-incident
description: "Check PD incident."
inputParameters:
- name: incident_id
in: body
type: string
description: "Incident ID."
call: "pagerduty.get-incident"
with:
id: "{{incident_id}}"
outputParameters:
- name: status
type: string
mapping: "$.incident.status"
- name: urgency
type: string
mapping: "$.incident.urgency"
consumes:
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: incidents
path: "/incidents/{{incident_id}}"
inputParameters:
- name: incident_id
in: path
operations:
- name: get-incident
method: GET
Retrieves the current on-call engineer from a PagerDuty escalation policy to support incident routing and stakeholder notification.
naftiko: "0.5"
info:
label: "PagerDuty On-Call Schedule Lookup"
description: "Retrieves the current on-call engineer from a PagerDuty escalation policy to support incident routing and stakeholder notification."
tags:
- itsm
- pagerduty
- on-call
- incident-response
- lookup
capability:
exposes:
- type: mcp
namespace: oncall-lookup
port: 8080
tools:
- name: get-current-oncall
description: "Given a PagerDuty escalation policy ID, return the current on-call engineer's name and email. Use when routing production incidents to the correct responder."
inputParameters:
- name: escalation_policy_id
in: body
type: string
description: "The PagerDuty escalation policy ID for the relevant system team."
call: "pagerduty.get-oncall"
with:
escalation_policy_id: "{{escalation_policy_id}}"
outputParameters:
- name: oncall_name
type: string
mapping: "$.oncalls[0].user.summary"
- name: oncall_email
type: string
mapping: "$.oncalls[0].user.email"
consumes:
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.pagerduty_api_key"
placement: header
resources:
- name: oncalls
path: "/oncalls"
operations:
- name: get-oncall
method: GET
Bridges PagerDuty to ServiceNow and notifies via Teams.
naftiko: "0.5"
info:
label: "PagerDuty to ServiceNow Incident Bridge"
description: "Bridges PagerDuty to ServiceNow and notifies via Teams."
tags:
- observability
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pagerduty-ops
port: 8080
tools:
- name: pagerduty-servicenow-bridge
description: "Bridges PagerDuty to ServiceNow and notifies via Teams."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: create-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "PagerDuty to ServiceNow Incident Bridge action required"
category: "automated"
assigned_group: "Operations"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "PagerDuty to ServiceNow Incident Bridge completed successfully."
consumes:
- type: http
namespace: servicenow
baseUri: "https://bayer.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Generates digests from Salesforce, Snowflake, and Teams.
naftiko: "0.5"
info:
label: "Salesforce Pharma Pipeline Digest"
description: "Generates digests from Salesforce, Snowflake, and Teams."
tags:
- commercial
- salesforce
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pharma-ops
port: 8080
tools:
- name: pharma-pipeline-digest
description: "Generates digests from Salesforce, Snowflake, and Teams."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: get-sf-data
type: call
call: "salesforce.query"
with:
q: "SELECT Id, Name FROM Account LIMIT 10"
- name: query-data
type: call
call: "snowflake.run-query"
with:
statement: "SELECT * FROM analytics.summary LIMIT 100"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "Salesforce Pharma Pipeline Digest completed successfully."
consumes:
- type: http
namespace: salesforce
baseUri: "https://login.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: sobjects
path: "/sobjects/Account"
operations:
- name: query
method: GET
- type: http
namespace: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Orchestrates batch release from SAP QM, verifying compliance, and notifying quality via Teams.
naftiko: "0.5"
info:
label: "Pharmaceutical Batch Release Workflow"
description: "Orchestrates batch release from SAP QM, verifying compliance, and notifying quality via Teams."
tags:
- manufacturing
- quality
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pharmaceutical-ops
port: 8080
tools:
- name: pharmaceutical-batch-release
description: "Orchestrates batch release from SAP QM, verifying compliance, and notifying quality via Teams."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: get-sap-data
type: call
call: "sap.get-partner"
with:
filter: "BusinessPartnerCategory eq 1"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "Pharmaceutical Batch Release Workflow completed successfully."
consumes:
- type: http
namespace: sap
baseUri: "https://bayer-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: partners
path: "/A_BusinessPartner"
operations:
- name: get-partner
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Monitors stability from Snowflake and alerts quality via Teams.
naftiko: "0.5"
info:
label: "Pharmaceutical Stability Study Monitor"
description: "Monitors stability from Snowflake and alerts quality via Teams."
tags:
- quality
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pharmaceutical-ops
port: 8080
tools:
- name: pharmaceutical-stability-monitor
description: "Monitors stability from Snowflake and alerts quality via Teams."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: query-data
type: call
call: "snowflake.run-query"
with:
statement: "SELECT * FROM analytics.summary LIMIT 100"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "Pharmaceutical Stability Study Monitor completed successfully."
consumes:
- type: http
namespace: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Handles PV cases in Snowflake and notifies via Teams.
naftiko: "0.5"
info:
label: "Pharmaceutical Pharmacovigilance Case Handler"
description: "Handles PV cases in Snowflake and notifies via Teams."
tags:
- pharmacovigilance
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pharmacovigilance-ops
port: 8080
tools:
- name: pharmacovigilance-case-handler
description: "Handles PV cases in Snowflake and notifies via Teams."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: query-data
type: call
call: "snowflake.run-query"
with:
statement: "SELECT * FROM analytics.summary LIMIT 100"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "Pharmaceutical Pharmacovigilance Case Handler completed successfully."
consumes:
- type: http
namespace: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Checks Power BI refresh status.
naftiko: "0.5"
info:
label: "Power BI Dashboard Refresh Check"
description: "Checks Power BI refresh status."
tags:
- analytics
- power-bi
capability:
exposes:
- type: mcp
namespace: analytics-refresh
port: 8080
tools:
- name: check-refresh
description: "Check refresh."
inputParameters:
- name: dataset_id
in: body
type: string
description: "Dataset ID."
call: "powerbi.get-refresh-history"
with:
dataset_id: "{{dataset_id}}"
outputParameters:
- name: status
type: string
mapping: "$.value[0].status"
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: refresh
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: get-refresh-history
method: GET
Triggers a Power BI dataset refresh for Bayer's R&D and pharma research dashboards and notifies the Research Analytics team via Microsoft Teams on completion.
naftiko: "0.5"
info:
label: "Power BI Research Dashboard Refresh"
description: "Triggers a Power BI dataset refresh for Bayer's R&D and pharma research dashboards and notifies the Research Analytics team via Microsoft Teams on completion."
tags:
- analytics
- power-bi
- microsoft-teams
- reporting
- r-and-d
capability:
exposes:
- type: mcp
namespace: research-bi
port: 8080
tools:
- name: trigger-research-dashboard-refresh
description: "Given a Power BI workspace ID and dataset ID, trigger a dataset refresh and notify the Research Analytics Teams channel with the status."
inputParameters:
- name: workspace_id
in: body
type: string
description: "The Power BI workspace ID containing the research dataset."
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID to refresh."
steps:
- name: trigger-refresh
type: call
call: "powerbi.trigger-refresh"
with:
workspace_id: "{{workspace_id}}"
dataset_id: "{{dataset_id}}"
- name: notify-research
type: call
call: "msteams.post-channel-message"
with:
channel: "research-analytics"
message: "Power BI research dataset {{dataset_id}} refresh triggered. Status: {{trigger-refresh.status}}"
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: dataset-refreshes
path: "/groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: workspace_id
in: path
- name: dataset_id
in: path
operations:
- name: trigger-refresh
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Loads precision farming data to Snowflake and notifies via Teams.
naftiko: "0.5"
info:
label: "Agricultural Precision Farming Data Loader"
description: "Loads precision farming data to Snowflake and notifies via Teams."
tags:
- agriculture
- data-engineering
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: precision-ops
port: 8080
tools:
- name: precision-farming-data-loader
description: "Loads precision farming data to Snowflake and notifies via Teams."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: query-data
type: call
call: "snowflake.run-query"
with:
statement: "SELECT * FROM analytics.summary LIMIT 100"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "Agricultural Precision Farming Data Loader completed successfully."
consumes:
- type: http
namespace: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Monitors changes from Snowflake, Jira tracking, and Teams.
naftiko: "0.5"
info:
label: "Compliance Regulatory Change Monitor"
description: "Monitors changes from Snowflake, Jira tracking, and Teams."
tags:
- compliance
- regulatory
- snowflake
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: regulatory-ops
port: 8080
tools:
- name: regulatory-change-monitor
description: "Monitors changes from Snowflake, Jira tracking, and Teams."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: query-data
type: call
call: "snowflake.run-query"
with:
statement: "SELECT * FROM analytics.summary LIMIT 100"
- name: create-task
type: call
call: "jira.create-issue"
with:
project: "OPS"
summary: "Compliance Regulatory Change Monitor follow-up"
issue_type: "Task"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "Compliance Regulatory Change Monitor completed successfully."
consumes:
- type: http
namespace: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira
baseUri: "https://bayer.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Coordinates submissions via SharePoint, Snowflake, and Teams.
naftiko: "0.5"
info:
label: "Regulatory Submission Coordination"
description: "Coordinates submissions via SharePoint, Snowflake, and Teams."
tags:
- regulatory
- sharepoint
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: regulatory-ops
port: 8080
tools:
- name: regulatory-submission-coordination
description: "Coordinates submissions via SharePoint, Snowflake, and Teams."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: get-documents
type: call
call: "sharepoint.list-items"
with:
site_id: "$secrets.default_site_id"
- name: query-data
type: call
call: "snowflake.run-query"
with:
statement: "SELECT * FROM analytics.summary LIMIT 100"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "Regulatory Submission Coordination completed successfully."
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: drives
path: "/sites/{{site_id}}/drives"
inputParameters:
- name: site_id
in: path
operations:
- name: list-items
method: GET
- type: http
namespace: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Queries Salesforce for open commercial opportunities by division and posts a weekly pipeline digest to the Global Sales Teams channel for Bayer's commercial and pharmaceutical divisions.
naftiko: "0.5"
info:
label: "Salesforce CRM Opportunity Pipeline Digest"
description: "Queries Salesforce for open commercial opportunities by division and posts a weekly pipeline digest to the Global Sales Teams channel for Bayer's commercial and pharmaceutical divisions."
tags:
- sales
- crm
- salesforce
- microsoft-teams
- reporting
- pharma
capability:
exposes:
- type: mcp
namespace: sales-reporting
port: 8080
tools:
- name: digest-sales-pipeline
description: "Query Salesforce for open opportunities closing this quarter, grouped by Bayer division, and post a pipeline digest to the Global Sales Teams channel."
inputParameters:
- name: fiscal_quarter
in: body
type: string
description: "Fiscal quarter to report, e.g. '2026-Q1'."
- name: division
in: body
type: string
description: "Bayer division filter: 'Pharmaceuticals', 'Consumer Health', or 'Crop Science'."
steps:
- name: query-opportunities
type: call
call: "salesforce.query-opportunities"
with:
quarter: "{{fiscal_quarter}}"
division: "{{division}}"
- name: post-digest
type: call
call: "msteams.post-channel-message"
with:
channel: "global-sales"
message: "Pipeline digest Q{{fiscal_quarter}} ({{division}}): {{query-opportunities.count}} opportunities | Total: €{{query-opportunities.total_value}} | Weighted: €{{query-opportunities.weighted_value}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://bayer.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunity-query
path: "/query"
inputParameters:
- name: q
in: query
operations:
- name: query-opportunities
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Routes approvals from Salesforce, validates in Snowflake, and notifies via Teams.
naftiko: "0.5"
info:
label: "Salesforce Deal Desk Approval Workflow"
description: "Routes approvals from Salesforce, validates in Snowflake, and notifies via Teams."
tags:
- commercial
- salesforce
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: salesforce-ops
port: 8080
tools:
- name: salesforce-deal-desk-approval
description: "Routes approvals from Salesforce, validates in Snowflake, and notifies via Teams."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: get-sf-data
type: call
call: "salesforce.query"
with:
q: "SELECT Id, Name FROM Account LIMIT 10"
- name: query-data
type: call
call: "snowflake.run-query"
with:
statement: "SELECT * FROM analytics.summary LIMIT 100"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "Salesforce Deal Desk Approval Workflow completed successfully."
consumes:
- type: http
namespace: salesforce
baseUri: "https://login.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: sobjects
path: "/sobjects/Account"
operations:
- name: query
method: GET
- type: http
namespace: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Tracks KOLs from Salesforce and Snowflake, posting to Teams.
naftiko: "0.5"
info:
label: "Salesforce Medical Affairs KOL Tracker"
description: "Tracks KOLs from Salesforce and Snowflake, posting to Teams."
tags:
- medical-affairs
- commercial
- salesforce
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: salesforce-ops
port: 8080
tools:
- name: salesforce-kol-tracker
description: "Tracks KOLs from Salesforce and Snowflake, posting to Teams."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: get-sf-data
type: call
call: "salesforce.query"
with:
q: "SELECT Id, Name FROM Account LIMIT 10"
- name: query-data
type: call
call: "snowflake.run-query"
with:
statement: "SELECT * FROM analytics.summary LIMIT 100"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "Salesforce Medical Affairs KOL Tracker completed successfully."
consumes:
- type: http
namespace: salesforce
baseUri: "https://login.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: sobjects
path: "/sobjects/Account"
operations:
- name: query
method: GET
- type: http
namespace: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves Salesforce opportunity details.
naftiko: "0.5"
info:
label: "Salesforce Opportunity Check"
description: "Retrieves Salesforce opportunity details."
tags:
- commercial
- salesforce
capability:
exposes:
- type: mcp
namespace: crm-opp
port: 8080
tools:
- name: get-opportunity
description: "Look up opportunity."
inputParameters:
- name: opp_id
in: body
type: string
description: "Opportunity ID."
call: "salesforce.get-opportunity"
with:
id: "{{opp_id}}"
outputParameters:
- name: stage
type: string
mapping: "$.StageName"
- name: amount
type: string
mapping: "$.Amount"
consumes:
- type: http
namespace: salesforce
baseUri: "https://login.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity/{{opp_id}}"
inputParameters:
- name: opp_id
in: path
operations:
- name: get-opportunity
method: GET
Plans territories from Salesforce and Snowflake, notifying via Teams.
naftiko: "0.5"
info:
label: "Salesforce Territory Planning Orchestrator"
description: "Plans territories from Salesforce and Snowflake, notifying via Teams."
tags:
- commercial
- salesforce
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: salesforce-ops
port: 8080
tools:
- name: salesforce-territory-planning
description: "Plans territories from Salesforce and Snowflake, notifying via Teams."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: get-sf-data
type: call
call: "salesforce.query"
with:
q: "SELECT Id, Name FROM Account LIMIT 10"
- name: query-data
type: call
call: "snowflake.run-query"
with:
statement: "SELECT * FROM analytics.summary LIMIT 100"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "Salesforce Territory Planning Orchestrator completed successfully."
consumes:
- type: http
namespace: salesforce
baseUri: "https://login.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: sobjects
path: "/sobjects/Account"
operations:
- name: query
method: GET
- type: http
namespace: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Alerts on renewals from Ariba, ServiceNow, and Teams.
naftiko: "0.5"
info:
label: "SAP Ariba Contract Renewal Alerter"
description: "Alerts on renewals from Ariba, ServiceNow, and Teams."
tags:
- procurement
- sap-ariba
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: sap-ops
port: 8080
tools:
- name: sap-ariba-contract-renewal
description: "Alerts on renewals from Ariba, ServiceNow, and Teams."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: create-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "SAP Ariba Contract Renewal Alerter action required"
category: "automated"
assigned_group: "Operations"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "SAP Ariba Contract Renewal Alerter completed successfully."
consumes:
- type: http
namespace: servicenow
baseUri: "https://bayer.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Creates a purchase requisition in SAP Ariba, routes it through the approval workflow, and notifies the requester and approver via Microsoft Teams when the status changes.
naftiko: "0.5"
info:
label: "SAP Ariba Procurement Request Approval"
description: "Creates a purchase requisition in SAP Ariba, routes it through the approval workflow, and notifies the requester and approver via Microsoft Teams when the status changes."
tags:
- procurement
- sap-ariba
- microsoft-teams
- approval
- finance
capability:
exposes:
- type: mcp
namespace: procurement-approvals
port: 8080
tools:
- name: submit-procurement-request
description: "Given a supplier, line item description, quantity, and estimated cost, create a purchase requisition in SAP Ariba and notify the requester and approver via Teams."
inputParameters:
- name: supplier_id
in: body
type: string
description: "The SAP Ariba supplier ID for the requested vendor."
- name: item_description
in: body
type: string
description: "Description of the goods or services being requested."
- name: quantity
in: body
type: number
description: "Quantity of items or units being requested."
- name: estimated_cost_eur
in: body
type: number
description: "Estimated total cost in EUR."
- name: cost_center
in: body
type: string
description: "The Bayer cost center code to charge the purchase to."
steps:
- name: create-requisition
type: call
call: "sap-ariba.create-requisition"
with:
supplierId: "{{supplier_id}}"
description: "{{item_description}}"
quantity: "{{quantity}}"
estimatedCost: "{{estimated_cost_eur}}"
costCenter: "{{cost_center}}"
- name: notify-requester
type: call
call: "msteams.post-channel-message"
with:
channel: "procurement-requests"
message: "Procurement request submitted: {{item_description}} | Supplier: {{supplier_id}} | Cost: €{{estimated_cost_eur}} | Ariba ID: {{create-requisition.id}}"
consumes:
- type: http
namespace: sap-ariba
baseUri: "https://openapi.ariba.com/api/purchase-orders/v1"
authentication:
type: bearer
token: "$secrets.sap_ariba_token"
resources:
- name: requisitions
path: "/requisitions"
operations:
- name: create-requisition
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves supplier from Ariba.
naftiko: "0.5"
info:
label: "SAP Ariba Supplier Lookup"
description: "Retrieves supplier from Ariba."
tags:
- procurement
- sap-ariba
capability:
exposes:
- type: mcp
namespace: procurement-suppliers
port: 8080
tools:
- name: get-supplier
description: "Look up supplier."
inputParameters:
- name: supplier_id
in: body
type: string
description: "Supplier ID."
call: "ariba.get-supplier"
with:
id: "{{supplier_id}}"
outputParameters:
- name: name
type: string
mapping: "$.name"
- name: status
type: string
mapping: "$.status"
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/{{supplier_id}}"
inputParameters:
- name: supplier_id
in: path
operations:
- name: get-supplier
method: GET
Queries SAP Concur for expense reports pending manager approval beyond the SLA and sends reminder notifications to the Finance Approvals Microsoft Teams channel.
naftiko: "0.5"
info:
label: "SAP Concur Expense Report Approval Reminder"
description: "Queries SAP Concur for expense reports pending manager approval beyond the SLA and sends reminder notifications to the Finance Approvals Microsoft Teams channel."
tags:
- finance
- expense-management
- sap-concur
- microsoft-teams
- approval
capability:
exposes:
- type: mcp
namespace: expense-approvals
port: 8080
tools:
- name: send-expense-approval-reminders
description: "Query SAP Concur for expense reports in Pending Manager Approval status older than the specified days threshold and post a reminder to the Finance Approvals Teams channel."
inputParameters:
- name: days_pending
in: body
type: integer
description: "Minimum days pending before sending a reminder. Default: 5."
steps:
- name: get-pending-reports
type: call
call: "concur.list-pending-reports"
with:
approvalStatus: "A_PEND"
daysOld: "{{days_pending}}"
- name: notify-approvers
type: call
call: "msteams.post-channel-message"
with:
channel: "finance-approvals"
message: "{{get-pending-reports.count}} expense reports pending for more than {{days_pending}} days. Please review in SAP Concur."
consumes:
- type: http
namespace: concur
baseUri: "https://www.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_token"
resources:
- name: expense-reports
path: "/expense/reports"
operations:
- name: list-pending-reports
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Checks travel request status.
naftiko: "0.5"
info:
label: "SAP Concur Travel Request Status"
description: "Checks travel request status."
tags:
- travel
- sap-concur
capability:
exposes:
- type: mcp
namespace: travel-requests
port: 8080
tools:
- name: check-travel
description: "Check travel."
inputParameters:
- name: request_id
in: body
type: string
description: "Request ID."
call: "concur.get-request"
with:
id: "{{request_id}}"
outputParameters:
- name: status
type: string
mapping: "$.ApprovalStatus"
consumes:
- type: http
namespace: concur
baseUri: "https://us.api.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_token"
resources:
- name: requests
path: "/travelrequest/requests/{{request_id}}"
inputParameters:
- name: request_id
in: path
operations:
- name: get-request
method: GET
Checks material stock levels.
naftiko: "0.5"
info:
label: "SAP S/4HANA Material Stock Check"
description: "Checks material stock levels."
tags:
- supply-chain
- sap
capability:
exposes:
- type: mcp
namespace: scm-stock
port: 8080
tools:
- name: check-stock
description: "Check stock."
inputParameters:
- name: material
in: body
type: string
description: "Material."
- name: plant
in: body
type: string
description: "Plant."
call: "sap.get-stock"
with:
material: "{{material}}"
plant: "{{plant}}"
outputParameters:
- name: available_qty
type: string
mapping: "$.d.MatlWrhsStkQtyInMatlBaseUnit"
consumes:
- type: http
namespace: sap
baseUri: "https://bayer-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: stock
path: "/A_MatlStkInAcctMod"
operations:
- name: get-stock
method: GET
Orchestrates P2P from SAP, ServiceNow approvals, and Teams notification.
naftiko: "0.5"
info:
label: "SAP Procurement to Payment Orchestrator"
description: "Orchestrates P2P from SAP, ServiceNow approvals, and Teams notification."
tags:
- finance
- procurement
- sap
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: sap-ops
port: 8080
tools:
- name: sap-procurement-to-payment
description: "Orchestrates P2P from SAP, ServiceNow approvals, and Teams notification."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: get-sap-data
type: call
call: "sap.get-partner"
with:
filter: "BusinessPartnerCategory eq 1"
- name: create-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "SAP Procurement to Payment Orchestrator action required"
category: "automated"
assigned_group: "Operations"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "SAP Procurement to Payment Orchestrator completed successfully."
consumes:
- type: http
namespace: sap
baseUri: "https://bayer-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: partners
path: "/A_BusinessPartner"
operations:
- name: get-partner
method: GET
- type: http
namespace: servicenow
baseUri: "https://bayer.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Optimizes scheduling from SAP, Snowflake, and Teams.
naftiko: "0.5"
info:
label: "SAP Production Scheduling Optimizer"
description: "Optimizes scheduling from SAP, Snowflake, and Teams."
tags:
- manufacturing
- sap
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: sap-ops
port: 8080
tools:
- name: sap-production-scheduling
description: "Optimizes scheduling from SAP, Snowflake, and Teams."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: get-sap-data
type: call
call: "sap.get-partner"
with:
filter: "BusinessPartnerCategory eq 1"
- name: query-data
type: call
call: "snowflake.run-query"
with:
statement: "SELECT * FROM analytics.summary LIMIT 100"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "SAP Production Scheduling Optimizer completed successfully."
consumes:
- type: http
namespace: sap
baseUri: "https://bayer-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: partners
path: "/A_BusinessPartner"
operations:
- name: get-partner
method: GET
- type: http
namespace: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves cost center budget from SAP.
naftiko: "0.5"
info:
label: "SAP S/4HANA Cost Center Lookup"
description: "Retrieves cost center budget from SAP."
tags:
- finance
- sap
capability:
exposes:
- type: mcp
namespace: finance-cc
port: 8080
tools:
- name: get-cost-center
description: "Look up cost center."
inputParameters:
- name: cost_center
in: body
type: string
description: "Cost center ID."
call: "sap.get-cost-center"
with:
cost_center: "{{cost_center}}"
outputParameters:
- name: budget
type: string
mapping: "$.d.PlannedAmount"
consumes:
- type: http
namespace: sap
baseUri: "https://bayer-s4.sap.com/sap/opu/odata/sap/API_COSTCENTER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: cost-centers
path: "/A_CostCenter"
operations:
- name: get-cost-center
method: GET
Looks up a purchase order in SAP S/4HANA by PO number and returns header status, supplier name, total value, and currency for procurement and finance reconciliation workflows.
naftiko: "0.5"
info:
label: "SAP S/4HANA Purchase Order Lookup"
description: "Looks up a purchase order in SAP S/4HANA by PO number and returns header status, supplier name, total value, and currency for procurement and finance reconciliation workflows."
tags:
- procurement
- erp
- finance
- sap-s4hana
- purchase-order
capability:
exposes:
- type: mcp
namespace: procurement
port: 8080
tools:
- name: get-purchase-order
description: "Given a SAP purchase order number, retrieve the PO header status, supplier, total value, and line item count from SAP S/4HANA. Use for procurement status checks and accounts payable reconciliation."
inputParameters:
- name: po_number
in: body
type: string
description: "The SAP purchase order number to look up, e.g. '4500012345'."
call: "sap-s4hana.get-po"
with:
po_number: "{{po_number}}"
outputParameters:
- name: status
type: string
mapping: "$.d.OverallStatus"
- name: supplier_name
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-s4hana
baseUri: "https://bayer-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
outputRawFormat: xml
Creates a ServiceNow change request for Bayer IT infrastructure changes, assigns it to the CAB review queue, and notifies stakeholders via Microsoft Teams.
naftiko: "0.5"
info:
label: "ServiceNow Change Advisory Board Submission"
description: "Creates a ServiceNow change request for Bayer IT infrastructure changes, assigns it to the CAB review queue, and notifies stakeholders via Microsoft Teams."
tags:
- itsm
- change-management
- servicenow
- microsoft-teams
- approval
capability:
exposes:
- type: mcp
namespace: change-management
port: 8080
tools:
- name: submit-change-request
description: "Given a change title, description, risk level, and planned implementation date, create a ServiceNow change request and notify the Change Advisory Board via Teams."
inputParameters:
- name: change_title
in: body
type: string
description: "Short title of the proposed infrastructure or application change."
- name: change_description
in: body
type: string
description: "Detailed description including impact, rollback plan, and business justification."
- name: risk_level
in: body
type: string
description: "Risk classification: 'low', 'medium', or 'high'."
- name: planned_date
in: body
type: string
description: "Planned implementation date in YYYY-MM-DD format."
steps:
- name: create-change
type: call
call: "servicenow.create-change"
with:
short_description: "{{change_title}}"
description: "{{change_description}}"
risk: "{{risk_level}}"
planned_start_date: "{{planned_date}}"
- name: notify-cab
type: call
call: "msteams.post-channel-message"
with:
channel: "change-advisory-board"
message: "New CAB request: {{change_title}} | Risk: {{risk_level}} | Planned: {{planned_date}} | SNOW: {{create-change.number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://bayer.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: changes
path: "/table/change_request"
operations:
- name: create-change
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.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: post-channel-message
method: POST
Retrieves incident details from ServiceNow.
naftiko: "0.5"
info:
label: "ServiceNow Incident Detail Lookup"
description: "Retrieves incident details from ServiceNow."
tags:
- it-service-management
- servicenow
capability:
exposes:
- type: mcp
namespace: itsm-incident
port: 8080
tools:
- name: get-incident
description: "Look up incident."
inputParameters:
- name: number
in: body
type: string
description: "Incident number."
call: "servicenow.get-incident"
with:
number: "{{number}}"
outputParameters:
- name: state
type: string
mapping: "$.result.state"
- name: priority
type: string
mapping: "$.result.priority"
consumes:
- type: http
namespace: servicenow
baseUri: "https://bayer.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: get-incident
method: GET
Enriches KB from ServiceNow, Snowflake, and Teams.
naftiko: "0.5"
info:
label: "ServiceNow Knowledge Base Enrichment"
description: "Enriches KB from ServiceNow, Snowflake, and Teams."
tags:
- it-service-management
- servicenow
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: servicenow-ops
port: 8080
tools:
- name: servicenow-kb-enrichment
description: "Enriches KB from ServiceNow, Snowflake, and Teams."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: create-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "ServiceNow Knowledge Base Enrichment action required"
category: "automated"
assigned_group: "Operations"
- name: query-data
type: call
call: "snowflake.run-query"
with:
statement: "SELECT * FROM analytics.summary LIMIT 100"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "ServiceNow Knowledge Base Enrichment completed successfully."
consumes:
- type: http
namespace: servicenow
baseUri: "https://bayer.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: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Lists SharePoint documents.
naftiko: "0.5"
info:
label: "SharePoint Library Listing"
description: "Lists SharePoint documents."
tags:
- collaboration
- sharepoint
capability:
exposes:
- type: mcp
namespace: collab-docs
port: 8080
tools:
- name: list-docs
description: "List documents."
inputParameters:
- name: site_id
in: body
type: string
description: "Site ID."
call: "sharepoint.list-items"
with:
site_id: "{{site_id}}"
outputParameters:
- name: items
type: array
mapping: "$.value"
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: drives
path: "/sites/{{site_id}}/drives"
inputParameters:
- name: site_id
in: path
operations:
- name: list-items
method: GET
Runs data quality validation against Bayer's Snowflake agricultural and genomics data warehouse, detects anomalies and nulls in crop science datasets, and posts a quality report to the Data Engineering Teams channel.
naftiko: "0.5"
info:
label: "Snowflake Agricultural Data Quality Monitoring"
description: "Runs data quality validation against Bayer's Snowflake agricultural and genomics data warehouse, detects anomalies and nulls in crop science datasets, and posts a quality report to the Data Engineering Teams channel."
tags:
- data
- analytics
- snowflake
- data-quality
- crop-science
- agriculture
capability:
exposes:
- type: mcp
namespace: ag-data-ops
port: 8080
tools:
- name: run-ag-data-quality-check
description: "Given a Snowflake database and table name for a crop science dataset, execute data quality checks for null rates and outlier values, and post results to the Data Engineering Teams channel."
inputParameters:
- name: database_name
in: body
type: string
description: "The Snowflake database name, e.g. 'BAYER_CROPSCIENCE_PROD'."
- name: table_name
in: body
type: string
description: "The fully qualified Snowflake table name to validate."
- name: check_date
in: body
type: string
description: "The date partition to validate in YYYY-MM-DD format."
steps:
- name: run-dq-check
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT COUNT(*) as total, COUNT_IF(yield IS NULL) as null_yield, COUNT_IF(yield < 0) as negative_yield FROM {{table_name}} WHERE harvest_date = '{{check_date}}'"
- name: post-dq-report
type: call
call: "msteams.post-channel-message"
with:
channel: "data-engineering"
message: "DQ check on {{table_name}} for {{check_date}}: {{run-dq-check.total}} rows, {{run-dq-check.null_yield}} null yields, {{run-dq-check.negative_yield}} negative yields"
consumes:
- type: http
namespace: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Queries agricultural trial data.
naftiko: "0.5"
info:
label: "Snowflake Agricultural Data Query"
description: "Queries agricultural trial data."
tags:
- agriculture
- data-engineering
- snowflake
capability:
exposes:
- type: mcp
namespace: agri-data
port: 8080
tools:
- name: query-agri
description: "Query agri data."
inputParameters:
- name: trial_id
in: body
type: string
description: "Trial ID."
call: "snowflake.run-query"
with:
statement: "SELECT metric_name, value FROM agriculture.trial_results WHERE trial_id='{{trial_id}}'"
outputParameters:
- name: results
type: array
mapping: "$.data"
consumes:
- type: http
namespace: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
Queries crop science experiments.
naftiko: "0.5"
info:
label: "Snowflake Crop Science Experiment Lookup"
description: "Queries crop science experiments."
tags:
- agriculture
- research
- snowflake
capability:
exposes:
- type: mcp
namespace: agri-research
port: 8080
tools:
- name: get-experiment
description: "Query experiment."
inputParameters:
- name: experiment_id
in: body
type: string
description: "Experiment ID."
call: "snowflake.run-query"
with:
statement: "SELECT parameter, measurement FROM crop_science.experiments WHERE experiment_id='{{experiment_id}}'"
outputParameters:
- name: results
type: array
mapping: "$.data"
consumes:
- type: http
namespace: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
Checks pipeline last run status.
naftiko: "0.5"
info:
label: "Snowflake Data Pipeline Status"
description: "Checks pipeline last run status."
tags:
- data-engineering
- snowflake
capability:
exposes:
- type: mcp
namespace: data-ops
port: 8080
tools:
- name: check-pipeline
description: "Check pipeline."
inputParameters:
- name: pipeline
in: body
type: string
description: "Pipeline name."
call: "snowflake.run-query"
with:
statement: "SELECT status FROM pipelines.runs WHERE name='{{pipeline}}' ORDER BY run_date DESC LIMIT 1"
outputParameters:
- name: status
type: string
mapping: "$.data[0][0]"
consumes:
- type: http
namespace: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
Looks up the most recent execution status of a named Snowflake pipeline task in Bayer's data warehouse, returning the run state, timestamps, and any error messages.
naftiko: "0.5"
info:
label: "Snowflake Pipeline Task Status Lookup"
description: "Looks up the most recent execution status of a named Snowflake pipeline task in Bayer's data warehouse, returning the run state, timestamps, and any error messages."
tags:
- data
- analytics
- snowflake
- monitoring
- lookup
capability:
exposes:
- type: mcp
namespace: pipeline-status
port: 8080
tools:
- name: get-pipeline-task-status
description: "Given a Snowflake database and task name, return the most recent task run state, scheduled time, completion time, and error message if failed."
inputParameters:
- name: database_name
in: body
type: string
description: "The Snowflake database name, e.g. 'BAYER_CROPSCIENCE_PROD'."
- name: task_name
in: body
type: string
description: "The Snowflake task name to query."
call: "snowflake.get-task-history"
with:
database: "{{database_name}}"
task_name: "{{task_name}}"
outputParameters:
- name: state
type: string
mapping: "$.data[0].STATE"
- name: scheduled_time
type: string
mapping: "$.data[0].SCHEDULED_TIME"
- name: completed_time
type: string
mapping: "$.data[0].COMPLETED_TIME"
- name: error_message
type: string
mapping: "$.data[0].ERROR_MESSAGE"
consumes:
- type: http
namespace: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: task-history
path: "/databases/{{database}}/schemas/information_schema/task_history"
inputParameters:
- name: database
in: path
operations:
- name: get-task-history
method: GET
Audits sharing from Snowflake, ServiceNow, and Teams.
naftiko: "0.5"
info:
label: "Snowflake Data Sharing Governance Check"
description: "Audits sharing from Snowflake, ServiceNow, and Teams."
tags:
- data-governance
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: snowflake-ops
port: 8080
tools:
- name: snowflake-sharing-governance
description: "Audits sharing from Snowflake, ServiceNow, and Teams."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: query-data
type: call
call: "snowflake.run-query"
with:
statement: "SELECT * FROM analytics.summary LIMIT 100"
- name: create-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "Snowflake Data Sharing Governance Check action required"
category: "automated"
assigned_group: "Operations"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "Snowflake Data Sharing Governance Check completed successfully."
consumes:
- type: http
namespace: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://bayer.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Looks up the current status of an employee absence request in SAP SuccessFactors, returning approval state, leave dates, and type.
naftiko: "0.5"
info:
label: "SuccessFactors Absence Request Status Lookup"
description: "Looks up the current status of an employee absence request in SAP SuccessFactors, returning approval state, leave dates, and type."
tags:
- hr
- sap-successfactors
- absence-management
- lookup
capability:
exposes:
- type: mcp
namespace: hr-absence
port: 8080
tools:
- name: get-absence-request-status
description: "Given a SuccessFactors absence request ID, return the approval status, start date, end date, and leave type. Use for employee self-service or HR review."
inputParameters:
- name: absence_request_id
in: body
type: string
description: "The SAP SuccessFactors absence request ID to look up."
call: "successfactors.get-absence-request"
with:
request_id: "{{absence_request_id}}"
outputParameters:
- name: status
type: string
mapping: "$.d.approvalStatus"
- name: start_date
type: string
mapping: "$.d.startDate"
- name: end_date
type: string
mapping: "$.d.endDate"
- name: leave_type
type: string
mapping: "$.d.leaveType"
consumes:
- type: http
namespace: successfactors
baseUri: "https://api4.successfactors.com/odata/v2"
authentication:
type: bearer
token: "$secrets.successfactors_token"
resources:
- name: absence-requests
path: "/LeaveRequest({{request_id}})"
inputParameters:
- name: request_id
in: path
operations:
- name: get-absence-request
method: GET
Retrieves employee details from SuccessFactors.
naftiko: "0.5"
info:
label: "SuccessFactors Employee Lookup"
description: "Retrieves employee details from SuccessFactors."
tags:
- hr
- successfactors
capability:
exposes:
- type: mcp
namespace: hr-employee
port: 8080
tools:
- name: get-employee
description: "Look up employee."
inputParameters:
- name: employee_id
in: body
type: string
description: "Employee ID."
call: "successfactors.get-employee"
with:
employee_id: "{{employee_id}}"
outputParameters:
- name: name
type: string
mapping: "$.d.displayName"
- name: department
type: string
mapping: "$.d.department"
consumes:
- type: http
namespace: successfactors
baseUri: "https://api15.sapsf.com/odata/v2"
authentication:
type: basic
username: "$secrets.sf_user"
password: "$secrets.sf_password"
resources:
- name: employees
path: "/User('{{employee_id}}')"
inputParameters:
- name: employee_id
in: path
operations:
- name: get-employee
method: GET
Checks leave balance.
naftiko: "0.5"
info:
label: "SuccessFactors Leave Balance Check"
description: "Checks leave balance."
tags:
- hr
- successfactors
capability:
exposes:
- type: mcp
namespace: hr-leave
port: 8080
tools:
- name: check-leave
description: "Check leave."
inputParameters:
- name: employee_id
in: body
type: string
description: "Employee ID."
call: "successfactors.get-leave"
with:
employee_id: "{{employee_id}}"
outputParameters:
- name: balance
type: string
mapping: "$.d.balance"
consumes:
- type: http
namespace: successfactors
baseUri: "https://api15.sapsf.com/odata/v2"
authentication:
type: basic
username: "$secrets.sf_user"
password: "$secrets.sf_password"
resources:
- name: leave
path: "/EmployeeTime"
operations:
- name: get-leave
method: GET
Calibrates ratings from SuccessFactors and Snowflake, notifying via Teams.
naftiko: "0.5"
info:
label: "SuccessFactors Performance Calibration"
description: "Calibrates ratings from SuccessFactors and Snowflake, notifying via Teams."
tags:
- hr
- performance
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: successfactors-ops
port: 8080
tools:
- name: successfactors-performance-calibration
description: "Calibrates ratings from SuccessFactors and Snowflake, notifying via Teams."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: query-data
type: call
call: "snowflake.run-query"
with:
statement: "SELECT * FROM analytics.summary LIMIT 100"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "SuccessFactors Performance Calibration completed successfully."
consumes:
- type: http
namespace: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Initiates a performance review cycle in SAP SuccessFactors for a Bayer division, creates ServiceNow tracking tasks for HR, and notifies managers via Microsoft Teams.
naftiko: "0.5"
info:
label: "SuccessFactors Performance Review Cycle Launch"
description: "Initiates a performance review cycle in SAP SuccessFactors for a Bayer division, creates ServiceNow tracking tasks for HR, and notifies managers via Microsoft Teams."
tags:
- hr
- performance
- sap-successfactors
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-performance
port: 8080
tools:
- name: launch-performance-review-cycle
description: "Given a SuccessFactors organization unit and review year, initiate the performance review cycle, create ServiceNow HR tasks, and notify managers via Teams."
inputParameters:
- name: org_unit_id
in: body
type: string
description: "The SAP SuccessFactors organization unit ID to initiate the review for."
- name: review_year
in: body
type: string
description: "The performance review year, e.g. '2026'."
steps:
- name: initiate-review
type: call
call: "successfactors.create-performance-review"
with:
orgUnitId: "{{org_unit_id}}"
reviewYear: "{{review_year}}"
- name: create-tracking-task
type: call
call: "servicenow.create-task"
with:
short_description: "Performance review {{review_year}} — org {{org_unit_id}}"
assignment_group: "HR_Operations"
due_date: "{{initiate-review.deadline}}"
- name: notify-managers
type: call
call: "msteams.post-channel-message"
with:
channel: "hr-announcements"
message: "Performance review {{review_year}} launched for org unit {{org_unit_id}}. Deadline: {{initiate-review.deadline}}."
consumes:
- type: http
namespace: successfactors
baseUri: "https://api4.successfactors.com/odata/v2"
authentication:
type: bearer
token: "$secrets.successfactors_token"
resources:
- name: performance-reviews
path: "/PerformanceReview"
operations:
- name: create-performance-review
method: POST
- type: http
namespace: servicenow
baseUri: "https://bayer.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/sc_task"
operations:
- name: create-task
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
When an employee role change is processed in SAP SuccessFactors, updates their Okta group memberships and creates a ServiceNow task to confirm access provisioning.
naftiko: "0.5"
info:
label: "SuccessFactors Role Change Access Provisioning"
description: "When an employee role change is processed in SAP SuccessFactors, updates their Okta group memberships and creates a ServiceNow task to confirm access provisioning."
tags:
- hr
- identity
- sap-successfactors
- okta
- servicenow
- role-change
- access-management
capability:
exposes:
- type: mcp
namespace: hr-access
port: 8080
tools:
- name: sync-role-change-access
description: "Given a SuccessFactors employee ID, new role, and old role, update Okta group memberships and create a ServiceNow provisioning confirmation task."
inputParameters:
- name: employee_id
in: body
type: string
description: "The SAP SuccessFactors employee ID for the role change."
- name: new_role
in: body
type: string
description: "The new job role from the Bayer role catalogue."
- name: old_role
in: body
type: string
description: "The previous job role for de-provisioning reference."
steps:
- name: get-employee
type: call
call: "successfactors.get-employee"
with:
employee_id: "{{employee_id}}"
- name: update-okta-groups
type: call
call: "okta.update-user-groups"
with:
user_login: "{{get-employee.work_email}}"
add_group: "{{new_role}}"
remove_group: "{{old_role}}"
- name: create-provisioning-task
type: call
call: "servicenow.create-task"
with:
short_description: "Role change: {{get-employee.full_name}} — {{old_role}} to {{new_role}}"
assignment_group: "IT_Access_Management"
consumes:
- type: http
namespace: successfactors
baseUri: "https://api4.successfactors.com/odata/v2"
authentication:
type: bearer
token: "$secrets.successfactors_token"
resources:
- name: employees
path: "/PerPerson({{employee_id}})"
inputParameters:
- name: employee_id
in: path
operations:
- name: get-employee
method: GET
- type: http
namespace: okta
baseUri: "https://bayer.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: user-groups
path: "/users/{{user_login}}/groups"
inputParameters:
- name: user_login
in: path
operations:
- name: update-user-groups
method: PUT
- type: http
namespace: servicenow
baseUri: "https://bayer.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/sc_task"
operations:
- name: create-task
method: POST
Collects metrics from Snowflake and posts to Teams.
naftiko: "0.5"
info:
label: "Environmental Sustainability Metrics Collector"
description: "Collects metrics from Snowflake and posts to Teams."
tags:
- sustainability
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: sustainability-ops
port: 8080
tools:
- name: sustainability-metrics-collector
description: "Collects metrics from Snowflake and posts to Teams."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: query-data
type: call
call: "snowflake.run-query"
with:
statement: "SELECT * FROM analytics.summary LIMIT 100"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "Environmental Sustainability Metrics Collector completed successfully."
consumes:
- type: http
namespace: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Prepares reviews from SuccessFactors, Snowflake, and Teams.
naftiko: "0.5"
info:
label: "Workday Talent Review Preparation"
description: "Prepares reviews from SuccessFactors, Snowflake, and Teams."
tags:
- hr
- talent-management
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: talent-ops
port: 8080
tools:
- name: talent-review-preparation
description: "Prepares reviews from SuccessFactors, Snowflake, and Teams."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: query-data
type: call
call: "snowflake.run-query"
with:
statement: "SELECT * FROM analytics.summary LIMIT 100"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "Workday Talent Review Preparation completed successfully."
consumes:
- type: http
namespace: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Posts Teams notification.
naftiko: "0.5"
info:
label: "Teams Notification Post"
description: "Posts Teams notification."
tags:
- collaboration
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: collab-notify
port: 8080
tools:
- name: post-notification
description: "Post notification."
inputParameters:
- name: team_id
in: body
type: string
description: "Team ID."
- name: channel_id
in: body
type: string
description: "Channel ID."
- name: message
in: body
type: string
description: "Message."
call: "msteams.post-channel-message"
with:
team_id: "{{team_id}}"
channel_id: "{{channel_id}}"
body: "{{message}}"
outputParameters:
- name: id
type: string
mapping: "$.id"
consumes:
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Tracks changes, updating ServiceNow and notifying via Teams.
naftiko: "0.5"
info:
label: "Terraform Infrastructure Change Tracker"
description: "Tracks changes, updating ServiceNow and notifying via Teams."
tags:
- infrastructure
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: terraform-ops
port: 8080
tools:
- name: terraform-change-tracker
description: "Tracks changes, updating ServiceNow and notifying via Teams."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: create-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "Terraform Infrastructure Change Tracker action required"
category: "automated"
assigned_group: "Operations"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "Terraform Infrastructure Change Tracker completed successfully."
consumes:
- type: http
namespace: servicenow
baseUri: "https://bayer.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Triggers a Terraform Cloud workspace run to provision or update Bayer's cloud infrastructure, and notifies the Platform Engineering team in Microsoft Teams.
naftiko: "0.5"
info:
label: "Terraform Infrastructure Provisioning Trigger"
description: "Triggers a Terraform Cloud workspace run to provision or update Bayer's cloud infrastructure, and notifies the Platform Engineering team in Microsoft Teams."
tags:
- cloud
- infrastructure
- terraform
- microsoft-teams
- devops
- provisioning
capability:
exposes:
- type: mcp
namespace: infra-provisioning
port: 8080
tools:
- name: trigger-terraform-run
description: "Given a Terraform Cloud workspace ID and description, trigger an infrastructure plan-and-apply run and notify the Platform Engineering Teams channel."
inputParameters:
- name: workspace_id
in: body
type: string
description: "The Terraform Cloud workspace ID to run against."
- name: run_message
in: body
type: string
description: "Description of the infrastructure change, e.g. 'Add Kubernetes node pool for genomics pipeline'."
steps:
- name: trigger-run
type: call
call: "terraform.create-run"
with:
workspace_id: "{{workspace_id}}"
message: "{{run_message}}"
- name: notify-platform
type: call
call: "msteams.post-channel-message"
with:
channel: "platform-engineering"
message: "Terraform run triggered: {{run_message}} | Workspace: {{workspace_id}} | Run ID: {{trigger-run.id}}"
consumes:
- type: http
namespace: terraform
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: runs
path: "/runs"
operations:
- name: create-run
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Checks Terraform plan status.
naftiko: "0.5"
info:
label: "Terraform Plan Status Check"
description: "Checks Terraform plan status."
tags:
- infrastructure
- terraform
capability:
exposes:
- type: mcp
namespace: infra-iac
port: 8080
tools:
- name: check-plan
description: "Check plan."
inputParameters:
- name: run_id
in: body
type: string
description: "Run ID."
call: "terraform.get-run"
with:
run_id: "{{run_id}}"
outputParameters:
- name: status
type: string
mapping: "$.data.attributes.status"
consumes:
- type: http
namespace: terraform
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: runs
path: "/runs/{{run_id}}"
inputParameters:
- name: run_id
in: path
operations:
- name: get-run
method: GET
Reports cash from SAP, Snowflake, and Teams.
naftiko: "0.5"
info:
label: "Financial Treasury Cash Position Report"
description: "Reports cash from SAP, Snowflake, and Teams."
tags:
- finance
- sap
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: treasury-ops
port: 8080
tools:
- name: treasury-cash-position
description: "Reports cash from SAP, Snowflake, and Teams."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: get-sap-data
type: call
call: "sap.get-partner"
with:
filter: "BusinessPartnerCategory eq 1"
- name: query-data
type: call
call: "snowflake.run-query"
with:
statement: "SELECT * FROM analytics.summary LIMIT 100"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "Financial Treasury Cash Position Report completed successfully."
consumes:
- type: http
namespace: sap
baseUri: "https://bayer-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: partners
path: "/A_BusinessPartner"
operations:
- name: get-partner
method: GET
- type: http
namespace: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Assesses risk from SAP, Snowflake, and ServiceNow.
naftiko: "0.5"
info:
label: "Vendor Risk Assessment Workflow"
description: "Assesses risk from SAP, Snowflake, and ServiceNow."
tags:
- procurement
- risk-management
- sap
- snowflake
- servicenow
capability:
exposes:
- type: mcp
namespace: vendor-ops
port: 8080
tools:
- name: vendor-risk-assessment
description: "Assesses risk from SAP, Snowflake, and ServiceNow."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: get-sap-data
type: call
call: "sap.get-partner"
with:
filter: "BusinessPartnerCategory eq 1"
- name: query-data
type: call
call: "snowflake.run-query"
with:
statement: "SELECT * FROM analytics.summary LIMIT 100"
- name: create-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "Vendor Risk Assessment Workflow action required"
category: "automated"
assigned_group: "Operations"
consumes:
- type: http
namespace: sap
baseUri: "https://bayer-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: partners
path: "/A_BusinessPartner"
operations:
- name: get-partner
method: GET
- type: http
namespace: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://bayer.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 weather impact from Snowflake and notifies via Teams.
naftiko: "0.5"
info:
label: "Agricultural Weather Impact Analysis"
description: "Analyzes weather impact from Snowflake and notifies via Teams."
tags:
- agriculture
- research
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: weather-ops
port: 8080
tools:
- name: weather-impact-analysis
description: "Analyzes weather impact from Snowflake and notifies via Teams."
inputParameters:
- name: request_id
in: body
type: string
description: "The request or entity identifier."
steps:
- name: query-data
type: call
call: "snowflake.run-query"
with:
statement: "SELECT * FROM analytics.summary LIMIT 100"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "$secrets.ops_team_id"
channel_id: "$secrets.ops_channel_id"
body: "Agricultural Weather Impact Analysis completed successfully."
consumes:
- type: http
namespace: snowflake
baseUri: "https://bayer.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST