BMW Capabilities

Naftiko 0.5 capability definitions for BMW - 100 capabilities showing integration workflows and service orchestrations.

Sort
Expand

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