BMW Capabilities
Naftiko 0.5 capability definitions for BMW - 100 capabilities showing integration workflows and service orchestrations.
Compares ADP payroll run totals against Workday headcount and salary data to surface discrepancies, then creates a Jira task for payroll audit review and notifies the finance team via Slack.
naftiko: "0.5"
info:
label: "ADP Payroll Discrepancy Detector"
description: "Compares ADP payroll run totals against Workday headcount and salary data to surface discrepancies, then creates a Jira task for payroll audit review and notifies the finance team via Slack."
tags:
- hr
- finance
- payroll
- adp
- workday
- jira
- slack
capability:
exposes:
- type: mcp
namespace: payroll-ops
port: 8080
tools:
- name: detect-payroll-discrepancies
description: "Given an ADP payroll run ID and pay period, fetch the payroll summary from ADP, retrieve the corresponding Workday headcount and salary roster, compare totals, and if variance exceeds the threshold open a Jira audit task and alert the payroll-ops Slack channel."
inputParameters:
- name: payroll_run_id
in: body
type: string
description: "The ADP payroll run ID to audit."
- name: pay_period
in: body
type: string
description: "The pay period in YYYY-MM format."
- name: variance_threshold_pct
in: body
type: number
description: "The acceptable variance percentage between ADP and Workday totals. Discrepancies above this trigger a Jira task."
steps:
- name: get-adp-summary
type: call
call: "adp.get-payroll-summary"
with:
payroll_run_id: "{{payroll_run_id}}"
- name: get-workday-roster
type: call
call: "workday.get-payroll-roster"
with:
pay_period: "{{pay_period}}"
- name: create-audit-task
type: call
call: "jira.create-issue"
with:
project_key: "FIN"
issuetype: "Task"
summary: "Payroll discrepancy detected for period {{pay_period}}"
description: "ADP run {{payroll_run_id}} total: {{get-adp-summary.gross_pay}} | Workday expected: {{get-workday-roster.expected_gross}} | Variance exceeds {{variance_threshold_pct}}%"
- name: alert-slack
type: call
call: "slack.post-message"
with:
channel: "payroll-ops"
text: "Payroll discrepancy found for {{pay_period}}: ADP {{get-adp-summary.gross_pay}} vs Workday {{get-workday-roster.expected_gross}}. Jira: {{create-audit-task.key}}"
consumes:
- namespace: adp
type: http
baseUri: "https://api.adp.com"
authentication:
type: bearer
token: "$secrets.adp_token"
resources:
- name: payroll-summary
path: "/payroll/v1/payroll-output/{payroll_run_id}"
inputParameters:
- name: payroll_run_id
in: path
operations:
- name: get-payroll-summary
method: GET
- namespace: workday
type: http
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: payroll-roster
path: "/reports/payroll-roster"
inputParameters:
- name: pay_period
in: query
operations:
- name: get-payroll-roster
method: GET
- namespace: jira
type: http
baseUri: "https://bmw.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issue
path: "/issue"
operations:
- name: create-issue
method: POST
- namespace: slack
type: http
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: chat
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When an assembly line goes down, creates a ServiceNow incident, logs downtime in SAP PM, and alerts plant management via Teams.
naftiko: "0.5"
info:
label: "Assembly Line Downtime Escalation"
description: "When an assembly line goes down, creates a ServiceNow incident, logs downtime in SAP PM, and alerts plant management via Teams."
tags:
- production
- servicenow
- sap
- microsoft-teams
- manufacturing
capability:
exposes:
- type: mcp
namespace: production-ops
port: 8080
tools:
- name: assembly-line-downtime-escalation
description: "When an assembly line goes down, creates a ServiceNow incident, logs downtime in SAP PM, and alerts plant management via Teams."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "Assembly Line Downtime Escalation: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "Assembly Line Downtime Escalation: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_production_channel_id"
text: "Assembly Line Downtime Escalation | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Generates CoC from SAP QM data, compiles in SharePoint, and notifies via Teams.
naftiko: "0.5"
info:
label: "Automated Certificate of Conformance Generation"
description: "Generates CoC from SAP QM data, compiles in SharePoint, and notifies via Teams."
tags:
- quality
- sap
- sharepoint
- microsoft-teams
- manufacturing
capability:
exposes:
- type: mcp
namespace: quality-ops
port: 8080
tools:
- name: automated-certificate-of-conformance
description: "Generates CoC from SAP QM data, compiles in SharePoint, and notifies via Teams."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "Automated Certificate of Conformance Generation: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "Automated Certificate of Conformance Generation: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_quality_channel_id"
text: "Automated Certificate of Conformance Generation | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Runs tests via Azure DevOps, publishes to Confluence, and notifies QA via Teams.
naftiko: "0.5"
info:
label: "Automated Regression Test Report"
description: "Runs tests via Azure DevOps, publishes to Confluence, and notifies QA via Teams."
tags:
- devops
- azure-devops
- confluence
- microsoft-teams
- testing
capability:
exposes:
- type: mcp
namespace: devops-ops
port: 8080
tools:
- name: automated-regression-test-report
description: "Runs tests via Azure DevOps, publishes to Confluence, and notifies QA via Teams."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "Automated Regression Test Report: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "Automated Regression Test Report: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_devops_channel_id"
text: "Automated Regression Test Report | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
When SPC charts detect out-of-control condition, creates SAP QM notification and alerts process engineer via Teams.
naftiko: "0.5"
info:
label: "Automated SPC Chart Alert"
description: "When SPC charts detect out-of-control condition, creates SAP QM notification and alerts process engineer via Teams."
tags:
- quality
- datadog
- sap
- microsoft-teams
- manufacturing
capability:
exposes:
- type: mcp
namespace: quality-ops
port: 8080
tools:
- name: automated-spc-chart-alert
description: "When SPC charts detect out-of-control condition, creates SAP QM notification and alerts process engineer via Teams."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "Automated SPC Chart Alert: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "Automated SPC Chart Alert: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_quality_channel_id"
text: "Automated SPC Chart Alert | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Reconciles timecards by comparing Workday entries against SAP hours, flagging discrepancies in Jira.
naftiko: "0.5"
info:
label: "Automated Timecard Reconciliation"
description: "Reconciles timecards by comparing Workday entries against SAP hours, flagging discrepancies in Jira."
tags:
- hr
- workday
- sap
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-ops
port: 8080
tools:
- name: automated-timecard-reconciliation
description: "Reconciles timecards by comparing Workday entries against SAP hours, flagging discrepancies in Jira."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "Automated Timecard Reconciliation: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "Automated Timecard Reconciliation: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_hr_channel_id"
text: "Automated Timecard Reconciliation | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Polls Azure Cost Management for subscription spend anomalies versus the monthly budget, creates a ServiceNow change request to review the overage, and notifies the cloud finance team in Slack.
naftiko: "0.5"
info:
label: "Azure Cost Anomaly Responder"
description: "Polls Azure Cost Management for subscription spend anomalies versus the monthly budget, creates a ServiceNow change request to review the overage, and notifies the cloud finance team in Slack."
tags:
- cloud
- finops
- azure
- servicenow
- slack
- cost-management
capability:
exposes:
- type: mcp
namespace: cloud-finops
port: 8080
tools:
- name: handle-cost-anomaly
description: "Given an Azure subscription ID and a billing period, query Azure Cost Management for actual spend versus budget, and if actual spend exceeds the threshold, open a ServiceNow change request and notify the cloud-finops Slack channel."
inputParameters:
- name: subscription_id
in: body
type: string
description: "The Azure subscription ID to check for cost anomalies."
- name: budget_threshold_percent
in: body
type: number
description: "The percentage of budget utilization above which an anomaly is raised, e.g. 90."
steps:
- name: get-cost-data
type: call
call: "azure-cost.query-usage"
with:
subscription_id: "{{subscription_id}}"
- name: create-change-request
type: call
call: "servicenow.create-change"
with:
short_description: "Azure cost anomaly: subscription {{subscription_id}} exceeds {{budget_threshold_percent}}% budget"
category: "cloud_finops"
priority: "3"
- name: notify-slack
type: call
call: "slack.post-message"
with:
channel: "cloud-finops"
text: "Cost anomaly on subscription {{subscription_id}}: spend above {{budget_threshold_percent}}% of budget. ServiceNow: {{create-change-request.number}}"
consumes:
- namespace: azure-cost
type: http
baseUri: "https://management.azure.com/subscriptions"
authentication:
type: bearer
token: "$secrets.azure_mgmt_token"
resources:
- name: usage
path: "/{subscription_id}/providers/Microsoft.CostManagement/query"
inputParameters:
- name: subscription_id
in: path
operations:
- name: query-usage
method: POST
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_pass"
resources:
- name: change
path: "/table/change_request"
operations:
- name: create-change
method: POST
- namespace: slack
type: http
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: chat
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Analyzes Azure spending, logs recommendations in ServiceNow, and notifies cloud governance via Teams.
naftiko: "0.5"
info:
label: "Azure Cost Optimization Recommendation"
description: "Analyzes Azure spending, logs recommendations in ServiceNow, and notifies cloud governance via Teams."
tags:
- cloud
- microsoft-azure
- servicenow
- microsoft-teams
- devops
capability:
exposes:
- type: mcp
namespace: cloud-ops
port: 8080
tools:
- name: azure-cost-optimization-recommendation
description: "Analyzes Azure spending, logs recommendations in ServiceNow, and notifies cloud governance via Teams."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "Azure Cost Optimization Recommendation: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "Azure Cost Optimization Recommendation: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_cloud_channel_id"
text: "Azure Cost Optimization Recommendation | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
When a new model version is registered in Azure Databricks Model Registry, triggers a staging deployment job, fetches the evaluation metrics, and posts the model card summary to the data science Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Azure Databricks ML Model Deployment Notifier"
description: "When a new model version is registered in Azure Databricks Model Registry, triggers a staging deployment job, fetches the evaluation metrics, and posts the model card summary to the data science Microsoft Teams channel."
tags:
- ai
- mlops
- azure-databricks
- microsoft-teams
- model-deployment
capability:
exposes:
- type: mcp
namespace: mlops
port: 8080
tools:
- name: deploy-and-notify-model
description: "Given an Azure Databricks workspace URL, model name, and model version, transition the registered model version to Staging, fetch the run metrics for evaluation, and post a model card summary to the data-science Microsoft Teams channel."
inputParameters:
- name: model_name
in: body
type: string
description: "The registered model name in Azure Databricks Model Registry."
- name: model_version
in: body
type: string
description: "The model version number to deploy to staging."
- name: run_id
in: body
type: string
description: "The MLflow run ID associated with this model version."
steps:
- name: transition-model
type: call
call: "databricks.transition-model-stage"
with:
model_name: "{{model_name}}"
version: "{{model_version}}"
stage: "Staging"
- name: get-run-metrics
type: call
call: "databricks.get-run"
with:
run_id: "{{run_id}}"
- name: notify-teams
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.datascience_teams_channel_id"
text: "Model {{model_name}} v{{model_version}} deployed to Staging | Accuracy: {{get-run-metrics.metrics.accuracy}} | F1: {{get-run-metrics.metrics.f1_score}} | Run: {{run_id}}"
consumes:
- namespace: databricks
type: http
baseUri: "https://adb-bmw.azuredatabricks.net/api/2.1"
authentication:
type: bearer
token: "$secrets.databricks_token"
resources:
- name: model-version-transition
path: "/mlflow/model-versions/transition-stage"
operations:
- name: transition-model-stage
method: POST
- name: run
path: "/mlflow/runs/get"
inputParameters:
- name: run_id
in: query
operations:
- name: get-run
method: GET
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-message
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 build status for a pipeline in Azure DevOps.
naftiko: "0.5"
info:
label: "Azure DevOps Build Status Lookup"
description: "Retrieves build status for a pipeline in Azure DevOps."
tags:
- devops
- azure-devops
- ci-cd
- lookup
capability:
exposes:
- type: mcp
namespace: devops
port: 8080
tools:
- name: azure-status
description: "Retrieves build status for a pipeline in Azure DevOps."
inputParameters:
- name: identifier
in: body
type: string
description: "The identifier for the lookup."
call: "devops.get-record"
with:
id: "{{identifier}}"
outputParameters:
- name: result
type: string
mapping: "$.result"
consumes:
- namespace: devops
type: http
baseUri: "https://bmw-s4.sap.com/api/v1"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: records
path: "/records"
operations:
- name: get-record
method: GET
At the end of each Azure DevOps sprint, fetches completed work items and velocity metrics, generates a sprint summary, and publishes it to the corresponding Confluence space for stakeholder review.
naftiko: "0.5"
info:
label: "Azure DevOps Sprint Report Publisher"
description: "At the end of each Azure DevOps sprint, fetches completed work items and velocity metrics, generates a sprint summary, and publishes it to the corresponding Confluence space for stakeholder review."
tags:
- devops
- reporting
- azure-devops
- confluence
capability:
exposes:
- type: mcp
namespace: agile-reporting
port: 8080
tools:
- name: publish-sprint-report
description: "Given an Azure DevOps organization, project, and sprint iteration path, query all completed and carried-over work items for the sprint, calculate velocity, and publish a formatted sprint report to the target Confluence page."
inputParameters:
- name: organization
in: body
type: string
description: "The Azure DevOps organization name."
- name: project
in: body
type: string
description: "The Azure DevOps project name."
- name: iteration_path
in: body
type: string
description: "The sprint iteration path, e.g. MyProject\\Sprint 42."
- name: confluence_page_id
in: body
type: string
description: "The Confluence page ID where the sprint report will be published."
steps:
- name: get-sprint-items
type: call
call: "azure-devops.query-work-items"
with:
organization: "{{organization}}"
project: "{{project}}"
wiql: "SELECT [System.Id],[System.Title],[System.State],[Microsoft.VSTS.Scheduling.StoryPoints] FROM WorkItems WHERE [System.IterationPath] = '{{iteration_path}}'"
- name: publish-confluence
type: call
call: "confluence.update-page"
with:
page_id: "{{confluence_page_id}}"
content: "Sprint Report for {{iteration_path}} | Completed: {{get-sprint-items.completedCount}} items | Total Story Points: {{get-sprint-items.totalStoryPoints}}"
consumes:
- namespace: azure-devops
type: http
baseUri: "https://dev.azure.com"
authentication:
type: basic
username: "$secrets.ado_user"
password: "$secrets.ado_pat"
resources:
- name: work-items-query
path: "/{organization}/{project}/_apis/wit/wiql"
inputParameters:
- name: organization
in: path
- name: project
in: path
operations:
- name: query-work-items
method: POST
- namespace: confluence
type: http
baseUri: "https://bmw.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: page
path: "/content/{page_id}"
inputParameters:
- name: page_id
in: path
operations:
- name: update-page
method: PUT
Queries Azure Key Vault for secrets nearing their expiration date, creates a ServiceNow change request for each secret rotation task, and notifies the security operations team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Azure Key Vault Secret Rotation Notifier"
description: "Queries Azure Key Vault for secrets nearing their expiration date, creates a ServiceNow change request for each secret rotation task, and notifies the security operations team via Microsoft Teams."
tags:
- security
- cloud
- azure
- servicenow
- microsoft-teams
- secret-management
capability:
exposes:
- type: mcp
namespace: secret-mgmt
port: 8080
tools:
- name: notify-expiring-secrets
description: "Given an Azure Key Vault name, list all secrets expiring within the specified number of days, open a ServiceNow change request for each rotation needed, and post a consolidated list to the security-ops Microsoft Teams channel."
inputParameters:
- name: vault_name
in: body
type: string
description: "The Azure Key Vault name to check for expiring secrets."
- name: days_threshold
in: body
type: integer
description: "Number of days ahead to check for expiring secrets, e.g. 30."
steps:
- name: list-secrets
type: call
call: "azure-keyvault.list-secrets"
with:
vault_name: "{{vault_name}}"
- name: create-change
type: call
call: "servicenow.create-change"
with:
short_description: "Secret rotation required: {{vault_name}} — {{list-secrets.expiringCount}} secrets expiring within {{days_threshold}} days"
category: "security"
priority: "2"
- name: notify-teams
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.secops_teams_channel_id"
text: "Secret rotation alert for Key Vault {{vault_name}}: {{list-secrets.expiringCount}} secrets expire within {{days_threshold}} days. ServiceNow: {{create-change.number}}"
consumes:
- namespace: azure-keyvault
type: http
baseUri: "https://{{vault_name}}.vault.azure.net"
authentication:
type: bearer
token: "$secrets.azure_keyvault_token"
resources:
- name: secrets
path: "/secrets"
operations:
- name: list-secrets
method: GET
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_pass"
resources:
- name: change
path: "/table/change_request"
operations:
- name: create-change
method: POST
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-message
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 rolling deployment update on an Azure Kubernetes Service cluster namespace, monitors rollout status, and posts a completion or failure notification to the devops Slack channel.
naftiko: "0.5"
info:
label: "Azure Kubernetes Service Deployment Rollout"
description: "Triggers a rolling deployment update on an Azure Kubernetes Service cluster namespace, monitors rollout status, and posts a completion or failure notification to the devops Slack channel."
tags:
- cloud
- devops
- azure
- kubernetes
- slack
- deployment
capability:
exposes:
- type: mcp
namespace: k8s-ops
port: 8080
tools:
- name: trigger-aks-rollout
description: "Given an AKS cluster resource group, cluster name, namespace, and deployment name, trigger a rolling update with the new container image tag via the Azure Kubernetes Service API and notify the devops Slack channel with the rollout result."
inputParameters:
- name: resource_group
in: body
type: string
description: "The Azure resource group containing the AKS cluster."
- name: cluster_name
in: body
type: string
description: "The AKS cluster name."
- name: namespace
in: body
type: string
description: "The Kubernetes namespace where the deployment lives."
- name: deployment_name
in: body
type: string
description: "The Kubernetes deployment name to update."
- name: image_tag
in: body
type: string
description: "The new container image tag to deploy, e.g. v2.4.1."
steps:
- name: patch-deployment
type: call
call: "aks.patch-deployment"
with:
resource_group: "{{resource_group}}"
cluster_name: "{{cluster_name}}"
namespace: "{{namespace}}"
deployment_name: "{{deployment_name}}"
image_tag: "{{image_tag}}"
- name: notify-slack
type: call
call: "slack.post-message"
with:
channel: "devops-deployments"
text: "AKS rollout initiated: {{deployment_name}} in {{namespace}} on {{cluster_name}} — image: {{image_tag}} | Status: {{patch-deployment.status}}"
consumes:
- namespace: aks
type: http
baseUri: "https://management.azure.com/subscriptions"
authentication:
type: bearer
token: "$secrets.azure_mgmt_token"
resources:
- name: deployment
path: "/{subscription_id}/resourceGroups/{resource_group}/providers/Microsoft.ContainerService/managedClusters/{cluster_name}/namespaces/{namespace}/deployments/{deployment_name}"
inputParameters:
- name: subscription_id
in: path
- name: resource_group
in: path
- name: cluster_name
in: path
- name: namespace
in: path
- name: deployment_name
in: path
operations:
- name: patch-deployment
method: PATCH
- namespace: slack
type: http
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: chat
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Monitors robotic weld quality via Datadog, logs deviations in SAP QM, and alerts body shop supervisor via Teams.
naftiko: "0.5"
info:
label: "Body Shop Weld Quality Monitoring"
description: "Monitors robotic weld quality via Datadog, logs deviations in SAP QM, and alerts body shop supervisor via Teams."
tags:
- quality
- datadog
- sap
- microsoft-teams
- manufacturing
capability:
exposes:
- type: mcp
namespace: quality-ops
port: 8080
tools:
- name: body-shop-weld-quality-monitoring
description: "Monitors robotic weld quality via Datadog, logs deviations in SAP QM, and alerts body shop supervisor via Teams."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "Body Shop Weld Quality Monitoring: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "Body Shop Weld Quality Monitoring: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_quality_channel_id"
text: "Body Shop Weld Quality Monitoring | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Initiates document review from SharePoint, creates Jira task, and notifies reviewers via Teams.
naftiko: "0.5"
info:
label: "Compliance Document Review Cycle"
description: "Initiates document review from SharePoint, creates Jira task, and notifies reviewers via Teams."
tags:
- compliance
- sharepoint
- jira
- microsoft-teams
- quality
capability:
exposes:
- type: mcp
namespace: compliance-ops
port: 8080
tools:
- name: compliance-document-review-cycle
description: "Initiates document review from SharePoint, creates Jira task, and notifies reviewers via Teams."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "Compliance Document Review Cycle: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "Compliance Document Review Cycle: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_compliance_channel_id"
text: "Compliance Document Review Cycle | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Searches Confluence for engineering specifications by keyword.
naftiko: "0.5"
info:
label: "Confluence Engineering Spec Search"
description: "Searches Confluence for engineering specifications by keyword."
tags:
- engineering
- confluence
- documentation
- search
capability:
exposes:
- type: mcp
namespace: engineering
port: 8080
tools:
- name: confluence-search
description: "Searches Confluence for engineering specifications by keyword."
inputParameters:
- name: identifier
in: body
type: string
description: "The identifier for the lookup."
call: "engineering.get-record"
with:
id: "{{identifier}}"
outputParameters:
- name: result
type: string
mapping: "$.result"
consumes:
- namespace: engineering
type: http
baseUri: "https://bmw-s4.sap.com/api/v1"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: records
path: "/records"
operations:
- name: get-record
method: GET
Orchestrates OTA update by scheduling via ServiceNow and notifying the connected vehicle team via Teams.
naftiko: "0.5"
info:
label: "Connected Vehicle OTA Update Rollout"
description: "Orchestrates OTA update by scheduling via ServiceNow and notifying the connected vehicle team via Teams."
tags:
- automotive
- servicenow
- microsoft-teams
- connected-vehicle
capability:
exposes:
- type: mcp
namespace: automotive-ops
port: 8080
tools:
- name: connected-vehicle-ota-update-rollout
description: "Orchestrates OTA update by scheduling via ServiceNow and notifying the connected vehicle team via Teams."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "Connected Vehicle OTA Update Rollout: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "Connected Vehicle OTA Update Rollout: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_automotive_channel_id"
text: "Connected Vehicle OTA Update Rollout | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
When milestone completes in Jira, creates SAP billing document, updates Salesforce, and notifies finance via Teams.
naftiko: "0.5"
info:
label: "Contract Milestone Billing Trigger"
description: "When milestone completes in Jira, creates SAP billing document, updates Salesforce, and notifies finance via Teams."
tags:
- finance
- jira
- sap
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: finance-ops
port: 8080
tools:
- name: contract-milestone-billing-trigger
description: "When milestone completes in Jira, creates SAP billing document, updates Salesforce, and notifies finance via Teams."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "Contract Milestone Billing Trigger: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "Contract Milestone Billing Trigger: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_finance_channel_id"
text: "Contract Milestone Billing Trigger | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
When spare parts inventory drops below threshold, creates a SAP purchase requisition, logs in ServiceNow, and notifies via Teams.
naftiko: "0.5"
info:
label: "Critical Spare Parts Reorder Workflow"
description: "When spare parts inventory drops below threshold, creates a SAP purchase requisition, logs in ServiceNow, and notifies via Teams."
tags:
- supply-chain
- sap
- servicenow
- microsoft-teams
- procurement
capability:
exposes:
- type: mcp
namespace: supply-chain-ops
port: 8080
tools:
- name: critical-spare-parts-reorder-workflow
description: "When spare parts inventory drops below threshold, creates a SAP purchase requisition, logs in ServiceNow, and notifies via Teams."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "Critical Spare Parts Reorder Workflow: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "Critical Spare Parts Reorder Workflow: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_supply-chain_channel_id"
text: "Critical Spare Parts Reorder Workflow | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Syncs program status across Jira, SAP, Salesforce, publishes to Confluence, and notifies leadership via Teams.
naftiko: "0.5"
info:
label: "Cross-Functional Program Status Sync"
description: "Syncs program status across Jira, SAP, Salesforce, publishes to Confluence, and notifies leadership via Teams."
tags:
- project-management
- jira
- sap
- salesforce
- confluence
capability:
exposes:
- type: mcp
namespace: project-management-ops
port: 8080
tools:
- name: cross-functional-program-status-sync
description: "Syncs program status across Jira, SAP, Salesforce, publishes to Confluence, and notifies leadership via Teams."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "Cross-Functional Program Status Sync: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "Cross-Functional Program Status Sync: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_project-management_channel_id"
text: "Cross-Functional Program Status Sync | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Processes customer complaint from Salesforce by creating SAP quality notification, Jira investigation, and alerting support via Teams.
naftiko: "0.5"
info:
label: "Customer Complaint Resolution Workflow"
description: "Processes customer complaint from Salesforce by creating SAP quality notification, Jira investigation, and alerting support via Teams."
tags:
- quality
- salesforce
- sap
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: quality-ops
port: 8080
tools:
- name: customer-complaint-resolution-workflow
description: "Processes customer complaint from Salesforce by creating SAP quality notification, Jira investigation, and alerting support via Teams."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "Customer Complaint Resolution Workflow: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "Customer Complaint Resolution Workflow: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_quality_channel_id"
text: "Customer Complaint Resolution Workflow | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Responds to a cybersecurity alert by creating a ServiceNow incident, suspending the Okta account, and alerting security via Teams.
naftiko: "0.5"
info:
label: "Cybersecurity Incident Response Chain"
description: "Responds to a cybersecurity alert by creating a ServiceNow incident, suspending the Okta account, and alerting security via Teams."
tags:
- security
- splunk
- servicenow
- okta
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: security-ops
port: 8080
tools:
- name: cybersecurity-incident-response-chain
description: "Responds to a cybersecurity alert by creating a ServiceNow incident, suspending the Okta account, and alerting security via Teams."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "Cybersecurity Incident Response Chain: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "Cybersecurity Incident Response Chain: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_security_channel_id"
text: "Cybersecurity Incident Response Chain | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Monitors Snowflake data quality, creates Jira ticket when issues found, and alerts data engineering via Teams.
naftiko: "0.5"
info:
label: "Data Lake Ingestion Quality Monitor"
description: "Monitors Snowflake data quality, creates Jira ticket when issues found, and alerts data engineering via Teams."
tags:
- data-engineering
- snowflake
- jira
- microsoft-teams
- analytics
capability:
exposes:
- type: mcp
namespace: data-engineering-ops
port: 8080
tools:
- name: data-lake-ingestion-quality-monitor
description: "Monitors Snowflake data quality, creates Jira ticket when issues found, and alerts data engineering via Teams."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "Data Lake Ingestion Quality Monitor: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "Data Lake Ingestion Quality Monitor: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_data-engineering_channel_id"
text: "Data Lake Ingestion Quality Monitor | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
When a Datadog monitor triggers a critical alert, opens a P2 ServiceNow incident, assigns it to the on-call team, and notifies the relevant Microsoft Teams ops channel.
naftiko: "0.5"
info:
label: "Datadog Alert to ServiceNow Incident"
description: "When a Datadog monitor triggers a critical alert, opens a P2 ServiceNow incident, assigns it to the on-call team, and notifies the relevant Microsoft Teams ops channel."
tags:
- itsm
- observability
- incident-response
- datadog
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: incident-ops
port: 8080
tools:
- name: handle-datadog-alert
description: "Given a Datadog monitor ID and alert details, create a P2 ServiceNow incident, set the assignment group to the relevant on-call team, and post the incident number and Datadog monitor link to the Microsoft Teams ops channel."
inputParameters:
- name: monitor_id
in: body
type: string
description: "The Datadog monitor ID that triggered."
- name: monitor_name
in: body
type: string
description: "Human-readable Datadog monitor name."
- name: alert_message
in: body
type: string
description: "The alert message body from Datadog."
- name: affected_host
in: body
type: string
description: "The hostname or service name affected by the alert."
steps:
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Datadog Alert: {{monitor_name}} on {{affected_host}}"
description: "{{alert_message}}"
priority: "2"
assignment_group: "Cloud_Operations"
- name: notify-teams
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.ops_teams_channel_id"
text: "NEW INCIDENT {{create-incident.number}}: {{monitor_name}} | Host: {{affected_host}} | Monitor: https://app.datadoghq.com/monitors/{{monitor_id}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_pass"
resources:
- name: incident
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-message
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 current health status of a monitored service from Datadog.
naftiko: "0.5"
info:
label: "Datadog Service Health Check"
description: "Retrieves current health status of a monitored service from Datadog."
tags:
- monitoring
- datadog
- health-check
- operations
capability:
exposes:
- type: mcp
namespace: monitoring
port: 8080
tools:
- name: datadog-check
description: "Retrieves current health status of a monitored service from Datadog."
inputParameters:
- name: identifier
in: body
type: string
description: "The identifier for the lookup."
call: "monitoring.get-record"
with:
id: "{{identifier}}"
outputParameters:
- name: result
type: string
mapping: "$.result"
consumes:
- namespace: monitoring
type: http
baseUri: "https://bmw-s4.sap.com/api/v1"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: records
path: "/records"
operations:
- name: get-record
method: GET
Processes warranty claim from Salesforce by creating SAP service order, Jira investigation, and notifying warranty team.
naftiko: "0.5"
info:
label: "Dealer Warranty Claim Processing"
description: "Processes warranty claim from Salesforce by creating SAP service order, Jira investigation, and notifying warranty team."
tags:
- quality
- salesforce
- sap
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: quality-ops
port: 8080
tools:
- name: dealer-warranty-claim-processing
description: "Processes warranty claim from Salesforce by creating SAP service order, Jira investigation, and notifying warranty team."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "Dealer Warranty Claim Processing: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "Dealer Warranty Claim Processing: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_quality_channel_id"
text: "Dealer Warranty Claim Processing | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Polls Dynatrace for SLO breach events, opens a ServiceNow problem record, and pushes a structured alert to the New Relic event API for cross-platform observability correlation.
naftiko: "0.5"
info:
label: "Dynatrace SLO Breach Alert"
description: "Polls Dynatrace for SLO breach events, opens a ServiceNow problem record, and pushes a structured alert to the New Relic event API for cross-platform observability correlation."
tags:
- observability
- slo
- dynatrace
- servicenow
- new-relic
- monitoring
capability:
exposes:
- type: mcp
namespace: observability-ops
port: 8080
tools:
- name: handle-slo-breach
description: "Given a Dynatrace SLO ID and breach details, open a ServiceNow Problem record for root-cause analysis and create a correlated custom event in New Relic for unified observability tracking."
inputParameters:
- name: slo_id
in: body
type: string
description: "The Dynatrace SLO ID that breached its target."
- name: service_name
in: body
type: string
description: "The service or application name associated with the SLO."
- name: current_value
in: body
type: number
description: "The current SLO value at the time of breach (e.g. 98.1 for 98.1%)."
- name: target_value
in: body
type: number
description: "The SLO target value that was not met."
steps:
- name: create-problem
type: call
call: "servicenow.create-problem"
with:
short_description: "SLO breach: {{service_name}} — current {{current_value}}% vs target {{target_value}}%"
priority: "2"
assignment_group: "SRE_Team"
- name: push-newrelic-event
type: call
call: "newrelic.post-custom-event"
with:
eventType: "SLOBreach"
service: "{{service_name}}"
slo_id: "{{slo_id}}"
current_value: "{{current_value}}"
target_value: "{{target_value}}"
servicenow_problem: "{{create-problem.number}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_pass"
resources:
- name: problem
path: "/table/problem"
operations:
- name: create-problem
method: POST
- namespace: newrelic
type: http
baseUri: "https://insights-collector.newrelic.com/v1"
authentication:
type: apikey
key: "X-Insert-Key"
value: "$secrets.newrelic_insert_key"
placement: header
resources:
- name: events
path: "/accounts/{account_id}/events"
inputParameters:
- name: account_id
in: path
operations:
- name: post-custom-event
method: POST
Provisions badge access by syncing Workday data, creating ServiceNow request, and confirming via Teams.
naftiko: "0.5"
info:
label: "Employee Badge Access Provisioning"
description: "Provisions badge access by syncing Workday data, creating ServiceNow request, and confirming via Teams."
tags:
- security
- workday
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: security-ops
port: 8080
tools:
- name: employee-badge-access-provisioning
description: "Provisions badge access by syncing Workday data, creating ServiceNow request, and confirming via Teams."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "Employee Badge Access Provisioning: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "Employee Badge Access Provisioning: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_security_channel_id"
text: "Employee Badge Access Provisioning | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
When an employee departure is recorded in Workday, disables the Azure Active Directory account, closes open ServiceNow tickets assigned to the user, and notifies the HR team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Employee Offboarding Workflow"
description: "When an employee departure is recorded in Workday, disables the Azure Active Directory account, closes open ServiceNow tickets assigned to the user, and notifies the HR team via Microsoft Teams."
tags:
- hr
- offboarding
- workday
- azure-active-directory
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-offboarding
port: 8080
tools:
- name: trigger-offboarding
description: "Given a Workday employee ID and termination date, disable their Azure AD account, resolve their open ServiceNow tickets, and post a deprovisioning confirmation to the HR Microsoft Teams channel."
inputParameters:
- name: workday_employee_id
in: body
type: string
description: "The Workday worker ID for the departing employee."
- name: termination_date
in: body
type: string
description: "The employee termination date in YYYY-MM-DD format."
steps:
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{workday_employee_id}}"
- name: disable-account
type: call
call: "azure-ad.disable-user"
with:
user_upn: "{{get-employee.work_email}}"
account_enabled: "false"
- name: notify-hr
type: call
call: "msteams-hr.post-channel-message"
with:
channel_id: "$secrets.hr_teams_channel_id"
text: "Offboarding complete for {{get-employee.full_name}} (term date: {{termination_date}}). Azure AD account disabled."
consumes:
- namespace: workday
type: http
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: worker
path: "/workers/{worker_id}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- namespace: azure-ad
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.azure_ad_token"
resources:
- name: user
path: "/users/{user_upn}"
inputParameters:
- name: user_upn
in: path
operations:
- name: disable-user
method: PATCH
- namespace: msteams-hr
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-message
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 safety training compliance from Workday against requirements, alerting managers via Teams for gaps.
naftiko: "0.5"
info:
label: "Employee Safety Training Compliance Check"
description: "Checks safety training compliance from Workday against requirements, alerting managers via Teams for gaps."
tags:
- safety
- workday
- sap
- microsoft-teams
- training
capability:
exposes:
- type: mcp
namespace: safety-ops
port: 8080
tools:
- name: employee-safety-training-compliance-check
description: "Checks safety training compliance from Workday against requirements, alerting managers via Teams for gaps."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "Employee Safety Training Compliance Check: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "Employee Safety Training Compliance Check: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_safety_channel_id"
text: "Employee Safety Training Compliance Check | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Processes an engineering change order by creating a Jira ECO ticket, updating the BOM in SAP, and notifying teams via Teams.
naftiko: "0.5"
info:
label: "Engineering Change Order Process"
description: "Processes an engineering change order by creating a Jira ECO ticket, updating the BOM in SAP, and notifying teams via Teams."
tags:
- engineering
- jira
- sap
- microsoft-teams
- manufacturing
capability:
exposes:
- type: mcp
namespace: engineering-ops
port: 8080
tools:
- name: engineering-change-order-process
description: "Processes an engineering change order by creating a Jira ECO ticket, updating the BOM in SAP, and notifying teams via Teams."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "Engineering Change Order Process: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "Engineering Change Order Process: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_engineering_channel_id"
text: "Engineering Change Order Process | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Orchestrates design review by gathering Confluence docs, creating Jira task, and notifying reviewers via Teams.
naftiko: "0.5"
info:
label: "Engineering Design Review Orchestration"
description: "Orchestrates design review by gathering Confluence docs, creating Jira task, and notifying reviewers via Teams."
tags:
- engineering
- confluence
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: engineering-ops
port: 8080
tools:
- name: engineering-design-review-orchestration
description: "Orchestrates design review by gathering Confluence docs, creating Jira task, and notifying reviewers via Teams."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "Engineering Design Review Orchestration: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "Engineering Design Review Orchestration: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_engineering_channel_id"
text: "Engineering Design Review Orchestration | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Collects environmental sensor data via Datadog, logs in ServiceNow, and alerts EHS via Teams when thresholds are exceeded.
naftiko: "0.5"
info:
label: "Environmental Compliance Monitoring"
description: "Collects environmental sensor data via Datadog, logs in ServiceNow, and alerts EHS via Teams when thresholds are exceeded."
tags:
- safety
- ehs
- datadog
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: safety-ops
port: 8080
tools:
- name: environmental-compliance-monitoring
description: "Collects environmental sensor data via Datadog, logs in ServiceNow, and alerts EHS via Teams when thresholds are exceeded."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "Environmental Compliance Monitoring: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "Environmental Compliance Monitoring: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_safety_channel_id"
text: "Environmental Compliance Monitoring | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Creates SAP PM work order, ServiceNow task, and alerts facilities via Teams.
naftiko: "0.5"
info:
label: "Facility Maintenance Work Order Orchestration"
description: "Creates SAP PM work order, ServiceNow task, and alerts facilities via Teams."
tags:
- manufacturing
- sap
- servicenow
- microsoft-teams
- maintenance
capability:
exposes:
- type: mcp
namespace: manufacturing-ops
port: 8080
tools:
- name: facility-maintenance-work-order-orchestration
description: "Creates SAP PM work order, ServiceNow task, and alerts facilities via Teams."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "Facility Maintenance Work Order Orchestration: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "Facility Maintenance Work Order Orchestration: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_manufacturing_channel_id"
text: "Facility Maintenance Work Order Orchestration | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
When Datadog detects an IoT anomaly, creates a ServiceNow incident, SAP PM work order, and alerts maintenance via Teams.
naftiko: "0.5"
info:
label: "Factory Floor IoT Anomaly Response"
description: "When Datadog detects an IoT anomaly, creates a ServiceNow incident, SAP PM work order, and alerts maintenance via Teams."
tags:
- manufacturing
- datadog
- servicenow
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: manufacturing-ops
port: 8080
tools:
- name: factory-floor-iot-anomaly-response
description: "When Datadog detects an IoT anomaly, creates a ServiceNow incident, SAP PM work order, and alerts maintenance via Teams."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "Factory Floor IoT Anomaly Response: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "Factory Floor IoT Anomaly Response: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_manufacturing_channel_id"
text: "Factory Floor IoT Anomaly Response | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
On a GitHub Actions workflow failure on a protected branch, creates a Jira bug ticket with full context, posts a Datadog deployment event marker, and alerts the #engineering-alerts Slack channel.
naftiko: "0.5"
info:
label: "GitHub Actions CI/CD Pipeline Failure Handler"
description: "On a GitHub Actions workflow failure on a protected branch, creates a Jira bug ticket with full context, posts a Datadog deployment event marker, and alerts the #engineering-alerts Slack channel."
tags:
- devops
- cicd
- github
- jira
- datadog
- slack
- incident-response
capability:
exposes:
- type: mcp
namespace: devops-ops
port: 8080
tools:
- name: handle-pipeline-failure
description: "Given a GitHub Actions workflow failure event, create a Jira bug in the ENG project, post a Datadog deployment event marking the failure, and notify the Slack engineering-alerts channel with the Jira issue key and workflow log URL."
inputParameters:
- name: workflow_run_id
in: body
type: string
description: "The GitHub Actions workflow run ID."
- name: repository
in: body
type: string
description: "The GitHub repository in owner/repo format."
- name: branch
in: body
type: string
description: "The branch name where the failure occurred."
- name: commit_sha
in: body
type: string
description: "The commit SHA that triggered the failed workflow run."
- name: log_url
in: body
type: string
description: "URL to the workflow run logs in GitHub Actions."
steps:
- name: create-jira-bug
type: call
call: "jira.create-issue"
with:
project_key: "ENG"
issuetype: "Bug"
summary: "[CI Failure] {{repository}} / {{branch}} — run {{workflow_run_id}}"
description: "Workflow run {{workflow_run_id}} failed on {{branch}} at commit {{commit_sha}}. Log: {{log_url}}"
- name: post-datadog-event
type: call
call: "datadog.create-event"
with:
title: "CI Failure: {{repository}} on {{branch}}"
text: "Commit {{commit_sha}} — Jira: {{create-jira-bug.key}}"
alert_type: "error"
tags: "repo:{{repository}},branch:{{branch}}"
- name: notify-slack
type: call
call: "slack.post-message"
with:
channel: "engineering-alerts"
text: "Pipeline failure: {{repository}} | Branch: {{branch}} | Jira: {{create-jira-bug.key}} | Log: {{log_url}}"
consumes:
- namespace: jira
type: http
baseUri: "https://bmw.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issue
path: "/issue"
operations:
- name: create-issue
method: POST
- namespace: datadog
type: http
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
- namespace: slack
type: http
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: chat
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
On pull request creation, triggers a SonarQube analysis scan on the branch, fetches the quality gate result, and posts a pass or fail status comment back to the GitHub pull request.
naftiko: "0.5"
info:
label: "GitHub Code Quality Gate"
description: "On pull request creation, triggers a SonarQube analysis scan on the branch, fetches the quality gate result, and posts a pass or fail status comment back to the GitHub pull request."
tags:
- devops
- code-quality
- github
- sonarqube
- cicd
capability:
exposes:
- type: mcp
namespace: code-quality
port: 8080
tools:
- name: run-quality-gate
description: "Given a GitHub repository, pull request number, and branch name, trigger a SonarQube project analysis, wait for the quality gate result, and post a detailed pass/fail comment on the GitHub pull request."
inputParameters:
- name: repository
in: body
type: string
description: "The GitHub repository in owner/repo format."
- name: pr_number
in: body
type: integer
description: "The GitHub pull request number."
- name: branch
in: body
type: string
description: "The branch name to analyze in SonarQube."
- name: sonar_project_key
in: body
type: string
description: "The SonarQube project key corresponding to the repository."
steps:
- name: trigger-scan
type: call
call: "sonarqube.trigger-analysis"
with:
project_key: "{{sonar_project_key}}"
branch: "{{branch}}"
- name: get-quality-gate
type: call
call: "sonarqube.get-quality-gate"
with:
project_key: "{{sonar_project_key}}"
branch: "{{branch}}"
- name: post-pr-comment
type: call
call: "github.create-pr-comment"
with:
repository: "{{repository}}"
pr_number: "{{pr_number}}"
body: "SonarQube Quality Gate: {{get-quality-gate.status}} | Coverage: {{get-quality-gate.coverage}}% | Issues: {{get-quality-gate.violations}}"
consumes:
- namespace: sonarqube
type: http
baseUri: "https://sonar.bmwgroup.com/api"
authentication:
type: basic
username: "$secrets.sonarqube_token"
password: ""
resources:
- name: analysis
path: "/ce/submit"
operations:
- name: trigger-analysis
method: POST
- name: quality-gate
path: "/qualitygates/project_status"
inputParameters:
- name: project_key
in: query
- name: branch
in: query
operations:
- name: get-quality-gate
method: GET
- namespace: github
type: http
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: pr-comment
path: "/repos/{repository}/issues/{pr_number}/comments"
inputParameters:
- name: repository
in: path
- name: pr_number
in: path
operations:
- name: create-pr-comment
method: POST
Checks branch protection rules for a GitHub repository.
naftiko: "0.5"
info:
label: "GitHub Repository Branch Protection Check"
description: "Checks branch protection rules for a GitHub repository."
tags:
- devops
- github
- security
- compliance
capability:
exposes:
- type: mcp
namespace: devops
port: 8080
tools:
- name: github-check
description: "Checks branch protection rules for a GitHub repository."
inputParameters:
- name: identifier
in: body
type: string
description: "The identifier for the lookup."
call: "devops.get-record"
with:
id: "{{identifier}}"
outputParameters:
- name: result
type: string
mapping: "$.result"
consumes:
- namespace: devops
type: http
baseUri: "https://bmw-s4.sap.com/api/v1"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: records
path: "/records"
operations:
- name: get-record
method: GET
After a Gong call is processed, retrieves the AI-generated call summary and action items, then updates the related Salesforce opportunity with the call notes and next steps.
naftiko: "0.5"
info:
label: "Gong Call Intelligence to Salesforce Sync"
description: "After a Gong call is processed, retrieves the AI-generated call summary and action items, then updates the related Salesforce opportunity with the call notes and next steps."
tags:
- sales
- crm
- gong
- salesforce
- ai
capability:
exposes:
- type: mcp
namespace: sales-intelligence
port: 8080
tools:
- name: sync-gong-call-to-salesforce
description: "Given a Gong call ID and a Salesforce opportunity ID, fetch the call transcript summary and AI-extracted action items from Gong, then write the call notes and next steps to the Salesforce opportunity record as an activity log."
inputParameters:
- name: gong_call_id
in: body
type: string
description: "The Gong call ID to retrieve summary and action items for."
- name: salesforce_opportunity_id
in: body
type: string
description: "The Salesforce opportunity ID to update with the call intelligence."
steps:
- name: get-call-summary
type: call
call: "gong.get-call"
with:
call_id: "{{gong_call_id}}"
- name: log-activity
type: call
call: "salesforce.create-task"
with:
whatId: "{{salesforce_opportunity_id}}"
subject: "Gong Call: {{get-call-summary.title}}"
description: "{{get-call-summary.brief}}"
type: "Call"
status: "Completed"
consumes:
- namespace: gong
type: http
baseUri: "https://api.gong.io/v2"
authentication:
type: basic
username: "$secrets.gong_access_key"
password: "$secrets.gong_access_secret"
resources:
- name: call
path: "/calls/{call_id}"
inputParameters:
- name: call_id
in: path
operations:
- name: get-call
method: GET
- namespace: salesforce
type: http
baseUri: "https://bmw.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: task
path: "/sobjects/Task"
operations:
- name: create-task
method: POST
When hazardous material is received, validates SDS in SharePoint, creates SAP EHS notification, and alerts safety via Teams.
naftiko: "0.5"
info:
label: "Hazardous Material Handling Alert"
description: "When hazardous material is received, validates SDS in SharePoint, creates SAP EHS notification, and alerts safety via Teams."
tags:
- safety
- ehs
- sharepoint
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: safety-ops
port: 8080
tools:
- name: hazardous-material-handling-alert
description: "When hazardous material is received, validates SDS in SharePoint, creates SAP EHS notification, and alerts safety via Teams."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "Hazardous Material Handling Alert: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "Hazardous Material Handling Alert: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_safety_channel_id"
text: "Hazardous Material Handling Alert | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Retrieves completed HubSpot email campaign statistics and syncs open rate, click rate, and bounce data into a Snowflake marketing analytics table for cross-channel reporting.
naftiko: "0.5"
info:
label: "HubSpot Marketing Campaign Email Sync"
description: "Retrieves completed HubSpot email campaign statistics and syncs open rate, click rate, and bounce data into a Snowflake marketing analytics table for cross-channel reporting."
tags:
- marketing
- hubspot
- snowflake
- reporting
capability:
exposes:
- type: mcp
namespace: marketing-ops
port: 8080
tools:
- name: sync-email-campaign-stats
description: "Given a HubSpot campaign ID, fetch the email send statistics (opens, clicks, bounces) from HubSpot Marketing API and upsert the results into Snowflake MARKETING.EMAIL_CAMPAIGNS for BI reporting."
inputParameters:
- name: campaign_id
in: body
type: string
description: "The HubSpot email campaign ID."
steps:
- name: get-campaign-stats
type: call
call: "hubspot.get-campaign-stats"
with:
campaign_id: "{{campaign_id}}"
- name: upsert-snowflake
type: call
call: "snowflake.upsert-records"
with:
table: "MARKETING.EMAIL_CAMPAIGNS"
records: "{{get-campaign-stats.counters}}"
consumes:
- namespace: hubspot
type: http
baseUri: "https://api.hubapi.com/marketing/v3"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: campaign-stats
path: "/emails/statistics/list"
inputParameters:
- name: campaign_id
in: query
operations:
- name: get-campaign-stats
method: GET
- namespace: snowflake
type: http
baseUri: "https://bmw.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: upsert-records
method: POST
Ingests powertrain test data to Snowflake, refreshes Tableau dashboard, and notifies engineering via Teams.
naftiko: "0.5"
info:
label: "Hybrid Powertrain Test Data Pipeline"
description: "Ingests powertrain test data to Snowflake, refreshes Tableau dashboard, and notifies engineering via Teams."
tags:
- engineering
- snowflake
- tableau
- microsoft-teams
- automotive
capability:
exposes:
- type: mcp
namespace: engineering-ops
port: 8080
tools:
- name: hybrid-powertrain-test-data-pipeline
description: "Ingests powertrain test data to Snowflake, refreshes Tableau dashboard, and notifies engineering via Teams."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "Hybrid Powertrain Test Data Pipeline: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "Hybrid Powertrain Test Data Pipeline: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_engineering_channel_id"
text: "Hybrid Powertrain Test Data Pipeline | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Monitors Informatica data quality rule violations and when a critical threshold is breached, opens a ServiceNow incident, logs the violation details to Snowflake, and sends an alert to the data-stewards Slack channel.
naftiko: "0.5"
info:
label: "Informatica Data Quality Alert Handler"
description: "Monitors Informatica data quality rule violations and when a critical threshold is breached, opens a ServiceNow incident, logs the violation details to Snowflake, and sends an alert to the data-stewards Slack channel."
tags:
- data
- data-quality
- informatica
- servicenow
- snowflake
- slack
capability:
exposes:
- type: mcp
namespace: data-quality-ops
port: 8080
tools:
- name: handle-data-quality-violation
description: "Given an Informatica data quality rule ID and violation count, fetch the rule violation summary from Informatica, open a ServiceNow incident if the violation count exceeds the threshold, write the violation record to Snowflake, and notify the data-stewards Slack channel."
inputParameters:
- name: rule_id
in: body
type: string
description: "The Informatica data quality rule ID that triggered a violation."
- name: violation_count
in: body
type: integer
description: "The number of records violating the rule in the current run."
- name: threshold
in: body
type: integer
description: "The violation count above which a ServiceNow incident is opened."
steps:
- name: get-rule-detail
type: call
call: "informatica.get-dq-rule"
with:
rule_id: "{{rule_id}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Data quality violation: {{get-rule-detail.rule_name}} — {{violation_count}} records"
priority: "3"
assignment_group: "Data_Stewards"
- name: log-violation
type: call
call: "snowflake.insert-violation"
with:
table: "DATA_QUALITY.VIOLATIONS"
rule_id: "{{rule_id}}"
violation_count: "{{violation_count}}"
incident_number: "{{create-incident.number}}"
- name: notify-slack
type: call
call: "slack.post-message"
with:
channel: "data-stewards"
text: "Data quality alert: {{get-rule-detail.rule_name}} — {{violation_count}} violations. Incident: {{create-incident.number}}"
consumes:
- namespace: informatica
type: http
baseUri: "https://dm-us.informaticacloud.com/saas/api/v2"
authentication:
type: bearer
token: "$secrets.informatica_token"
resources:
- name: dq-rule
path: "/dqRules/{rule_id}"
inputParameters:
- name: rule_id
in: path
operations:
- name: get-dq-rule
method: GET
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_pass"
resources:
- name: incident
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: snowflake
type: http
baseUri: "https://bmw.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: insert-violation
method: POST
- namespace: slack
type: http
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: chat
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Processes IT change by creating ServiceNow change request, running Terraform plan, and posting for CAB review via Teams.
naftiko: "0.5"
info:
label: "IT Infrastructure Change Approval Workflow"
description: "Processes IT change by creating ServiceNow change request, running Terraform plan, and posting for CAB review via Teams."
tags:
- devops
- servicenow
- microsoft-teams
- infrastructure
capability:
exposes:
- type: mcp
namespace: devops-ops
port: 8080
tools:
- name: it-infrastructure-change-approval-workflow
description: "Processes IT change by creating ServiceNow change request, running Terraform plan, and posting for CAB review via Teams."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "IT Infrastructure Change Approval Workflow: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "IT Infrastructure Change Approval Workflow: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_devops_channel_id"
text: "IT Infrastructure Change Approval Workflow | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
When a critical vulnerability is found, creates a Jira ticket, updates ServiceNow CMDB, and alerts security via Teams.
naftiko: "0.5"
info:
label: "IT Security Vulnerability Remediation"
description: "When a critical vulnerability is found, creates a Jira ticket, updates ServiceNow CMDB, and alerts security via Teams."
tags:
- security
- github
- jira
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: security-ops
port: 8080
tools:
- name: it-security-vulnerability-remediation
description: "When a critical vulnerability is found, creates a Jira ticket, updates ServiceNow CMDB, and alerts security via Teams."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "IT Security Vulnerability Remediation: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "IT Security Vulnerability Remediation: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_security_channel_id"
text: "IT Security Vulnerability Remediation | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Retrieves a Jira engineering issue by key, returning summary, status, and assignee.
naftiko: "0.5"
info:
label: "Jira Engineering Issue Lookup"
description: "Retrieves a Jira engineering issue by key, returning summary, status, and assignee."
tags:
- engineering
- jira
- lookup
- project-management
capability:
exposes:
- type: mcp
namespace: engineering
port: 8080
tools:
- name: jira-lookup
description: "Retrieves a Jira engineering issue by key, returning summary, status, and assignee."
inputParameters:
- name: identifier
in: body
type: string
description: "The identifier for the lookup."
call: "engineering.get-record"
with:
id: "{{identifier}}"
outputParameters:
- name: result
type: string
mapping: "$.result"
consumes:
- namespace: engineering
type: http
baseUri: "https://bmw-s4.sap.com/api/v1"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: records
path: "/records"
operations:
- name: get-record
method: GET
Tracks continuous improvement by creating Jira stories, logging in ServiceNow, and notifying the kaizen team via Teams.
naftiko: "0.5"
info:
label: "Kaizen Improvement Tracking"
description: "Tracks continuous improvement by creating Jira stories, logging in ServiceNow, and notifying the kaizen team via Teams."
tags:
- manufacturing
- jira
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: manufacturing-ops
port: 8080
tools:
- name: kaizen-improvement-tracking
description: "Tracks continuous improvement by creating Jira stories, logging in ServiceNow, and notifying the kaizen team via Teams."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "Kaizen Improvement Tracking: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "Kaizen Improvement Tracking: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_manufacturing_channel_id"
text: "Kaizen Improvement Tracking | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Pulls the last seven days of BMW LinkedIn Campaign Manager ad performance metrics and publishes a formatted weekly digest to the marketing Microsoft Teams channel.
naftiko: "0.5"
info:
label: "LinkedIn Campaign Performance Digest"
description: "Pulls the last seven days of BMW LinkedIn Campaign Manager ad performance metrics and publishes a formatted weekly digest to the marketing Microsoft Teams channel."
tags:
- marketing
- social
- linkedin
- microsoft-teams
- reporting
capability:
exposes:
- type: mcp
namespace: marketing-reporting
port: 8080
tools:
- name: digest-linkedin-campaigns
description: "Fetch the past 7 days of LinkedIn Campaign Manager performance data (impressions, clicks, CTR, spend) for the configured BMW ad account, then post a formatted digest to the marketing Microsoft Teams channel."
inputParameters:
- name: account_id
in: body
type: string
description: "The LinkedIn Campaign Manager account ID."
- name: teams_channel_id
in: body
type: string
description: "The Microsoft Teams channel ID to post the digest to."
steps:
- name: get-campaign-stats
type: call
call: "linkedin.get-ad-analytics"
with:
account_id: "{{account_id}}"
dateRange_start: "LAST_7_DAYS"
- name: post-digest
type: call
call: "msteams.post-channel-message"
with:
channel_id: "{{teams_channel_id}}"
text: "LinkedIn Weekly Campaign Digest | Impressions: {{get-campaign-stats.totalImpressions}} | Clicks: {{get-campaign-stats.totalClicks}} | Spend: {{get-campaign-stats.totalSpend}}"
consumes:
- namespace: linkedin
type: http
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: ad-analytics
path: "/adAnalytics"
inputParameters:
- name: account_id
in: query
- name: dateRange_start
in: query
operations:
- name: get-ad-analytics
method: GET
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-message
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 active job applicants from LinkedIn Talent Hub for a given job posting and syncs their application status and contact details into Workday Recruiting for unified talent pipeline management.
naftiko: "0.5"
info:
label: "LinkedIn Recruiting Pipeline Sync"
description: "Pulls active job applicants from LinkedIn Talent Hub for a given job posting and syncs their application status and contact details into Workday Recruiting for unified talent pipeline management."
tags:
- hr
- recruiting
- linkedin
- workday
capability:
exposes:
- type: mcp
namespace: talent-ops
port: 8080
tools:
- name: sync-linkedin-applicants
description: "Given a LinkedIn job posting ID, fetch all applicants with their profiles and status from the LinkedIn Talent Solutions API, then create or update each applicant record in Workday Recruiting."
inputParameters:
- name: job_posting_id
in: body
type: string
description: "The LinkedIn job posting ID to retrieve applicants for."
steps:
- name: get-applicants
type: call
call: "linkedin.get-job-applicants"
with:
job_posting_id: "{{job_posting_id}}"
- name: sync-to-workday
type: call
call: "workday.create-candidate"
with:
applicants: "{{get-applicants.elements}}"
source: "LinkedIn"
consumes:
- namespace: linkedin
type: http
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: job-applicants
path: "/jobApplications"
inputParameters:
- name: job_posting_id
in: query
operations:
- name: get-job-applicants
method: GET
- namespace: workday
type: http
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: candidate
path: "/recruiting/candidates"
operations:
- name: create-candidate
method: POST
Compiles daily manufacturing KPIs from SAP, refreshes Tableau dashboard, and posts summary to Teams.
naftiko: "0.5"
info:
label: "Manufacturing KPI Daily Digest"
description: "Compiles daily manufacturing KPIs from SAP, refreshes Tableau dashboard, and posts summary to Teams."
tags:
- production
- sap
- tableau
- microsoft-teams
- analytics
capability:
exposes:
- type: mcp
namespace: production-ops
port: 8080
tools:
- name: manufacturing-kpi-daily-digest
description: "Compiles daily manufacturing KPIs from SAP, refreshes Tableau dashboard, and posts summary to Teams."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "Manufacturing KPI Daily Digest: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "Manufacturing KPI Daily Digest: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_production_channel_id"
text: "Manufacturing KPI Daily Digest | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Compiles a shift handoff report from SAP production data, ServiceNow incidents, and posts summary to Teams.
naftiko: "0.5"
info:
label: "Manufacturing Shift Handoff Report"
description: "Compiles a shift handoff report from SAP production data, ServiceNow incidents, and posts summary to Teams."
tags:
- production
- sap
- servicenow
- microsoft-teams
- manufacturing
capability:
exposes:
- type: mcp
namespace: production-ops
port: 8080
tools:
- name: manufacturing-shift-handoff-report
description: "Compiles a shift handoff report from SAP production data, ServiceNow incidents, and posts summary to Teams."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "Manufacturing Shift Handoff Report: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "Manufacturing Shift Handoff Report: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_production_channel_id"
text: "Manufacturing Shift Handoff Report | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Polls MuleSoft Anypoint Platform for APIs exceeding the configured error rate threshold, creates a ServiceNow incident for each breaching API, and posts a summary digest to the integration team Slack channel.
naftiko: "0.5"
info:
label: "MuleSoft API Error Rate Monitor"
description: "Polls MuleSoft Anypoint Platform for APIs exceeding the configured error rate threshold, creates a ServiceNow incident for each breaching API, and posts a summary digest to the integration team Slack channel."
tags:
- integration
- api
- mulesoft
- servicenow
- slack
- monitoring
capability:
exposes:
- type: mcp
namespace: integration-ops
port: 8080
tools:
- name: check-api-error-rates
description: "Given a MuleSoft Anypoint environment ID and error rate threshold percentage, query the Anypoint Monitoring API for all APIs whose error rate exceeds the threshold in the past hour, open a ServiceNow incident per breaching API, and post a summary to the integration-ops Slack channel."
inputParameters:
- name: environment_id
in: body
type: string
description: "The MuleSoft Anypoint Platform environment ID to check."
- name: error_rate_threshold
in: body
type: number
description: "The error rate percentage threshold above which an API is flagged, e.g. 5.0 for 5%."
steps:
- name: get-api-metrics
type: call
call: "mulesoft.get-api-metrics"
with:
environment_id: "{{environment_id}}"
duration: "1h"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "MuleSoft API error rate breach: {{get-api-metrics.breachingApiCount}} APIs above {{error_rate_threshold}}%"
priority: "2"
assignment_group: "Integration_Operations"
- name: alert-slack
type: call
call: "slack.post-message"
with:
channel: "integration-ops"
text: "MuleSoft API Alert: {{get-api-metrics.breachingApiCount}} APIs exceeding {{error_rate_threshold}}% error rate. ServiceNow: {{create-incident.number}}"
consumes:
- namespace: mulesoft
type: http
baseUri: "https://anypoint.mulesoft.com/monitoring/archive/api/v1"
authentication:
type: bearer
token: "$secrets.mulesoft_token"
resources:
- name: api-metrics
path: "/organizations/{org_id}/environments/{environment_id}/apis/metrics"
inputParameters:
- name: environment_id
in: path
- name: org_id
in: path
- name: duration
in: query
operations:
- name: get-api-metrics
method: GET
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_pass"
resources:
- name: incident
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: slack
type: http
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: chat
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a new hire record is created in Workday, opens a ServiceNow onboarding ticket, provisions an Azure Active Directory account, and sends a Microsoft Teams welcome message with first-day instructions.
naftiko: "0.5"
info:
label: "New Hire Onboarding Orchestrator"
description: "When a new hire record is created in Workday, opens a ServiceNow onboarding ticket, provisions an Azure Active Directory account, and sends a Microsoft Teams welcome message with first-day instructions."
tags:
- hr
- onboarding
- workday
- servicenow
- azure-active-directory
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-onboarding
port: 8080
tools:
- name: trigger-onboarding
description: "Given a Workday employee ID and start date, orchestrate the full new-hire onboarding sequence: fetch employee profile from Workday, open a ServiceNow onboarding task, provision an Azure AD account, and send a Microsoft Teams welcome card."
inputParameters:
- name: workday_employee_id
in: body
type: string
description: "The Workday worker ID for the new hire."
- name: start_date
in: body
type: string
description: "The employee start date in YYYY-MM-DD format."
steps:
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{workday_employee_id}}"
- name: open-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "New hire onboarding: {{get-employee.full_name}}"
category: "hr_onboarding"
assigned_to: "IT_Onboarding_Team"
- name: provision-ad-account
type: call
call: "azure-ad.create-user"
with:
display_name: "{{get-employee.full_name}}"
mail_nickname: "{{get-employee.preferred_name}}"
department: "{{get-employee.department}}"
- name: send-welcome
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{get-employee.work_email}}"
text: "Welcome to BMW, {{get-employee.first_name}}! Your IT onboarding ticket is {{open-ticket.number}}. Your Azure account is ready."
consumes:
- namespace: workday
type: http
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: worker
path: "/workers/{worker_id}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_pass"
resources:
- name: incident
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: azure-ad
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.azure_ad_token"
resources:
- name: users
path: "/users"
operations:
- name: create-user
method: POST
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chat-messages
path: "/chats/{chat_id}/messages"
inputParameters:
- name: chat_id
in: path
operations:
- name: send-message
method: POST
Provisions program workspace by creating Jira project, Confluence space, and Teams channel.
naftiko: "0.5"
info:
label: "New Program Workspace Setup"
description: "Provisions program workspace by creating Jira project, Confluence space, and Teams channel."
tags:
- engineering
- jira
- confluence
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: engineering-ops
port: 8080
tools:
- name: new-program-workspace-setup
description: "Provisions program workspace by creating Jira project, Confluence space, and Teams channel."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "New Program Workspace Setup: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "New Program Workspace Setup: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_engineering_channel_id"
text: "New Program Workspace Setup | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Retrieves the current account status of a user in Okta by email.
naftiko: "0.5"
info:
label: "Okta User Status Check"
description: "Retrieves the current account status of a user in Okta by email."
tags:
- identity
- okta
- security
- lookup
capability:
exposes:
- type: mcp
namespace: identity
port: 8080
tools:
- name: okta-check
description: "Retrieves the current account status of a user in Okta by email."
inputParameters:
- name: identifier
in: body
type: string
description: "The identifier for the lookup."
call: "identity.get-record"
with:
id: "{{identifier}}"
outputParameters:
- name: result
type: string
mapping: "$.result"
consumes:
- namespace: identity
type: http
baseUri: "https://bmw-s4.sap.com/api/v1"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: records
path: "/records"
operations:
- name: get-record
method: GET
Accepts a raw document text input, sends it to OpenAI GPT-4 for executive summary generation, and writes the summary back to a Confluence knowledge base page.
naftiko: "0.5"
info:
label: "OpenAI Document Summarizer"
description: "Accepts a raw document text input, sends it to OpenAI GPT-4 for executive summary generation, and writes the summary back to a Confluence knowledge base page."
tags:
- ai
- document-management
- openai
- confluence
- automation
capability:
exposes:
- type: mcp
namespace: ai-ops
port: 8080
tools:
- name: summarize-document
description: "Given a raw document text and a Confluence page ID, send the document to OpenAI's chat completions API for a structured executive summary, then update the specified Confluence page with the generated summary."
inputParameters:
- name: document_text
in: body
type: string
description: "The full text of the document to be summarized."
- name: confluence_page_id
in: body
type: string
description: "The Confluence page ID where the summary will be written."
- name: summary_length
in: body
type: string
description: "Desired summary length: 'brief' (3 sentences), 'standard' (1 paragraph), or 'detailed' (3 paragraphs)."
steps:
- name: generate-summary
type: call
call: "openai.chat-completion"
with:
model: "gpt-4o"
prompt: "Produce a {{summary_length}} executive summary of the following document:\n\n{{document_text}}"
- name: update-confluence
type: call
call: "confluence.update-page"
with:
page_id: "{{confluence_page_id}}"
content: "{{generate-summary.choices[0].message.content}}"
consumes:
- namespace: openai
type: http
baseUri: "https://api.openai.com/v1"
authentication:
type: bearer
token: "$secrets.openai_api_key"
resources:
- name: chat
path: "/chat/completions"
operations:
- name: chat-completion
method: POST
- namespace: confluence
type: http
baseUri: "https://bmw.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: page
path: "/content/{page_id}"
inputParameters:
- name: page_id
in: path
operations:
- name: update-page
method: PUT
Monitors paint quality via Datadog, logs deviations in SAP QM, and alerts paint shop supervisor via Teams.
naftiko: "0.5"
info:
label: "Paint Shop Quality Monitoring"
description: "Monitors paint quality via Datadog, logs deviations in SAP QM, and alerts paint shop supervisor via Teams."
tags:
- quality
- datadog
- sap
- microsoft-teams
- manufacturing
capability:
exposes:
- type: mcp
namespace: quality-ops
port: 8080
tools:
- name: paint-shop-quality-monitoring
description: "Monitors paint quality via Datadog, logs deviations in SAP QM, and alerts paint shop supervisor via Teams."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "Paint Shop Quality Monitoring: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "Paint Shop Quality Monitoring: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_quality_channel_id"
text: "Paint Shop Quality Monitoring | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Receives a Palo Alto Networks threat alert, looks up the source IP in the threat intelligence feed, opens a high-priority ServiceNow security incident, and notifies the security team Slack channel.
naftiko: "0.5"
info:
label: "Palo Alto Networks Security Alert Triage"
description: "Receives a Palo Alto Networks threat alert, looks up the source IP in the threat intelligence feed, opens a high-priority ServiceNow security incident, and notifies the security team Slack channel."
tags:
- security
- incident-response
- palo-alto-networks
- servicenow
- slack
capability:
exposes:
- type: mcp
namespace: security-ops
port: 8080
tools:
- name: triage-security-alert
description: "Given a Palo Alto Networks alert ID and source IP, fetch the threat detail from the Palo Alto firewall API, create a high-priority security incident in ServiceNow, and post triage context to the security-alerts Slack channel."
inputParameters:
- name: alert_id
in: body
type: string
description: "The Palo Alto Networks threat log alert ID."
- name: source_ip
in: body
type: string
description: "The source IP address associated with the threat alert."
- name: threat_type
in: body
type: string
description: "The threat category, e.g. vulnerability, spyware, wildfire-virus."
steps:
- name: get-threat-detail
type: call
call: "paloalto.get-threat-log"
with:
alert_id: "{{alert_id}}"
- name: create-sec-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Security threat detected: {{threat_type}} from {{source_ip}}"
description: "Alert ID: {{alert_id}} | Threat: {{get-threat-detail.threat_name}} | Severity: {{get-threat-detail.severity}}"
priority: "1"
assignment_group: "Security_Operations"
- name: alert-security-slack
type: call
call: "slack.post-message"
with:
channel: "security-alerts"
text: "SECURITY INCIDENT {{create-sec-incident.number}}: {{threat_type}} from {{source_ip}} | Severity: {{get-threat-detail.severity}} | ServiceNow: {{create-sec-incident.number}}"
consumes:
- namespace: paloalto
type: http
baseUri: "https://bmw-fw.bmwgroup.com/restapi/v10.1"
authentication:
type: apikey
key: "X-PAN-KEY"
value: "$secrets.paloalto_api_key"
placement: header
resources:
- name: threat-log
path: "/Objects/Threats/{alert_id}"
inputParameters:
- name: alert_id
in: path
operations:
- name: get-threat-log
method: GET
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_pass"
resources:
- name: incident
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: slack
type: http
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: chat
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Monitors plant energy via Datadog, logs in ServiceNow, and alerts facilities via Teams.
naftiko: "0.5"
info:
label: "Plant Energy Consumption Monitoring"
description: "Monitors plant energy via Datadog, logs in ServiceNow, and alerts facilities via Teams."
tags:
- sustainability
- datadog
- servicenow
- microsoft-teams
- ehs
capability:
exposes:
- type: mcp
namespace: sustainability-ops
port: 8080
tools:
- name: plant-energy-consumption-monitoring
description: "Monitors plant energy via Datadog, logs in ServiceNow, and alerts facilities via Teams."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "Plant Energy Consumption Monitoring: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "Plant Energy Consumption Monitoring: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_sustainability_channel_id"
text: "Plant Energy Consumption Monitoring | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Queries Pluralsight for employees who have not completed mandatory training courses by the compliance deadline, syncs the non-completion list to Workday, and notifies managers via Microsoft Teams.
naftiko: "0.5"
info:
label: "Pluralsight Learning Compliance Report"
description: "Queries Pluralsight for employees who have not completed mandatory training courses by the compliance deadline, syncs the non-completion list to Workday, and notifies managers via Microsoft Teams."
tags:
- hr
- learning
- compliance
- pluralsight
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: learning-compliance
port: 8080
tools:
- name: report-training-noncompliance
description: "Given a Pluralsight plan ID and compliance deadline, fetch the list of users who have not completed the required course plan, update each user's learning record in Workday, and send a compliance reminder message to their manager via Microsoft Teams."
inputParameters:
- name: plan_id
in: body
type: string
description: "The Pluralsight plan ID representing the mandatory training course set."
- name: deadline
in: body
type: string
description: "The compliance deadline in YYYY-MM-DD format."
steps:
- name: get-noncomplete-users
type: call
call: "pluralsight.get-plan-progress"
with:
plan_id: "{{plan_id}}"
completion_status: "incomplete"
- name: update-workday
type: call
call: "workday.update-learning-record"
with:
plan_id: "{{plan_id}}"
users: "{{get-noncomplete-users.users}}"
status: "noncompliant"
- name: notify-managers
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.hr_teams_channel_id"
text: "Training compliance alert: {{get-noncomplete-users.count}} employees have not completed plan {{plan_id}} by {{deadline}}. Workday records updated."
consumes:
- namespace: pluralsight
type: http
baseUri: "https://app.pluralsight.com/plans/api/v1"
authentication:
type: bearer
token: "$secrets.pluralsight_token"
resources:
- name: plan-progress
path: "/plans/{plan_id}/users"
inputParameters:
- name: plan_id
in: path
- name: completion_status
in: query
operations:
- name: get-plan-progress
method: GET
- namespace: workday
type: http
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: learning-record
path: "/workers/learningRecords"
operations:
- name: update-learning-record
method: POST
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-message
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 the status of a Power BI dataset refresh, and if the refresh has failed, creates a ServiceNow incident and notifies the BI team via Slack with the error details.
naftiko: "0.5"
info:
label: "Power BI Dataset Refresh Status Monitor"
description: "Checks the status of a Power BI dataset refresh, and if the refresh has failed, creates a ServiceNow incident and notifies the BI team via Slack with the error details."
tags:
- data
- analytics
- power-bi
- servicenow
- slack
- monitoring
capability:
exposes:
- type: mcp
namespace: bi-ops
port: 8080
tools:
- name: check-dataset-refresh
description: "Given a Power BI workspace ID and dataset ID, fetch the latest refresh history record; if the most recent refresh failed, open a ServiceNow incident and alert the bi-ops Slack channel with the error message."
inputParameters:
- name: workspace_id
in: body
type: string
description: "The Power BI workspace (group) ID."
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID to check."
steps:
- name: get-refresh-status
type: call
call: "powerbi.get-refresh-history"
with:
workspace_id: "{{workspace_id}}"
dataset_id: "{{dataset_id}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Power BI dataset refresh failed: {{dataset_id}}"
description: "Workspace: {{workspace_id}} | Dataset: {{dataset_id}} | Error: {{get-refresh-status.serviceExceptionJson}}"
priority: "3"
assignment_group: "BI_Operations"
- name: alert-slack
type: call
call: "slack.post-message"
with:
channel: "bi-ops"
text: "Power BI refresh failure: dataset {{dataset_id}} in workspace {{workspace_id}}. Incident: {{create-incident.number}} | Error: {{get-refresh-status.serviceExceptionJson}}"
consumes:
- namespace: powerbi
type: http
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: refresh-history
path: "/groups/{workspace_id}/datasets/{dataset_id}/refreshes"
inputParameters:
- name: workspace_id
in: path
- name: dataset_id
in: path
operations:
- name: get-refresh-history
method: GET
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_pass"
resources:
- name: incident
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: slack
type: http
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: chat
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When Datadog detects abnormal patterns, creates SAP PM work order and alerts maintenance via Teams.
naftiko: "0.5"
info:
label: "Predictive Maintenance Alert"
description: "When Datadog detects abnormal patterns, creates SAP PM work order and alerts maintenance via Teams."
tags:
- manufacturing
- datadog
- sap
- microsoft-teams
- maintenance
capability:
exposes:
- type: mcp
namespace: manufacturing-ops
port: 8080
tools:
- name: predictive-maintenance-alert
description: "When Datadog detects abnormal patterns, creates SAP PM work order and alerts maintenance via Teams."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "Predictive Maintenance Alert: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "Predictive Maintenance Alert: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_manufacturing_channel_id"
text: "Predictive Maintenance Alert | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Monitors takt time via Datadog, logs deviations in SAP, and alerts production supervisor via Teams.
naftiko: "0.5"
info:
label: "Production Line Takt Time Monitoring"
description: "Monitors takt time via Datadog, logs deviations in SAP, and alerts production supervisor via Teams."
tags:
- production
- datadog
- sap
- microsoft-teams
- manufacturing
capability:
exposes:
- type: mcp
namespace: production-ops
port: 8080
tools:
- name: production-line-takt-time-monitoring
description: "Monitors takt time via Datadog, logs deviations in SAP, and alerts production supervisor via Teams."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "Production Line Takt Time Monitoring: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "Production Line Takt Time Monitoring: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_production_channel_id"
text: "Production Line Takt Time Monitoring | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Validates quality gate by pulling SAP QM results, checking Jira criteria, and posting status to Teams.
naftiko: "0.5"
info:
label: "Production Quality Gate Check"
description: "Validates quality gate by pulling SAP QM results, checking Jira criteria, and posting status to Teams."
tags:
- quality
- manufacturing
- sap
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: quality-ops
port: 8080
tools:
- name: production-quality-gate-check
description: "Validates quality gate by pulling SAP QM results, checking Jira criteria, and posting status to Teams."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "Production Quality Gate Check: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "Production Quality Gate Check: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_quality_channel_id"
text: "Production Quality Gate Check | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Initiates a quality defect investigation by creating a SAP quality notification, a Jira ticket, and alerting quality via Teams.
naftiko: "0.5"
info:
label: "Quality Defect Investigation"
description: "Initiates a quality defect investigation by creating a SAP quality notification, a Jira ticket, and alerting quality via Teams."
tags:
- quality
- sap
- jira
- microsoft-teams
- manufacturing
capability:
exposes:
- type: mcp
namespace: quality-ops
port: 8080
tools:
- name: quality-defect-investigation
description: "Initiates a quality defect investigation by creating a SAP quality notification, a Jira ticket, and alerting quality via Teams."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "Quality Defect Investigation: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "Quality Defect Investigation: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_quality_channel_id"
text: "Quality Defect Investigation | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Prepares for audit by collecting SharePoint documents, creating Jira checklist, and notifying compliance via Teams.
naftiko: "0.5"
info:
label: "Regulatory Audit Preparation Workflow"
description: "Prepares for audit by collecting SharePoint documents, creating Jira checklist, and notifying compliance via Teams."
tags:
- compliance
- sharepoint
- jira
- microsoft-teams
- audit
capability:
exposes:
- type: mcp
namespace: compliance-ops
port: 8080
tools:
- name: regulatory-audit-preparation-workflow
description: "Prepares for audit by collecting SharePoint documents, creating Jira checklist, and notifying compliance via Teams."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "Regulatory Audit Preparation Workflow: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "Regulatory Audit Preparation Workflow: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_compliance_channel_id"
text: "Regulatory Audit Preparation Workflow | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
When safety incident reported, creates ServiceNow incident, SAP EHS notification, and alerts safety via Teams.
naftiko: "0.5"
info:
label: "Safety Incident Investigation Workflow"
description: "When safety incident reported, creates ServiceNow incident, SAP EHS notification, and alerts safety via Teams."
tags:
- safety
- servicenow
- sap
- microsoft-teams
- ehs
capability:
exposes:
- type: mcp
namespace: safety-ops
port: 8080
tools:
- name: safety-incident-investigation-workflow
description: "When safety incident reported, creates ServiceNow incident, SAP EHS notification, and alerts safety via Teams."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "Safety Incident Investigation Workflow: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "Safety Incident Investigation Workflow: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_safety_channel_id"
text: "Safety Incident Investigation Workflow | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Retrieves account details from Salesforce by account ID.
naftiko: "0.5"
info:
label: "Salesforce Account Lookup"
description: "Retrieves account details from Salesforce by account ID."
tags:
- sales
- salesforce
- lookup
capability:
exposes:
- type: mcp
namespace: sales
port: 8080
tools:
- name: salesforce-lookup
description: "Retrieves account details from Salesforce by account ID."
inputParameters:
- name: identifier
in: body
type: string
description: "The identifier for the lookup."
call: "sales.get-record"
with:
id: "{{identifier}}"
outputParameters:
- name: result
type: string
mapping: "$.result"
consumes:
- namespace: sales
type: http
baseUri: "https://bmw-s4.sap.com/api/v1"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: records
path: "/records"
operations:
- name: get-record
method: GET
On new lead creation in Salesforce, looks up the contact in ZoomInfo to enrich company size, industry, and direct-dial phone, then writes the enriched fields back to the Salesforce lead record.
naftiko: "0.5"
info:
label: "Salesforce Lead Enrichment via ZoomInfo"
description: "On new lead creation in Salesforce, looks up the contact in ZoomInfo to enrich company size, industry, and direct-dial phone, then writes the enriched fields back to the Salesforce lead record."
tags:
- sales
- crm
- salesforce
- zoominfo
- lead-enrichment
capability:
exposes:
- type: mcp
namespace: lead-enrichment
port: 8080
tools:
- name: enrich-lead
description: "Given a Salesforce lead ID, fetch the lead's email from Salesforce, look up the contact in ZoomInfo for firmographic data, and patch the enriched fields (company size, industry, phone) back onto the Salesforce lead record."
inputParameters:
- name: lead_id
in: body
type: string
description: "The Salesforce lead record ID (18-character format)."
steps:
- name: get-lead
type: call
call: "salesforce.get-lead"
with:
lead_id: "{{lead_id}}"
- name: lookup-zoominfo
type: call
call: "zoominfo.search-contact"
with:
email: "{{get-lead.Email}}"
- name: update-lead
type: call
call: "salesforce-update.patch-lead"
with:
lead_id: "{{lead_id}}"
NumberOfEmployees: "{{lookup-zoominfo.employeeCount}}"
Industry: "{{lookup-zoominfo.industry}}"
Phone: "{{lookup-zoominfo.directPhone}}"
consumes:
- namespace: salesforce
type: http
baseUri: "https://bmw.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: lead
path: "/sobjects/Lead/{lead_id}"
inputParameters:
- name: lead_id
in: path
operations:
- name: get-lead
method: GET
- namespace: zoominfo
type: http
baseUri: "https://api.zoominfo.com/search"
authentication:
type: bearer
token: "$secrets.zoominfo_token"
resources:
- name: contact
path: "/contact"
operations:
- name: search-contact
method: POST
- namespace: salesforce-update
type: http
baseUri: "https://bmw.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: lead-patch
path: "/sobjects/Lead/{lead_id}"
inputParameters:
- name: lead_id
in: path
operations:
- name: patch-lead
method: PATCH
Queries closed-won Salesforce opportunities updated since a given date and upserts the records into a Snowflake CRM data mart for sales analytics and Power BI dashboarding.
naftiko: "0.5"
info:
label: "Salesforce Opportunity Sync to Snowflake"
description: "Queries closed-won Salesforce opportunities updated since a given date and upserts the records into a Snowflake CRM data mart for sales analytics and Power BI dashboarding."
tags:
- sales
- crm
- salesforce
- snowflake
- reporting
capability:
exposes:
- type: mcp
namespace: crm-reporting
port: 8080
tools:
- name: sync-closed-opportunities
description: "Given a lookback date, query Salesforce for all closed-won opportunities modified after that date and upsert each record into the Snowflake SALES.OPPORTUNITIES table."
inputParameters:
- name: since_date
in: body
type: string
description: "ISO 8601 date string. Only opportunities modified on or after this date are synced."
steps:
- name: query-opps
type: call
call: "salesforce.query-opportunities"
with:
soql: "SELECT Id,Name,Amount,CloseDate,AccountId FROM Opportunity WHERE StageName='Closed Won' AND LastModifiedDate >= {{since_date}}"
- name: upsert-snowflake
type: call
call: "snowflake.upsert-records"
with:
table: "SALES.OPPORTUNITIES"
records: "{{query-opps.records}}"
consumes:
- namespace: salesforce
type: http
baseUri: "https://bmw.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: query
path: "/query"
inputParameters:
- name: soql
in: query
operations:
- name: query-opportunities
method: GET
- namespace: snowflake
type: http
baseUri: "https://bmw.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: upsert-records
method: POST
Retrieves contract status from SAP Ariba by contract ID.
naftiko: "0.5"
info:
label: "SAP Ariba Contract Status Lookup"
description: "Retrieves contract status from SAP Ariba by contract ID."
tags:
- procurement
- sap-ariba
- contracts
- lookup
capability:
exposes:
- type: mcp
namespace: procurement
port: 8080
tools:
- name: sap-lookup
description: "Retrieves contract status from SAP Ariba by contract ID."
inputParameters:
- name: identifier
in: body
type: string
description: "The identifier for the lookup."
call: "procurement.get-record"
with:
id: "{{identifier}}"
outputParameters:
- name: result
type: string
mapping: "$.result"
consumes:
- namespace: procurement
type: http
baseUri: "https://bmw-s4.sap.com/api/v1"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: records
path: "/records"
operations:
- name: get-record
method: GET
Fetches a pending expense report from SAP Concur, validates the total against policy thresholds, and either auto-approves or escalates to the manager via Microsoft Teams.
naftiko: "0.5"
info:
label: "SAP Concur Expense Report Approval"
description: "Fetches a pending expense report from SAP Concur, validates the total against policy thresholds, and either auto-approves or escalates to the manager via Microsoft Teams."
tags:
- finance
- expense-management
- sap-concur
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: finance-ops
port: 8080
tools:
- name: process-expense-report
description: "Given a SAP Concur expense report ID, fetch the report details, check the total against the auto-approval limit, approve it in Concur if within threshold, or escalate to the submitter's manager via Microsoft Teams message."
inputParameters:
- name: report_id
in: body
type: string
description: "The SAP Concur expense report ID."
- name: auto_approval_limit
in: body
type: number
description: "The maximum USD amount eligible for auto-approval."
steps:
- name: get-report
type: call
call: "sap-concur.get-expense-report"
with:
report_id: "{{report_id}}"
- name: approve-report
type: call
call: "sap-concur.approve-expense-report"
with:
report_id: "{{report_id}}"
- name: notify-manager
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{get-report.approver_login_id}}"
text: "Expense report {{report_id}} for {{get-report.employee_name}} ({{get-report.total}} {{get-report.currency_code}}) requires your approval in SAP Concur."
consumes:
- namespace: sap-concur
type: http
baseUri: "https://www.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_token"
resources:
- name: expense-report
path: "/expense/reports/{report_id}"
inputParameters:
- name: report_id
in: path
operations:
- name: get-expense-report
method: GET
- name: approve-expense-report
method: POST
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chat-messages
path: "/chats/{chat_id}/messages"
inputParameters:
- name: chat_id
in: path
operations:
- name: send-message
method: POST
Checks current inventory stock levels for a material at a plant in SAP S/4HANA.
naftiko: "0.5"
info:
label: "SAP Inventory Stock Level Check"
description: "Checks current inventory stock levels for a material at a plant in SAP S/4HANA."
tags:
- supply-chain
- sap
- sap-s4hana
- inventory
capability:
exposes:
- type: mcp
namespace: supply-chain
port: 8080
tools:
- name: sap-check
description: "Checks current inventory stock levels for a material at a plant in SAP S/4HANA."
inputParameters:
- name: identifier
in: body
type: string
description: "The identifier for the lookup."
call: "supply-chain.get-record"
with:
id: "{{identifier}}"
outputParameters:
- name: result
type: string
mapping: "$.result"
consumes:
- namespace: supply-chain
type: http
baseUri: "https://bmw-s4.sap.com/api/v1"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: records
path: "/records"
operations:
- name: get-record
method: GET
Retrieves material master data from SAP S/4HANA by material number.
naftiko: "0.5"
info:
label: "SAP Material Master Lookup"
description: "Retrieves material master data from SAP S/4HANA by material number."
tags:
- procurement
- sap
- sap-s4hana
- lookup
capability:
exposes:
- type: mcp
namespace: procurement
port: 8080
tools:
- name: sap-lookup
description: "Retrieves material master data from SAP S/4HANA by material number."
inputParameters:
- name: identifier
in: body
type: string
description: "The identifier for the lookup."
call: "procurement.get-record"
with:
id: "{{identifier}}"
outputParameters:
- name: result
type: string
mapping: "$.result"
consumes:
- namespace: procurement
type: http
baseUri: "https://bmw-s4.sap.com/api/v1"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: records
path: "/records"
operations:
- name: get-record
method: GET
Runs MRP exception analysis, creates Jira procurement tasks, and alerts supply chain via Teams.
naftiko: "0.5"
info:
label: "SAP Material Requirements Planning Alert"
description: "Runs MRP exception analysis, creates Jira procurement tasks, and alerts supply chain via Teams."
tags:
- supply-chain
- sap
- jira
- microsoft-teams
- procurement
capability:
exposes:
- type: mcp
namespace: supply-chain-ops
port: 8080
tools:
- name: sap-material-requirements-planning-alert
description: "Runs MRP exception analysis, creates Jira procurement tasks, and alerts supply chain via Teams."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "SAP Material Requirements Planning Alert: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "SAP Material Requirements Planning Alert: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_supply-chain_channel_id"
text: "SAP Material Requirements Planning Alert | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Retrieves a plant maintenance work order from SAP.
naftiko: "0.5"
info:
label: "SAP Plant Maintenance Work Order Lookup"
description: "Retrieves a plant maintenance work order from SAP."
tags:
- manufacturing
- plant-maintenance
- sap
- lookup
capability:
exposes:
- type: mcp
namespace: manufacturing
port: 8080
tools:
- name: sap-lookup
description: "Retrieves a plant maintenance work order from SAP."
inputParameters:
- name: identifier
in: body
type: string
description: "The identifier for the lookup."
call: "manufacturing.get-record"
with:
id: "{{identifier}}"
outputParameters:
- name: result
type: string
mapping: "$.result"
consumes:
- namespace: manufacturing
type: http
baseUri: "https://bmw-s4.sap.com/api/v1"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: records
path: "/records"
operations:
- name: get-record
method: GET
Retrieves the status of a production order from SAP S/4HANA.
naftiko: "0.5"
info:
label: "SAP Production Order Status"
description: "Retrieves the status of a production order from SAP S/4HANA."
tags:
- production
- sap
- sap-s4hana
- lookup
capability:
exposes:
- type: mcp
namespace: production
port: 8080
tools:
- name: sap-status
description: "Retrieves the status of a production order from SAP S/4HANA."
inputParameters:
- name: identifier
in: body
type: string
description: "The identifier for the lookup."
call: "production.get-record"
with:
id: "{{identifier}}"
outputParameters:
- name: result
type: string
mapping: "$.result"
consumes:
- namespace: production
type: http
baseUri: "https://bmw-s4.sap.com/api/v1"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: records
path: "/records"
operations:
- name: get-record
method: GET
Retrieves a purchase order record and its line items from SAP S/4HANA by PO number, returning vendor, amounts, and approval status for agent-driven procurement reviews.
naftiko: "0.5"
info:
label: "SAP S/4HANA Purchase Order Lookup"
description: "Retrieves a purchase order record and its line items from SAP S/4HANA by PO number, returning vendor, amounts, and approval status for agent-driven procurement reviews."
tags:
- finance
- procurement
- sap-s4hana
capability:
exposes:
- type: mcp
namespace: procurement
port: 8080
tools:
- name: get-purchase-order
description: "Given a SAP purchase order number, retrieve the full PO header and line items from SAP S/4HANA including vendor name, net amount, currency, and current approval status."
inputParameters:
- name: po_number
in: body
type: string
description: "The SAP purchase order number, e.g. 4500012345."
call: "sap-s4hana.get-po"
with:
PurchaseOrder: "{{po_number}}"
outputParameters:
- name: vendor
type: string
mapping: "$.d.Supplier"
- name: net_amount
type: string
mapping: "$.d.NetPaymentAmount"
- name: status
type: string
mapping: "$.d.ProcessingStatus"
consumes:
- namespace: sap-s4hana
type: http
baseUri: "https://bmw-s4.sap.com/sap/opu/odata/sap/API_PURCHASEORDER_PROCESS_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_pass"
resources:
- name: purchase-order
path: "/A_PurchaseOrder('{PurchaseOrder}')"
inputParameters:
- name: PurchaseOrder
in: path
operations:
- name: get-po
method: GET
Retrieves vendor master data from SAP by vendor number.
naftiko: "0.5"
info:
label: "SAP Vendor Master Lookup"
description: "Retrieves vendor master data from SAP by vendor number."
tags:
- procurement
- sap
- sap-s4hana
- vendor
- lookup
capability:
exposes:
- type: mcp
namespace: procurement
port: 8080
tools:
- name: sap-lookup
description: "Retrieves vendor master data from SAP by vendor number."
inputParameters:
- name: identifier
in: body
type: string
description: "The identifier for the lookup."
call: "procurement.get-record"
with:
id: "{{identifier}}"
outputParameters:
- name: result
type: string
mapping: "$.result"
consumes:
- namespace: procurement
type: http
baseUri: "https://bmw-s4.sap.com/api/v1"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: records
path: "/records"
operations:
- name: get-record
method: GET
Retrieves IT asset details from ServiceNow CMDB by asset tag.
naftiko: "0.5"
info:
label: "ServiceNow IT Asset Lookup"
description: "Retrieves IT asset details from ServiceNow CMDB by asset tag."
tags:
- it-operations
- servicenow
- cmdb
- lookup
capability:
exposes:
- type: mcp
namespace: it-operations
port: 8080
tools:
- name: servicenow-lookup
description: "Retrieves IT asset details from ServiceNow CMDB by asset tag."
inputParameters:
- name: identifier
in: body
type: string
description: "The identifier for the lookup."
call: "it-operations.get-record"
with:
id: "{{identifier}}"
outputParameters:
- name: result
type: string
mapping: "$.result"
consumes:
- namespace: it-operations
type: http
baseUri: "https://bmw-s4.sap.com/api/v1"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: records
path: "/records"
operations:
- name: get-record
method: GET
Fetches a pending standard change request from ServiceNow, checks it against a pre-approved change template list, and if matched automatically approves it and notifies the requestor via email through Microsoft 365.
naftiko: "0.5"
info:
label: "ServiceNow Change Request Auto-Approver"
description: "Fetches a pending standard change request from ServiceNow, checks it against a pre-approved change template list, and if matched automatically approves it and notifies the requestor via email through Microsoft 365."
tags:
- itsm
- change-management
- servicenow
- microsoft-365
capability:
exposes:
- type: mcp
namespace: change-mgmt
port: 8080
tools:
- name: auto-approve-change
description: "Given a ServiceNow change request number, fetch the change details, verify it matches a pre-approved standard template, approve it in ServiceNow if eligible, and send a confirmation email to the requestor via Microsoft Graph."
inputParameters:
- name: change_number
in: body
type: string
description: "The ServiceNow change request number, e.g. CHG0012345."
steps:
- name: get-change
type: call
call: "servicenow.get-change"
with:
number: "{{change_number}}"
- name: approve-change
type: call
call: "servicenow-approve.update-change-state"
with:
sys_id: "{{get-change.sys_id}}"
state: "approved"
- name: send-email
type: call
call: "msgraph-mail.send-mail"
with:
to: "{{get-change.requested_by_email}}"
subject: "Change Request {{change_number}} Auto-Approved"
body: "Your standard change request {{change_number}} has been automatically approved and is scheduled for implementation."
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_pass"
resources:
- name: change
path: "/table/change_request"
inputParameters:
- name: number
in: query
operations:
- name: get-change
method: GET
- namespace: servicenow-approve
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_pass"
resources:
- name: change-record
path: "/table/change_request/{sys_id}"
inputParameters:
- name: sys_id
in: path
operations:
- name: update-change-state
method: PATCH
- namespace: msgraph-mail
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: send-mail
path: "/users/{sender_id}/sendMail"
inputParameters:
- name: sender_id
in: path
operations:
- name: send-mail
method: POST
Retrieves a quality document from SharePoint by document ID.
naftiko: "0.5"
info:
label: "SharePoint Quality Document Retrieval"
description: "Retrieves a quality document from SharePoint by document ID."
tags:
- quality
- sharepoint
- document-management
capability:
exposes:
- type: mcp
namespace: quality
port: 8080
tools:
- name: sharepoint-retrieval
description: "Retrieves a quality document from SharePoint by document ID."
inputParameters:
- name: identifier
in: body
type: string
description: "The identifier for the lookup."
call: "quality.get-record"
with:
id: "{{identifier}}"
outputParameters:
- name: result
type: string
mapping: "$.result"
consumes:
- namespace: quality
type: http
baseUri: "https://bmw-s4.sap.com/api/v1"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: records
path: "/records"
operations:
- name: get-record
method: GET
Queries Snowflake query history for failed or long-running pipeline jobs in the last hour, and if anomalies are found, opens a Jira task and alerts the data engineering Slack channel.
naftiko: "0.5"
info:
label: "Snowflake Data Pipeline Health Monitor"
description: "Queries Snowflake query history for failed or long-running pipeline jobs in the last hour, and if anomalies are found, opens a Jira task and alerts the data engineering Slack channel."
tags:
- data
- monitoring
- snowflake
- jira
- slack
- data-pipelines
capability:
exposes:
- type: mcp
namespace: data-ops
port: 8080
tools:
- name: check-pipeline-health
description: "Query Snowflake's ACCOUNT_USAGE.QUERY_HISTORY for failed or long-running queries in the past hour; if failures or SLA breaches are found, create a Jira task in the DATA project and post a summary to the data-engineering Slack channel."
inputParameters:
- name: lookback_minutes
in: body
type: integer
description: "Number of minutes to look back in Snowflake query history. Typically 60."
- name: max_duration_seconds
in: body
type: integer
description: "Execution time threshold in seconds above which a query is flagged as slow."
steps:
- name: query-failures
type: call
call: "snowflake.run-statement"
with:
statement: "SELECT QUERY_ID, QUERY_TEXT, ERROR_MESSAGE, EXECUTION_STATUS FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY WHERE START_TIME >= DATEADD(minute, -{{lookback_minutes}}, CURRENT_TIMESTAMP()) AND (EXECUTION_STATUS = 'FAILED' OR TOTAL_ELAPSED_TIME > {{max_duration_seconds}} * 1000)"
- name: open-jira-task
type: call
call: "jira.create-issue"
with:
project_key: "DATA"
issuetype: "Task"
summary: "Snowflake pipeline anomalies detected in last {{lookback_minutes}} minutes"
description: "Failed or slow queries found: {{query-failures.rowCount}} records. First failure: {{query-failures.firstError}}"
- name: alert-slack
type: call
call: "slack.post-message"
with:
channel: "data-engineering"
text: "Snowflake pipeline health alert: {{query-failures.rowCount}} anomalies in last {{lookback_minutes}} min. Jira: {{open-jira-task.key}}"
consumes:
- namespace: snowflake
type: http
baseUri: "https://bmw.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-statement
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issue
path: "/issue"
operations:
- name: create-issue
method: POST
- namespace: slack
type: http
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: chat
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Receives a SolarWinds network node-down alert, fetches node details from SolarWinds, creates a P1 ServiceNow incident, and sends an emergency notification to the network operations Microsoft Teams channel.
naftiko: "0.5"
info:
label: "SolarWinds Network Alert to Incident Bridge"
description: "Receives a SolarWinds network node-down alert, fetches node details from SolarWinds, creates a P1 ServiceNow incident, and sends an emergency notification to the network operations Microsoft Teams channel."
tags:
- itsm
- networking
- solarwinds
- servicenow
- microsoft-teams
- incident-response
capability:
exposes:
- type: mcp
namespace: netops
port: 8080
tools:
- name: handle-node-down-alert
description: "Given a SolarWinds node ID and alert details, fetch the full node status from SolarWinds Orion, create a P1 ServiceNow incident assigned to the Network Operations group, and post an urgent alert to the network-ops Microsoft Teams channel."
inputParameters:
- name: node_id
in: body
type: string
description: "The SolarWinds Orion node ID that went down."
- name: alert_message
in: body
type: string
description: "The alert message text from SolarWinds."
steps:
- name: get-node-status
type: call
call: "solarwinds.get-node"
with:
node_id: "{{node_id}}"
- name: create-p1-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Network node down: {{get-node-status.Caption}} ({{get-node-status.IPAddress}})"
description: "{{alert_message}} | Node: {{get-node-status.Caption}} | IP: {{get-node-status.IPAddress}} | Location: {{get-node-status.Location}}"
priority: "1"
assignment_group: "Network_Operations"
- name: notify-teams
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.netops_teams_channel_id"
text: "P1 NETWORK OUTAGE: Node {{get-node-status.Caption}} ({{get-node-status.IPAddress}}) is down. ServiceNow: {{create-p1-incident.number}}"
consumes:
- namespace: solarwinds
type: http
baseUri: "https://bmw-solarwinds.bmwgroup.com/api/v1"
authentication:
type: basic
username: "$secrets.solarwinds_user"
password: "$secrets.solarwinds_pass"
resources:
- name: node
path: "/nodes/{node_id}"
inputParameters:
- name: node_id
in: path
operations:
- name: get-node
method: GET
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_pass"
resources:
- name: incident
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-message
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
Searches Splunk for security events matching a query.
naftiko: "0.5"
info:
label: "Splunk Security Event Search"
description: "Searches Splunk for security events matching a query."
tags:
- security
- splunk
- search
- monitoring
capability:
exposes:
- type: mcp
namespace: security
port: 8080
tools:
- name: splunk-search
description: "Searches Splunk for security events matching a query."
inputParameters:
- name: identifier
in: body
type: string
description: "The identifier for the lookup."
call: "security.get-record"
with:
id: "{{identifier}}"
outputParameters:
- name: result
type: string
mapping: "$.result"
consumes:
- namespace: security
type: http
baseUri: "https://bmw-s4.sap.com/api/v1"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: records
path: "/records"
operations:
- name: get-record
method: GET
When Datadog detects abnormal vibration, creates SAP PM work order and alerts maintenance via Teams.
naftiko: "0.5"
info:
label: "Stamping Press Predictive Maintenance"
description: "When Datadog detects abnormal vibration, creates SAP PM work order and alerts maintenance via Teams."
tags:
- manufacturing
- datadog
- sap
- microsoft-teams
- maintenance
capability:
exposes:
- type: mcp
namespace: manufacturing-ops
port: 8080
tools:
- name: stamping-press-predictive-maintenance
description: "When Datadog detects abnormal vibration, creates SAP PM work order and alerts maintenance via Teams."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "Stamping Press Predictive Maintenance: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "Stamping Press Predictive Maintenance: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_manufacturing_channel_id"
text: "Stamping Press Predictive Maintenance | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Onboards a new supplier by creating a SAP vendor record, Salesforce account, ServiceNow task, and notifying procurement via Teams.
naftiko: "0.5"
info:
label: "Supplier Onboarding Orchestration"
description: "Onboards a new supplier by creating a SAP vendor record, Salesforce account, ServiceNow task, and notifying procurement via Teams."
tags:
- procurement
- sap
- salesforce
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: procurement-ops
port: 8080
tools:
- name: supplier-onboarding-orchestration
description: "Onboards a new supplier by creating a SAP vendor record, Salesforce account, ServiceNow task, and notifying procurement via Teams."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "Supplier Onboarding Orchestration: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "Supplier Onboarding Orchestration: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_procurement_channel_id"
text: "Supplier Onboarding Orchestration | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Initiates a supplier quality audit by pulling vendor data from SAP, creating a Jira task, and notifying quality via Teams.
naftiko: "0.5"
info:
label: "Supplier Quality Audit Workflow"
description: "Initiates a supplier quality audit by pulling vendor data from SAP, creating a Jira task, and notifying quality via Teams."
tags:
- quality
- supply-chain
- sap
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: quality-ops
port: 8080
tools:
- name: supplier-quality-audit-workflow
description: "Initiates a supplier quality audit by pulling vendor data from SAP, creating a Jira task, and notifying quality via Teams."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "Supplier Quality Audit Workflow: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "Supplier Quality Audit Workflow: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_quality_channel_id"
text: "Supplier Quality Audit Workflow | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
When a supply chain disruption is detected, creates a Jira incident, flags SAP purchase orders, and notifies procurement via Teams.
naftiko: "0.5"
info:
label: "Supply Chain Disruption Alert"
description: "When a supply chain disruption is detected, creates a Jira incident, flags SAP purchase orders, and notifies procurement via Teams."
tags:
- supply-chain
- jira
- sap
- microsoft-teams
- procurement
capability:
exposes:
- type: mcp
namespace: supply-chain-ops
port: 8080
tools:
- name: supply-chain-disruption-alert
description: "When a supply chain disruption is detected, creates a Jira incident, flags SAP purchase orders, and notifies procurement via Teams."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "Supply Chain Disruption Alert: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "Supply Chain Disruption Alert: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_supply-chain_channel_id"
text: "Supply Chain Disruption Alert | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Triggers a Tableau Server workbook refresh on demand or on schedule, waits for completion, and posts the refresh status and workbook URL to the relevant Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Tableau Dashboard Refresh Trigger"
description: "Triggers a Tableau Server workbook refresh on demand or on schedule, waits for completion, and posts the refresh status and workbook URL to the relevant Microsoft Teams channel."
tags:
- data
- analytics
- tableau
- microsoft-teams
- reporting
capability:
exposes:
- type: mcp
namespace: bi-reporting
port: 8080
tools:
- name: refresh-tableau-workbook
description: "Given a Tableau Server workbook ID and site ID, trigger a full extract refresh job, then post the refresh completion status and the workbook view URL to the specified Microsoft Teams channel."
inputParameters:
- name: site_id
in: body
type: string
description: "The Tableau Server site content URL or LUID."
- name: workbook_id
in: body
type: string
description: "The Tableau Server workbook LUID to refresh."
- name: teams_channel_id
in: body
type: string
description: "The Microsoft Teams channel ID to notify upon completion."
steps:
- name: trigger-refresh
type: call
call: "tableau.run-extract-refresh"
with:
site_id: "{{site_id}}"
workbook_id: "{{workbook_id}}"
- name: notify-teams
type: call
call: "msteams.post-channel-message"
with:
channel_id: "{{teams_channel_id}}"
text: "Tableau workbook {{workbook_id}} refresh job {{trigger-refresh.job_id}} started. Status: {{trigger-refresh.status}}"
consumes:
- namespace: tableau
type: http
baseUri: "https://bmw-tableau.bmwgroup.com/api/2.8"
authentication:
type: apikey
key: "X-Tableau-Auth"
value: "$secrets.tableau_token"
placement: header
resources:
- name: extract-refresh
path: "/sites/{site_id}/workbooks/{workbook_id}/refresh"
inputParameters:
- name: site_id
in: path
- name: workbook_id
in: path
operations:
- name: run-extract-refresh
method: POST
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-message
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 refresh of a Tableau analytics dashboard.
naftiko: "0.5"
info:
label: "Tableau Dashboard Refresh"
description: "Triggers a refresh of a Tableau analytics dashboard."
tags:
- analytics
- tableau
- dashboard
capability:
exposes:
- type: mcp
namespace: analytics
port: 8080
tools:
- name: tableau-refresh
description: "Triggers a refresh of a Tableau analytics dashboard."
inputParameters:
- name: identifier
in: body
type: string
description: "The identifier for the lookup."
call: "analytics.get-record"
with:
id: "{{identifier}}"
outputParameters:
- name: result
type: string
mapping: "$.result"
consumes:
- namespace: analytics
type: http
baseUri: "https://bmw-s4.sap.com/api/v1"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: records
path: "/records"
operations:
- name: get-record
method: GET
Checks SAP PM for calibration due dates, creates ServiceNow reminders, and alerts tool managers via Teams.
naftiko: "0.5"
info:
label: "Tooling Calibration Due Alert"
description: "Checks SAP PM for calibration due dates, creates ServiceNow reminders, and alerts tool managers via Teams."
tags:
- manufacturing
- sap
- servicenow
- microsoft-teams
- tooling
capability:
exposes:
- type: mcp
namespace: manufacturing-ops
port: 8080
tools:
- name: tooling-calibration-due-alert
description: "Checks SAP PM for calibration due dates, creates ServiceNow reminders, and alerts tool managers via Teams."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "Tooling Calibration Due Alert: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "Tooling Calibration Due Alert: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_manufacturing_channel_id"
text: "Tooling Calibration Due Alert | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Verifies emissions compliance from SAP QM data, checks SharePoint limits, and logs in ServiceNow.
naftiko: "0.5"
info:
label: "Vehicle Emissions Compliance Check"
description: "Verifies emissions compliance from SAP QM data, checks SharePoint limits, and logs in ServiceNow."
tags:
- compliance
- sap
- sharepoint
- servicenow
- automotive
capability:
exposes:
- type: mcp
namespace: compliance-ops
port: 8080
tools:
- name: vehicle-emissions-compliance-check
description: "Verifies emissions compliance from SAP QM data, checks SharePoint limits, and logs in ServiceNow."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "Vehicle Emissions Compliance Check: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "Vehicle Emissions Compliance Check: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_compliance_channel_id"
text: "Vehicle Emissions Compliance Check | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Assesses launch readiness from SAP quality, Jira issues, and publishes report to Confluence and Teams.
naftiko: "0.5"
info:
label: "Vehicle Launch Readiness Review"
description: "Assesses launch readiness from SAP quality, Jira issues, and publishes report to Confluence and Teams."
tags:
- engineering
- sap
- jira
- confluence
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: engineering-ops
port: 8080
tools:
- name: vehicle-launch-readiness-review
description: "Assesses launch readiness from SAP quality, Jira issues, and publishes report to Confluence and Teams."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "Vehicle Launch Readiness Review: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "Vehicle Launch Readiness Review: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_engineering_channel_id"
text: "Vehicle Launch Readiness Review | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Manages recall by identifying VINs in Salesforce, creating SAP quality notification, and alerting recall team via Teams.
naftiko: "0.5"
info:
label: "Vehicle Recall Notification Workflow"
description: "Manages recall by identifying VINs in Salesforce, creating SAP quality notification, and alerting recall team via Teams."
tags:
- quality
- salesforce
- sap
- microsoft-teams
- automotive
capability:
exposes:
- type: mcp
namespace: quality-ops
port: 8080
tools:
- name: vehicle-recall-notification-workflow
description: "Manages recall by identifying VINs in Salesforce, creating SAP quality notification, and alerting recall team via Teams."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "Vehicle Recall Notification Workflow: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "Vehicle Recall Notification Workflow: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_quality_channel_id"
text: "Vehicle Recall Notification Workflow | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Compiles vendor scorecard from SAP data, aggregates in Snowflake, and publishes to Tableau.
naftiko: "0.5"
info:
label: "Vendor Performance Scorecard Generation"
description: "Compiles vendor scorecard from SAP data, aggregates in Snowflake, and publishes to Tableau."
tags:
- supply-chain
- sap
- snowflake
- tableau
- analytics
capability:
exposes:
- type: mcp
namespace: supply-chain-ops
port: 8080
tools:
- name: vendor-performance-scorecard-generation
description: "Compiles vendor scorecard from SAP data, aggregates in Snowflake, and publishes to Tableau."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "Vendor Performance Scorecard Generation: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "Vendor Performance Scorecard Generation: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_supply-chain_channel_id"
text: "Vendor Performance Scorecard Generation | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Retrieves an employee profile from Workday by employee ID.
naftiko: "0.5"
info:
label: "Workday Employee Profile Lookup"
description: "Retrieves an employee profile from Workday by employee ID."
tags:
- hr
- workday
- lookup
- employee
capability:
exposes:
- type: mcp
namespace: hr
port: 8080
tools:
- name: workday-lookup
description: "Retrieves an employee profile from Workday by employee ID."
inputParameters:
- name: identifier
in: body
type: string
description: "The identifier for the lookup."
call: "hr.get-record"
with:
id: "{{identifier}}"
outputParameters:
- name: result
type: string
mapping: "$.result"
consumes:
- namespace: hr
type: http
baseUri: "https://bmw-s4.sap.com/api/v1"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: records
path: "/records"
operations:
- name: get-record
method: GET
Pulls active headcount data from Workday and writes a summary snapshot to Snowflake for downstream HR analytics and Power BI reporting.
naftiko: "0.5"
info:
label: "Workday Headcount Snapshot"
description: "Pulls active headcount data from Workday and writes a summary snapshot to Snowflake for downstream HR analytics and Power BI reporting."
tags:
- hr
- reporting
- workday
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: hr-reporting
port: 8080
tools:
- name: publish-headcount-snapshot
description: "Fetch current active headcount grouped by department and cost center from Workday, then insert the snapshot record into the Snowflake HR_ANALYTICS.HEADCOUNT table for Power BI consumption."
inputParameters:
- name: as_of_date
in: body
type: string
description: "The reporting date for the snapshot in YYYY-MM-DD format."
steps:
- name: get-headcount
type: call
call: "workday.get-headcount-report"
with:
as_of_date: "{{as_of_date}}"
- name: write-snapshot
type: call
call: "snowflake.insert-rows"
with:
table: "HR_ANALYTICS.HEADCOUNT"
data: "{{get-headcount.records}}"
consumes:
- namespace: workday
type: http
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: headcount-report
path: "/reports/headcount"
operations:
- name: get-headcount-report
method: GET
- namespace: snowflake
type: http
baseUri: "https://bmw.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: insert-rows
method: POST
Retrieves time-off balance from Workday by employee ID.
naftiko: "0.5"
info:
label: "Workday Time Off Balance Check"
description: "Retrieves time-off balance from Workday by employee ID."
tags:
- hr
- workday
- time-off
- lookup
capability:
exposes:
- type: mcp
namespace: hr
port: 8080
tools:
- name: workday-check
description: "Retrieves time-off balance from Workday by employee ID."
inputParameters:
- name: identifier
in: body
type: string
description: "The identifier for the lookup."
call: "hr.get-record"
with:
id: "{{identifier}}"
outputParameters:
- name: result
type: string
mapping: "$.result"
consumes:
- namespace: hr
type: http
baseUri: "https://bmw-s4.sap.com/api/v1"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: records
path: "/records"
operations:
- name: get-record
method: GET
Generates workforce capacity report from Workday headcount, Jira demand, and publishes to Tableau.
naftiko: "0.5"
info:
label: "Workforce Capacity Planning Report"
description: "Generates workforce capacity report from Workday headcount, Jira demand, and publishes to Tableau."
tags:
- hr
- workday
- jira
- tableau
- analytics
capability:
exposes:
- type: mcp
namespace: hr-ops
port: 8080
tools:
- name: workforce-capacity-planning-report
description: "Generates workforce capacity report from Workday headcount, Jira demand, and publishes to Tableau."
inputParameters:
- name: reference_id
in: body
type: string
description: "The reference identifier for this request."
- name: description
in: body
type: string
description: "Detailed description of the request."
- name: priority
in: body
type: string
description: "Priority level: high, medium, or low."
steps:
- name: create-primary-record
type: call
call: "servicenow.create-incident"
with:
short_description: "Workforce Capacity Planning Report: {{reference_id}}"
urgency: "2"
description: "{{description}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Task"
summary: "Workforce Capacity Planning Report: {{reference_id}}"
description: "Incident: {{create-primary-record.number}} | {{description}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_hr_channel_id"
text: "Workforce Capacity Planning Report | Ref: {{reference_id}} | INC: {{create-primary-record.number}} | Jira: {{create-tracking-issue.key}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://bmw.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_username"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- namespace: jira
type: http
baseUri: "https://bmw.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST