Mercedes-Benz Capabilities

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

Sort
Expand

Launches Okta certification, queries Snowflake for hierarchies, and creates Jira tracking task.

naftiko: "0.5"
info:
  label: "Access Certification Campaign Orchestrator"
  description: "Launches Okta certification, queries Snowflake for hierarchies, and creates Jira tracking task."
  tags:
    - security
    - okta
    - snowflake
    - jira
capability:
  exposes:
    - type: mcp
      namespace: security
      port: 8080
      tools:
        - name: access-orchestrate
          description: "Launches Okta certification, queries Snowflake for hierarchies, and creates Jira tracking task."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary input parameter for this workflow."
          steps:
            - name: step-1
              type: call
              call: "okta.get-user-groups"
              with:
                input: "{{param_1}}"
            - name: step-2
              type: call
              call: "snowflake.run-query"
              with:
                input: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "jira.create-issue"
              with:
                input: "{{step-1.result}}"
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://mercedes-benz.okta.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.okta_token"
      resources:
        - name: user-groups
          path: "/users/{{{{user_id}}}}/groups"
          operations:
            - name: get-user-groups
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://mercedes-benz.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://mercedes-benz.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_password"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

Accepts a SharePoint-stored technical specification document and uses OpenAI to generate an executive summary, then stores the summary back in SharePoint.

naftiko: "0.5"
info:
  label: "AI-Assisted Technical Document Summarization"
  description: "Accepts a SharePoint-stored technical specification document and uses OpenAI to generate an executive summary, then stores the summary back in SharePoint."
  tags:
    - ai
    - automation
    - openai
    - sharepoint
    - document-management
capability:
  exposes:
    - type: mcp
      namespace: ai-docs
      port: 8080
      tools:
        - name: summarize-technical-document
          description: "Given a SharePoint document site ID and file path, retrieve the technical specification document, generate an executive summary using OpenAI, and store the summary as a new document in SharePoint."
          inputParameters:
            - name: site_id
              in: body
              type: string
              description: "The SharePoint site ID where the document is stored."
            - name: document_path
              in: body
              type: string
              description: "The SharePoint document library path to the technical specification file."
          steps:
            - name: get-document
              type: call
              call: "sharepoint.get-document-content"
              with:
                site_id: "{{site_id}}"
                document_path: "{{document_path}}"
            - name: generate-summary
              type: call
              call: "openai.create-completion"
              with:
                model: "gpt-4o"
                prompt: "Summarize the following technical specification for a non-technical executive audience in 3-5 bullet points: {{get-document.content}}"
            - name: store-summary
              type: call
              call: "sharepoint.create-document"
              with:
                site_id: "{{site_id}}"
                document_path: "{{document_path}}_summary.txt"
                content: "{{generate-summary.choices[0].message.content}}"
  consumes:
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: document-content
          path: "/sites/{{site_id}}/drive/root:{{document_path}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: document_path
              in: path
          operations:
            - name: get-document-content
              method: GET
        - name: documents
          path: "/sites/{{site_id}}/drive/root:{{document_path}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: document_path
              in: path
          operations:
            - name: create-document
              method: PUT
    - type: http
      namespace: openai
      baseUri: "https://api.openai.com/v1"
      authentication:
        type: bearer
        token: "$secrets.openai_api_key"
      resources:
        - name: completions
          path: "/chat/completions"
          operations:
            - name: create-completion
              method: POST

When Datadog detects latency, creates Jira performance ticket and alerts engineering via Teams.

naftiko: "0.5"
info:
  label: "APM Latency Alert Handler"
  description: "When Datadog detects latency, creates Jira performance ticket and alerts engineering via Teams."
  tags:
    - monitoring
    - datadog
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: monitoring
      port: 8080
      tools:
        - name: apm-orchestrate
          description: "When Datadog detects latency, creates Jira performance ticket and alerts engineering via Teams."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary input parameter for this workflow."
          steps:
            - name: step-1
              type: call
              call: "datadog.get-monitor"
              with:
                input: "{{param_1}}"
            - name: step-2
              type: call
              call: "jira.create-issue"
              with:
                input: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "msteams.send-message"
              with:
                input: "{{step-1.result}}"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        header: "DD-API-KEY"
        key: "$secrets.datadog_api_key"
      resources:
        - name: monitors
          path: "/monitor/{{{{monitor_id}}}}"
          operations:
            - name: get-monitor
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://mercedes-benz.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_password"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/mercedes-benz/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Retrieves an Azure AD user profile by UPN.

naftiko: "0.5"
info:
  label: "Azure AD User Lookup"
  description: "Retrieves an Azure AD user profile by UPN."
  tags:
    - identity
    - azure
    - microsoft-graph
capability:
  exposes:
    - type: mcp
      namespace: identity
      port: 8080
      tools:
        - name: get-azure-ad-user
          description: "Retrieves an Azure AD user profile by UPN."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary lookup parameter."
          call: "msgraph.get-user"
          with:
            param_1: "{{param_1}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.result"
  consumes:
    - type: http
      namespace: msgraph
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: get-user
          path: "/users/{{{{upn}}}}"
          operations:
            - name: get-user
              method: GET

Retrieves the current month cost summary for an Azure resource group.

naftiko: "0.5"
info:
  label: "Azure Resource Group Cost Lookup"
  description: "Retrieves the current month cost summary for an Azure resource group."
  tags:
    - cloud
    - azure
    - cost-management
capability:
  exposes:
    - type: mcp
      namespace: cloud-finops
      port: 8080
      tools:
        - name: get-resource-group-cost
          description: "Retrieves the current month cost summary for an Azure resource group."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary lookup parameter."
          call: "azure.get-cost-summary"
          with:
            param_1: "{{param_1}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.result"
  consumes:
    - type: http
      namespace: azure
      baseUri: "https://management.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azure_token"
      resources:
        - name: get-cost-summary
          path: "/subscriptions/{{{{subscription_id}}}}/resourceGroups/{{{{resource_group}}}}/providers/Microsoft.CostManagement/query"
          operations:
            - name: get-cost-summary
              method: POST

Queries Jira for ungroomed backlog, generates Confluence summary, and notifies team via Teams.

naftiko: "0.5"
info:
  label: "Backlog Grooming Summary Generator"
  description: "Queries Jira for ungroomed backlog, generates Confluence summary, and notifies team via Teams."
  tags:
    - devops
    - jira
    - confluence
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: devops
      port: 8080
      tools:
        - name: backlog-orchestrate
          description: "Queries Jira for ungroomed backlog, generates Confluence summary, and notifies team via Teams."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary input parameter for this workflow."
          steps:
            - name: step-1
              type: call
              call: "jira.create-issue"
              with:
                input: "{{param_1}}"
            - name: step-2
              type: call
              call: "confluence.create-page"
              with:
                input: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "msteams.send-message"
              with:
                input: "{{step-1.result}}"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://mercedes-benz.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_password"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://mercedes-benz.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_password"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: create-page
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/mercedes-benz/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Verifies Workday benefits enrollment, checks SAP payroll deductions, and sends Teams confirmation.

naftiko: "0.5"
info:
  label: "Benefits Enrollment Verification"
  description: "Verifies Workday benefits enrollment, checks SAP payroll deductions, and sends Teams confirmation."
  tags:
    - hr
    - workday
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: benefits-orchestrate
          description: "Verifies Workday benefits enrollment, checks SAP payroll deductions, and sends Teams confirmation."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary input parameter for this workflow."
          steps:
            - name: step-1
              type: call
              call: "workday.get-worker"
              with:
                input: "{{param_1}}"
            - name: step-2
              type: call
              call: "sap.get-po"
              with:
                input: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "msteams.send-message"
              with:
                input: "{{step-1.result}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/mercedes-benz/workers/{{worker_id}}"
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://mercedes-benz-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: purchase-orders
          path: "/A_PurchaseOrder('{{{{po_number}}}}')"
          operations:
            - name: get-po
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/mercedes-benz/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Detects Power BI refresh failure, creates Jira ticket, and sends Teams notification.

naftiko: "0.5"
info:
  label: "BI Refresh Failure Escalation"
  description: "Detects Power BI refresh failure, creates Jira ticket, and sends Teams notification."
  tags:
    - analytics
    - power-bi
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: analytics
      port: 8080
      tools:
        - name: bi-orchestrate
          description: "Detects Power BI refresh failure, creates Jira ticket, and sends Teams notification."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary input parameter for this workflow."
          steps:
            - name: step-1
              type: call
              call: "powerbi.trigger-refresh"
              with:
                input: "{{param_1}}"
            - name: step-2
              type: call
              call: "jira.create-issue"
              with:
                input: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "msteams.send-message"
              with:
                input: "{{step-1.result}}"
  consumes:
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: refreshes
          path: "/datasets/{{{{dataset_id}}}}/refreshes"
          operations:
            - name: trigger-refresh
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://mercedes-benz.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_password"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/mercedes-benz/channels/general/messages"
          operations:
            - name: send-message
              method: POST

On a GitHub Actions pipeline failure on a protected branch, creates a Jira bug, posts an alert to Microsoft Teams, and logs a Datadog event marker.

naftiko: "0.5"
info:
  label: "CI/CD Pipeline Failure Handler"
  description: "On a GitHub Actions pipeline failure on a protected branch, creates a Jira bug, posts an alert to Microsoft Teams, and logs a Datadog event marker."
  tags:
    - devops
    - cicd
    - github
    - jira
    - datadog
    - microsoft-teams
    - incident-response
capability:
  exposes:
    - type: mcp
      namespace: devops-ops
      port: 8080
      tools:
        - name: handle-pipeline-failure
          description: "Given a GitHub Actions pipeline failure, create a Jira bug, log a Datadog deployment event, and post an alert to the engineering Microsoft Teams channel."
          inputParameters:
            - name: repository
              in: body
              type: string
              description: "The GitHub repository name where the pipeline failed (e.g., mercedes-benz/eqs-platform)."
            - name: workflow_name
              in: body
              type: string
              description: "The GitHub Actions workflow name that failed."
            - name: branch
              in: body
              type: string
              description: "The branch on which the pipeline failure occurred."
            - name: run_url
              in: body
              type: string
              description: "The URL to the failed GitHub Actions run for linking."
            - name: commit_sha
              in: body
              type: string
              description: "The commit SHA associated with the failed run."
          steps:
            - name: create-bug
              type: call
              call: "jira.create-issue"
              with:
                project_key: "ENG"
                issuetype: "Bug"
                summary: "[CI Failure] {{repository}} / {{branch}} - {{workflow_name}}"
                description: "Workflow: {{workflow_name}}\nBranch: {{branch}}\nCommit: {{commit_sha}}\nRun: {{run_url}}"
            - name: log-event
              type: call
              call: "datadog.create-event"
              with:
                title: "CI Failure: {{repository}}/{{branch}}"
                text: "Workflow {{workflow_name}} failed at commit {{commit_sha}}"
                alert_type: "error"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "engineering-alerts"
                message: "Pipeline Failure: {{repository}} | Branch: {{branch}} | Jira: {{create-bug.key}} | Run: {{run_url}}"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://mercedes-benz.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: events
          path: "/events"
          operations:
            - name: create-event
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

When Datadog detects a cloud cost anomaly, creates a ServiceNow change request, and notifies the FinOps team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Cloud Cost Anomaly Alert"
  description: "When Datadog detects a cloud cost anomaly, creates a ServiceNow change request, and notifies the FinOps team via Microsoft Teams."
  tags:
    - cloud
    - finops
    - datadog
    - servicenow
    - microsoft-teams
    - cost-management
capability:
  exposes:
    - type: mcp
      namespace: cloud-finops
      port: 8080
      tools:
        - name: handle-cost-anomaly
          description: "Given a Datadog cost anomaly alert with service name and excess amount, create a ServiceNow change request for cost review and notify the FinOps Microsoft Teams channel."
          inputParameters:
            - name: service_name
              in: body
              type: string
              description: "The cloud service or application generating the cost anomaly."
            - name: excess_amount
              in: body
              type: number
              description: "The dollar amount exceeding the expected cost baseline."
            - name: anomaly_period
              in: body
              type: string
              description: "The time period of the anomaly (e.g., 2026-03-20)."
          steps:
            - name: create-change
              type: call
              call: "servicenow.create-change"
              with:
                short_description: "Cost anomaly review: {{service_name}} - ${{excess_amount}} over baseline"
                category: "cloud_cost"
                type: "normal"
            - name: notify-finops
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "finops-alerts"
                message: "Cost Anomaly Detected: {{service_name}} exceeded baseline by ${{excess_amount}} on {{anomaly_period}}. Change: {{create-change.number}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://mercedes-benz.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: change-request
          path: "/table/change_request"
          operations:
            - name: create-change
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Pulls Azure cost data, compares Snowflake forecasts, creates Jira ticket, and notifies via Teams.

naftiko: "0.5"
info:
  label: "Cloud Cost Review Orchestrator"
  description: "Pulls Azure cost data, compares Snowflake forecasts, creates Jira ticket, and notifies via Teams."
  tags:
    - finops
    - azure
    - snowflake
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: finops
      port: 8080
      tools:
        - name: cloud-orchestrate
          description: "Pulls Azure cost data, compares Snowflake forecasts, creates Jira ticket, and notifies via Teams."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary input parameter for this workflow."
          steps:
            - name: step-1
              type: call
              call: "azure.get-resources"
              with:
                input: "{{param_1}}"
            - name: step-2
              type: call
              call: "snowflake.run-query"
              with:
                input: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "jira.create-issue"
              with:
                input: "{{step-1.result}}"
            - name: step-4
              type: call
              call: "msteams.send-message"
              with:
                input: "{{step-1.result}}"
  consumes:
    - type: http
      namespace: azure
      baseUri: "https://management.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azure_token"
      resources:
        - name: resources
          path: "/subscriptions"
          operations:
            - name: get-resources
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://mercedes-benz.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://mercedes-benz.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_password"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/mercedes-benz/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Processes compensation change with Workday data, SAP budget check, and Teams approval notification.

naftiko: "0.5"
info:
  label: "Compensation Change Approval Workflow"
  description: "Processes compensation change with Workday data, SAP budget check, and Teams approval notification."
  tags:
    - hr
    - workday
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: compensation-orchestrate
          description: "Processes compensation change with Workday data, SAP budget check, and Teams approval notification."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary input parameter for this workflow."
          steps:
            - name: step-1
              type: call
              call: "workday.get-worker"
              with:
                input: "{{param_1}}"
            - name: step-2
              type: call
              call: "sap.get-po"
              with:
                input: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "msteams.send-message"
              with:
                input: "{{step-1.result}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/mercedes-benz/workers/{{worker_id}}"
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://mercedes-benz-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: purchase-orders
          path: "/A_PurchaseOrder('{{{{po_number}}}}')"
          operations:
            - name: get-po
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/mercedes-benz/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Retrieves pending expense reports from SAP Concur, validates against policy, and routes for manager approval or auto-approves within threshold.

naftiko: "0.5"
info:
  label: "Concur Expense Report Approval"
  description: "Retrieves pending expense reports from SAP Concur, validates against policy, and routes for manager approval or auto-approves within threshold."
  tags:
    - finance
    - expense-management
    - sap-concur
    - approval
capability:
  exposes:
    - type: mcp
      namespace: expense-ops
      port: 8080
      tools:
        - name: process-expense-report
          description: "Given an SAP Concur expense report ID, retrieve details, validate against Mercedes-Benz expense policy, and either auto-approve if within threshold or escalate for manager review."
          inputParameters:
            - name: report_id
              in: body
              type: string
              description: "The SAP Concur expense report ID to process."
            - name: approval_threshold
              in: body
              type: number
              description: "The auto-approval threshold in EUR. Reports above this amount require manual review."
          steps:
            - name: get-report
              type: call
              call: "concur.get-expense-report"
              with:
                report_id: "{{report_id}}"
            - name: approve-report
              type: call
              call: "concur.approve-expense-report"
              with:
                report_id: "{{report_id}}"
                comment: "Auto-approved within policy threshold"
  consumes:
    - type: http
      namespace: concur
      baseUri: "https://www.concursolutions.com/api/v3.0"
      authentication:
        type: bearer
        token: "$secrets.concur_token"
      resources:
        - name: expense-reports
          path: "/expense/reports/{{report_id}}"
          inputParameters:
            - name: report_id
              in: path
          operations:
            - name: get-expense-report
              method: GET
            - name: approve-expense-report
              method: PATCH

Retrieves a Confluence page by ID.

naftiko: "0.5"
info:
  label: "Confluence Page Lookup"
  description: "Retrieves a Confluence page by ID."
  tags:
    - knowledge-management
    - confluence
    - documentation
capability:
  exposes:
    - type: mcp
      namespace: knowledge
      port: 8080
      tools:
        - name: get-confluence-page
          description: "Retrieves a Confluence page by ID."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary lookup parameter."
          call: "confluence.get-page"
          with:
            param_1: "{{param_1}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.result"
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://mercedes-benz.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_password"
      resources:
        - name: get-page
          path: "/content/{{{{page_id}}}}?expand=body.storage,version"
          operations:
            - name: get-page
              method: GET

Retrieves SAP contract at milestone, creates billing document, and notifies manager via Teams.

naftiko: "0.5"
info:
  label: "Contract Milestone Billing Workflow"
  description: "Retrieves SAP contract at milestone, creates billing document, and notifies manager via Teams."
  tags:
    - finance
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: finance
      port: 8080
      tools:
        - name: contract-orchestrate
          description: "Retrieves SAP contract at milestone, creates billing document, and notifies manager via Teams."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary input parameter for this workflow."
          steps:
            - name: step-1
              type: call
              call: "sap.get-po"
              with:
                input: "{{param_1}}"
            - name: step-2
              type: call
              call: "msteams.send-message"
              with:
                input: "{{step-1.result}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://mercedes-benz-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: purchase-orders
          path: "/A_PurchaseOrder('{{{{po_number}}}}')"
          operations:
            - name: get-po
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/mercedes-benz/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Detects expiring Salesforce contracts, pulls Snowflake spend data, and creates Jira renewal task.

naftiko: "0.5"
info:
  label: "Contract Renewal Alert Workflow"
  description: "Detects expiring Salesforce contracts, pulls Snowflake spend data, and creates Jira renewal task."
  tags:
    - sales
    - salesforce
    - snowflake
    - jira
capability:
  exposes:
    - type: mcp
      namespace: sales
      port: 8080
      tools:
        - name: contract-orchestrate
          description: "Detects expiring Salesforce contracts, pulls Snowflake spend data, and creates Jira renewal task."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary input parameter for this workflow."
          steps:
            - name: step-1
              type: call
              call: "salesforce.get-opportunity"
              with:
                input: "{{param_1}}"
            - name: step-2
              type: call
              call: "snowflake.run-query"
              with:
                input: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "jira.create-issue"
              with:
                input: "{{step-1.result}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://mercedes-benz.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity"
          operations:
            - name: get-opportunity
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://mercedes-benz.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://mercedes-benz.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_password"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

Provisions contractor with Azure AD guest account, Okta groups, and ServiceNow tracking ticket.

naftiko: "0.5"
info:
  label: "Contractor Access Provisioning Workflow"
  description: "Provisions contractor with Azure AD guest account, Okta groups, and ServiceNow tracking ticket."
  tags:
    - security
    - azure
    - okta
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: security
      port: 8080
      tools:
        - name: contractor-orchestrate
          description: "Provisions contractor with Azure AD guest account, Okta groups, and ServiceNow tracking ticket."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary input parameter for this workflow."
          steps:
            - name: step-1
              type: call
              call: "azure.get-resources"
              with:
                input: "{{param_1}}"
            - name: step-2
              type: call
              call: "okta.get-user-groups"
              with:
                input: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "servicenow.create-incident"
              with:
                input: "{{step-1.result}}"
  consumes:
    - type: http
      namespace: azure
      baseUri: "https://management.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azure_token"
      resources:
        - name: resources
          path: "/subscriptions"
          operations:
            - name: get-resources
              method: GET
    - type: http
      namespace: okta
      baseUri: "https://mercedes-benz.okta.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.okta_token"
      resources:
        - name: user-groups
          path: "/users/{{{{user_id}}}}/groups"
          operations:
            - name: get-user-groups
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://mercedes-benz.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST

Queries CrowdStrike Falcon for endpoint details by device ID.

naftiko: "0.5"
info:
  label: "CrowdStrike Endpoint Status Lookup"
  description: "Queries CrowdStrike Falcon for endpoint details by device ID."
  tags:
    - security
    - crowdstrike
    - endpoint
capability:
  exposes:
    - type: mcp
      namespace: security
      port: 8080
      tools:
        - name: get-endpoint-status
          description: "Queries CrowdStrike Falcon for endpoint details by device ID."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary lookup parameter."
          call: "crowdstrike.get-device"
          with:
            param_1: "{{param_1}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.result"
  consumes:
    - type: http
      namespace: crowdstrike
      baseUri: "https://api.crowdstrike.com"
      authentication:
        type: bearer
        token: "$secrets.crowdstrike_token"
      resources:
        - name: get-device
          path: "/devices/entities/devices/v2?ids={{{{device_id}}}}"
          operations:
            - name: get-device
              method: GET

Runs Snowflake data quality check, logs in ServiceNow, and notifies data engineering via Teams.

naftiko: "0.5"
info:
  label: "Data Quality Alert Workflow"
  description: "Runs Snowflake data quality check, logs in ServiceNow, and notifies data engineering via Teams."
  tags:
    - data
    - snowflake
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: data
      port: 8080
      tools:
        - name: data-orchestrate
          description: "Runs Snowflake data quality check, logs in ServiceNow, and notifies data engineering via Teams."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary input parameter for this workflow."
          steps:
            - name: step-1
              type: call
              call: "snowflake.run-query"
              with:
                input: "{{param_1}}"
            - name: step-2
              type: call
              call: "servicenow.create-incident"
              with:
                input: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "msteams.send-message"
              with:
                input: "{{step-1.result}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://mercedes-benz.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://mercedes-benz.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/mercedes-benz/channels/general/messages"
          operations:
            - name: send-message
              method: POST

When a Datadog infrastructure monitor triggers, creates a ServiceNow incident and pages the on-call engineer via PagerDuty.

naftiko: "0.5"
info:
  label: "Datadog Infrastructure Alert Handler"
  description: "When a Datadog infrastructure monitor triggers, creates a ServiceNow incident and pages the on-call engineer via PagerDuty."
  tags:
    - observability
    - infrastructure
    - datadog
    - servicenow
    - pagerduty
    - monitoring
capability:
  exposes:
    - type: mcp
      namespace: infra-monitoring
      port: 8080
      tools:
        - name: handle-infrastructure-alert
          description: "Given a Datadog monitor alert with host, metric, and threshold details, open a ServiceNow incident and trigger a PagerDuty escalation to the on-call engineer."
          inputParameters:
            - name: monitor_name
              in: body
              type: string
              description: "The Datadog monitor name that fired."
            - name: host
              in: body
              type: string
              description: "The affected host or service name."
            - name: metric_value
              in: body
              type: number
              description: "The current metric value that breached the threshold."
            - name: alert_url
              in: body
              type: string
              description: "URL to the Datadog monitor alert for context."
          steps:
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Infrastructure alert: {{monitor_name}} on {{host}}"
                urgency: "1"
                category: "infrastructure"
            - name: page-oncall
              type: call
              call: "pagerduty.create-incident"
              with:
                title: "Infra Alert: {{monitor_name}} on {{host}}"
                severity: "critical"
                body: "Metric value {{metric_value}}. Datadog: {{alert_url}}. SNOW: {{create-incident.number}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://mercedes-benz.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incident
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.pagerduty_token"
        placement: header
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: create-incident
              method: POST

Queries Datadog for the current health status of a monitored service.

naftiko: "0.5"
info:
  label: "Datadog Service Health Check"
  description: "Queries Datadog for the current health status of a monitored service."
  tags:
    - monitoring
    - datadog
    - observability
capability:
  exposes:
    - type: mcp
      namespace: observability
      port: 8080
      tools:
        - name: get-service-health
          description: "Queries Datadog for the current health status of a monitored service."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary lookup parameter."
          call: "datadog.get-monitor"
          with:
            param_1: "{{param_1}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.result"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        header: "DD-API-KEY"
        key: "$secrets.datadog_api_key"
      resources:
        - name: get-monitor
          path: "/monitor/{{{{monitor_id}}}}"
          operations:
            - name: get-monitor
              method: GET

When a Datadog SLO drops below target, fetches breach details, creates a Jira issue for the owning team, and posts a remediation request to Microsoft Teams.

naftiko: "0.5"
info:
  label: "Datadog SLO Breach Reporter"
  description: "When a Datadog SLO drops below target, fetches breach details, creates a Jira issue for the owning team, and posts a remediation request to Microsoft Teams."
  tags:
    - observability
    - slo
    - datadog
    - jira
    - microsoft-teams
    - reliability
capability:
  exposes:
    - type: mcp
      namespace: slo-ops
      port: 8080
      tools:
        - name: handle-slo-breach
          description: "Given a Datadog SLO ID that has breached its target, retrieve breach details, open a Jira issue for the responsible team, and post a remediation request to the platform Microsoft Teams channel."
          inputParameters:
            - name: slo_id
              in: body
              type: string
              description: "The Datadog SLO ID that has breached its target."
            - name: current_slo_value
              in: body
              type: number
              description: "The current SLO value as a percentage (e.g., 98.5)."
            - name: target_slo_value
              in: body
              type: number
              description: "The target SLO value as a percentage (e.g., 99.9)."
          steps:
            - name: get-slo
              type: call
              call: "datadog.get-slo"
              with:
                slo_id: "{{slo_id}}"
            - name: create-issue
              type: call
              call: "jira.create-issue"
              with:
                project_key: "ENG"
                issuetype: "Bug"
                summary: "SLO Breach: {{get-slo.name}} at {{current_slo_value}}% (target {{target_slo_value}}%)"
                description: "SLO {{get-slo.name}} has breached its target. Current: {{current_slo_value}}% | Target: {{target_slo_value}}%"
            - name: notify-platform
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "platform-reliability"
                message: "SLO BREACH: {{get-slo.name}} is at {{current_slo_value}}% against a {{target_slo_value}}% target. Jira: {{create-issue.key}}"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: slos
          path: "/slo/{{slo_id}}"
          inputParameters:
            - name: slo_id
              in: path
          operations:
            - name: get-slo
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://mercedes-benz.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Synchronizes dealer vehicle order data from the Salesforce CRM to SAP S/4HANA for production planning and revenue tracking.

naftiko: "0.5"
info:
  label: "Dealer Sales Pipeline Sync"
  description: "Synchronizes dealer vehicle order data from the Salesforce CRM to SAP S/4HANA for production planning and revenue tracking."
  tags:
    - sales
    - crm
    - salesforce
    - sap-s4hana
    - erp
capability:
  exposes:
    - type: mcp
      namespace: dealer-sales
      port: 8080
      tools:
        - name: sync-dealer-order
          description: "Given a Salesforce opportunity ID for a dealer vehicle order, retrieve order details and sync them into SAP S/4HANA as a sales order for production planning."
          inputParameters:
            - name: opportunity_id
              in: body
              type: string
              description: "The Salesforce Opportunity ID representing a dealer vehicle order."
          steps:
            - name: get-opportunity
              type: call
              call: "salesforce.get-opportunity"
              with:
                opportunity_id: "{{opportunity_id}}"
            - name: create-sales-order
              type: call
              call: "sap-s4.create-sales-order"
              with:
                customer_id: "{{get-opportunity.dealer_account_id}}"
                vehicle_model: "{{get-opportunity.vehicle_model}}"
                quantity: "{{get-opportunity.quantity}}"
                delivery_date: "{{get-opportunity.close_date}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://mercedes-benz.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunity
          path: "/sobjects/Opportunity/{{opportunity_id}}"
          inputParameters:
            - name: opportunity_id
              in: path
          operations:
            - name: get-opportunity
              method: GET
    - type: http
      namespace: sap-s4
      baseUri: "https://mercedes-benz-s4.sap.com/sap/opu/odata/sap/SD_SALES_ORDER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: sales-orders
          path: "/A_SalesOrder"
          operations:
            - name: create-sales-order
              method: POST

Monitors SAP delivery schedules, creates Jira follow-up task, and alerts supply chain via Teams.

naftiko: "0.5"
info:
  label: "Delivery Schedule Monitor and Alert"
  description: "Monitors SAP delivery schedules, creates Jira follow-up task, and alerts supply chain via Teams."
  tags:
    - logistics
    - sap
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: logistics
      port: 8080
      tools:
        - name: delivery-orchestrate
          description: "Monitors SAP delivery schedules, creates Jira follow-up task, and alerts supply chain via Teams."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary input parameter for this workflow."
          steps:
            - name: step-1
              type: call
              call: "sap.get-po"
              with:
                input: "{{param_1}}"
            - name: step-2
              type: call
              call: "jira.create-issue"
              with:
                input: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "msteams.send-message"
              with:
                input: "{{step-1.result}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://mercedes-benz-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: purchase-orders
          path: "/A_PurchaseOrder('{{{{po_number}}}}')"
          operations:
            - name: get-po
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://mercedes-benz.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_password"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/mercedes-benz/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Retrieves GitHub Dependabot alerts, creates Jira tasks, and notifies security via Teams.

naftiko: "0.5"
info:
  label: "Dependabot to Jira Task Bridge"
  description: "Retrieves GitHub Dependabot alerts, creates Jira tasks, and notifies security via Teams."
  tags:
    - devops
    - github
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: devops
      port: 8080
      tools:
        - name: dependabot-orchestrate
          description: "Retrieves GitHub Dependabot alerts, creates Jira tasks, and notifies security via Teams."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary input parameter for this workflow."
          steps:
            - name: step-1
              type: call
              call: "github.get-branch-protection"
              with:
                input: "{{param_1}}"
            - name: step-2
              type: call
              call: "jira.create-issue"
              with:
                input: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "msteams.send-message"
              with:
                input: "{{step-1.result}}"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: repos
          path: "/repos/{{{{repo}}}}/branches/main/protection"
          operations:
            - name: get-branch-protection
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://mercedes-benz.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_password"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/mercedes-benz/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Checks CrowdStrike for non-compliant endpoints, assigns policies, creates ServiceNow task, and alerts via Teams.

naftiko: "0.5"
info:
  label: "Device Compliance Remediation"
  description: "Checks CrowdStrike for non-compliant endpoints, assigns policies, creates ServiceNow task, and alerts via Teams."
  tags:
    - security
    - crowdstrike
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: security
      port: 8080
      tools:
        - name: device-orchestrate
          description: "Checks CrowdStrike for non-compliant endpoints, assigns policies, creates ServiceNow task, and alerts via Teams."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary input parameter for this workflow."
          steps:
            - name: step-1
              type: call
              call: "crowdstrike.get-device"
              with:
                input: "{{param_1}}"
            - name: step-2
              type: call
              call: "servicenow.create-incident"
              with:
                input: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "msteams.send-message"
              with:
                input: "{{step-1.result}}"
  consumes:
    - type: http
      namespace: crowdstrike
      baseUri: "https://api.crowdstrike.com"
      authentication:
        type: bearer
        token: "$secrets.crowdstrike_token"
      resources:
        - name: devices
          path: "/devices/entities/devices/v2"
          operations:
            - name: get-device
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://mercedes-benz.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/mercedes-benz/channels/general/messages"
          operations:
            - name: send-message
              method: POST

When an employee departure is confirmed in Workday, disables their Microsoft 365 account, closes all open ServiceNow tickets, and notifies HR via Teams.

naftiko: "0.5"
info:
  label: "Employee Offboarding Orchestrator"
  description: "When an employee departure is confirmed in Workday, disables their Microsoft 365 account, closes all open ServiceNow tickets, and notifies HR via Teams."
  tags:
    - hr
    - offboarding
    - workday
    - microsoft-365
    - 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 Microsoft 365 account, close open ServiceNow tickets assigned to them, and notify HR via Microsoft Teams."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday employee ID of the departing employee."
            - name: termination_date
              in: body
              type: string
              description: "The employee's last working day in ISO 8601 format (YYYY-MM-DD)."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{employee_id}}"
            - name: disable-account
              type: call
              call: "msgraph.disable-user"
              with:
                user_id: "{{get-employee.work_email}}"
            - name: notify-hr
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "hr-operations"
                message: "Offboarding complete for {{get-employee.displayName}} ({{employee_id}}). M365 account disabled. Termination date: {{termination_date}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: basic
        username: "$secrets.workday_user"
        password: "$secrets.workday_password"
      resources:
        - name: workers
          path: "/mercedes-benz/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: msgraph
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: users
          path: "/users/{{user_id}}"
          inputParameters:
            - name: user_id
              in: path
          operations:
            - name: disable-user
              method: PATCH
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

When a new hire is created in SAP SuccessFactors, opens a ServiceNow onboarding ticket, provisions a Microsoft 365 account, and sends a Microsoft Teams welcome message.

naftiko: "0.5"
info:
  label: "Employee Onboarding Orchestrator"
  description: "When a new hire is created in SAP SuccessFactors, opens a ServiceNow onboarding ticket, provisions a Microsoft 365 account, and sends a Microsoft Teams welcome message."
  tags:
    - hr
    - onboarding
    - sap-successfactors
    - servicenow
    - microsoft-teams
    - microsoft-365
capability:
  exposes:
    - type: mcp
      namespace: hr-onboarding
      port: 8080
      tools:
        - name: trigger-onboarding
          description: "Given a new hire employee ID from SAP SuccessFactors, orchestrate the full onboarding sequence: open a ServiceNow ticket, provision a Microsoft 365 account, and send a Teams welcome message."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The SAP SuccessFactors employee ID for the new hire."
            - name: start_date
              in: body
              type: string
              description: "The new hire's start date in ISO 8601 format (YYYY-MM-DD)."
            - name: department
              in: body
              type: string
              description: "The department the new hire is joining (e.g., Engineering, Finance)."
          steps:
            - name: get-employee
              type: call
              call: "successfactors.get-employee"
              with:
                employee_id: "{{employee_id}}"
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "New hire onboarding: {{get-employee.displayName}}"
                category: "hr_onboarding"
                assigned_to: "IT_Onboarding_Team"
            - name: provision-account
              type: call
              call: "msgraph.create-user"
              with:
                displayName: "{{get-employee.displayName}}"
                mailNickname: "{{get-employee.userId}}"
                department: "{{department}}"
            - name: send-welcome
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{provision-account.userPrincipalName}}"
                message: "Welcome to Mercedes-Benz, {{get-employee.firstName}}! Your IT onboarding ticket is {{create-ticket.number}}."
  consumes:
    - type: http
      namespace: successfactors
      baseUri: "https://api4.successfactors.com/odata/v2"
      authentication:
        type: bearer
        token: "$secrets.successfactors_token"
      resources:
        - name: employee
          path: "/User('{{employee_id}}')"
          inputParameters:
            - name: employee_id
              in: path
          operations:
            - name: get-employee
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://mercedes-benz.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incident
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msgraph
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: users
          path: "/users"
          operations:
            - name: create-user
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: chat-messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Detects Snowflake ETL failure, creates Jira ticket, retries pipeline, and notifies via Teams.

naftiko: "0.5"
info:
  label: "ETL Failure Recovery Workflow"
  description: "Detects Snowflake ETL failure, creates Jira ticket, retries pipeline, and notifies via Teams."
  tags:
    - data
    - snowflake
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: data
      port: 8080
      tools:
        - name: etl-orchestrate
          description: "Detects Snowflake ETL failure, creates Jira ticket, retries pipeline, and notifies via Teams."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary input parameter for this workflow."
          steps:
            - name: step-1
              type: call
              call: "snowflake.run-query"
              with:
                input: "{{param_1}}"
            - name: step-2
              type: call
              call: "jira.create-issue"
              with:
                input: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "msteams.send-message"
              with:
                input: "{{step-1.result}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://mercedes-benz.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://mercedes-benz.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_password"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/mercedes-benz/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Retrieves real-time status of Mercedes-Benz EV charging stations from the connected services API and surfaces alerts for offline stations via Microsoft Teams.

naftiko: "0.5"
info:
  label: "EV Charging Network Status Lookup"
  description: "Retrieves real-time status of Mercedes-Benz EV charging stations from the connected services API and surfaces alerts for offline stations via Microsoft Teams."
  tags:
    - operations
    - ev
    - connected-services
    - microsoft-teams
    - monitoring
capability:
  exposes:
    - type: mcp
      namespace: ev-ops
      port: 8080
      tools:
        - name: check-charging-station-status
          description: "Query the Mercedes me Connect API for the status of EV charging stations at a given location. If any stations are offline, post an alert to the operations Microsoft Teams channel."
          inputParameters:
            - name: location_id
              in: body
              type: string
              description: "The charging network location ID to check."
          steps:
            - name: get-status
              type: call
              call: "mercedes-connect.get-charging-status"
              with:
                location_id: "{{location_id}}"
            - name: notify-ops
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "ev-operations"
                message: "Charging Station Alert at {{location_id}}: {{get-status.offline_count}} stations offline out of {{get-status.total_count}} total."
  consumes:
    - type: http
      namespace: mercedes-connect
      baseUri: "https://api.mercedes-benz.com/vehicleservices/v3"
      authentication:
        type: bearer
        token: "$secrets.mercedes_connect_token"
      resources:
        - name: charging-status
          path: "/charging/locations/{{location_id}}/status"
          inputParameters:
            - name: location_id
              in: path
          operations:
            - name: get-charging-status
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Submits firewall policy change, creates ServiceNow change, and notifies security via Teams.

naftiko: "0.5"
info:
  label: "Firewall Policy Change Approval"
  description: "Submits firewall policy change, creates ServiceNow change, and notifies security via Teams."
  tags:
    - security
    - palo-alto-networks
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: security
      port: 8080
      tools:
        - name: firewall-orchestrate
          description: "Submits firewall policy change, creates ServiceNow change, and notifies security via Teams."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary input parameter for this workflow."
          steps:
            - name: step-1
              type: call
              call: "paloalto.get-security-rule"
              with:
                input: "{{param_1}}"
            - name: step-2
              type: call
              call: "servicenow.create-incident"
              with:
                input: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "msteams.send-message"
              with:
                input: "{{step-1.result}}"
  consumes:
    - type: http
      namespace: paloalto
      baseUri: "https://panorama.mercedes-benz.com/restapi/v10.2"
      authentication:
        type: bearer
        token: "$secrets.paloalto_token"
      resources:
        - name: security-rules
          path: "/Policies/SecurityRules"
          operations:
            - name: get-security-rule
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://mercedes-benz.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/mercedes-benz/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Triggers a rollback deployment via GitHub Actions when a Datadog error rate monitor exceeds threshold, creating a ServiceNow change request for audit trail.

naftiko: "0.5"
info:
  label: "GitHub Deployment Rollback"
  description: "Triggers a rollback deployment via GitHub Actions when a Datadog error rate monitor exceeds threshold, creating a ServiceNow change request for audit trail."
  tags:
    - devops
    - deployment
    - github
    - datadog
    - servicenow
    - rollback
capability:
  exposes:
    - type: mcp
      namespace: deployment-ops
      port: 8080
      tools:
        - name: trigger-rollback
          description: "Given a repository, environment, and previous stable version tag, trigger a rollback GitHub Actions workflow, create a ServiceNow emergency change request, and log a Datadog event."
          inputParameters:
            - name: repository
              in: body
              type: string
              description: "The GitHub repository to roll back (e.g., mercedes-benz/eqs-api)."
            - name: environment
              in: body
              type: string
              description: "The deployment environment to roll back (production, staging)."
            - name: target_version
              in: body
              type: string
              description: "The stable version tag to roll back to (e.g., v2.3.1)."
          steps:
            - name: create-change
              type: call
              call: "servicenow.create-change"
              with:
                short_description: "Emergency rollback: {{repository}} to {{target_version}} in {{environment}}"
                type: "emergency"
                category: "software_deployment"
            - name: trigger-workflow
              type: call
              call: "github.trigger-workflow"
              with:
                repository: "{{repository}}"
                workflow_id: "rollback.yml"
                ref: "main"
                inputs: "environment={{environment}},version={{target_version}}"
            - name: log-event
              type: call
              call: "datadog.create-event"
              with:
                title: "Rollback triggered: {{repository}}/{{environment}} to {{target_version}}"
                alert_type: "warning"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://mercedes-benz.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: change-request
          path: "/table/change_request"
          operations:
            - name: create-change
              method: POST
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: workflow-dispatches
          path: "/repos/{{repository}}/actions/workflows/{{workflow_id}}/dispatches"
          inputParameters:
            - name: repository
              in: path
            - name: workflow_id
              in: path
          operations:
            - name: trigger-workflow
              method: POST
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: events
          path: "/events"
          operations:
            - name: create-event
              method: POST

Runs GitHub security scan on PR, checks CrowdStrike for indicators, and posts review summary.

naftiko: "0.5"
info:
  label: "GitHub PR Security Review Orchestrator"
  description: "Runs GitHub security scan on PR, checks CrowdStrike for indicators, and posts review summary."
  tags:
    - devops
    - github
    - crowdstrike
capability:
  exposes:
    - type: mcp
      namespace: devops
      port: 8080
      tools:
        - name: github-orchestrate
          description: "Runs GitHub security scan on PR, checks CrowdStrike for indicators, and posts review summary."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary input parameter for this workflow."
          steps:
            - name: step-1
              type: call
              call: "github.get-branch-protection"
              with:
                input: "{{param_1}}"
            - name: step-2
              type: call
              call: "crowdstrike.get-device"
              with:
                input: "{{step-1.result}}"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: repos
          path: "/repos/{{{{repo}}}}/branches/main/protection"
          operations:
            - name: get-branch-protection
              method: GET
    - type: http
      namespace: crowdstrike
      baseUri: "https://api.crowdstrike.com"
      authentication:
        type: bearer
        token: "$secrets.crowdstrike_token"
      resources:
        - name: devices
          path: "/devices/entities/devices/v2"
          operations:
            - name: get-device
              method: GET

Checks a GitHub repository for branch protection compliance.

naftiko: "0.5"
info:
  label: "GitHub Repository Compliance Check"
  description: "Checks a GitHub repository for branch protection compliance."
  tags:
    - devops
    - github
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: devops
      port: 8080
      tools:
        - name: check-repo-compliance
          description: "Checks a GitHub repository for branch protection compliance."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary lookup parameter."
          call: "github.get-branch-protection"
          with:
            param_1: "{{param_1}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.result"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: get-branch-protection
          path: "/repos/{{{{repo}}}}/branches/main/protection"
          operations:
            - name: get-branch-protection
              method: GET

Triggers a Snyk security scan on a GitHub repository and creates Jira issues for any critical or high vulnerabilities discovered.

naftiko: "0.5"
info:
  label: "GitHub Repository Security Scan"
  description: "Triggers a Snyk security scan on a GitHub repository and creates Jira issues for any critical or high vulnerabilities discovered."
  tags:
    - devops
    - security
    - github
    - snyk
    - jira
    - vulnerability-management
capability:
  exposes:
    - type: mcp
      namespace: security-scanning
      port: 8080
      tools:
        - name: scan-repo-vulnerabilities
          description: "Given a GitHub repository name, trigger a Snyk vulnerability scan and create Jira issues for all critical and high severity findings."
          inputParameters:
            - name: repository
              in: body
              type: string
              description: "The GitHub repository full name to scan (e.g., mercedes-benz/eqs-sdk)."
            - name: jira_project_key
              in: body
              type: string
              description: "The Jira project key where vulnerability issues should be created."
          steps:
            - name: trigger-scan
              type: call
              call: "snyk.test-repository"
              with:
                repository: "{{repository}}"
            - name: create-vuln-issue
              type: call
              call: "jira.create-issue"
              with:
                project_key: "{{jira_project_key}}"
                issuetype: "Bug"
                summary: "Security vulnerabilities found in {{repository}}"
                description: "Snyk scan found {{trigger-scan.critical_count}} critical and {{trigger-scan.high_count}} high vulnerabilities. Report: {{trigger-scan.report_url}}"
  consumes:
    - type: http
      namespace: snyk
      baseUri: "https://api.snyk.io/v1"
      authentication:
        type: bearer
        token: "$secrets.snyk_token"
      resources:
        - name: test
          path: "/test/github/{{repository}}"
          inputParameters:
            - name: repository
              in: path
          operations:
            - name: test-repository
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://mercedes-benz.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

Creates SAP quality inspection from goods receipt, logs in ServiceNow, and notifies QA via Teams.

naftiko: "0.5"
info:
  label: "Goods Receipt to Quality Inspection"
  description: "Creates SAP quality inspection from goods receipt, logs in ServiceNow, and notifies QA via Teams."
  tags:
    - logistics
    - sap
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: logistics
      port: 8080
      tools:
        - name: goods-orchestrate
          description: "Creates SAP quality inspection from goods receipt, logs in ServiceNow, and notifies QA via Teams."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary input parameter for this workflow."
          steps:
            - name: step-1
              type: call
              call: "sap.get-po"
              with:
                input: "{{param_1}}"
            - name: step-2
              type: call
              call: "servicenow.create-incident"
              with:
                input: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "msteams.send-message"
              with:
                input: "{{step-1.result}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://mercedes-benz-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: purchase-orders
          path: "/A_PurchaseOrder('{{{{po_number}}}}')"
          operations:
            - name: get-po
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://mercedes-benz.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/mercedes-benz/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Pulls Snowflake headcount, refreshes Power BI dashboard, and notifies leadership via Teams.

naftiko: "0.5"
info:
  label: "Headcount Forecast Report Generator"
  description: "Pulls Snowflake headcount, refreshes Power BI dashboard, and notifies leadership via Teams."
  tags:
    - hr
    - snowflake
    - power-bi
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: headcount-orchestrate
          description: "Pulls Snowflake headcount, refreshes Power BI dashboard, and notifies leadership via Teams."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary input parameter for this workflow."
          steps:
            - name: step-1
              type: call
              call: "snowflake.run-query"
              with:
                input: "{{param_1}}"
            - name: step-2
              type: call
              call: "powerbi.trigger-refresh"
              with:
                input: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "msteams.send-message"
              with:
                input: "{{step-1.result}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://mercedes-benz.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: refreshes
          path: "/datasets/{{{{dataset_id}}}}/refreshes"
          operations:
            - name: trigger-refresh
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/mercedes-benz/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Escalates recurring ServiceNow incidents to problems, correlates Splunk events, and creates Jira tasks.

naftiko: "0.5"
info:
  label: "Incident to Problem Escalation Workflow"
  description: "Escalates recurring ServiceNow incidents to problems, correlates Splunk events, and creates Jira tasks."
  tags:
    - itsm
    - servicenow
    - splunk
    - jira
capability:
  exposes:
    - type: mcp
      namespace: itsm
      port: 8080
      tools:
        - name: incident-orchestrate
          description: "Escalates recurring ServiceNow incidents to problems, correlates Splunk events, and creates Jira tasks."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary input parameter for this workflow."
          steps:
            - name: step-1
              type: call
              call: "servicenow.create-incident"
              with:
                input: "{{param_1}}"
            - name: step-2
              type: call
              call: "splunk.run-search"
              with:
                input: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "jira.create-issue"
              with:
                input: "{{step-1.result}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://mercedes-benz.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: splunk
      baseUri: "https://splunk.mercedes-benz.com:8089/services"
      authentication:
        type: bearer
        token: "$secrets.splunk_token"
      resources:
        - name: search
          path: "/search/jobs"
          operations:
            - name: run-search
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://mercedes-benz.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_password"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

Processes SAP intercompany transfer, logs in Snowflake audit, and notifies logistics via Teams.

naftiko: "0.5"
info:
  label: "Intercompany Transfer Orchestrator"
  description: "Processes SAP intercompany transfer, logs in Snowflake audit, and notifies logistics via Teams."
  tags:
    - logistics
    - sap
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: logistics
      port: 8080
      tools:
        - name: intercompany-orchestrate
          description: "Processes SAP intercompany transfer, logs in Snowflake audit, and notifies logistics via Teams."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary input parameter for this workflow."
          steps:
            - name: step-1
              type: call
              call: "sap.get-po"
              with:
                input: "{{param_1}}"
            - name: step-2
              type: call
              call: "snowflake.run-query"
              with:
                input: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "msteams.send-message"
              with:
                input: "{{step-1.result}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://mercedes-benz-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: purchase-orders
          path: "/A_PurchaseOrder('{{{{po_number}}}}')"
          operations:
            - name: get-po
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://mercedes-benz.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/mercedes-benz/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Compares invoice against SAP purchase order and goods receipt, then logs in ServiceNow.

naftiko: "0.5"
info:
  label: "Invoice Three-Way Match Orchestrator"
  description: "Compares invoice against SAP purchase order and goods receipt, then logs in ServiceNow."
  tags:
    - finance
    - sap
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: finance
      port: 8080
      tools:
        - name: invoice-orchestrate
          description: "Compares invoice against SAP purchase order and goods receipt, then logs in ServiceNow."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary input parameter for this workflow."
          steps:
            - name: step-1
              type: call
              call: "sap.get-po"
              with:
                input: "{{param_1}}"
            - name: step-2
              type: call
              call: "servicenow.create-incident"
              with:
                input: "{{step-1.result}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://mercedes-benz-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: purchase-orders
          path: "/A_PurchaseOrder('{{{{po_number}}}}')"
          operations:
            - name: get-po
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://mercedes-benz.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST

Retrieves a Jira issue by key, returning summary, status, and assignee.

naftiko: "0.5"
info:
  label: "Jira Issue Detail Lookup"
  description: "Retrieves a Jira issue by key, returning summary, status, and assignee."
  tags:
    - devops
    - jira
    - project-management
capability:
  exposes:
    - type: mcp
      namespace: project-management
      port: 8080
      tools:
        - name: get-jira-issue
          description: "Retrieves a Jira issue by key, returning summary, status, and assignee."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary lookup parameter."
          call: "jira.get-issue"
          with:
            param_1: "{{param_1}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.result"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://mercedes-benz.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_password"
      resources:
        - name: get-issue
          path: "/issue/{{{{issue_key}}}}"
          operations:
            - name: get-issue
              method: GET

Generates a sprint retrospective summary by fetching completed and incomplete Jira issues and posting a digest to the team's Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Jira Sprint Retrospective Digest"
  description: "Generates a sprint retrospective summary by fetching completed and incomplete Jira issues and posting a digest to the team's Microsoft Teams channel."
  tags:
    - devops
    - reporting
    - jira
    - microsoft-teams
    - agile
capability:
  exposes:
    - type: mcp
      namespace: agile-reporting
      port: 8080
      tools:
        - name: digest-sprint-retrospective
          description: "Given a Jira board ID and sprint ID, fetch completed and incomplete issues, compute velocity metrics, and post a formatted retrospective digest to the team's Microsoft Teams channel."
          inputParameters:
            - name: board_id
              in: body
              type: string
              description: "The Jira board ID for the sprint."
            - name: sprint_id
              in: body
              type: string
              description: "The Jira sprint ID to summarize."
            - name: teams_channel_id
              in: body
              type: string
              description: "The Microsoft Teams channel ID to post the digest to."
          steps:
            - name: get-issues
              type: call
              call: "jira.list-sprint-issues"
              with:
                board_id: "{{board_id}}"
                sprint_id: "{{sprint_id}}"
            - name: post-digest
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "{{teams_channel_id}}"
                message: "Sprint Retrospective - Sprint {{sprint_id}}: {{get-issues.done_count}} issues completed, {{get-issues.todo_count}} carried over. Velocity: {{get-issues.story_points_completed}} points."
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://mercedes-benz.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: sprint-issues
          path: "/board/{{board_id}}/sprint/{{sprint_id}}/issue"
          inputParameters:
            - name: board_id
              in: path
            - name: sprint_id
              in: path
          operations:
            - name: list-sprint-issues
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Generates ServiceNow knowledge article from resolved incident and shares via Teams.

naftiko: "0.5"
info:
  label: "Knowledge Article Auto-Publisher"
  description: "Generates ServiceNow knowledge article from resolved incident and shares via Teams."
  tags:
    - itsm
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: itsm
      port: 8080
      tools:
        - name: knowledge-orchestrate
          description: "Generates ServiceNow knowledge article from resolved incident and shares via Teams."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary input parameter for this workflow."
          steps:
            - name: step-1
              type: call
              call: "servicenow.create-incident"
              with:
                input: "{{param_1}}"
            - name: step-2
              type: call
              call: "msteams.send-message"
              with:
                input: "{{step-1.result}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://mercedes-benz.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/mercedes-benz/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Compares Azure AD licenses against Snowflake headcount and creates ServiceNow optimization task.

naftiko: "0.5"
info:
  label: "License Reconciliation Workflow"
  description: "Compares Azure AD licenses against Snowflake headcount and creates ServiceNow optimization task."
  tags:
    - identity
    - azure
    - snowflake
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: identity
      port: 8080
      tools:
        - name: license-orchestrate
          description: "Compares Azure AD licenses against Snowflake headcount and creates ServiceNow optimization task."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary input parameter for this workflow."
          steps:
            - name: step-1
              type: call
              call: "azure.get-resources"
              with:
                input: "{{param_1}}"
            - name: step-2
              type: call
              call: "snowflake.run-query"
              with:
                input: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "servicenow.create-incident"
              with:
                input: "{{step-1.result}}"
  consumes:
    - type: http
      namespace: azure
      baseUri: "https://management.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azure_token"
      resources:
        - name: resources
          path: "/subscriptions"
          operations:
            - name: get-resources
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://mercedes-benz.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://mercedes-benz.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST

Fetches LinkedIn Campaign Manager performance metrics for Mercedes-Benz brand campaigns and posts a weekly summary to the marketing Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "LinkedIn Brand Campaign Performance Digest"
  description: "Fetches LinkedIn Campaign Manager performance metrics for Mercedes-Benz brand campaigns and posts a weekly summary to the marketing Microsoft Teams channel."
  tags:
    - marketing
    - social-media
    - linkedin
    - microsoft-teams
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: marketing-reporting
      port: 8080
      tools:
        - name: digest-linkedin-campaign-performance
          description: "Retrieve LinkedIn Campaign Manager analytics for a specified date range for Mercedes-Benz brand campaigns and post a formatted digest to the marketing Microsoft Teams channel."
          inputParameters:
            - name: date_range_start
              in: body
              type: string
              description: "Start date for the campaign performance report (YYYY-MM-DD)."
            - name: date_range_end
              in: body
              type: string
              description: "End date for the campaign performance report (YYYY-MM-DD)."
          steps:
            - name: get-analytics
              type: call
              call: "linkedin.get-campaign-analytics"
              with:
                start_date: "{{date_range_start}}"
                end_date: "{{date_range_end}}"
            - name: post-digest
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "marketing-brand"
                message: "LinkedIn Campaign Report ({{date_range_start}} to {{date_range_end}}): Impressions: {{get-analytics.impressions}} | Clicks: {{get-analytics.clicks}} | CTR: {{get-analytics.ctr}}%"
  consumes:
    - type: http
      namespace: linkedin
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: campaign-analytics
          path: "/adAnalyticsV2"
          operations:
            - name: get-campaign-analytics
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Retrieves P1 incident details, creates Teams bridge channel, and posts stakeholder updates.

naftiko: "0.5"
info:
  label: "Major Incident Communication Orchestrator"
  description: "Retrieves P1 incident details, creates Teams bridge channel, and posts stakeholder updates."
  tags:
    - itsm
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: itsm
      port: 8080
      tools:
        - name: major-orchestrate
          description: "Retrieves P1 incident details, creates Teams bridge channel, and posts stakeholder updates."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary input parameter for this workflow."
          steps:
            - name: step-1
              type: call
              call: "servicenow.create-incident"
              with:
                input: "{{param_1}}"
            - name: step-2
              type: call
              call: "msteams.send-message"
              with:
                input: "{{step-1.result}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://mercedes-benz.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/mercedes-benz/channels/general/messages"
          operations:
            - name: send-message
              method: POST

When Datadog alert fires, creates Jira incident ticket and posts Teams notification.

naftiko: "0.5"
info:
  label: "Monitoring Alert to Jira Bridge"
  description: "When Datadog alert fires, creates Jira incident ticket and posts Teams notification."
  tags:
    - monitoring
    - datadog
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: monitoring
      port: 8080
      tools:
        - name: monitoring-orchestrate
          description: "When Datadog alert fires, creates Jira incident ticket and posts Teams notification."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary input parameter for this workflow."
          steps:
            - name: step-1
              type: call
              call: "datadog.get-monitor"
              with:
                input: "{{param_1}}"
            - name: step-2
              type: call
              call: "jira.create-issue"
              with:
                input: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "msteams.send-message"
              with:
                input: "{{step-1.result}}"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        header: "DD-API-KEY"
        key: "$secrets.datadog_api_key"
      resources:
        - name: monitors
          path: "/monitor/{{{{monitor_id}}}}"
          operations:
            - name: get-monitor
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://mercedes-benz.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_password"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/mercedes-benz/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Provisions Okta application access for a new employee based on their department and role, and logs the provisioning action in ServiceNow.

naftiko: "0.5"
info:
  label: "Okta Access Provisioning"
  description: "Provisions Okta application access for a new employee based on their department and role, and logs the provisioning action in ServiceNow."
  tags:
    - identity
    - security
    - okta
    - servicenow
    - access-management
capability:
  exposes:
    - type: mcp
      namespace: identity-ops
      port: 8080
      tools:
        - name: provision-okta-access
          description: "Given a user email, department, and list of required application IDs, assign the user to Okta application groups and log the access provisioning in a ServiceNow ticket."
          inputParameters:
            - name: user_email
              in: body
              type: string
              description: "The employee's work email address to provision in Okta."
            - name: department
              in: body
              type: string
              description: "The employee's department for role-based group assignment."
            - name: application_ids
              in: body
              type: string
              description: "Comma-separated list of Okta application IDs to provision access for."
          steps:
            - name: get-user
              type: call
              call: "okta.get-user-by-email"
              with:
                email: "{{user_email}}"
            - name: assign-groups
              type: call
              call: "okta.assign-user-to-group"
              with:
                user_id: "{{get-user.id}}"
                department: "{{department}}"
            - name: log-provisioning
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Okta access provisioned for {{user_email}}"
                category: "access_management"
                description: "Applications: {{application_ids}} | Department: {{department}}"
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://mercedes-benz.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: users
          path: "/users"
          operations:
            - name: get-user-by-email
              method: GET
        - name: groups
          path: "/groups/{{group_id}}/users/{{user_id}}"
          inputParameters:
            - name: group_id
              in: path
            - name: user_id
              in: path
          operations:
            - name: assign-user-to-group
              method: PUT
    - type: http
      namespace: servicenow
      baseUri: "https://mercedes-benz.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incident
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST

When Okta detects a suspicious login event, creates a high-priority ServiceNow security incident and notifies the security operations team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Okta Suspicious Login Alert"
  description: "When Okta detects a suspicious login event, creates a high-priority ServiceNow security incident and notifies the security operations team via Microsoft Teams."
  tags:
    - security
    - identity
    - okta
    - servicenow
    - microsoft-teams
    - siem
capability:
  exposes:
    - type: mcp
      namespace: security-ops
      port: 8080
      tools:
        - name: handle-suspicious-login
          description: "Given an Okta suspicious login event with user ID and event details, create a high-priority ServiceNow security incident and alert the security operations Microsoft Teams channel for immediate investigation."
          inputParameters:
            - name: user_email
              in: body
              type: string
              description: "The email of the user who triggered the suspicious login event."
            - name: event_id
              in: body
              type: string
              description: "The Okta system log event ID for the suspicious login."
            - name: ip_address
              in: body
              type: string
              description: "The IP address from which the suspicious login originated."
          steps:
            - name: get-event
              type: call
              call: "okta.get-system-log-event"
              with:
                event_id: "{{event_id}}"
            - name: create-security-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Suspicious login detected for {{user_email}} from {{ip_address}}"
                urgency: "1"
                category: "security"
                description: "Okta Event ID: {{event_id}} | User: {{user_email}} | IP: {{ip_address}} | Details: {{get-event.outcome}}"
            - name: alert-soc
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "security-operations"
                message: "SECURITY ALERT: Suspicious login for {{user_email}} from {{ip_address}}. Incident: {{create-security-incident.number}}. Investigate immediately."
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://mercedes-benz.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: system-logs
          path: "/logs/{{event_id}}"
          inputParameters:
            - name: event_id
              in: path
          operations:
            - name: get-system-log-event
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://mercedes-benz.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incident
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Retrieves all Okta group memberships for a user.

naftiko: "0.5"
info:
  label: "Okta User Group Membership Lookup"
  description: "Retrieves all Okta group memberships for a user."
  tags:
    - security
    - okta
    - identity
capability:
  exposes:
    - type: mcp
      namespace: identity
      port: 8080
      tools:
        - name: get-user-groups
          description: "Retrieves all Okta group memberships for a user."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary lookup parameter."
          call: "okta.get-user-groups"
          with:
            param_1: "{{param_1}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.result"
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://mercedes-benz.okta.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.okta_token"
      resources:
        - name: get-user-groups
          path: "/users/{{{{user_id}}}}/groups"
          operations:
            - name: get-user-groups
              method: GET

Detects Workday org changes, updates Okta groups and Azure AD, and logs in ServiceNow.

naftiko: "0.5"
info:
  label: "Org Change to Identity Sync"
  description: "Detects Workday org changes, updates Okta groups and Azure AD, and logs in ServiceNow."
  tags:
    - hr
    - workday
    - okta
    - azure
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: org-orchestrate
          description: "Detects Workday org changes, updates Okta groups and Azure AD, and logs in ServiceNow."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary input parameter for this workflow."
          steps:
            - name: step-1
              type: call
              call: "workday.get-worker"
              with:
                input: "{{param_1}}"
            - name: step-2
              type: call
              call: "okta.get-user-groups"
              with:
                input: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "azure.get-resources"
              with:
                input: "{{step-1.result}}"
            - name: step-4
              type: call
              call: "servicenow.create-incident"
              with:
                input: "{{step-1.result}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/mercedes-benz/workers/{{worker_id}}"
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: okta
      baseUri: "https://mercedes-benz.okta.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.okta_token"
      resources:
        - name: user-groups
          path: "/users/{{{{user_id}}}}/groups"
          operations:
            - name: get-user-groups
              method: GET
    - type: http
      namespace: azure
      baseUri: "https://management.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azure_token"
      resources:
        - name: resources
          path: "/subscriptions"
          operations:
            - name: get-resources
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://mercedes-benz.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST

Retrieves a firewall security rule from Palo Alto Panorama by rule name.

naftiko: "0.5"
info:
  label: "Palo Alto Firewall Rule Lookup"
  description: "Retrieves a firewall security rule from Palo Alto Panorama by rule name."
  tags:
    - security
    - palo-alto-networks
    - firewall
capability:
  exposes:
    - type: mcp
      namespace: network-security
      port: 8080
      tools:
        - name: get-firewall-rule
          description: "Retrieves a firewall security rule from Palo Alto Panorama by rule name."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary lookup parameter."
          call: "paloalto.get-security-rule"
          with:
            param_1: "{{param_1}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.result"
  consumes:
    - type: http
      namespace: paloalto
      baseUri: "https://panorama.mercedes-benz.com/restapi/v10.2"
      authentication:
        type: bearer
        token: "$secrets.paloalto_token"
      resources:
        - name: get-security-rule
          path: "/Policies/SecurityRules?name={{{{rule_name}}}}"
          operations:
            - name: get-security-rule
              method: GET

Checks the refresh status of a Power BI dataset.

naftiko: "0.5"
info:
  label: "Power BI Dataset Refresh Status"
  description: "Checks the refresh status of a Power BI dataset."
  tags:
    - analytics
    - power-bi
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: analytics
      port: 8080
      tools:
        - name: get-dataset-refresh-status
          description: "Checks the refresh status of a Power BI dataset."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary lookup parameter."
          call: "powerbi.get-refresh-history"
          with:
            param_1: "{{param_1}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.result"
  consumes:
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: get-refresh-history
          path: "/datasets/{{{{dataset_id}}}}/refreshes?$top=1"
          operations:
            - name: get-refresh-history
              method: GET

Triggers a Power BI dataset refresh for the global sales dashboard and notifies the analytics team via Microsoft Teams when complete.

naftiko: "0.5"
info:
  label: "Power BI Sales Dashboard Refresh"
  description: "Triggers a Power BI dataset refresh for the global sales dashboard and notifies the analytics team via Microsoft Teams when complete."
  tags:
    - analytics
    - reporting
    - power-bi
    - microsoft-teams
    - data
capability:
  exposes:
    - type: mcp
      namespace: analytics-reporting
      port: 8080
      tools:
        - name: refresh-sales-dashboard
          description: "Given a Power BI dataset ID, trigger a dataset refresh for the global sales dashboard and notify the analytics Microsoft Teams channel upon completion."
          inputParameters:
            - name: dataset_id
              in: body
              type: string
              description: "The Power BI dataset ID to refresh."
            - name: workspace_id
              in: body
              type: string
              description: "The Power BI workspace ID containing the dataset."
          steps:
            - name: trigger-refresh
              type: call
              call: "powerbi.refresh-dataset"
              with:
                dataset_id: "{{dataset_id}}"
                workspace_id: "{{workspace_id}}"
            - name: notify-analytics
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "analytics-team"
                message: "Power BI sales dashboard refresh initiated for dataset {{dataset_id}}. Refresh ID: {{trigger-refresh.refresh_id}}"
  consumes:
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: dataset-refreshes
          path: "/groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: workspace_id
              in: path
            - name: dataset_id
              in: path
          operations:
            - name: refresh-dataset
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

When a production line downtime event is logged, creates a high-priority ServiceNow incident, pages the maintenance team via PagerDuty, and posts an alert to the plant operations Teams channel.

naftiko: "0.5"
info:
  label: "Production Line Downtime Notification"
  description: "When a production line downtime event is logged, creates a high-priority ServiceNow incident, pages the maintenance team via PagerDuty, and posts an alert to the plant operations Teams channel."
  tags:
    - manufacturing
    - operations
    - servicenow
    - pagerduty
    - microsoft-teams
    - downtime
capability:
  exposes:
    - type: mcp
      namespace: plant-ops
      port: 8080
      tools:
        - name: handle-line-downtime
          description: "Given a production line downtime event with plant ID, line number, and cause, create a critical ServiceNow incident, page the maintenance team via PagerDuty, and alert the plant operations Teams channel."
          inputParameters:
            - name: plant_id
              in: body
              type: string
              description: "The plant identifier where the downtime occurred (e.g., SIN for Sindelfingen)."
            - name: line_number
              in: body
              type: string
              description: "The production line number that is down."
            - name: downtime_cause
              in: body
              type: string
              description: "Brief description of the cause of the production line downtime."
          steps:
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Production line down: Plant {{plant_id}} Line {{line_number}}"
                urgency: "1"
                category: "manufacturing"
                description: "Cause: {{downtime_cause}}"
            - name: page-maintenance
              type: call
              call: "pagerduty.create-incident"
              with:
                title: "LINE DOWN: Plant {{plant_id}} Line {{line_number}}"
                severity: "critical"
                body: "{{downtime_cause}}. SNOW: {{create-incident.number}}"
            - name: notify-plant
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "plant-operations"
                message: "PRODUCTION ALERT: Line {{line_number}} at Plant {{plant_id}} is DOWN. Cause: {{downtime_cause}} | Incident: {{create-incident.number}} | Maintenance paged."
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://mercedes-benz.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incident
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.pagerduty_token"
        placement: header
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Queries SAP for budget utilization, checks Snowflake analytics, and sends Teams alert when spending exceeds threshold.

naftiko: "0.5"
info:
  label: "Program Budget Alert Workflow"
  description: "Queries SAP for budget utilization, checks Snowflake analytics, and sends Teams alert when spending exceeds threshold."
  tags:
    - finance
    - sap
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: finance
      port: 8080
      tools:
        - name: program-orchestrate
          description: "Queries SAP for budget utilization, checks Snowflake analytics, and sends Teams alert when spending exceeds threshold."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary input parameter for this workflow."
          steps:
            - name: step-1
              type: call
              call: "sap.get-po"
              with:
                input: "{{param_1}}"
            - name: step-2
              type: call
              call: "snowflake.run-query"
              with:
                input: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "msteams.send-message"
              with:
                input: "{{step-1.result}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://mercedes-benz-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: purchase-orders
          path: "/A_PurchaseOrder('{{{{po_number}}}}')"
          operations:
            - name: get-po
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://mercedes-benz.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/mercedes-benz/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Retrieves SAP purchase requisition, identifies Workday approver, and sends Teams approval request.

naftiko: "0.5"
info:
  label: "Purchase Requisition Approval Routing"
  description: "Retrieves SAP purchase requisition, identifies Workday approver, and sends Teams approval request."
  tags:
    - procurement
    - sap
    - workday
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: procurement
      port: 8080
      tools:
        - name: purchase-orchestrate
          description: "Retrieves SAP purchase requisition, identifies Workday approver, and sends Teams approval request."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary input parameter for this workflow."
          steps:
            - name: step-1
              type: call
              call: "sap.get-po"
              with:
                input: "{{param_1}}"
            - name: step-2
              type: call
              call: "workday.get-worker"
              with:
                input: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "msteams.send-message"
              with:
                input: "{{step-1.result}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://mercedes-benz-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: purchase-orders
          path: "/A_PurchaseOrder('{{{{po_number}}}}')"
          operations:
            - name: get-po
              method: GET
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/mercedes-benz/workers/{{worker_id}}"
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/mercedes-benz/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Pulls LinkedIn pipeline, creates Workday requisition, and notifies hiring manager via Teams.

naftiko: "0.5"
info:
  label: "Recruiting Pipeline to Workday Sync"
  description: "Pulls LinkedIn pipeline, creates Workday requisition, and notifies hiring manager via Teams."
  tags:
    - hr
    - linkedin
    - workday
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: recruiting-orchestrate
          description: "Pulls LinkedIn pipeline, creates Workday requisition, and notifies hiring manager via Teams."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary input parameter for this workflow."
          steps:
            - name: step-1
              type: call
              call: "linkedin.get-job-pipeline"
              with:
                input: "{{param_1}}"
            - name: step-2
              type: call
              call: "workday.get-worker"
              with:
                input: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "msteams.send-message"
              with:
                input: "{{step-1.result}}"
  consumes:
    - type: http
      namespace: linkedin
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: postings
          path: "/jobPostings"
          operations:
            - name: get-job-pipeline
              method: GET
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/mercedes-benz/workers/{{worker_id}}"
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/mercedes-benz/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Gathers completed Jira issues, generates Confluence release notes, and notifies stakeholders via Teams.

naftiko: "0.5"
info:
  label: "Release Documentation Generator"
  description: "Gathers completed Jira issues, generates Confluence release notes, and notifies stakeholders via Teams."
  tags:
    - devops
    - jira
    - confluence
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: devops
      port: 8080
      tools:
        - name: release-orchestrate
          description: "Gathers completed Jira issues, generates Confluence release notes, and notifies stakeholders via Teams."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary input parameter for this workflow."
          steps:
            - name: step-1
              type: call
              call: "jira.create-issue"
              with:
                input: "{{param_1}}"
            - name: step-2
              type: call
              call: "confluence.create-page"
              with:
                input: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "msteams.send-message"
              with:
                input: "{{step-1.result}}"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://mercedes-benz.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_password"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://mercedes-benz.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_password"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: create-page
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/mercedes-benz/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Creates ServiceNow change for GitHub release, triggers Terraform deployment, and posts Teams notification.

naftiko: "0.5"
info:
  label: "Release to Deployment Pipeline"
  description: "Creates ServiceNow change for GitHub release, triggers Terraform deployment, and posts Teams notification."
  tags:
    - devops
    - github
    - servicenow
    - terraform
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: devops
      port: 8080
      tools:
        - name: release-orchestrate
          description: "Creates ServiceNow change for GitHub release, triggers Terraform deployment, and posts Teams notification."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary input parameter for this workflow."
          steps:
            - name: step-1
              type: call
              call: "github.get-branch-protection"
              with:
                input: "{{param_1}}"
            - name: step-2
              type: call
              call: "servicenow.create-incident"
              with:
                input: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "terraform.get-workspace"
              with:
                input: "{{step-1.result}}"
            - name: step-4
              type: call
              call: "msteams.send-message"
              with:
                input: "{{step-1.result}}"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: repos
          path: "/repos/{{{{repo}}}}/branches/main/protection"
          operations:
            - name: get-branch-protection
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://mercedes-benz.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: terraform
      baseUri: "https://app.terraform.io/api/v2"
      authentication:
        type: bearer
        token: "$secrets.terraform_token"
      resources:
        - name: workspaces
          path: "/organizations/mercedes-benz/workspaces"
          operations:
            - name: get-workspace
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/mercedes-benz/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Retrieves SAP Ariba RFQ, sends vendor notification via Graph, and updates Salesforce opportunity.

naftiko: "0.5"
info:
  label: "RFQ to Vendor Notification"
  description: "Retrieves SAP Ariba RFQ, sends vendor notification via Graph, and updates Salesforce opportunity."
  tags:
    - procurement
    - sap-ariba
    - microsoft-graph
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: procurement
      port: 8080
      tools:
        - name: rfq-orchestrate
          description: "Retrieves SAP Ariba RFQ, sends vendor notification via Graph, and updates Salesforce opportunity."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary input parameter for this workflow."
          steps:
            - name: step-1
              type: call
              call: "ariba.get-vendor"
              with:
                input: "{{param_1}}"
            - name: step-2
              type: call
              call: "msgraph.send-mail"
              with:
                input: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "salesforce.get-opportunity"
              with:
                input: "{{step-1.result}}"
  consumes:
    - type: http
      namespace: ariba
      baseUri: "https://openapi.ariba.com/api/procurement/v2"
      authentication:
        type: bearer
        token: "$secrets.ariba_token"
      resources:
        - name: vendors
          path: "/vendors/{{{{vendor_id}}}}"
          operations:
            - name: get-vendor
              method: GET
    - type: http
      namespace: msgraph
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/me/sendMail"
          operations:
            - name: send-mail
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://mercedes-benz.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity"
          operations:
            - name: get-opportunity
              method: GET

Enriches a new Salesforce lead with company data from LinkedIn and updates the CRM record with verified contact and firmographic information.

naftiko: "0.5"
info:
  label: "Salesforce Lead Enrichment"
  description: "Enriches a new Salesforce lead with company data from LinkedIn and updates the CRM record with verified contact and firmographic information."
  tags:
    - sales
    - crm
    - salesforce
    - linkedin
    - lead-enrichment
capability:
  exposes:
    - type: mcp
      namespace: crm-enrichment
      port: 8080
      tools:
        - name: enrich-lead
          description: "Given a Salesforce lead ID, retrieve the lead, look up the company on LinkedIn for firmographic data, and update the Salesforce record with enriched information."
          inputParameters:
            - name: lead_id
              in: body
              type: string
              description: "The Salesforce Lead ID to enrich."
          steps:
            - name: get-lead
              type: call
              call: "salesforce-lookup.get-lead"
              with:
                lead_id: "{{lead_id}}"
            - name: lookup-company
              type: call
              call: "linkedin.search-company"
              with:
                company_name: "{{get-lead.company}}"
            - name: update-lead
              type: call
              call: "salesforce-update.update-lead"
              with:
                lead_id: "{{lead_id}}"
                employee_count: "{{lookup-company.staffCount}}"
                industry: "{{lookup-company.industries}}"
  consumes:
    - type: http
      namespace: salesforce-lookup
      baseUri: "https://mercedes-benz.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
    - type: http
      namespace: linkedin
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: organizations
          path: "/organizations"
          operations:
            - name: search-company
              method: GET
    - type: http
      namespace: salesforce-update
      baseUri: "https://mercedes-benz.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: update-lead
              method: PATCH

When a Salesforce opportunity is marked Close Won, logs a SAP S/4HANA revenue entry and notifies the sales leadership team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Salesforce Opportunity Close Won Notification"
  description: "When a Salesforce opportunity is marked Close Won, logs a SAP S/4HANA revenue entry and notifies the sales leadership team via Microsoft Teams."
  tags:
    - sales
    - crm
    - salesforce
    - sap-s4hana
    - microsoft-teams
    - revenue
capability:
  exposes:
    - type: mcp
      namespace: sales-ops
      port: 8080
      tools:
        - name: handle-opportunity-won
          description: "Given a Salesforce opportunity ID that has been marked Close Won, retrieve deal details, create a revenue entry in SAP S/4HANA, and celebrate the win in the sales Microsoft Teams channel."
          inputParameters:
            - name: opportunity_id
              in: body
              type: string
              description: "The Salesforce Opportunity ID that has been closed as won."
          steps:
            - name: get-opportunity
              type: call
              call: "salesforce.get-opportunity"
              with:
                opportunity_id: "{{opportunity_id}}"
            - name: create-revenue-entry
              type: call
              call: "sap-s4.post-revenue"
              with:
                customer: "{{get-opportunity.account_name}}"
                amount: "{{get-opportunity.amount}}"
                currency: "{{get-opportunity.currency_iso_code}}"
            - name: notify-sales-team
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "sales-wins"
                message: "Deal Won! {{get-opportunity.account_name}} - {{get-opportunity.amount}} {{get-opportunity.currency_iso_code}}. Opportunity: {{opportunity_id}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://mercedes-benz.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunity
          path: "/sobjects/Opportunity/{{opportunity_id}}"
          inputParameters:
            - name: opportunity_id
              in: path
          operations:
            - name: get-opportunity
              method: GET
    - type: http
      namespace: sap-s4
      baseUri: "https://mercedes-benz-s4.sap.com/sap/opu/odata/sap/FI_REVENUE_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: revenue-entries
          path: "/A_RevenueEntry"
          operations:
            - name: post-revenue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Retrieves a Salesforce opportunity by ID.

naftiko: "0.5"
info:
  label: "Salesforce Opportunity Lookup"
  description: "Retrieves a Salesforce opportunity by ID."
  tags:
    - sales
    - salesforce
    - crm
capability:
  exposes:
    - type: mcp
      namespace: crm
      port: 8080
      tools:
        - name: get-opportunity
          description: "Retrieves a Salesforce opportunity by ID."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary lookup parameter."
          call: "salesforce.get-opportunity"
          with:
            param_1: "{{param_1}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.result"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://mercedes-benz.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: get-opportunity
          path: "/sobjects/Opportunity/{{{{id}}}}"
          operations:
            - name: get-opportunity
              method: GET

Queries SAP Ariba for contracts expiring within 90 days and creates Jira tasks for the procurement team to initiate renewal negotiations.

naftiko: "0.5"
info:
  label: "SAP Ariba Contract Renewal Alert"
  description: "Queries SAP Ariba for contracts expiring within 90 days and creates Jira tasks for the procurement team to initiate renewal negotiations."
  tags:
    - procurement
    - sap-ariba
    - jira
    - contract-management
capability:
  exposes:
    - type: mcp
      namespace: procurement-ops
      port: 8080
      tools:
        - name: alert-expiring-contracts
          description: "Query SAP Ariba for supplier contracts expiring within a configurable number of days and create Jira tasks for the procurement team to begin renewal negotiations."
          inputParameters:
            - name: days_ahead
              in: body
              type: integer
              description: "Number of days ahead to check for expiring contracts (e.g., 90)."
          steps:
            - name: get-expiring
              type: call
              call: "sap-ariba.list-expiring-contracts"
              with:
                days_ahead: "{{days_ahead}}"
            - name: create-renewal-task
              type: call
              call: "jira.create-issue"
              with:
                project_key: "PROC"
                issuetype: "Task"
                summary: "Contract renewals due within {{days_ahead}} days - {{get-expiring.contract_count}} contracts"
                description: "{{get-expiring.contract_list}}"
  consumes:
    - type: http
      namespace: sap-ariba
      baseUri: "https://openapi.ariba.com/api/contract/v1"
      authentication:
        type: apikey
        key: "apiKey"
        value: "$secrets.ariba_api_key"
        placement: header
      resources:
        - name: contracts
          path: "/contracts"
          operations:
            - name: list-expiring-contracts
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://mercedes-benz.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

Retrieves budget vs. actuals for a SAP cost center and fiscal period.

naftiko: "0.5"
info:
  label: "SAP Cost Center Budget Lookup"
  description: "Retrieves budget vs. actuals for a SAP cost center and fiscal period."
  tags:
    - finance
    - sap
    - budget
capability:
  exposes:
    - type: mcp
      namespace: erp-finance
      port: 8080
      tools:
        - name: get-cost-center-budget
          description: "Retrieves budget vs. actuals for a SAP cost center and fiscal period."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary lookup parameter."
          call: "sap.get-budget"
          with:
            param_1: "{{param_1}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.result"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://mercedes-benz-s4.sap.com/sap/opu/odata/sap/API_CSTCTRBUDGET_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: get-budget
          path: "/A_CostCenterBudget(CostCenter='{{{{cost_center}}}}',FiscalYear='{{{{fiscal_year}}}}')"
          operations:
            - name: get-budget
              method: GET

At the start of a financial period close, creates a set of Jira tasks for the finance team covering all required close activities in SAP S/4HANA.

naftiko: "0.5"
info:
  label: "SAP Finance Period Close Checklist"
  description: "At the start of a financial period close, creates a set of Jira tasks for the finance team covering all required close activities in SAP S/4HANA."
  tags:
    - finance
    - period-close
    - sap-s4hana
    - jira
    - erp
capability:
  exposes:
    - type: mcp
      namespace: finance-close
      port: 8080
      tools:
        - name: initiate-period-close
          description: "Given a fiscal period and year, create a structured set of Jira tasks for the Mercedes-Benz finance team covering all SAP S/4HANA period close activities including journal entries, reconciliations, and reporting."
          inputParameters:
            - name: fiscal_period
              in: body
              type: string
              description: "The fiscal period number (01-12) to close."
            - name: fiscal_year
              in: body
              type: string
              description: "The fiscal year to close (e.g., 2026)."
          steps:
            - name: get-close-status
              type: call
              call: "sap-s4.get-period-close-status"
              with:
                fiscal_period: "{{fiscal_period}}"
                fiscal_year: "{{fiscal_year}}"
            - name: create-close-epic
              type: call
              call: "jira.create-issue"
              with:
                project_key: "FIN"
                issuetype: "Epic"
                summary: "Period Close {{fiscal_period}}/{{fiscal_year}} - {{get-close-status.company_code}}"
                description: "Period close activities for fiscal period {{fiscal_period}}, year {{fiscal_year}}"
  consumes:
    - type: http
      namespace: sap-s4
      baseUri: "https://mercedes-benz-s4.sap.com/sap/opu/odata/sap/FI_PERIOD_CLOSE_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: period-close-status
          path: "/PeriodCloseStatusSet"
          operations:
            - name: get-period-close-status
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://mercedes-benz.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

Retrieves a goods receipt document from SAP by material document number.

naftiko: "0.5"
info:
  label: "SAP Goods Receipt Lookup"
  description: "Retrieves a goods receipt document from SAP by material document number."
  tags:
    - logistics
    - sap
    - warehouse
capability:
  exposes:
    - type: mcp
      namespace: erp-logistics
      port: 8080
      tools:
        - name: get-goods-receipt
          description: "Retrieves a goods receipt document from SAP by material document number."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary lookup parameter."
          call: "sap.get-goods-receipt"
          with:
            param_1: "{{param_1}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.result"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://mercedes-benz-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_DOCUMENT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: get-goods-receipt
          path: "/A_MaterialDocumentHeader('{{{{doc_number}}}}')"
          operations:
            - name: get-goods-receipt
              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
    - materials
capability:
  exposes:
    - type: mcp
      namespace: erp
      port: 8080
      tools:
        - name: get-material
          description: "Retrieves material master data from SAP S/4HANA by material number."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary lookup parameter."
          call: "sap.get-material"
          with:
            param_1: "{{param_1}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.result"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://mercedes-benz-s4.sap.com/sap/opu/odata/sap/API_PRODUCT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: get-material
          path: "/A_Product('{{{{material}}}}')"
          operations:
            - name: get-material
              method: GET

Retrieves a purchase order from SAP S/4HANA by PO number, returning header status, vendor details, and line items.

naftiko: "0.5"
info:
  label: "SAP Purchase Order Lookup"
  description: "Retrieves a purchase order from SAP S/4HANA by PO number, returning header status, vendor details, and line items."
  tags:
    - finance
    - procurement
    - sap-s4hana
    - erp
capability:
  exposes:
    - type: mcp
      namespace: erp-procurement
      port: 8080
      tools:
        - name: get-purchase-order
          description: "Look up a SAP S/4HANA purchase order by PO number. Returns header status, vendor name, total value, currency, and open line items. Use when reviewing procurement status or approving invoices."
          inputParameters:
            - name: po_number
              in: body
              type: string
              description: "The SAP purchase order number (e.g., 4500012345)."
          call: "sap-s4.get-po"
          with:
            po_number: "{{po_number}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.d.OverallStatus"
            - name: vendor
              type: string
              mapping: "$.d.Supplier.CompanyName"
            - name: total_value
              type: string
              mapping: "$.d.TotalAmount"
            - name: currency
              type: string
              mapping: "$.d.TransactionCurrency"
  consumes:
    - type: http
      namespace: sap-s4
      baseUri: "https://mercedes-benz-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: purchase-orders
          path: "/A_PurchaseOrder('{{po_number}}')"
          inputParameters:
            - name: po_number
              in: path
          operations:
            - name: get-po
              method: GET
              outputRawFormat: xml

Detects expiring Azure Key Vault secrets, rotates them, updates Terraform, and creates ServiceNow change.

naftiko: "0.5"
info:
  label: "Secret Rotation Orchestrator"
  description: "Detects expiring Azure Key Vault secrets, rotates them, updates Terraform, and creates ServiceNow change."
  tags:
    - security
    - azure
    - terraform
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: security
      port: 8080
      tools:
        - name: secret-orchestrate
          description: "Detects expiring Azure Key Vault secrets, rotates them, updates Terraform, and creates ServiceNow change."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary input parameter for this workflow."
          steps:
            - name: step-1
              type: call
              call: "azure.get-resources"
              with:
                input: "{{param_1}}"
            - name: step-2
              type: call
              call: "terraform.get-workspace"
              with:
                input: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "servicenow.create-incident"
              with:
                input: "{{step-1.result}}"
  consumes:
    - type: http
      namespace: azure
      baseUri: "https://management.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azure_token"
      resources:
        - name: resources
          path: "/subscriptions"
          operations:
            - name: get-resources
              method: GET
    - type: http
      namespace: terraform
      baseUri: "https://app.terraform.io/api/v2"
      authentication:
        type: bearer
        token: "$secrets.terraform_token"
      resources:
        - name: workspaces
          path: "/organizations/mercedes-benz/workspaces"
          operations:
            - name: get-workspace
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://mercedes-benz.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST

Queries Workday for employee data, checks Okta group assignments, and logs verification in ServiceNow.

naftiko: "0.5"
info:
  label: "Security Clearance Verification Workflow"
  description: "Queries Workday for employee data, checks Okta group assignments, and logs verification in ServiceNow."
  tags:
    - security
    - workday
    - okta
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: security
      port: 8080
      tools:
        - name: security-orchestrate
          description: "Queries Workday for employee data, checks Okta group assignments, and logs verification in ServiceNow."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary input parameter for this workflow."
          steps:
            - name: step-1
              type: call
              call: "workday.get-worker"
              with:
                input: "{{param_1}}"
            - name: step-2
              type: call
              call: "okta.get-user-groups"
              with:
                input: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "servicenow.create-incident"
              with:
                input: "{{step-1.result}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/mercedes-benz/workers/{{worker_id}}"
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: okta
      baseUri: "https://mercedes-benz.okta.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.okta_token"
      resources:
        - name: user-groups
          path: "/users/{{{{user_id}}}}/groups"
          operations:
            - name: get-user-groups
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://mercedes-benz.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST

Retrieves a pending ServiceNow change request, notifies the Change Advisory Board via Microsoft Teams, and updates the change record with approval decision.

naftiko: "0.5"
info:
  label: "ServiceNow Change Management Approval"
  description: "Retrieves a pending ServiceNow change request, notifies the Change Advisory Board via Microsoft Teams, and updates the change record with approval decision."
  tags:
    - itsm
    - change-management
    - servicenow
    - microsoft-teams
    - approval
capability:
  exposes:
    - type: mcp
      namespace: change-management
      port: 8080
      tools:
        - name: process-change-approval
          description: "Given a ServiceNow change request number and approval decision, retrieve the change details, update the approval status in ServiceNow, and notify the CAB via Microsoft Teams."
          inputParameters:
            - name: change_number
              in: body
              type: string
              description: "The ServiceNow change request number (e.g., CHG0012345)."
            - name: approval_decision
              in: body
              type: string
              description: "The approval decision: approved or rejected."
            - name: approver_comments
              in: body
              type: string
              description: "Comments from the approver explaining the decision."
          steps:
            - name: get-change
              type: call
              call: "servicenow-lookup.get-change-request"
              with:
                change_number: "{{change_number}}"
            - name: update-approval
              type: call
              call: "servicenow-update.update-change-approval"
              with:
                change_number: "{{change_number}}"
                state: "{{approval_decision}}"
                comments: "{{approver_comments}}"
            - name: notify-cab
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "change-advisory-board"
                message: "Change {{change_number}} - {{get-change.short_description}}: {{approval_decision}}. Comments: {{approver_comments}}"
  consumes:
    - type: http
      namespace: servicenow-lookup
      baseUri: "https://mercedes-benz.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: change-request
          path: "/table/change_request"
          inputParameters:
            - name: change_number
              in: query
          operations:
            - name: get-change-request
              method: GET
    - type: http
      namespace: servicenow-update
      baseUri: "https://mercedes-benz.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: change-approval
          path: "/table/change_request/{{sys_id}}"
          inputParameters:
            - name: sys_id
              in: path
          operations:
            - name: update-change-approval
              method: PATCH
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Escalates a high-priority ServiceNow incident to the on-call engineer via PagerDuty and posts context to Microsoft Teams.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Escalation"
  description: "Escalates a high-priority ServiceNow incident to the on-call engineer via PagerDuty and posts context to Microsoft Teams."
  tags:
    - itsm
    - incident-response
    - servicenow
    - pagerduty
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: itsm-ops
      port: 8080
      tools:
        - name: escalate-incident
          description: "Given a ServiceNow incident number, retrieve incident details, trigger a PagerDuty alert to the on-call engineer, and post full context to the IT ops Microsoft Teams channel."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "The ServiceNow incident number to escalate (e.g., INC0012345)."
            - name: escalation_reason
              in: body
              type: string
              description: "The reason for escalation to be included in the PagerDuty alert and Teams message."
          steps:
            - name: get-incident
              type: call
              call: "servicenow.get-incident"
              with:
                incident_number: "{{incident_number}}"
            - name: trigger-pagerduty
              type: call
              call: "pagerduty.create-incident"
              with:
                title: "Escalated: {{incident_number}} - {{get-incident.short_description}}"
                severity: "{{get-incident.urgency}}"
                body: "{{escalation_reason}}"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "it-operations"
                message: "Incident Escalated: {{incident_number}} | {{get-incident.short_description}} | PagerDuty: {{trigger-pagerduty.incident_id}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://mercedes-benz.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incident
          path: "/table/incident"
          inputParameters:
            - name: incident_number
              in: query
          operations:
            - name: get-incident
              method: GET
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.pagerduty_token"
        placement: header
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Looks up a ServiceNow incident by number and returns state, priority, and assignment group.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Status Lookup"
  description: "Looks up a ServiceNow incident by number and returns state, priority, and assignment group."
  tags:
    - itsm
    - servicenow
    - incident
capability:
  exposes:
    - type: mcp
      namespace: itsm
      port: 8080
      tools:
        - name: get-incident-status
          description: "Looks up a ServiceNow incident by number and returns state, priority, and assignment group."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary lookup parameter."
          call: "servicenow.get-incident"
          with:
            param_1: "{{param_1}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.result"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://mercedes-benz.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: get-incident
          path: "/table/incident?sysparm_query=number={{{{number}}}}"
          operations:
            - name: get-incident
              method: GET

Responds to Splunk alert by isolating CrowdStrike endpoint and creating ServiceNow incident.

naftiko: "0.5"
info:
  label: "SIEM Alert to Endpoint Isolation"
  description: "Responds to Splunk alert by isolating CrowdStrike endpoint and creating ServiceNow incident."
  tags:
    - security
    - splunk
    - crowdstrike
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: security
      port: 8080
      tools:
        - name: siem-orchestrate
          description: "Responds to Splunk alert by isolating CrowdStrike endpoint and creating ServiceNow incident."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary input parameter for this workflow."
          steps:
            - name: step-1
              type: call
              call: "splunk.run-search"
              with:
                input: "{{param_1}}"
            - name: step-2
              type: call
              call: "crowdstrike.get-device"
              with:
                input: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "servicenow.create-incident"
              with:
                input: "{{step-1.result}}"
  consumes:
    - type: http
      namespace: splunk
      baseUri: "https://splunk.mercedes-benz.com:8089/services"
      authentication:
        type: bearer
        token: "$secrets.splunk_token"
      resources:
        - name: search
          path: "/search/jobs"
          operations:
            - name: run-search
              method: POST
    - type: http
      namespace: crowdstrike
      baseUri: "https://api.crowdstrike.com"
      authentication:
        type: bearer
        token: "$secrets.crowdstrike_token"
      resources:
        - name: devices
          path: "/devices/entities/devices/v2"
          operations:
            - name: get-device
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://mercedes-benz.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST

Queries Snowflake for failed data pipeline tasks, creates Jira issues for each failure, and posts a summary report to Microsoft Teams.

naftiko: "0.5"
info:
  label: "Snowflake Data Pipeline Health Check"
  description: "Queries Snowflake for failed data pipeline tasks, creates Jira issues for each failure, and posts a summary report to Microsoft Teams."
  tags:
    - data
    - analytics
    - snowflake
    - jira
    - microsoft-teams
    - monitoring
capability:
  exposes:
    - type: mcp
      namespace: data-ops
      port: 8080
      tools:
        - name: check-pipeline-health
          description: "Query Snowflake for failed pipeline tasks in the last 24 hours, create Jira issues for each critical failure, and post a summary to the data engineering Microsoft Teams channel."
          inputParameters:
            - name: warehouse
              in: body
              type: string
              description: "The Snowflake warehouse name to check for task failures."
            - name: lookback_hours
              in: body
              type: integer
              description: "Number of hours to look back for failed tasks (default 24)."
          steps:
            - name: get-failures
              type: call
              call: "snowflake.query-task-failures"
              with:
                warehouse: "{{warehouse}}"
                lookback_hours: "{{lookback_hours}}"
            - name: create-issue
              type: call
              call: "jira.create-issue"
              with:
                project_key: "DATA"
                issuetype: "Bug"
                summary: "Snowflake pipeline failures detected in {{warehouse}}"
                description: "{{get-failures.failure_count}} tasks failed in the last {{lookback_hours}} hours. Details: {{get-failures.failure_summary}}"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "data-engineering"
                message: "Pipeline Health Alert: {{get-failures.failure_count}} Snowflake task failures detected in {{warehouse}}. Jira: {{create-issue.key}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://mercedes-benz.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: query-task-failures
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://mercedes-benz.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Checks the execution status of a Snowflake query by ID.

naftiko: "0.5"
info:
  label: "Snowflake Query Execution Status"
  description: "Checks the execution status of a Snowflake query by ID."
  tags:
    - data
    - snowflake
    - monitoring
capability:
  exposes:
    - type: mcp
      namespace: data-platform
      port: 8080
      tools:
        - name: get-query-status
          description: "Checks the execution status of a Snowflake query by ID."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary lookup parameter."
          call: "snowflake.get-query-status"
          with:
            param_1: "{{param_1}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.result"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://mercedes-benz.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: get-query-status
          path: "/statements/{{{{query_id}}}}"
          operations:
            - name: get-query-status
              method: GET

Queries Snowflake for long-running queries exceeding a cost threshold, creates Jira tickets for optimization, and alerts the data platform team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Snowflake Query Performance Monitor"
  description: "Queries Snowflake for long-running queries exceeding a cost threshold, creates Jira tickets for optimization, and alerts the data platform team via Microsoft Teams."
  tags:
    - data
    - snowflake
    - performance
    - jira
    - microsoft-teams
    - monitoring
capability:
  exposes:
    - type: mcp
      namespace: data-performance
      port: 8080
      tools:
        - name: monitor-query-performance
          description: "Identify Snowflake queries running longer than a specified duration threshold, create Jira optimization tickets for each, and post a summary to the data platform Microsoft Teams channel."
          inputParameters:
            - name: duration_threshold_minutes
              in: body
              type: integer
              description: "Minimum query duration in minutes to flag for optimization (e.g., 30)."
            - name: cost_threshold_credits
              in: body
              type: number
              description: "Minimum Snowflake credit consumption to flag (e.g., 10.0)."
          steps:
            - name: get-slow-queries
              type: call
              call: "snowflake.query-slow-queries"
              with:
                duration_threshold: "{{duration_threshold_minutes}}"
                cost_threshold: "{{cost_threshold_credits}}"
            - name: create-optimization-ticket
              type: call
              call: "jira.create-issue"
              with:
                project_key: "DATA"
                issuetype: "Task"
                summary: "Snowflake query optimization: {{get-slow-queries.query_count}} queries above threshold"
                description: "Queries consuming over {{cost_threshold_credits}} credits or running >{{duration_threshold_minutes}} min: {{get-slow-queries.query_summary}}"
            - name: notify-data-team
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "data-platform"
                message: "Snowflake Performance Alert: {{get-slow-queries.query_count}} queries flagged. Jira: {{create-optimization-ticket.key}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://mercedes-benz.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: query-slow-queries
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://mercedes-benz.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Identifies stale Confluence SOPs, creates Jira review tasks, and sends reminders via Teams.

naftiko: "0.5"
info:
  label: "SOP Review Cycle Orchestrator"
  description: "Identifies stale Confluence SOPs, creates Jira review tasks, and sends reminders via Teams."
  tags:
    - knowledge-management
    - confluence
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: knowledge_management
      port: 8080
      tools:
        - name: sop-orchestrate
          description: "Identifies stale Confluence SOPs, creates Jira review tasks, and sends reminders via Teams."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary input parameter for this workflow."
          steps:
            - name: step-1
              type: call
              call: "confluence.create-page"
              with:
                input: "{{param_1}}"
            - name: step-2
              type: call
              call: "jira.create-issue"
              with:
                input: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "msteams.send-message"
              with:
                input: "{{step-1.result}}"
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://mercedes-benz.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_password"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: create-page
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://mercedes-benz.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_password"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/mercedes-benz/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Retrieves the latest results from a Splunk saved search.

naftiko: "0.5"
info:
  label: "Splunk Saved Search Results Lookup"
  description: "Retrieves the latest results from a Splunk saved search."
  tags:
    - security
    - splunk
    - siem
capability:
  exposes:
    - type: mcp
      namespace: siem
      port: 8080
      tools:
        - name: get-saved-search-results
          description: "Retrieves the latest results from a Splunk saved search."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary lookup parameter."
          call: "splunk.get-saved-search"
          with:
            param_1: "{{param_1}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.result"
  consumes:
    - type: http
      namespace: splunk
      baseUri: "https://splunk.mercedes-benz.com:8089/servicesNS/admin/search"
      authentication:
        type: bearer
        token: "$secrets.splunk_token"
      resources:
        - name: get-saved-search
          path: "/saved/searches/{{{{search_name}}}}/history"
          operations:
            - name: get-saved-search
              method: GET

Receives a supplier invoice, looks up the matching PO in SAP S/4HANA, validates amounts, and routes the invoice for approval via SAP Ariba.

naftiko: "0.5"
info:
  label: "Supplier Invoice Processing"
  description: "Receives a supplier invoice, looks up the matching PO in SAP S/4HANA, validates amounts, and routes the invoice for approval via SAP Ariba."
  tags:
    - finance
    - procurement
    - sap-s4hana
    - sap-ariba
    - invoice-processing
capability:
  exposes:
    - type: mcp
      namespace: invoice-ops
      port: 8080
      tools:
        - name: process-supplier-invoice
          description: "Given a supplier invoice number and amount, retrieve the linked PO from SAP S/4HANA, validate the amount, and submit the invoice for approval in SAP Ariba."
          inputParameters:
            - name: invoice_number
              in: body
              type: string
              description: "The supplier invoice number to process."
            - name: po_number
              in: body
              type: string
              description: "The SAP PO number associated with this invoice."
            - name: invoice_amount
              in: body
              type: number
              description: "The total invoice amount in the invoice currency."
          steps:
            - name: get-po
              type: call
              call: "sap-s4.get-po"
              with:
                po_number: "{{po_number}}"
            - name: submit-invoice
              type: call
              call: "sap-ariba.create-invoice"
              with:
                invoice_number: "{{invoice_number}}"
                po_number: "{{po_number}}"
                amount: "{{invoice_amount}}"
                vendor_id: "{{get-po.supplier_id}}"
  consumes:
    - type: http
      namespace: sap-s4
      baseUri: "https://mercedes-benz-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: purchase-orders
          path: "/A_PurchaseOrder('{{po_number}}')"
          inputParameters:
            - name: po_number
              in: path
          operations:
            - name: get-po
              method: GET
              outputRawFormat: xml
    - type: http
      namespace: sap-ariba
      baseUri: "https://openapi.ariba.com/api/invoice/v1"
      authentication:
        type: apikey
        key: "apiKey"
        value: "$secrets.ariba_api_key"
        placement: header
      resources:
        - name: invoices
          path: "/invoices"
          operations:
            - name: create-invoice
              method: POST

Retrieves Ariba supplier profile, Snowflake performance data, and creates ServiceNow risk record.

naftiko: "0.5"
info:
  label: "Supplier Risk Assessment Orchestrator"
  description: "Retrieves Ariba supplier profile, Snowflake performance data, and creates ServiceNow risk record."
  tags:
    - procurement
    - sap-ariba
    - snowflake
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: procurement
      port: 8080
      tools:
        - name: supplier-orchestrate
          description: "Retrieves Ariba supplier profile, Snowflake performance data, and creates ServiceNow risk record."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary input parameter for this workflow."
          steps:
            - name: step-1
              type: call
              call: "ariba.get-vendor"
              with:
                input: "{{param_1}}"
            - name: step-2
              type: call
              call: "snowflake.run-query"
              with:
                input: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "servicenow.create-incident"
              with:
                input: "{{step-1.result}}"
  consumes:
    - type: http
      namespace: ariba
      baseUri: "https://openapi.ariba.com/api/procurement/v2"
      authentication:
        type: bearer
        token: "$secrets.ariba_token"
      resources:
        - name: vendors
          path: "/vendors/{{{{vendor_id}}}}"
          operations:
            - name: get-vendor
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://mercedes-benz.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://mercedes-benz.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST

Responds to suspicious Okta login by checking CrowdStrike endpoint and creating ServiceNow incident.

naftiko: "0.5"
info:
  label: "Suspicious Login Response Workflow"
  description: "Responds to suspicious Okta login by checking CrowdStrike endpoint and creating ServiceNow incident."
  tags:
    - security
    - okta
    - crowdstrike
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: security
      port: 8080
      tools:
        - name: suspicious-orchestrate
          description: "Responds to suspicious Okta login by checking CrowdStrike endpoint and creating ServiceNow incident."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary input parameter for this workflow."
          steps:
            - name: step-1
              type: call
              call: "okta.get-user-groups"
              with:
                input: "{{param_1}}"
            - name: step-2
              type: call
              call: "crowdstrike.get-device"
              with:
                input: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "servicenow.create-incident"
              with:
                input: "{{step-1.result}}"
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://mercedes-benz.okta.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.okta_token"
      resources:
        - name: user-groups
          path: "/users/{{{{user_id}}}}/groups"
          operations:
            - name: get-user-groups
              method: GET
    - type: http
      namespace: crowdstrike
      baseUri: "https://api.crowdstrike.com"
      authentication:
        type: bearer
        token: "$secrets.crowdstrike_token"
      resources:
        - name: devices
          path: "/devices/entities/devices/v2"
          operations:
            - name: get-device
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://mercedes-benz.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST

Processes access request by verifying identity in Workday, provisioning Okta group, creating ServiceNow request, and notifying via Teams.

naftiko: "0.5"
info:
  label: "System Access Request Orchestrator"
  description: "Processes access request by verifying identity in Workday, provisioning Okta group, creating ServiceNow request, and notifying via Teams."
  tags:
    - security
    - workday
    - okta
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: security
      port: 8080
      tools:
        - name: system-orchestrate
          description: "Processes access request by verifying identity in Workday, provisioning Okta group, creating ServiceNow request, and notifying via Teams."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary input parameter for this workflow."
          steps:
            - name: step-1
              type: call
              call: "workday.get-worker"
              with:
                input: "{{param_1}}"
            - name: step-2
              type: call
              call: "okta.get-user-groups"
              with:
                input: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "servicenow.create-incident"
              with:
                input: "{{step-1.result}}"
            - name: step-4
              type: call
              call: "msteams.send-message"
              with:
                input: "{{step-1.result}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/mercedes-benz/workers/{{worker_id}}"
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: okta
      baseUri: "https://mercedes-benz.okta.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.okta_token"
      resources:
        - name: user-groups
          path: "/users/{{{{user_id}}}}/groups"
          operations:
            - name: get-user-groups
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://mercedes-benz.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/mercedes-benz/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Disables Azure AD account, suspends Okta sessions, and creates ServiceNow asset recovery ticket.

naftiko: "0.5"
info:
  label: "Termination to Access Revocation"
  description: "Disables Azure AD account, suspends Okta sessions, and creates ServiceNow asset recovery ticket."
  tags:
    - hr
    - azure
    - okta
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: termination-orchestrate
          description: "Disables Azure AD account, suspends Okta sessions, and creates ServiceNow asset recovery ticket."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary input parameter for this workflow."
          steps:
            - name: step-1
              type: call
              call: "azure.get-resources"
              with:
                input: "{{param_1}}"
            - name: step-2
              type: call
              call: "okta.get-user-groups"
              with:
                input: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "servicenow.create-incident"
              with:
                input: "{{step-1.result}}"
  consumes:
    - type: http
      namespace: azure
      baseUri: "https://management.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azure_token"
      resources:
        - name: resources
          path: "/subscriptions"
          operations:
            - name: get-resources
              method: GET
    - type: http
      namespace: okta
      baseUri: "https://mercedes-benz.okta.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.okta_token"
      resources:
        - name: user-groups
          path: "/users/{{{{user_id}}}}/groups"
          operations:
            - name: get-user-groups
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://mercedes-benz.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST

Creates a new Terraform Cloud workspace for a software team, configures GitHub repository linking, and notifies the platform team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Terraform Cloud Workspace Provisioning"
  description: "Creates a new Terraform Cloud workspace for a software team, configures GitHub repository linking, and notifies the platform team via Microsoft Teams."
  tags:
    - cloud
    - infrastructure
    - terraform
    - github
    - microsoft-teams
    - provisioning
capability:
  exposes:
    - type: mcp
      namespace: platform-provisioning
      port: 8080
      tools:
        - name: provision-terraform-workspace
          description: "Given a team name and GitHub repository, create a Terraform Cloud workspace, link it to the repository, and notify the platform engineering team via Microsoft Teams."
          inputParameters:
            - name: team_name
              in: body
              type: string
              description: "The software team name for whom the workspace is being created."
            - name: repository
              in: body
              type: string
              description: "The GitHub repository to link to the Terraform workspace (e.g., mercedes-benz/my-service)."
            - name: environment
              in: body
              type: string
              description: "The target environment: dev, staging, or production."
          steps:
            - name: create-workspace
              type: call
              call: "terraform.create-workspace"
              with:
                name: "{{team_name}}-{{environment}}"
                vcs_repo: "{{repository}}"
            - name: notify-platform
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "platform-engineering"
                message: "Terraform workspace created: {{team_name}}-{{environment}} linked to {{repository}}. Workspace ID: {{create-workspace.workspace_id}}"
  consumes:
    - type: http
      namespace: terraform
      baseUri: "https://app.terraform.io/api/v2"
      authentication:
        type: bearer
        token: "$secrets.terraform_token"
      resources:
        - name: workspaces
          path: "/organizations/mercedes-benz/workspaces"
          operations:
            - name: create-workspace
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Checks Terraform workspace for drift, creates ServiceNow change, and triggers remediation plan.

naftiko: "0.5"
info:
  label: "Terraform Drift Detection and Remediation"
  description: "Checks Terraform workspace for drift, creates ServiceNow change, and triggers remediation plan."
  tags:
    - devops
    - terraform
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: devops
      port: 8080
      tools:
        - name: terraform-orchestrate
          description: "Checks Terraform workspace for drift, creates ServiceNow change, and triggers remediation plan."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary input parameter for this workflow."
          steps:
            - name: step-1
              type: call
              call: "terraform.get-workspace"
              with:
                input: "{{param_1}}"
            - name: step-2
              type: call
              call: "servicenow.create-incident"
              with:
                input: "{{step-1.result}}"
  consumes:
    - type: http
      namespace: terraform
      baseUri: "https://app.terraform.io/api/v2"
      authentication:
        type: bearer
        token: "$secrets.terraform_token"
      resources:
        - name: workspaces
          path: "/organizations/mercedes-benz/workspaces"
          operations:
            - name: get-workspace
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://mercedes-benz.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST

Retrieves current status of a Terraform Cloud workspace.

naftiko: "0.5"
info:
  label: "Terraform Workspace Status Lookup"
  description: "Retrieves current status of a Terraform Cloud workspace."
  tags:
    - devops
    - terraform
    - infrastructure
capability:
  exposes:
    - type: mcp
      namespace: infrastructure
      port: 8080
      tools:
        - name: get-workspace-status
          description: "Retrieves current status of a Terraform Cloud workspace."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary lookup parameter."
          call: "terraform.get-workspace"
          with:
            param_1: "{{param_1}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.result"
  consumes:
    - type: http
      namespace: terraform
      baseUri: "https://app.terraform.io/api/v2"
      authentication:
        type: bearer
        token: "$secrets.terraform_token"
      resources:
        - name: get-workspace
          path: "/organizations/mercedes-benz/workspaces/{{{{workspace}}}}"
          operations:
            - name: get-workspace
              method: GET

Pulls CrowdStrike threat indicators, runs Splunk search, and creates ServiceNow security incident.

naftiko: "0.5"
info:
  label: "Threat Intel to Log Search"
  description: "Pulls CrowdStrike threat indicators, runs Splunk search, and creates ServiceNow security incident."
  tags:
    - security
    - crowdstrike
    - splunk
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: security
      port: 8080
      tools:
        - name: threat-orchestrate
          description: "Pulls CrowdStrike threat indicators, runs Splunk search, and creates ServiceNow security incident."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary input parameter for this workflow."
          steps:
            - name: step-1
              type: call
              call: "crowdstrike.get-device"
              with:
                input: "{{param_1}}"
            - name: step-2
              type: call
              call: "splunk.run-search"
              with:
                input: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "servicenow.create-incident"
              with:
                input: "{{step-1.result}}"
  consumes:
    - type: http
      namespace: crowdstrike
      baseUri: "https://api.crowdstrike.com"
      authentication:
        type: bearer
        token: "$secrets.crowdstrike_token"
      resources:
        - name: devices
          path: "/devices/entities/devices/v2"
          operations:
            - name: get-device
              method: GET
    - type: http
      namespace: splunk
      baseUri: "https://splunk.mercedes-benz.com:8089/services"
      authentication:
        type: bearer
        token: "$secrets.splunk_token"
      resources:
        - name: search
          path: "/search/jobs"
          operations:
            - name: run-search
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://mercedes-benz.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST

Retrieves Concur travel request, validates SAP budget, and sends Teams approval request.

naftiko: "0.5"
info:
  label: "Travel Request Approval Orchestrator"
  description: "Retrieves Concur travel request, validates SAP budget, and sends Teams approval request."
  tags:
    - travel
    - sap-concur
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: travel
      port: 8080
      tools:
        - name: travel-orchestrate
          description: "Retrieves Concur travel request, validates SAP budget, and sends Teams approval request."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary input parameter for this workflow."
          steps:
            - name: step-1
              type: call
              call: "concur.get-travel-request"
              with:
                input: "{{param_1}}"
            - name: step-2
              type: call
              call: "sap.get-po"
              with:
                input: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "msteams.send-message"
              with:
                input: "{{step-1.result}}"
  consumes:
    - type: http
      namespace: concur
      baseUri: "https://us.api.concursolutions.com/api/v3.0"
      authentication:
        type: bearer
        token: "$secrets.concur_token"
      resources:
        - name: travel-requests
          path: "/travelrequest/requests/{{{{request_id}}}}"
          operations:
            - name: get-travel-request
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://mercedes-benz-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: purchase-orders
          path: "/A_PurchaseOrder('{{{{po_number}}}}')"
          operations:
            - name: get-po
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/mercedes-benz/channels/general/messages"
          operations:
            - name: send-message
              method: POST

When a quality defect is reported in the manufacturing system, creates a ServiceNow incident, notifies the quality engineering team via Microsoft Teams, and logs the defect in SAP S/4HANA.

naftiko: "0.5"
info:
  label: "Vehicle Quality Defect Incident Response"
  description: "When a quality defect is reported in the manufacturing system, creates a ServiceNow incident, notifies the quality engineering team via Microsoft Teams, and logs the defect in SAP S/4HANA."
  tags:
    - manufacturing
    - quality
    - servicenow
    - sap-s4hana
    - microsoft-teams
    - incident-response
capability:
  exposes:
    - type: mcp
      namespace: quality-ops
      port: 8080
      tools:
        - name: handle-quality-defect
          description: "Given a quality defect report with vehicle model, defect code, and production line, create a ServiceNow incident, log the defect in SAP S/4HANA, and alert the quality team in Microsoft Teams."
          inputParameters:
            - name: vehicle_model
              in: body
              type: string
              description: "The vehicle model where the defect was found (e.g., C-Class, EQS)."
            - name: defect_code
              in: body
              type: string
              description: "The manufacturing defect code identifier."
            - name: production_line
              in: body
              type: string
              description: "The production line number where the defect was detected."
            - name: severity
              in: body
              type: string
              description: "Defect severity: critical, major, or minor."
          steps:
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Quality defect on {{vehicle_model}} - Code {{defect_code}}"
                urgency: "{{severity}}"
                category: "manufacturing_quality"
            - name: log-defect
              type: call
              call: "sap-s4.create-quality-notification"
              with:
                vehicle_model: "{{vehicle_model}}"
                defect_code: "{{defect_code}}"
                production_line: "{{production_line}}"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "quality-engineering"
                message: "Quality Alert: {{vehicle_model}} defect {{defect_code}} on line {{production_line}}. Incident: {{create-incident.number}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://mercedes-benz.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incident
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: sap-s4
      baseUri: "https://mercedes-benz-s4.sap.com/sap/opu/odata/sap/QM_QMEL_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: quality-notifications
          path: "/QualityNotificationSet"
          operations:
            - name: create-quality-notification
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Runs vendor compliance check with SAP Ariba data, Snowflake contract history, and ServiceNow audit task.

naftiko: "0.5"
info:
  label: "Vendor Compliance Audit Orchestrator"
  description: "Runs vendor compliance check with SAP Ariba data, Snowflake contract history, and ServiceNow audit task."
  tags:
    - procurement
    - sap-ariba
    - snowflake
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: procurement
      port: 8080
      tools:
        - name: vendor-orchestrate
          description: "Runs vendor compliance check with SAP Ariba data, Snowflake contract history, and ServiceNow audit task."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary input parameter for this workflow."
          steps:
            - name: step-1
              type: call
              call: "ariba.get-vendor"
              with:
                input: "{{param_1}}"
            - name: step-2
              type: call
              call: "snowflake.run-query"
              with:
                input: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "servicenow.create-incident"
              with:
                input: "{{step-1.result}}"
  consumes:
    - type: http
      namespace: ariba
      baseUri: "https://openapi.ariba.com/api/procurement/v2"
      authentication:
        type: bearer
        token: "$secrets.ariba_token"
      resources:
        - name: vendors
          path: "/vendors/{{{{vendor_id}}}}"
          operations:
            - name: get-vendor
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://mercedes-benz.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://mercedes-benz.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST

Creates ServiceNow change for VM patching, triggers Terraform apply, and validates with Datadog.

naftiko: "0.5"
info:
  label: "VM Patching Orchestrator"
  description: "Creates ServiceNow change for VM patching, triggers Terraform apply, and validates with Datadog."
  tags:
    - cloud
    - servicenow
    - terraform
    - datadog
capability:
  exposes:
    - type: mcp
      namespace: cloud
      port: 8080
      tools:
        - name: vm-orchestrate
          description: "Creates ServiceNow change for VM patching, triggers Terraform apply, and validates with Datadog."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary input parameter for this workflow."
          steps:
            - name: step-1
              type: call
              call: "servicenow.create-incident"
              with:
                input: "{{param_1}}"
            - name: step-2
              type: call
              call: "terraform.get-workspace"
              with:
                input: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "datadog.get-monitor"
              with:
                input: "{{step-1.result}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://mercedes-benz.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: terraform
      baseUri: "https://app.terraform.io/api/v2"
      authentication:
        type: bearer
        token: "$secrets.terraform_token"
      resources:
        - name: workspaces
          path: "/organizations/mercedes-benz/workspaces"
          operations:
            - name: get-workspace
              method: GET
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        header: "DD-API-KEY"
        key: "$secrets.datadog_api_key"
      resources:
        - name: monitors
          path: "/monitor/{{{{monitor_id}}}}"
          operations:
            - name: get-monitor
              method: GET

Creates ServiceNow change for patching, triggers Terraform deployment, and validates with Datadog.

naftiko: "0.5"
info:
  label: "Vulnerability Patch Deployment Orchestrator"
  description: "Creates ServiceNow change for patching, triggers Terraform deployment, and validates with Datadog."
  tags:
    - security
    - servicenow
    - terraform
    - datadog
capability:
  exposes:
    - type: mcp
      namespace: security
      port: 8080
      tools:
        - name: vulnerability-orchestrate
          description: "Creates ServiceNow change for patching, triggers Terraform deployment, and validates with Datadog."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary input parameter for this workflow."
          steps:
            - name: step-1
              type: call
              call: "servicenow.create-incident"
              with:
                input: "{{param_1}}"
            - name: step-2
              type: call
              call: "terraform.get-workspace"
              with:
                input: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "datadog.get-monitor"
              with:
                input: "{{step-1.result}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://mercedes-benz.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: terraform
      baseUri: "https://app.terraform.io/api/v2"
      authentication:
        type: bearer
        token: "$secrets.terraform_token"
      resources:
        - name: workspaces
          path: "/organizations/mercedes-benz/workspaces"
          operations:
            - name: get-workspace
              method: GET
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        header: "DD-API-KEY"
        key: "$secrets.datadog_api_key"
      resources:
        - name: monitors
          path: "/monitor/{{{{monitor_id}}}}"
          operations:
            - name: get-monitor
              method: GET

When a compensation change request is submitted in Workday, routes it for approval via ServiceNow and notifies the HR business partner via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Workday Compensation Change Approval"
  description: "When a compensation change request is submitted in Workday, routes it for approval via ServiceNow and notifies the HR business partner via Microsoft Teams."
  tags:
    - hr
    - compensation
    - workday
    - servicenow
    - approval
capability:
  exposes:
    - type: mcp
      namespace: hr-compensation
      port: 8080
      tools:
        - name: route-compensation-change
          description: "Given a Workday compensation change event ID, retrieve the change details, create a ServiceNow approval task for the HR business partner, and notify them via Microsoft Teams."
          inputParameters:
            - name: event_id
              in: body
              type: string
              description: "The Workday compensation change event ID to route for approval."
          steps:
            - name: get-comp-change
              type: call
              call: "workday.get-compensation-event"
              with:
                event_id: "{{event_id}}"
            - name: create-approval
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Compensation change approval required: {{get-comp-change.employee_name}}"
                category: "hr_compensation"
                description: "Employee: {{get-comp-change.employee_name}} | Change: {{get-comp-change.change_amount}} | Effective: {{get-comp-change.effective_date}}"
            - name: notify-hrbp
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-comp-change.hrbp_email}}"
                message: "Compensation change approval needed for {{get-comp-change.employee_name}}. ServiceNow: {{create-approval.number}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: basic
        username: "$secrets.workday_user"
        password: "$secrets.workday_password"
      resources:
        - name: compensation-events
          path: "/mercedes-benz/compensationEvents/{{event_id}}"
          inputParameters:
            - name: event_id
              in: path
          operations:
            - name: get-compensation-event
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://mercedes-benz.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incident
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves an employee record from Workday by worker ID, returning name, department, and manager.

naftiko: "0.5"
info:
  label: "Workday Employee Directory Lookup"
  description: "Retrieves an employee record from Workday by worker ID, returning name, department, and manager."
  tags:
    - hr
    - workday
    - directory
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: get-employee
          description: "Retrieves an employee record from Workday by worker ID, returning name, department, and manager."
          inputParameters:
            - name: param_1
              in: body
              type: string
              description: "Primary lookup parameter."
          call: "workday.get-worker"
          with:
            param_1: "{{param_1}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.result"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: get-worker
          path: "/mercedes-benz/workers/{{{{worker_id}}}}"
          operations:
            - name: get-worker
              method: GET

Retrieves current headcount by department and cost center from Workday for workforce planning and finance reporting.

naftiko: "0.5"
info:
  label: "Workday Headcount Report"
  description: "Retrieves current headcount by department and cost center from Workday for workforce planning and finance reporting."
  tags:
    - hr
    - reporting
    - workday
    - headcount
capability:
  exposes:
    - type: mcp
      namespace: hr-reporting
      port: 8080
      tools:
        - name: get-headcount-snapshot
          description: "Returns current headcount grouped by department and cost center from Workday. Use for workforce planning, budget reviews, and executive reporting."
          call: "workday.list-workers"
          outputParameters:
            - name: workers
              type: array
              mapping: "$.Report_Entry"
              items:
                - name: employee_id
                  type: string
                  mapping: "$.Employee_ID"
                - name: full_name
                  type: string
                  mapping: "$.Employee_Name"
                - name: department
                  type: string
                  mapping: "$.Department"
                - name: cost_center
                  type: string
                  mapping: "$.Cost_Center"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: basic
        username: "$secrets.workday_user"
        password: "$secrets.workday_password"
      resources:
        - name: workers
          path: "/mercedes-benz/workers"
          operations:
            - name: list-workers
              method: GET

When an employee completes a mandatory compliance training in Workday Learning, updates the compliance tracking record in ServiceNow and notifies the compliance team.

naftiko: "0.5"
info:
  label: "Workday Learning Completion to Compliance Tracker"
  description: "When an employee completes a mandatory compliance training in Workday Learning, updates the compliance tracking record in ServiceNow and notifies the compliance team."
  tags:
    - hr
    - compliance
    - workday
    - servicenow
    - training
capability:
  exposes:
    - type: mcp
      namespace: compliance-training
      port: 8080
      tools:
        - name: record-training-completion
          description: "Given a Workday Learning training completion event with employee ID and course ID, update the compliance record in ServiceNow and notify the compliance team via Microsoft Teams."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday employee ID who completed the training."
            - name: course_id
              in: body
              type: string
              description: "The Workday Learning course ID that was completed."
            - name: completion_date
              in: body
              type: string
              description: "The date the training was completed (YYYY-MM-DD)."
          steps:
            - name: get-course
              type: call
              call: "workday.get-learning-course"
              with:
                course_id: "{{course_id}}"
            - name: update-compliance
              type: call
              call: "servicenow.update-compliance-record"
              with:
                employee_id: "{{employee_id}}"
                course_name: "{{get-course.name}}"
                completion_date: "{{completion_date}}"
            - name: notify-compliance
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "compliance-team"
                message: "Training completed: Employee {{employee_id}} finished {{get-course.name}} on {{completion_date}}. Compliance record updated: {{update-compliance.sys_id}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: basic
        username: "$secrets.workday_user"
        password: "$secrets.workday_password"
      resources:
        - name: learning-courses
          path: "/mercedes-benz/learningCourses/{{course_id}}"
          inputParameters:
            - name: course_id
              in: path
          operations:
            - name: get-learning-course
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://mercedes-benz.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: compliance-records
          path: "/table/sn_compliance_policy_statement"
          operations:
            - name: update-compliance-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

When a new position requisition is approved in Workday, creates a Jira task for the recruiting team and notifies the hiring manager via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Workday Position Requisition to Jira Task"
  description: "When a new position requisition is approved in Workday, creates a Jira task for the recruiting team and notifies the hiring manager via Microsoft Teams."
  tags:
    - hr
    - recruiting
    - workday
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: recruiting-ops
      port: 8080
      tools:
        - name: create-recruiting-task
          description: "Given a Workday position requisition ID, retrieve requisition details and create a Jira task for the recruiting team, then notify the hiring manager via Microsoft Teams."
          inputParameters:
            - name: requisition_id
              in: body
              type: string
              description: "The Workday position requisition ID that has been approved."
          steps:
            - name: get-requisition
              type: call
              call: "workday.get-job-requisition"
              with:
                requisition_id: "{{requisition_id}}"
            - name: create-task
              type: call
              call: "jira.create-issue"
              with:
                project_key: "RECRUIT"
                issuetype: "Task"
                summary: "Recruit for: {{get-requisition.job_title}} - {{get-requisition.department}}"
                description: "Workday Req ID: {{requisition_id}}\nJob Title: {{get-requisition.job_title}}\nDepartment: {{get-requisition.department}}\nLocation: {{get-requisition.location}}"
            - name: notify-manager
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-requisition.hiring_manager_email}}"
                message: "Your position requisition for {{get-requisition.job_title}} has been approved. Recruiting task created: {{create-task.key}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: basic
        username: "$secrets.workday_user"
        password: "$secrets.workday_password"
      resources:
        - name: job-requisitions
          path: "/mercedes-benz/jobRequisitions/{{requisition_id}}"
          inputParameters:
            - name: requisition_id
              in: path
          operations:
            - name: get-job-requisition
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://mercedes-benz.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST