Qualcomm Capabilities

Naftiko 0.5 capability definitions for Qualcomm - 102 capabilities showing integration workflows and service orchestrations.

Sort
Expand

Orchestrates a firmware release for Qualcomm 5G modem chipsets by verifying CI/CD pipeline status in GitHub Actions, creating a Jira release ticket, and publishing release notes to Confluence.

naftiko: "0.5"
info:
  label: "5G Modem Firmware Release Orchestrator"
  description: "Orchestrates a firmware release for Qualcomm 5G modem chipsets by verifying CI/CD pipeline status in GitHub Actions, creating a Jira release ticket, and publishing release notes to Confluence."
  tags:
    - chip-design
    - product-lifecycle
    - github
    - jira
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: firmware-release
      port: 8080
      tools:
        - name: orchestrate-firmware-release
          description: "Orchestrate 5G modem firmware release across GitHub, Jira, and Confluence."
          inputParameters:
            - name: repo_name
              in: body
              type: string
              description: "The firmware GitHub repository name."
            - name: release_version
              in: body
              type: string
              description: "The firmware release version tag."
          steps:
            - name: check-pipeline
              type: call
              call: "github.get-workflow-run"
              with:
                repo: "{{repo_name}}"
                branch: "release/{{release_version}}"
            - name: create-release-ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "5GMODEM"
                summary: "Firmware Release {{release_version}}"
                issue_type: "Task"
                description: "Pipeline status: {{check-pipeline.conclusion}}"
            - name: publish-release-notes
              type: call
              call: "confluence.create-page"
              with:
                space: "5GFW"
                title: "Release Notes - {{release_version}}"
                body: "Firmware {{release_version}} released. CI status: {{check-pipeline.conclusion}}. Tracking: {{create-release-ticket.key}}."
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: workflow-runs
          path: "/repos/{{repo}}/actions/runs?branch={{branch}}&per_page=1"
          inputParameters:
            - name: repo
              in: path
            - name: branch
              in: query
          operations:
            - name: get-workflow-run
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://qualcomm.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: confluence
      baseUri: "https://qualcomm.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: create-page
              method: POST

When an API gateway rate limit breach is detected in Datadog, identifies the offending client, creates a Jira investigation ticket, and alerts the platform team via Teams.

naftiko: "0.5"
info:
  label: "API Gateway Rate Limit Breach Handler"
  description: "When an API gateway rate limit breach is detected in Datadog, identifies the offending client, creates a Jira investigation ticket, and alerts the platform team via Teams."
  tags:
    - devops
    - datadog
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: api-platform
      port: 8080
      tools:
        - name: handle-rate-limit-breach
          description: "Orchestrate API rate limit breach response across Datadog, Jira, and Teams."
          inputParameters:
            - name: api_name
              in: body
              type: string
              description: "The API name that triggered the rate limit."
            - name: client_id
              in: body
              type: string
              description: "The client ID exceeding the rate limit."
          steps:
            - name: get-usage-metrics
              type: call
              call: "datadog.query-metrics"
              with:
                query: "sum:api.requests{api_name:{{api_name}},client_id:{{client_id}}}.rollup(sum, 3600)"
            - name: create-investigation
              type: call
              call: "jira.create-issue"
              with:
                project: "PLATFORM"
                summary: "Rate limit breach: {{api_name}} by {{client_id}}"
                issue_type: "Bug"
                description: "Requests in last hour: {{get-usage-metrics.total_requests}}"
            - name: alert-platform-team
              type: call
              call: "msteams.send-message"
              with:
                channel: "api-platform"
                message: "Rate limit breach on {{api_name}} by client {{client_id}}. Investigation: {{create-investigation.key}}."
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.datadog_api_key"
        headerName: "DD-API-KEY"
      resources:
        - name: metrics
          path: "/query"
          operations:
            - name: query-metrics
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://qualcomm.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/api-platform/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Implements deployment gates by checking SonarQube code quality, verifying ServiceNow change approval, and deploying via Azure DevOps with Teams notification.

naftiko: "0.5"
info:
  label: "Azure DevOps Pipeline Deployment Gate Orchestrator"
  description: "Implements deployment gates by checking SonarQube code quality, verifying ServiceNow change approval, and deploying via Azure DevOps with Teams notification."
  tags:
    - devops
    - azure-devops
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: deployment
      port: 8080
      tools:
        - name: run-deployment-gate
          description: "Orchestrate deployment gate checks across SonarQube, ServiceNow, Azure DevOps, and Teams."
          inputParameters:
            - name: project_name
              in: body
              type: string
              description: "The Azure DevOps project name."
            - name: change_request_number
              in: body
              type: string
              description: "The ServiceNow change request number."
          steps:
            - name: check-code-quality
              type: call
              call: "github.get-check-runs"
              with:
                repo: "{{project_name}}"
                ref: "main"
            - name: verify-change-approval
              type: call
              call: "servicenow.get-change-request"
              with:
                number: "{{change_request_number}}"
            - name: notify-deployment
              type: call
              call: "msteams.send-message"
              with:
                channel: "deployments"
                message: "Deployment gate for {{project_name}}: Code quality={{check-code-quality.conclusion}}, CR {{change_request_number}} status={{verify-change-approval.state}}."
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: check-runs
          path: "/repos/qualcomm/{{repo}}/commits/{{ref}}/check-runs"
          inputParameters:
            - name: repo
              in: path
            - name: ref
              in: path
          operations:
            - name: get-check-runs
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://qualcomm.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: change-requests
          path: "/table/change_request?sysparm_query=number={{number}}"
          inputParameters:
            - name: number
              in: query
          operations:
            - name: get-change-request
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/deployments/channels/general/messages"
          operations:
            - name: send-message
              method: POST

When Datadog detects high CPU utilization on an AKS cluster, scales the node pool, creates a ServiceNow change request, and posts a notification to the SRE Teams channel.

naftiko: "0.5"
info:
  label: "Azure Kubernetes Cluster Scaling Orchestrator"
  description: "When Datadog detects high CPU utilization on an AKS cluster, scales the node pool, creates a ServiceNow change request, and posts a notification to the SRE Teams channel."
  tags:
    - cloud
    - microsoft-azure
    - datadog
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: cloud-ops
      port: 8080
      tools:
        - name: scale-aks-cluster
          description: "Orchestrate AKS cluster scaling with Datadog monitoring, ServiceNow change management, and Teams notification."
          inputParameters:
            - name: cluster_name
              in: body
              type: string
              description: "The AKS cluster name."
            - name: target_node_count
              in: body
              type: number
              description: "The target number of nodes."
          steps:
            - name: get-current-metrics
              type: call
              call: "datadog.query-metrics"
              with:
                query: "avg:kubernetes.cpu.usage.total{kube_cluster_name:{{cluster_name}}}"
            - name: create-change-request
              type: call
              call: "servicenow.create-change-request"
              with:
                short_description: "Scale AKS cluster {{cluster_name}} to {{target_node_count}} nodes"
                category: "infrastructure"
                risk: "moderate"
            - name: notify-sre
              type: call
              call: "msteams.send-message"
              with:
                channel: "sre-operations"
                message: "AKS Scaling: {{cluster_name}} scaling to {{target_node_count}} nodes. CPU util: {{get-current-metrics.p95_cpu}}%. CR: {{create-change-request.number}}."
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.datadog_api_key"
        headerName: "DD-API-KEY"
      resources:
        - name: metrics
          path: "/query"
          operations:
            - name: query-metrics
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://qualcomm.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: change-requests
          path: "/table/change_request"
          operations:
            - name: create-change-request
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/sre-operations/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Queries Azure Cost Management for the month-to-date spend of a specified resource group.

naftiko: "0.5"
info:
  label: "Azure Resource Group Cost Lookup"
  description: "Queries Azure Cost Management for the month-to-date spend of a specified resource group."
  tags:
    - cloud
    - microsoft-azure
    - finops
capability:
  exposes:
    - type: mcp
      namespace: cloud-cost
      port: 8080
      tools:
        - name: get-resource-group-cost
          description: "Retrieve month-to-date cost for an Azure resource group."
          inputParameters:
            - name: resource_group
              in: body
              type: string
              description: "The Azure resource group name."
          call: "azure.get-cost-summary"
          with:
            resource_group: "{{resource_group}}"
          outputParameters:
            - name: mtd_cost
              type: number
              mapping: "$.properties.rows[0][0]"
            - name: currency
              type: string
              mapping: "$.properties.columns[0].name"
  consumes:
    - type: http
      namespace: azure
      baseUri: "https://management.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azure_token"
      resources:
        - name: cost-management
          path: "/subscriptions/{{subscription_id}}/resourceGroups/{{resource_group}}/providers/Microsoft.CostManagement/query"
          inputParameters:
            - name: resource_group
              in: path
          operations:
            - name: get-cost-summary
              method: POST

When a chip tapeout milestone approaches, pulls design rule check status from the EDA tool, verifies sign-off in Jira, and posts a readiness summary to the engineering Teams channel.

naftiko: "0.5"
info:
  label: "Chip Design Tapeout Readiness Orchestrator"
  description: "When a chip tapeout milestone approaches, pulls design rule check status from the EDA tool, verifies sign-off in Jira, and posts a readiness summary to the engineering Teams channel."
  tags:
    - chip-design
    - manufacturing
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: chip-engineering
      port: 8080
      tools:
        - name: check-tapeout-readiness
          description: "Orchestrate tapeout readiness by checking DRC status, Jira sign-off, and posting summary to Teams."
          inputParameters:
            - name: design_id
              in: body
              type: string
              description: "The chip design project identifier."
            - name: jira_epic_key
              in: body
              type: string
              description: "The Jira epic tracking tapeout sign-off tasks."
          steps:
            - name: get-drc-status
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "SELECT design_id, drc_clean, lvs_clean, erc_clean FROM chip_signoff WHERE design_id = '{{design_id}}'"
            - name: get-signoff-tasks
              type: call
              call: "jira.search-issues"
              with:
                jql: "epic = {{jira_epic_key}} AND status != Done"
            - name: post-readiness-summary
              type: call
              call: "msteams.send-message"
              with:
                channel: "chip-engineering"
                message: "Tapeout Readiness for {{design_id}}: DRC Clean={{get-drc-status.drc_clean}}, Open sign-off tasks={{get-signoff-tasks.total}}."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://qualcomm.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://qualcomm.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: search
          path: "/search"
          operations:
            - name: search-issues
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/chip-engineering/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Identifies cloud cost savings by querying Azure cost anomalies, correlating with Datadog utilization metrics, and creating optimization recommendations in Jira.

naftiko: "0.5"
info:
  label: "Cloud Infrastructure Cost Optimization Orchestrator"
  description: "Identifies cloud cost savings by querying Azure cost anomalies, correlating with Datadog utilization metrics, and creating optimization recommendations in Jira."
  tags:
    - finops
    - microsoft-azure
    - datadog
    - jira
capability:
  exposes:
    - type: mcp
      namespace: finops
      port: 8080
      tools:
        - name: run-cost-optimization
          description: "Orchestrate cloud cost optimization across Azure, Datadog, and Jira."
          inputParameters:
            - name: subscription_id
              in: body
              type: string
              description: "The Azure subscription ID to analyze."
          steps:
            - name: get-cost-anomalies
              type: call
              call: "azure.get-cost-anomalies"
              with:
                subscription_id: "{{subscription_id}}"
            - name: get-utilization
              type: call
              call: "datadog.query-metrics"
              with:
                query: "avg:azure.vm.cpu_usage{subscription_id:{{subscription_id}}} by {resource_group}"
            - name: create-optimization-ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "FINOPS"
                summary: "Cloud Cost Optimization: {{subscription_id}}"
                issue_type: "Task"
                description: "Anomalies found: {{get-cost-anomalies.count}}. Low utilization resources identified."
  consumes:
    - type: http
      namespace: azure
      baseUri: "https://management.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azure_token"
      resources:
        - name: cost-anomalies
          path: "/subscriptions/{{subscription_id}}/providers/Microsoft.CostManagement/alerts"
          inputParameters:
            - name: subscription_id
              in: path
          operations:
            - name: get-cost-anomalies
              method: GET
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.datadog_api_key"
        headerName: "DD-API-KEY"
      resources:
        - name: metrics
          path: "/query"
          operations:
            - name: query-metrics
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://qualcomm.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

Collects audit evidence by extracting access logs from Okta, change records from ServiceNow, and financial controls from SAP, then publishes a consolidated report to Confluence.

naftiko: "0.5"
info:
  label: "Compliance Audit Evidence Collection Orchestrator"
  description: "Collects audit evidence by extracting access logs from Okta, change records from ServiceNow, and financial controls from SAP, then publishes a consolidated report to Confluence."
  tags:
    - compliance
    - okta
    - servicenow
    - sap
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: compliance
      port: 8080
      tools:
        - name: collect-audit-evidence
          description: "Orchestrate audit evidence collection across Okta, ServiceNow, SAP, and Confluence."
          inputParameters:
            - name: audit_period
              in: body
              type: string
              description: "The audit period (e.g., 2026-Q1)."
            - name: control_id
              in: body
              type: string
              description: "The SOX control identifier."
          steps:
            - name: get-access-logs
              type: call
              call: "okta.get-system-logs"
              with:
                since: "{{audit_period}}"
                filter: "eventType eq 'user.session.start'"
            - name: get-change-records
              type: call
              call: "servicenow.search-change-requests"
              with:
                period: "{{audit_period}}"
            - name: get-financial-controls
              type: call
              call: "sap.get-audit-trail"
              with:
                period: "{{audit_period}}"
                control_id: "{{control_id}}"
            - name: publish-report
              type: call
              call: "confluence.create-page"
              with:
                space: "COMPLIANCE"
                title: "Audit Evidence - {{control_id}} - {{audit_period}}"
                body: "Access events: {{get-access-logs.count}}, Change records: {{get-change-records.count}}, Financial controls validated: {{get-financial-controls.status}}."
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://qualcomm.okta.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.okta_token"
      resources:
        - name: system-logs
          path: "/logs"
          operations:
            - name: get-system-logs
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://qualcomm.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: change-requests
          path: "/table/change_request"
          operations:
            - name: search-change-requests
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://qualcomm-s4.sap.com/sap/opu/odata/sap/API_AUDIT_TRAIL_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: audit-trail
          path: "/A_AuditTrail"
          operations:
            - name: get-audit-trail
              method: GET
    - type: http
      namespace: confluence
      baseUri: "https://qualcomm.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: create-page
              method: POST

Retrieves the title and body content of a Confluence page by page ID.

naftiko: "0.5"
info:
  label: "Confluence Page Content Lookup"
  description: "Retrieves the title and body content of a Confluence page by page ID."
  tags:
    - documentation
    - confluence
    - knowledge-management
capability:
  exposes:
    - type: mcp
      namespace: docs
      port: 8080
      tools:
        - name: get-page-content
          description: "Retrieve a Confluence page title and body content by page ID."
          inputParameters:
            - name: page_id
              in: body
              type: string
              description: "The Confluence page ID."
          call: "confluence.get-page"
          with:
            page_id: "{{page_id}}"
          outputParameters:
            - name: title
              type: string
              mapping: "$.title"
            - name: body
              type: string
              mapping: "$.body.storage.value"
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://qualcomm.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: pages
          path: "/content/{{page_id}}?expand=body.storage"
          inputParameters:
            - name: page_id
              in: path
          operations:
            - name: get-page
              method: GET

Provisions access for new contractors by creating an Okta account, assigning groups based on role, opening a ServiceNow access request, and notifying the hiring manager via Teams.

naftiko: "0.5"
info:
  label: "Contractor Access Provisioning Orchestrator"
  description: "Provisions access for new contractors by creating an Okta account, assigning groups based on role, opening a ServiceNow access request, and notifying the hiring manager via Teams."
  tags:
    - identity
    - okta
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: contractor-mgmt
      port: 8080
      tools:
        - name: provision-contractor-access
          description: "Orchestrate contractor access provisioning across Okta, ServiceNow, and Teams."
          inputParameters:
            - name: contractor_name
              in: body
              type: string
              description: "The contractor's full name."
            - name: email
              in: body
              type: string
              description: "The contractor's email address."
            - name: role
              in: body
              type: string
              description: "The contractor's role for group assignment."
            - name: manager_email
              in: body
              type: string
              description: "The hiring manager's email."
          steps:
            - name: create-okta-user
              type: call
              call: "okta.create-user"
              with:
                firstName: "{{contractor_name}}"
                email: "{{email}}"
                userType: "contractor"
            - name: assign-groups
              type: call
              call: "okta.assign-group"
              with:
                user_id: "{{create-okta-user.id}}"
                group_name: "contractors-{{role}}"
            - name: create-access-request
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Contractor access provisioned: {{contractor_name}}"
                category: "access_management"
            - name: notify-manager
              type: call
              call: "msteams.send-message"
              with:
                recipient: "{{manager_email}}"
                message: "Contractor {{contractor_name}} provisioned. Okta account active, groups assigned for {{role}} role. ServiceNow: {{create-access-request.number}}."
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://qualcomm.okta.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.okta_token"
      resources:
        - name: users
          path: "/users"
          operations:
            - name: create-user
              method: POST
        - name: group-assignments
          path: "/groups/{{group_name}}/users/{{user_id}}"
          inputParameters:
            - name: group_name
              in: path
            - name: user_id
              in: path
          operations:
            - name: assign-group
              method: PUT
    - type: http
      namespace: servicenow
      baseUri: "https://qualcomm.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient}}/sendMail"
          inputParameters:
            - name: recipient
              in: path
          operations:
            - name: send-message
              method: POST

Updates customer health scores by pulling usage data from Snowflake, support case history from Salesforce, and updating the customer success dashboard in Power BI.

naftiko: "0.5"
info:
  label: "Customer Health Score Update Orchestrator"
  description: "Updates customer health scores by pulling usage data from Snowflake, support case history from Salesforce, and updating the customer success dashboard in Power BI."
  tags:
    - sales
    - snowflake
    - salesforce
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: customer-success
      port: 8080
      tools:
        - name: update-health-scores
          description: "Orchestrate customer health score updates across Snowflake, Salesforce, and Power BI."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "The Salesforce account ID."
          steps:
            - name: get-usage-data
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "SELECT avg_daily_active_users, feature_adoption_pct, api_call_volume FROM customer_usage WHERE account_id = '{{account_id}}'"
            - name: get-support-history
              type: call
              call: "salesforce.query"
              with:
                soql: "SELECT COUNT(Id) case_count, AVG(CSAT_Score__c) avg_csat FROM Case WHERE AccountId = '{{account_id}}' AND CreatedDate = LAST_90_DAYS"
            - name: refresh-dashboard
              type: call
              call: "powerbi.trigger-refresh"
              with:
                dataset_id: "customer-health-dataset"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://qualcomm.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://qualcomm.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: query
          path: "/query"
          operations:
            - name: query
              method: GET
    - 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"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: trigger-refresh
              method: POST

Processes a return merchandise authorization by looking up the order in SAP, creating a Salesforce case, and generating a return shipping label notification via Teams.

naftiko: "0.5"
info:
  label: "Customer RMA Processing Orchestrator"
  description: "Processes a return merchandise authorization by looking up the order in SAP, creating a Salesforce case, and generating a return shipping label notification via Teams."
  tags:
    - supply-chain
    - product-lifecycle
    - sap
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: rma
      port: 8080
      tools:
        - name: process-rma
          description: "Orchestrate RMA processing across SAP, Salesforce, and Teams."
          inputParameters:
            - name: order_number
              in: body
              type: string
              description: "The original SAP sales order number."
            - name: reason
              in: body
              type: string
              description: "The return reason description."
          steps:
            - name: get-order
              type: call
              call: "sap.get-sales-order"
              with:
                order_number: "{{order_number}}"
            - name: create-case
              type: call
              call: "salesforce.create-case"
              with:
                subject: "RMA for order {{order_number}}"
                description: "Return reason: {{reason}}. Customer: {{get-order.customer_name}}"
                origin: "API"
            - name: notify-logistics
              type: call
              call: "msteams.send-message"
              with:
                channel: "logistics-ops"
                message: "RMA created for order {{order_number}}. Customer: {{get-order.customer_name}}. Case: {{create-case.CaseNumber}}. Reason: {{reason}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://qualcomm-s4.sap.com/sap/opu/odata/sap/API_SALES_ORDER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: sales-orders
          path: "/A_SalesOrder('{{order_number}}')"
          inputParameters:
            - name: order_number
              in: path
          operations:
            - name: get-sales-order
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://qualcomm.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: cases
          path: "/sobjects/Case"
          operations:
            - name: create-case
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/logistics-ops/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Escalates customer technical support cases by pulling case details from Salesforce, creating an engineering Jira ticket, and paging the on-call engineer via PagerDuty.

naftiko: "0.5"
info:
  label: "Customer Technical Support Escalation Orchestrator"
  description: "Escalates customer technical support cases by pulling case details from Salesforce, creating an engineering Jira ticket, and paging the on-call engineer via PagerDuty."
  tags:
    - support
    - salesforce
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: tech-support
      port: 8080
      tools:
        - name: escalate-support-case
          description: "Orchestrate technical support escalation across Salesforce, Jira, and PagerDuty."
          inputParameters:
            - name: case_id
              in: body
              type: string
              description: "The Salesforce case ID."
          steps:
            - name: get-case
              type: call
              call: "salesforce.get-case"
              with:
                case_id: "{{case_id}}"
            - name: create-eng-ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "CUSTSUP"
                summary: "Escalation: {{get-case.Subject}}"
                issue_type: "Bug"
                priority: "High"
                description: "Customer: {{get-case.Account.Name}}. Description: {{get-case.Description}}"
            - name: page-engineer
              type: call
              call: "pagerduty.create-incident"
              with:
                service_id: "customer-engineering"
                title: "Customer escalation: {{get-case.Subject}}"
                urgency: "high"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://qualcomm.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: cases
          path: "/sobjects/Case/{{case_id}}"
          inputParameters:
            - name: case_id
              in: path
          operations:
            - name: get-case
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://qualcomm.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: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: bearer
        token: "$secrets.pagerduty_token"
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: create-incident
              method: POST

When a Snowflake data pipeline fails, captures error details, creates a Jira incident, and triggers a retry with notification to the data engineering Teams channel.

naftiko: "0.5"
info:
  label: "Data Pipeline Failure Recovery Orchestrator"
  description: "When a Snowflake data pipeline fails, captures error details, creates a Jira incident, and triggers a retry with notification to the data engineering Teams channel."
  tags:
    - data-engineering
    - snowflake
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: data-engineering
      port: 8080
      tools:
        - name: recover-pipeline-failure
          description: "Orchestrate data pipeline failure recovery across Snowflake, Jira, and Teams."
          inputParameters:
            - name: pipeline_name
              in: body
              type: string
              description: "The name of the failed data pipeline."
            - name: task_id
              in: body
              type: string
              description: "The Snowflake task ID that failed."
          steps:
            - name: get-error-details
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "SELECT error_message, scheduled_time FROM table(information_schema.task_history()) WHERE name = '{{pipeline_name}}' ORDER BY scheduled_time DESC LIMIT 1"
            - name: create-incident
              type: call
              call: "jira.create-issue"
              with:
                project: "DATAENG"
                summary: "Pipeline failure: {{pipeline_name}}"
                issue_type: "Bug"
                priority: "High"
                description: "Error: {{get-error-details.error_message}}"
            - name: notify-data-team
              type: call
              call: "msteams.send-message"
              with:
                channel: "data-engineering"
                message: "Pipeline {{pipeline_name}} failed. Error: {{get-error-details.error_message}}. Jira: {{create-incident.key}}."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://qualcomm.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://qualcomm.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/data-engineering/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Manages database schema changes by reviewing the migration in GitHub, creating a ServiceNow change request, and notifying the DBA team via Teams for approval.

naftiko: "0.5"
info:
  label: "Database Schema Change Approval Orchestrator"
  description: "Manages database schema changes by reviewing the migration in GitHub, creating a ServiceNow change request, and notifying the DBA team via Teams for approval."
  tags:
    - data-engineering
    - github
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: dba-ops
      port: 8080
      tools:
        - name: process-schema-change
          description: "Orchestrate database schema change approval across GitHub, ServiceNow, and Teams."
          inputParameters:
            - name: repo_name
              in: body
              type: string
              description: "The repository containing the migration."
            - name: pr_number
              in: body
              type: number
              description: "The pull request number with the schema change."
          steps:
            - name: get-pr-details
              type: call
              call: "github.get-pull-request"
              with:
                repo: "{{repo_name}}"
                pr_number: "{{pr_number}}"
            - name: create-change-request
              type: call
              call: "servicenow.create-change-request"
              with:
                short_description: "DB Schema Change: {{get-pr-details.title}}"
                category: "database"
                description: "PR: {{get-pr-details.html_url}}"
            - name: notify-dba
              type: call
              call: "msteams.send-message"
              with:
                channel: "dba-team"
                message: "Schema change approval needed: {{get-pr-details.title}}. PR: {{get-pr-details.html_url}}. CR: {{create-change-request.number}}."
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: pull-requests
          path: "/repos/{{repo}}/pulls/{{pr_number}}"
          inputParameters:
            - name: repo
              in: path
            - name: pr_number
              in: path
          operations:
            - name: get-pull-request
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://qualcomm.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: change-requests
          path: "/table/change_request"
          operations:
            - name: create-change-request
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/dba-team/channels/general/messages"
          operations:
            - name: send-message
              method: POST

When a Datadog monitor alert fires, automatically creates a ServiceNow P2 incident with alert metadata and assigns it to the on-call team.

naftiko: "0.5"
info:
  label: "Datadog Alert to ServiceNow Incident Bridge"
  description: "When a Datadog monitor alert fires, automatically creates a ServiceNow P2 incident with alert metadata and assigns it to the on-call team."
  tags:
    - observability
    - monitoring
    - datadog
    - servicenow
    - incident-response
capability:
  exposes:
    - type: mcp
      namespace: alert-bridge
      port: 8080
      tools:
        - name: bridge-alert-to-incident
          description: "Given a Datadog monitor ID and alert event, create a ServiceNow incident pre-populated with alert severity, monitor name, and Datadog event URL."
          inputParameters:
            - name: monitor_id
              in: body
              type: string
              description: "The Datadog monitor ID that triggered the alert."
            - name: alert_severity
              in: body
              type: string
              description: "Severity of the alert: critical, warning, or no_data."
          steps:
            - name: get-monitor
              type: call
              call: "datadog.get-monitor"
              with:
                monitor_id: "{{monitor_id}}"
            - name: create-incident
              type: call
              call: "servicenow.create-from-alert"
              with:
                short_description: "Datadog alert: {{get-monitor.name}}"
                description: "Monitor: {{get-monitor.name}}\nSeverity: {{alert_severity}}\nQuery: {{get-monitor.query}}"
                urgency: "2"
  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: monitors
          path: "/monitor/{{monitor_id}}"
          inputParameters:
            - name: monitor_id
              in: path
          operations:
            - name: get-monitor
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://qualcomm.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-from-alert
              method: POST

Queries Datadog APM for the p95 latency of a specified service over the last hour.

naftiko: "0.5"
info:
  label: "Datadog APM Service Latency Lookup"
  description: "Queries Datadog APM for the p95 latency of a specified service over the last hour."
  tags:
    - observability
    - datadog
    - apm
capability:
  exposes:
    - type: mcp
      namespace: monitoring
      port: 8080
      tools:
        - name: get-service-latency
          description: "Retrieve p95 latency metrics for a service from Datadog APM over the last hour."
          inputParameters:
            - name: service_name
              in: body
              type: string
              description: "The Datadog service name to query."
          call: "datadog.query-metrics"
          with:
            query: "trace.http.request.duration.by.service.95p{service:{{service_name}}}"
          outputParameters:
            - name: p95_latency_ms
              type: number
              mapping: "$.series[0].pointlist[-1][1]"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.datadog_api_key"
        headerName: "DD-API-KEY"
      resources:
        - name: metrics
          path: "/query"
          operations:
            - name: query-metrics
              method: GET

Detects Datadog cloud infrastructure cost anomalies exceeding threshold and opens a ServiceNow investigation ticket while alerting the FinOps team in Teams.

naftiko: "0.5"
info:
  label: "Datadog Infrastructure Cost Anomaly Responder"
  description: "Detects Datadog cloud infrastructure cost anomalies exceeding threshold and opens a ServiceNow investigation ticket while alerting the FinOps team in Teams."
  tags:
    - cloud
    - finops
    - datadog
    - servicenow
    - microsoft-teams
    - cost-management
capability:
  exposes:
    - type: mcp
      namespace: finops
      port: 8080
      tools:
        - name: respond-to-cost-anomaly
          description: "Given a Datadog metric query for cloud spend, detect if current spend exceeds the anomaly threshold and create a ServiceNow investigation ticket with cost details."
          inputParameters:
            - name: metric_query
              in: body
              type: string
              description: "Datadog metric query string for cloud cost metrics."
            - name: threshold_usd
              in: body
              type: number
              description: "Spend threshold in USD above which an anomaly is flagged."
          steps:
            - name: query-metrics
              type: call
              call: "datadog.query-metrics"
              with:
                query: "{{metric_query}}"
            - name: open-investigation
              type: call
              call: "servicenow.create-cost-ticket"
              with:
                short_description: "Cloud cost anomaly detected: spend exceeds ${{threshold_usd}}"
                description: "Current spend: {{query-metrics.value}}. Threshold: {{threshold_usd}}."
            - name: alert-finops
              type: call
              call: "msteams.post-cost-alert"
              with:
                channel_id: "finops-team"
                message: "Cost anomaly: current spend {{query-metrics.value}} exceeds threshold ${{threshold_usd}}. ServiceNow: {{open-investigation.number}}"
  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: metrics-query
          path: "/query"
          operations:
            - name: query-metrics
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://qualcomm.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-cost-ticket
              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/{{channel_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-cost-alert
              method: POST

Polls Datadog for service health metrics and SLO status across Qualcomm's chip platform APIs, and opens a ServiceNow incident when thresholds are breached.

naftiko: "0.5"
info:
  label: "Datadog Service Health Monitor"
  description: "Polls Datadog for service health metrics and SLO status across Qualcomm's chip platform APIs, and opens a ServiceNow incident when thresholds are breached."
  tags:
    - observability
    - monitoring
    - datadog
    - servicenow
    - incident-response
capability:
  exposes:
    - type: mcp
      namespace: observability
      port: 8080
      tools:
        - name: check-service-health
          description: "Given a Datadog service name and SLO ID, check current SLO compliance and create a ServiceNow P1 incident if the error budget is exhausted."
          inputParameters:
            - name: service_name
              in: body
              type: string
              description: "The Datadog service name to check."
            - name: slo_id
              in: body
              type: string
              description: "The Datadog SLO ID to evaluate."
          steps:
            - name: get-slo-status
              type: call
              call: "datadog.get-slo"
              with:
                slo_id: "{{slo_id}}"
            - name: create-incident
              type: call
              call: "servicenow.create-p1-incident"
              with:
                short_description: "SLO breach detected for {{service_name}}"
                description: "SLO {{slo_id}} compliance: {{get-slo-status.compliance}}. Error budget remaining: {{get-slo-status.error_budget_remaining}}."
                urgency: "1"
                impact: "1"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: slos
          path: "/slo/{{slo_id}}"
          inputParameters:
            - name: slo_id
              in: path
          operations:
            - name: get-slo
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://qualcomm.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-p1-incident
              method: POST

Orchestrates contract execution by sending the document for signature via DocuSign, updating the Salesforce opportunity stage, and notifying legal via Teams.

naftiko: "0.5"
info:
  label: "DocuSign Contract Execution Orchestrator"
  description: "Orchestrates contract execution by sending the document for signature via DocuSign, updating the Salesforce opportunity stage, and notifying legal via Teams."
  tags:
    - sales
    - contract-management
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: contract-execution
      port: 8080
      tools:
        - name: execute-contract
          description: "Orchestrate contract execution across DocuSign, Salesforce, and Teams."
          inputParameters:
            - name: opportunity_id
              in: body
              type: string
              description: "The Salesforce opportunity ID."
            - name: signer_email
              in: body
              type: string
              description: "The signer's email address."
          steps:
            - name: get-opportunity
              type: call
              call: "salesforce.get-opportunity"
              with:
                opportunity_id: "{{opportunity_id}}"
            - name: send-for-signature
              type: call
              call: "docusign.create-envelope"
              with:
                subject: "Contract: {{get-opportunity.Name}}"
                signer_email: "{{signer_email}}"
            - name: update-opportunity
              type: call
              call: "salesforce.update-opportunity"
              with:
                opportunity_id: "{{opportunity_id}}"
                stage: "Contract Sent"
            - name: notify-legal
              type: call
              call: "msteams.send-message"
              with:
                channel: "legal-contracts"
                message: "Contract sent for signature: {{get-opportunity.Name}}. DocuSign envelope: {{send-for-signature.envelopeId}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://qualcomm.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity/{{opportunity_id}}"
          inputParameters:
            - name: opportunity_id
              in: path
          operations:
            - name: get-opportunity
              method: GET
            - name: update-opportunity
              method: PATCH
    - type: http
      namespace: docusign
      baseUri: "https://na4.docusign.net/restapi/v2.1"
      authentication:
        type: bearer
        token: "$secrets.docusign_token"
      resources:
        - name: envelopes
          path: "/accounts/{{account_id}}/envelopes"
          operations:
            - name: create-envelope
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/legal-contracts/channels/general/messages"
          operations:
            - name: send-message
              method: POST

When an employee departure is confirmed in Workday, revokes Microsoft 365 access, closes open ServiceNow tickets, and transfers Salesforce account ownership.

naftiko: "0.5"
info:
  label: "Employee Offboarding Orchestrator"
  description: "When an employee departure is confirmed in Workday, revokes Microsoft 365 access, closes open ServiceNow tickets, and transfers Salesforce account ownership."
  tags:
    - hr
    - offboarding
    - workday
    - microsoft-graph
    - servicenow
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: hr-offboarding
      port: 8080
      tools:
        - name: trigger-offboarding
          description: "Given a Workday employee ID and termination date, revoke Microsoft 365 access, close open ServiceNow tickets, and reassign Salesforce records to the employee's manager."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday worker ID for the departing employee."
            - name: termination_date
              in: body
              type: string
              description: "The employee termination date in YYYY-MM-DD format."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{employee_id}}"
            - name: revoke-access
              type: call
              call: "msgraph.disable-user"
              with:
                user_id: "{{get-employee.azure_object_id}}"
            - name: close-tickets
              type: call
              call: "servicenow.close-user-tickets"
              with:
                caller_id: "{{get-employee.work_email}}"
            - name: reassign-accounts
              type: call
              call: "salesforce.reassign-owner"
              with:
                from_user_id: "{{get-employee.salesforce_user_id}}"
                to_user_id: "{{get-employee.manager_salesforce_id}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/qualcomm/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: servicenow
      baseUri: "https://qualcomm.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: close-user-tickets
              method: PATCH
    - type: http
      namespace: salesforce
      baseUri: "https://qualcomm.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account"
          operations:
            - name: reassign-owner
              method: PATCH

When a new hire record is created in Workday, opens a ServiceNow onboarding ticket, provisions a Microsoft 365 account via Graph, and sends a Teams welcome message.

naftiko: "0.5"
info:
  label: "Employee Onboarding Orchestrator"
  description: "When a new hire record is created in Workday, opens a ServiceNow onboarding ticket, provisions a Microsoft 365 account via Graph, and sends a Teams welcome message."
  tags:
    - hr
    - onboarding
    - workday
    - servicenow
    - microsoft-teams
    - microsoft-graph
capability:
  exposes:
    - type: mcp
      namespace: hr-onboarding
      port: 8080
      tools:
        - name: trigger-onboarding
          description: "Given a Workday employee ID and start date, orchestrate the full new-hire onboarding sequence across ServiceNow, Microsoft Graph, and Microsoft Teams."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday worker ID for the new hire."
            - name: start_date
              in: body
              type: string
              description: "Employee start date in YYYY-MM-DD format."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{employee_id}}"
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "New hire onboarding: {{get-employee.full_name}}"
                category: "hr_onboarding"
                assigned_to: "IT_Onboarding"
            - name: provision-account
              type: call
              call: "msgraph.create-user"
              with:
                displayName: "{{get-employee.full_name}}"
                mail: "{{get-employee.work_email}}"
                department: "{{get-employee.department}}"
            - name: send-welcome
              type: call
              call: "msteams.send-message"
              with:
                recipient: "{{get-employee.work_email}}"
                message: "Welcome to Qualcomm, {{get-employee.first_name}}! Your IT ticket is {{create-ticket.number}}."
  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: "/qualcomm/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://qualcomm.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: 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: messages
          path: "/users/{{recipient}}/sendMail"
          inputParameters:
            - name: recipient
              in: path
          operations:
            - name: send-message
              method: POST

When a new engineering requisition is approved in Workday, posts the job to LinkedIn, creates a recruiting pipeline in Jira, and notifies the recruiting team via Teams.

naftiko: "0.5"
info:
  label: "Engineering Talent Requisition Orchestrator"
  description: "When a new engineering requisition is approved in Workday, posts the job to LinkedIn, creates a recruiting pipeline in Jira, and notifies the recruiting team via Teams."
  tags:
    - hr
    - workday
    - linkedin
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: talent-acquisition
      port: 8080
      tools:
        - name: process-engineering-requisition
          description: "Orchestrate engineering requisition across Workday, LinkedIn, Jira, and Teams."
          inputParameters:
            - name: requisition_id
              in: body
              type: string
              description: "The Workday requisition ID."
          steps:
            - name: get-requisition
              type: call
              call: "workday.get-requisition"
              with:
                requisition_id: "{{requisition_id}}"
            - name: post-to-linkedin
              type: call
              call: "linkedin.create-job-posting"
              with:
                title: "{{get-requisition.title}}"
                description: "{{get-requisition.description}}"
                location: "{{get-requisition.location}}"
            - name: create-pipeline
              type: call
              call: "jira.create-issue"
              with:
                project: "RECRUIT"
                summary: "Recruiting Pipeline: {{get-requisition.title}}"
                issue_type: "Epic"
            - name: notify-recruiters
              type: call
              call: "msteams.send-message"
              with:
                channel: "engineering-recruiting"
                message: "New requisition: {{get-requisition.title}} in {{get-requisition.location}}. LinkedIn posted, Jira epic: {{create-pipeline.key}}."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: requisitions
          path: "/qualcomm/recruiting/requisitions/{{requisition_id}}"
          inputParameters:
            - name: requisition_id
              in: path
          operations:
            - name: get-requisition
              method: GET
    - type: http
      namespace: linkedin
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: job-postings
          path: "/simpleJobPostings"
          operations:
            - name: create-job-posting
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://qualcomm.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/engineering-recruiting/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Prepares executive business review materials by pulling revenue data from SAP, pipeline metrics from Salesforce, and refreshing the Power BI executive dashboard.

naftiko: "0.5"
info:
  label: "Executive Business Review Deck Orchestrator"
  description: "Prepares executive business review materials by pulling revenue data from SAP, pipeline metrics from Salesforce, and refreshing the Power BI executive dashboard."
  tags:
    - finance
    - sap
    - salesforce
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: exec-reporting
      port: 8080
      tools:
        - name: prepare-ebr-materials
          description: "Orchestrate executive business review preparation across SAP, Salesforce, and Power BI."
          inputParameters:
            - name: fiscal_quarter
              in: body
              type: string
              description: "The fiscal quarter for the review."
          steps:
            - name: get-revenue-data
              type: call
              call: "sap.get-financial-actuals"
              with:
                fiscal_period: "{{fiscal_quarter}}"
            - name: get-pipeline-metrics
              type: call
              call: "salesforce.query"
              with:
                soql: "SELECT StageName, SUM(Amount) amt, COUNT(Id) cnt FROM Opportunity WHERE FiscalQuarter = '{{fiscal_quarter}}' GROUP BY StageName"
            - name: refresh-exec-dashboard
              type: call
              call: "powerbi.trigger-refresh"
              with:
                dataset_id: "executive-dashboard"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://qualcomm-s4.sap.com/sap/opu/odata/sap/API_FINANCIAL_ACTUALS_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: actuals
          path: "/A_FinancialActuals?$filter=FiscalPeriod eq '{{fiscal_period}}'"
          inputParameters:
            - name: fiscal_period
              in: query
          operations:
            - name: get-financial-actuals
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://qualcomm.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: query
          path: "/query"
          operations:
            - name: query
              method: GET
    - 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"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: trigger-refresh
              method: POST

Checks that all merged pull requests on protected branches in GitHub meet minimum review approval counts, and flags violations in Jira.

naftiko: "0.5"
info:
  label: "GitHub Code Review Compliance Check"
  description: "Checks that all merged pull requests on protected branches in GitHub meet minimum review approval counts, and flags violations in Jira."
  tags:
    - devops
    - engineering
    - github
    - jira
    - compliance
    - code-review
capability:
  exposes:
    - type: mcp
      namespace: code-governance
      port: 8080
      tools:
        - name: check-pr-review-compliance
          description: "Given a GitHub repository and date range, scan merged PRs for insufficient review approvals and create Jira compliance tickets for any violations."
          inputParameters:
            - name: repository
              in: body
              type: string
              description: "The GitHub repository in owner/repo format."
            - name: min_approvals
              in: body
              type: integer
              description: "Minimum number of required review approvals per PR."
          steps:
            - name: get-merged-prs
              type: call
              call: "github.list-merged-prs"
              with:
                repository: "{{repository}}"
            - name: create-violation-ticket
              type: call
              call: "jira.create-compliance-issue"
              with:
                project_key: "SEC"
                issuetype: "Task"
                summary: "PR review compliance violations in {{repository}}"
                description: "{{get-merged-prs.violation_count}} PRs merged with fewer than {{min_approvals}} approvals."
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: pull-requests
          path: "/repos/{{repository}}/pulls"
          inputParameters:
            - name: repository
              in: path
          operations:
            - name: list-merged-prs
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://qualcomm.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-compliance-issue
              method: POST

When Dependabot alerts are detected, retrieves alert details from GitHub, creates a remediation Jira ticket, and notifies the security team via Teams.

naftiko: "0.5"
info:
  label: "GitHub Dependabot Alert Remediation Orchestrator"
  description: "When Dependabot alerts are detected, retrieves alert details from GitHub, creates a remediation Jira ticket, and notifies the security team via Teams."
  tags:
    - security
    - github
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: devsecops
      port: 8080
      tools:
        - name: remediate-dependabot-alert
          description: "Orchestrate Dependabot alert remediation across GitHub, Jira, and Teams."
          inputParameters:
            - name: repo_name
              in: body
              type: string
              description: "The GitHub repository name."
            - name: alert_number
              in: body
              type: number
              description: "The Dependabot alert number."
          steps:
            - name: get-alert-details
              type: call
              call: "github.get-dependabot-alert"
              with:
                repo: "{{repo_name}}"
                alert_number: "{{alert_number}}"
            - name: create-remediation-ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "SEC"
                summary: "Dependabot: {{get-alert-details.security_advisory.summary}}"
                issue_type: "Bug"
                priority: "{{get-alert-details.security_advisory.severity}}"
            - name: notify-security
              type: call
              call: "msteams.send-message"
              with:
                channel: "appsec"
                message: "Dependabot alert in {{repo_name}}: {{get-alert-details.security_advisory.summary}}. Severity: {{get-alert-details.security_advisory.severity}}. Jira: {{create-remediation-ticket.key}}."
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: dependabot-alerts
          path: "/repos/{{repo}}/dependabot/alerts/{{alert_number}}"
          inputParameters:
            - name: repo
              in: path
            - name: alert_number
              in: path
          operations:
            - name: get-dependabot-alert
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://qualcomm.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/appsec/channels/general/messages"
          operations:
            - name: send-message
              method: POST

When a GitHub Actions CI pipeline fails on a protected branch, creates a Jira bug, posts a Datadog deployment event, and alerts the engineering team in Microsoft Teams.

naftiko: "0.5"
info:
  label: "GitHub Pull Request CI/CD Failure Handler"
  description: "When a GitHub Actions CI pipeline fails on a protected branch, creates a Jira bug, posts a Datadog deployment event, and alerts the engineering team in Microsoft Teams."
  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 event, create a Jira bug with full context, record a Datadog deployment failure event, and alert the engineering Teams channel."
          inputParameters:
            - name: repository
              in: body
              type: string
              description: "The GitHub repository name in owner/repo format."
            - name: branch
              in: body
              type: string
              description: "The branch name where the pipeline failed."
            - name: run_id
              in: body
              type: string
              description: "The GitHub Actions run ID for the failed pipeline."
            - name: commit_sha
              in: body
              type: string
              description: "The commit SHA that triggered the pipeline."
          steps:
            - name: get-run
              type: call
              call: "github.get-workflow-run"
              with:
                repository: "{{repository}}"
                run_id: "{{run_id}}"
            - name: create-bug
              type: call
              call: "jira.create-issue"
              with:
                project_key: "ENG"
                issuetype: "Bug"
                summary: "[CI Failure] {{repository}} / {{branch}}"
                description: "Run ID: {{run_id}}\nCommit: {{commit_sha}}\nURL: {{get-run.html_url}}"
            - name: record-event
              type: call
              call: "datadog.create-event"
              with:
                title: "CI failure: {{repository}} {{branch}}"
                text: "Commit {{commit_sha}} caused pipeline failure. Jira: {{create-bug.key}}"
                alert_type: "error"
            - name: alert-team
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "engineering-alerts"
                message: "CI Failure in {{repository}} on {{branch}}. Jira: {{create-bug.key}}. Run: {{get-run.html_url}}"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: workflow-runs
          path: "/repos/{{repository}}/actions/runs/{{run_id}}"
          inputParameters:
            - name: repository
              in: path
            - name: run_id
              in: path
          operations:
            - name: get-workflow-run
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://qualcomm.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: messages
          path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

When a new GitHub release is tagged, generates release notes from merged pull requests and posts a summary to the product Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "GitHub Release Notes Publisher"
  description: "When a new GitHub release is tagged, generates release notes from merged pull requests and posts a summary to the product Microsoft Teams channel."
  tags:
    - devops
    - engineering
    - github
    - microsoft-teams
    - release-management
capability:
  exposes:
    - type: mcp
      namespace: release-management
      port: 8080
      tools:
        - name: publish-release-notes
          description: "Given a GitHub repository and release tag, fetch the release details and merged PRs, then post a formatted release summary to the product Teams channel."
          inputParameters:
            - name: repository
              in: body
              type: string
              description: "The GitHub repository in owner/repo format."
            - name: release_tag
              in: body
              type: string
              description: "The release tag name (e.g., v2.4.1)."
          steps:
            - name: get-release
              type: call
              call: "github.get-release-by-tag"
              with:
                repository: "{{repository}}"
                tag: "{{release_tag}}"
            - name: post-notes
              type: call
              call: "msteams.post-release-announcement"
              with:
                channel_id: "product-releases"
                message: "Release {{release_tag}} published for {{repository}}. {{get-release.name}}: {{get-release.body}}"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: releases
          path: "/repos/{{repository}}/releases/tags/{{tag}}"
          inputParameters:
            - name: repository
              in: path
            - name: tag
              in: path
          operations:
            - name: get-release-by-tag
              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/{{channel_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-release-announcement
              method: POST

Retrieves the branch protection rules for a specified GitHub repository and branch.

naftiko: "0.5"
info:
  label: "GitHub Repository Branch Protection Lookup"
  description: "Retrieves the branch protection rules for a specified GitHub repository and branch."
  tags:
    - devops
    - github
    - security
capability:
  exposes:
    - type: mcp
      namespace: source-control
      port: 8080
      tools:
        - name: get-branch-protection
          description: "Look up branch protection rules for a GitHub repository branch including required reviewers and status checks."
          inputParameters:
            - name: repo_name
              in: body
              type: string
              description: "The repository name in org/repo format."
            - name: branch
              in: body
              type: string
              description: "The branch name to check protection rules for."
          call: "github.get-branch-protection"
          with:
            repo: "{{repo_name}}"
            branch: "{{branch}}"
          outputParameters:
            - name: required_reviewers
              type: number
              mapping: "$.required_pull_request_reviews.required_approving_review_count"
            - name: enforce_admins
              type: boolean
              mapping: "$.enforce_admins.enabled"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: branch-protection
          path: "/repos/{{repo}}/branches/{{branch}}/protection"
          inputParameters:
            - name: repo
              in: path
            - name: branch
              in: path
          operations:
            - name: get-branch-protection
              method: GET

When a GitHub Dependabot alert is raised, creates a Jira security ticket and notifies the security team in Microsoft Teams with severity and remediation guidance.

naftiko: "0.5"
info:
  label: "GitHub Security Vulnerability Triage"
  description: "When a GitHub Dependabot alert is raised, creates a Jira security ticket and notifies the security team in Microsoft Teams with severity and remediation guidance."
  tags:
    - security
    - devops
    - github
    - jira
    - microsoft-teams
    - vulnerability-management
capability:
  exposes:
    - type: mcp
      namespace: security-ops
      port: 8080
      tools:
        - name: triage-vulnerability-alert
          description: "Given a GitHub Dependabot vulnerability alert, create a Jira security ticket with severity and CVE details, and notify the security team in Teams."
          inputParameters:
            - name: repository
              in: body
              type: string
              description: "The GitHub repository name in owner/repo format."
            - name: alert_number
              in: body
              type: integer
              description: "The Dependabot alert number."
          steps:
            - name: get-alert
              type: call
              call: "github.get-dependabot-alert"
              with:
                repository: "{{repository}}"
                alert_number: "{{alert_number}}"
            - name: create-ticket
              type: call
              call: "jira.create-security-ticket"
              with:
                project_key: "SEC"
                issuetype: "Security"
                summary: "[Vuln] {{get-alert.dependency_name}} in {{repository}}"
                description: "CVE: {{get-alert.cve_id}}\nSeverity: {{get-alert.severity}}\nPackage: {{get-alert.dependency_name}}@{{get-alert.vulnerable_version_range}}"
            - name: notify-security
              type: call
              call: "msteams.post-security-alert"
              with:
                channel_id: "security-alerts"
                message: "Vulnerability alert: {{get-alert.cve_id}} ({{get-alert.severity}}) in {{repository}}. Jira: {{create-ticket.key}}"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: dependabot-alerts
          path: "/repos/{{repository}}/dependabot/alerts/{{alert_number}}"
          inputParameters:
            - name: repository
              in: path
            - name: alert_number
              in: path
          operations:
            - name: get-dependabot-alert
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://qualcomm.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-security-ticket
              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/{{channel_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-security-alert
              method: POST

Generates incident postmortems by pulling timeline data from ServiceNow, collecting metrics from Datadog, and publishing the postmortem document to Confluence.

naftiko: "0.5"
info:
  label: "Incident Postmortem Generation Orchestrator"
  description: "Generates incident postmortems by pulling timeline data from ServiceNow, collecting metrics from Datadog, and publishing the postmortem document to Confluence."
  tags:
    - itsm
    - servicenow
    - datadog
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: incident-mgmt
      port: 8080
      tools:
        - name: generate-postmortem
          description: "Orchestrate incident postmortem generation across ServiceNow, Datadog, and Confluence."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "The ServiceNow incident number."
          steps:
            - name: get-incident-timeline
              type: call
              call: "servicenow.get-incident"
              with:
                incident_number: "{{incident_number}}"
            - name: get-impact-metrics
              type: call
              call: "datadog.query-metrics"
              with:
                query: "avg:service.errors{incident:{{incident_number}}}"
            - name: publish-postmortem
              type: call
              call: "confluence.create-page"
              with:
                space: "SRE"
                title: "Postmortem: {{incident_number}} - {{get-incident-timeline.short_description}}"
                body: "Incident: {{get-incident-timeline.short_description}}. Duration: {{get-incident-timeline.duration}}. Impact: {{get-impact-metrics.error_count}} errors. Root cause analysis pending."
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://qualcomm.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident?sysparm_query=number={{incident_number}}"
          inputParameters:
            - name: incident_number
              in: query
          operations:
            - name: get-incident
              method: GET
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.datadog_api_key"
        headerName: "DD-API-KEY"
      resources:
        - name: metrics
          path: "/query"
          operations:
            - name: query-metrics
              method: GET
    - type: http
      namespace: confluence
      baseUri: "https://qualcomm.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: create-page
              method: POST

Retires IT assets by updating the ServiceNow CMDB, revoking Okta access tied to the device, and creating an SAP asset disposal record.

naftiko: "0.5"
info:
  label: "IT Asset Lifecycle Retirement Orchestrator"
  description: "Retires IT assets by updating the ServiceNow CMDB, revoking Okta access tied to the device, and creating an SAP asset disposal record."
  tags:
    - itsm
    - servicenow
    - okta
    - sap
capability:
  exposes:
    - type: mcp
      namespace: asset-mgmt
      port: 8080
      tools:
        - name: retire-it-asset
          description: "Orchestrate IT asset retirement across ServiceNow, Okta, and SAP."
          inputParameters:
            - name: asset_tag
              in: body
              type: string
              description: "The IT asset tag number."
          steps:
            - name: get-asset-details
              type: call
              call: "servicenow.get-ci"
              with:
                asset_tag: "{{asset_tag}}"
            - name: revoke-device-access
              type: call
              call: "okta.deactivate-device"
              with:
                device_id: "{{get-asset-details.device_id}}"
            - name: create-disposal-record
              type: call
              call: "sap.create-asset-disposal"
              with:
                asset_number: "{{get-asset-details.sap_asset_number}}"
                disposal_date: "{{today}}"
            - name: update-cmdb
              type: call
              call: "servicenow.update-ci"
              with:
                sys_id: "{{get-asset-details.sys_id}}"
                install_status: "retired"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://qualcomm.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: cmdb
          path: "/table/cmdb_ci?sysparm_query=asset_tag={{asset_tag}}"
          inputParameters:
            - name: asset_tag
              in: query
          operations:
            - name: get-ci
              method: GET
            - name: update-ci
              method: PATCH
    - type: http
      namespace: okta
      baseUri: "https://qualcomm.okta.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.okta_token"
      resources:
        - name: devices
          path: "/devices/{{device_id}}/lifecycle/deactivate"
          inputParameters:
            - name: device_id
              in: path
          operations:
            - name: deactivate-device
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://qualcomm-s4.sap.com/sap/opu/odata/sap/API_FIXEDASSET_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: asset-disposal
          path: "/A_FixedAssetRetirement"
          operations:
            - name: create-asset-disposal
              method: POST

Generates a weekly digest of unestimated Jira backlog items and items blocked for more than five days, posted to the team's Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Jira Backlog Grooming Digest"
  description: "Generates a weekly digest of unestimated Jira backlog items and items blocked for more than five days, posted to the team's Microsoft Teams channel."
  tags:
    - devops
    - engineering
    - jira
    - microsoft-teams
    - backlog-management
capability:
  exposes:
    - type: mcp
      namespace: backlog-ops
      port: 8080
      tools:
        - name: digest-backlog-health
          description: "Given a Jira project key, fetch unestimated and long-blocked backlog items and post a weekly health digest to the team's Teams channel."
          inputParameters:
            - name: project_key
              in: body
              type: string
              description: "The Jira project key (e.g., CHIP, PLATFORM)."
            - name: channel_id
              in: body
              type: string
              description: "Microsoft Teams channel ID to post the digest to."
          steps:
            - name: get-unestimated
              type: call
              call: "jira.query-unestimated-backlog"
              with:
                project_key: "{{project_key}}"
            - name: post-digest
              type: call
              call: "msteams.post-backlog-digest"
              with:
                channel_id: "{{channel_id}}"
                message: "Backlog digest for {{project_key}}: {{get-unestimated.count}} unestimated issues need attention."
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://qualcomm.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issue-search
          path: "/search"
          operations:
            - name: query-unestimated-backlog
              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/{{channel_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-backlog-digest
              method: POST

Retrieves details for a Jira issue including status, assignee, priority, and story points.

naftiko: "0.5"
info:
  label: "Jira Issue Details Lookup"
  description: "Retrieves details for a Jira issue including status, assignee, priority, and story points."
  tags:
    - project-management
    - jira
    - agile
capability:
  exposes:
    - type: mcp
      namespace: project-mgmt
      port: 8080
      tools:
        - name: get-issue-details
          description: "Look up a Jira issue by key and return its status, assignee, priority, and story points."
          inputParameters:
            - name: issue_key
              in: body
              type: string
              description: "The Jira issue key (e.g., CHIP-1234)."
          call: "jira.get-issue"
          with:
            issue_key: "{{issue_key}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.fields.status.name"
            - name: assignee
              type: string
              mapping: "$.fields.assignee.displayName"
            - name: priority
              type: string
              mapping: "$.fields.priority.name"
            - name: story_points
              type: number
              mapping: "$.fields.customfield_10028"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://qualcomm.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue/{{issue_key}}"
          inputParameters:
            - name: issue_key
              in: path
          operations:
            - name: get-issue
              method: GET

At the end of each sprint, fetches completed Jira issues, calculates velocity, and publishes a summary to the engineering Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Jira Sprint Velocity Report"
  description: "At the end of each sprint, fetches completed Jira issues, calculates velocity, and publishes a summary to the engineering Microsoft Teams channel."
  tags:
    - devops
    - engineering
    - jira
    - microsoft-teams
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: engineering-reporting
      port: 8080
      tools:
        - name: publish-sprint-velocity
          description: "Given a Jira project key and sprint ID, retrieve completed issues, compute story point velocity, and post a sprint report to the engineering Teams channel."
          inputParameters:
            - name: project_key
              in: body
              type: string
              description: "The Jira project key (e.g., CHIP, PLATFORM)."
            - name: sprint_id
              in: body
              type: integer
              description: "The Jira sprint ID to report on."
          steps:
            - name: get-sprint-issues
              type: call
              call: "jira.get-sprint-issues"
              with:
                sprint_id: "{{sprint_id}}"
                project_key: "{{project_key}}"
            - name: post-report
              type: call
              call: "msteams.post-sprint-report"
              with:
                channel_id: "engineering-team"
                message: "Sprint {{sprint_id}} complete. Velocity: {{get-sprint-issues.story_points}} pts across {{get-sprint-issues.issue_count}} issues."
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://qualcomm.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: sprint-issues
          path: "/search"
          operations:
            - name: get-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/{{channel_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-sprint-report
              method: POST

Reserves lab equipment for chip testing by checking availability in ServiceNow CMDB, creating a reservation in the scheduling system, and confirming via Teams.

naftiko: "0.5"
info:
  label: "Lab Equipment Reservation Orchestrator"
  description: "Reserves lab equipment for chip testing by checking availability in ServiceNow CMDB, creating a reservation in the scheduling system, and confirming via Teams."
  tags:
    - chip-design
    - manufacturing
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: lab-mgmt
      port: 8080
      tools:
        - name: reserve-lab-equipment
          description: "Orchestrate lab equipment reservation across ServiceNow and Teams."
          inputParameters:
            - name: equipment_type
              in: body
              type: string
              description: "Type of lab equipment needed."
            - name: requestor_email
              in: body
              type: string
              description: "Email of the requesting engineer."
            - name: date
              in: body
              type: string
              description: "Reservation date in YYYY-MM-DD format."
          steps:
            - name: check-availability
              type: call
              call: "servicenow.search-ci"
              with:
                type: "{{equipment_type}}"
                status: "available"
            - name: create-reservation
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Lab equipment reservation: {{equipment_type}} on {{date}}"
                category: "lab_reservation"
                caller_id: "{{requestor_email}}"
            - name: confirm-reservation
              type: call
              call: "msteams.send-message"
              with:
                recipient: "{{requestor_email}}"
                message: "Lab reservation confirmed: {{equipment_type}} on {{date}}. Equipment: {{check-availability.name}}. Ticket: {{create-reservation.number}}."
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://qualcomm.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: cmdb
          path: "/table/cmdb_ci?sysparm_query=type={{type}}^install_status={{status}}"
          inputParameters:
            - name: type
              in: query
            - name: status
              in: query
          operations:
            - name: search-ci
              method: GET
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient}}/sendMail"
          inputParameters:
            - name: recipient
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves the current follower count and follower demographics for the Qualcomm LinkedIn company page.

naftiko: "0.5"
info:
  label: "LinkedIn Company Follower Count Lookup"
  description: "Retrieves the current follower count and follower demographics for the Qualcomm LinkedIn company page."
  tags:
    - marketing
    - linkedin
    - social-media
capability:
  exposes:
    - type: mcp
      namespace: social
      port: 8080
      tools:
        - name: get-follower-stats
          description: "Retrieve follower count and growth statistics for the Qualcomm LinkedIn company page."
          inputParameters:
            - name: time_range
              in: body
              type: string
              description: "Time range for follower growth data (e.g., last_30_days)."
          call: "linkedin.get-follower-statistics"
          with:
            organization_id: "qualcomm"
          outputParameters:
            - name: total_followers
              type: number
              mapping: "$.elements[0].followerCounts.organicFollowerCount"
            - name: paid_followers
              type: number
              mapping: "$.elements[0].followerCounts.paidFollowerCount"
  consumes:
    - type: http
      namespace: linkedin
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: follower-statistics
          path: "/organizationalEntityFollowerStatistics?q=organizationalEntity&organizationalEntity=urn:li:organization:qualcomm"
          operations:
            - name: get-follower-statistics
              method: GET

Searches LinkedIn for candidates matching a job requisition, imports matches into Workday Recruiting, and schedules a Teams interview for top candidates.

naftiko: "0.5"
info:
  label: "LinkedIn Talent Sourcing Pipeline"
  description: "Searches LinkedIn for candidates matching a job requisition, imports matches into Workday Recruiting, and schedules a Teams interview for top candidates."
  tags:
    - hr
    - recruiting
    - linkedin
    - workday
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: talent-acquisition
      port: 8080
      tools:
        - name: source-candidates
          description: "Given a Workday job requisition ID, search LinkedIn for matching candidates, create candidate profiles in Workday Recruiting, and notify the recruiter in Teams."
          inputParameters:
            - name: requisition_id
              in: body
              type: string
              description: "The Workday job requisition ID."
            - name: recruiter_email
              in: body
              type: string
              description: "Email of the recruiter to notify."
          steps:
            - name: get-requisition
              type: call
              call: "workday.get-job-requisition"
              with:
                requisition_id: "{{requisition_id}}"
            - name: search-candidates
              type: call
              call: "linkedin.search-people"
              with:
                keywords: "{{get-requisition.title}}"
                location: "{{get-requisition.location}}"
            - name: notify-recruiter
              type: call
              call: "msteams.send-recruiter-message"
              with:
                recipient: "{{recruiter_email}}"
                message: "Found {{search-candidates.count}} LinkedIn candidates for requisition {{requisition_id}}: {{get-requisition.title}}."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: job-requisitions
          path: "/qualcomm/jobRequisitions/{{requisition_id}}"
          inputParameters:
            - name: requisition_id
              in: path
          operations:
            - name: get-job-requisition
              method: GET
    - type: http
      namespace: linkedin
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: people-search
          path: "/people"
          operations:
            - name: search-people
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient}}/sendMail"
          inputParameters:
            - name: recipient
              in: path
          operations:
            - name: send-recruiter-message
              method: POST

Schedules preventive maintenance for fab equipment by checking SAP plant maintenance records, creating a ServiceNow work order, and notifying the maintenance team via Teams.

naftiko: "0.5"
info:
  label: "Manufacturing Equipment Maintenance Orchestrator"
  description: "Schedules preventive maintenance for fab equipment by checking SAP plant maintenance records, creating a ServiceNow work order, and notifying the maintenance team via Teams."
  tags:
    - manufacturing
    - sap
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: plant-maintenance
      port: 8080
      tools:
        - name: schedule-equipment-maintenance
          description: "Orchestrate equipment maintenance scheduling across SAP, ServiceNow, and Teams."
          inputParameters:
            - name: equipment_id
              in: body
              type: string
              description: "The SAP equipment ID."
          steps:
            - name: get-maintenance-schedule
              type: call
              call: "sap.get-maintenance-plan"
              with:
                equipment_id: "{{equipment_id}}"
            - name: create-work-order
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "PM due: Equipment {{equipment_id}}"
                category: "plant_maintenance"
                description: "Next PM due: {{get-maintenance-schedule.next_due_date}}"
            - name: notify-maintenance
              type: call
              call: "msteams.send-message"
              with:
                channel: "fab-maintenance"
                message: "PM scheduled for equipment {{equipment_id}}. Due: {{get-maintenance-schedule.next_due_date}}. Work order: {{create-work-order.number}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://qualcomm-s4.sap.com/sap/opu/odata/sap/API_MAINTENANCE_ORDER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: maintenance-plans
          path: "/A_MaintenancePlan?$filter=Equipment eq '{{equipment_id}}'"
          inputParameters:
            - name: equipment_id
              in: query
          operations:
            - name: get-maintenance-plan
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://qualcomm.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/fab-maintenance/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Analyzes marketing campaign ROI by pulling campaign spend from SAP, lead conversion data from Salesforce, and publishing results to a Power BI dashboard.

naftiko: "0.5"
info:
  label: "Marketing Campaign ROI Analysis Orchestrator"
  description: "Analyzes marketing campaign ROI by pulling campaign spend from SAP, lead conversion data from Salesforce, and publishing results to a Power BI dashboard."
  tags:
    - marketing
    - sap
    - salesforce
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: marketing-analytics
      port: 8080
      tools:
        - name: analyze-campaign-roi
          description: "Orchestrate campaign ROI analysis across SAP, Salesforce, and Power BI."
          inputParameters:
            - name: campaign_id
              in: body
              type: string
              description: "The Salesforce campaign ID."
          steps:
            - name: get-campaign-details
              type: call
              call: "salesforce.get-campaign"
              with:
                campaign_id: "{{campaign_id}}"
            - name: get-lead-conversions
              type: call
              call: "salesforce.query"
              with:
                soql: "SELECT COUNT(Id) converted FROM Lead WHERE ConvertedDate != null AND Campaign_Source__c = '{{campaign_id}}'"
            - name: refresh-roi-dashboard
              type: call
              call: "powerbi.trigger-refresh"
              with:
                dataset_id: "marketing-roi-dataset"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://qualcomm.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: campaigns
          path: "/sobjects/Campaign/{{campaign_id}}"
          inputParameters:
            - name: campaign_id
              in: path
          operations:
            - name: get-campaign
              method: GET
        - name: query
          path: "/query"
          operations:
            - name: query
              method: GET
    - 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"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: trigger-refresh
              method: POST

Retrieves recent messages from a specified Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Microsoft Teams Channel Message Lookup"
  description: "Retrieves recent messages from a specified Microsoft Teams channel."
  tags:
    - collaboration
    - microsoft-teams
    - messaging
capability:
  exposes:
    - type: mcp
      namespace: messaging
      port: 8080
      tools:
        - name: get-channel-messages
          description: "Retrieve the last 10 messages from a Microsoft Teams channel."
          inputParameters:
            - name: team_id
              in: body
              type: string
              description: "The Microsoft Teams team ID."
            - name: channel_id
              in: body
              type: string
              description: "The Microsoft Teams channel ID."
          call: "msteams.get-messages"
          with:
            team_id: "{{team_id}}"
            channel_id: "{{channel_id}}"
          outputParameters:
            - name: messages
              type: array
              mapping: "$.value[*].body.content"
  consumes:
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages?$top=10"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: get-messages
              method: GET

Kicks off a new product introduction by creating a project in Jira, setting up a SAP material master, and scheduling a kickoff meeting via Zoom with the cross-functional team.

naftiko: "0.5"
info:
  label: "New Product Introduction Kickoff Orchestrator"
  description: "Kicks off a new product introduction by creating a project in Jira, setting up a SAP material master, and scheduling a kickoff meeting via Zoom with the cross-functional team."
  tags:
    - product-lifecycle
    - jira
    - sap
    - zoom
capability:
  exposes:
    - type: mcp
      namespace: npi
      port: 8080
      tools:
        - name: kickoff-npi
          description: "Orchestrate NPI kickoff across Jira, SAP, and Zoom."
          inputParameters:
            - name: product_name
              in: body
              type: string
              description: "The new product name."
            - name: product_code
              in: body
              type: string
              description: "The product code for SAP material master."
            - name: team_emails
              in: body
              type: string
              description: "Comma-separated list of team member emails."
          steps:
            - name: create-project
              type: call
              call: "jira.create-issue"
              with:
                project: "NPI"
                summary: "NPI: {{product_name}}"
                issue_type: "Epic"
                description: "New Product Introduction for {{product_name}} ({{product_code}})"
            - name: create-material-master
              type: call
              call: "sap.create-material"
              with:
                material_number: "{{product_code}}"
                description: "{{product_name}}"
                material_type: "CHIP"
            - name: schedule-kickoff
              type: call
              call: "zoom.create-meeting"
              with:
                topic: "NPI Kickoff: {{product_name}}"
                invitees: "{{team_emails}}"
                duration: 60
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://qualcomm.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: sap
      baseUri: "https://qualcomm-s4.sap.com/sap/opu/odata/sap/API_PRODUCT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: materials
          path: "/A_Product"
          operations:
            - name: create-material
              method: POST
    - type: http
      namespace: zoom
      baseUri: "https://api.zoom.us/v2"
      authentication:
        type: bearer
        token: "$secrets.zoom_token"
      resources:
        - name: meetings
          path: "/users/me/meetings"
          operations:
            - name: create-meeting
              method: POST

When a new design win is registered, creates a Salesforce opportunity, provisions a support ticket in ServiceNow, and notifies the product management team via Teams.

naftiko: "0.5"
info:
  label: "OEM Customer Design Win Orchestrator"
  description: "When a new design win is registered, creates a Salesforce opportunity, provisions a support ticket in ServiceNow, and notifies the product management team via Teams."
  tags:
    - sales
    - salesforce
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: design-wins
      port: 8080
      tools:
        - name: register-design-win
          description: "Orchestrate design win registration across Salesforce, ServiceNow, and Teams."
          inputParameters:
            - name: customer_name
              in: body
              type: string
              description: "The OEM customer name."
            - name: chipset
              in: body
              type: string
              description: "The Qualcomm chipset selected."
            - name: estimated_volume
              in: body
              type: number
              description: "Estimated annual unit volume."
          steps:
            - name: create-opportunity
              type: call
              call: "salesforce.create-opportunity"
              with:
                name: "Design Win: {{customer_name}} - {{chipset}}"
                stage: "Design Win"
                amount: "{{estimated_volume}}"
            - name: create-support-engagement
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Design Win Support: {{customer_name}} - {{chipset}}"
                category: "customer_engineering"
                priority: "2"
            - name: notify-product-team
              type: call
              call: "msteams.send-message"
              with:
                channel: "product-management"
                message: "New Design Win: {{customer_name}} selected {{chipset}}. Volume: {{estimated_volume}} units. SF: {{create-opportunity.id}}, SN: {{create-support-engagement.number}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://qualcomm.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity"
          operations:
            - name: create-opportunity
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://qualcomm.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/product-management/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Scans Okta for users without MFA enrolled and sends a compliance warning via Microsoft Teams, with automatic suspension after the grace period.

naftiko: "0.5"
info:
  label: "Okta MFA Compliance Enforcement"
  description: "Scans Okta for users without MFA enrolled and sends a compliance warning via Microsoft Teams, with automatic suspension after the grace period."
  tags:
    - security
    - identity
    - okta
    - microsoft-teams
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: mfa-compliance
      port: 8080
      tools:
        - name: enforce-mfa-compliance
          description: "Query Okta for active users without MFA enrolled, send each a Teams warning message, and return the list of non-compliant users for escalation."
          inputParameters:
            - name: grace_days
              in: body
              type: integer
              description: "Number of days before automatic account suspension for non-compliant users."
          steps:
            - name: get-non-mfa-users
              type: call
              call: "okta.list-users-without-mfa"
              with:
                status: "ACTIVE"
            - name: send-warnings
              type: call
              call: "msteams.broadcast-mfa-warning"
              with:
                channel_id: "security-compliance"
                message: "{{get-non-mfa-users.count}} users have not enrolled in MFA. Grace period: {{grace_days}} days before suspension."
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://qualcomm.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: users
          path: "/users"
          operations:
            - name: list-users-without-mfa
              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/{{channel_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: broadcast-mfa-warning
              method: POST

When a suspicious login is detected in Okta, suspends the user session, creates a ServiceNow security incident, and alerts the SOC team via Teams.

naftiko: "0.5"
info:
  label: "Okta Suspicious Login Response Orchestrator"
  description: "When a suspicious login is detected in Okta, suspends the user session, creates a ServiceNow security incident, and alerts the SOC team via Teams."
  tags:
    - security
    - okta
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: soc
      port: 8080
      tools:
        - name: respond-to-suspicious-login
          description: "Orchestrate suspicious login response across Okta, ServiceNow, and Teams."
          inputParameters:
            - name: user_email
              in: body
              type: string
              description: "The email of the user with suspicious login."
            - name: login_details
              in: body
              type: string
              description: "Details of the suspicious login event."
          steps:
            - name: suspend-session
              type: call
              call: "okta.clear-user-sessions"
              with:
                user_id: "{{user_email}}"
            - name: create-security-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Suspicious login: {{user_email}}"
                category: "security"
                priority: "1"
                description: "{{login_details}}"
            - name: alert-soc
              type: call
              call: "msteams.send-message"
              with:
                channel: "soc-alerts"
                message: "Suspicious login detected for {{user_email}}. Session cleared. Incident: {{create-security-incident.number}}. Details: {{login_details}}."
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://qualcomm.okta.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.okta_token"
      resources:
        - name: user-sessions
          path: "/users/{{user_id}}/sessions"
          inputParameters:
            - name: user_id
              in: path
          operations:
            - name: clear-user-sessions
              method: DELETE
    - type: http
      namespace: servicenow
      baseUri: "https://qualcomm.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/soc-alerts/channels/general/messages"
          operations:
            - name: send-message
              method: POST

When a new employee is added to a Workday security group, provisions the corresponding application access in Okta and logs the action in ServiceNow.

naftiko: "0.5"
info:
  label: "Okta User Access Provisioning"
  description: "When a new employee is added to a Workday security group, provisions the corresponding application access in Okta and logs the action in ServiceNow."
  tags:
    - identity
    - security
    - okta
    - workday
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: identity-provisioning
      port: 8080
      tools:
        - name: provision-user-access
          description: "Given a Workday employee ID and target application group, assign the Okta group membership and log the provisioning event in ServiceNow."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "Workday worker ID of the employee."
            - name: okta_group_id
              in: body
              type: string
              description: "The Okta group ID corresponding to the application to provision."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{employee_id}}"
            - name: assign-group
              type: call
              call: "okta.add-user-to-group"
              with:
                user_id: "{{get-employee.okta_user_id}}"
                group_id: "{{okta_group_id}}"
            - name: log-provision
              type: call
              call: "servicenow.create-access-log"
              with:
                short_description: "Access provisioned for {{get-employee.full_name}} to group {{okta_group_id}}"
                category: "access_management"
  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: "/qualcomm/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: okta
      baseUri: "https://qualcomm.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: group-members
          path: "/groups/{{group_id}}/users/{{user_id}}"
          inputParameters:
            - name: group_id
              in: path
            - name: user_id
              in: path
          operations:
            - name: add-user-to-group
              method: PUT
    - type: http
      namespace: servicenow
      baseUri: "https://qualcomm.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-access-log
              method: POST

Retrieves all group memberships for a specified Okta user by their email address.

naftiko: "0.5"
info:
  label: "Okta User Group Membership Lookup"
  description: "Retrieves all group memberships for a specified Okta user by their email address."
  tags:
    - identity
    - okta
    - access-management
capability:
  exposes:
    - type: mcp
      namespace: identity
      port: 8080
      tools:
        - name: get-user-groups
          description: "Look up all Okta groups assigned to a user by email address."
          inputParameters:
            - name: user_email
              in: body
              type: string
              description: "The email address of the Okta user."
          call: "okta.get-user-groups"
          with:
            user_id: "{{user_email}}"
          outputParameters:
            - name: groups
              type: array
              mapping: "$[*].profile.name"
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://qualcomm.okta.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.okta_token"
      resources:
        - name: user-groups
          path: "/users/{{user_id}}/groups"
          inputParameters:
            - name: user_id
              in: path
          operations:
            - name: get-user-groups
              method: GET

Fetches current firewall security policy rules from Palo Alto Networks, identifies overly permissive rules, and opens a Jira remediation ticket for each violation.

naftiko: "0.5"
info:
  label: "Palo Alto Networks Firewall Rule Audit"
  description: "Fetches current firewall security policy rules from Palo Alto Networks, identifies overly permissive rules, and opens a Jira remediation ticket for each violation."
  tags:
    - security
    - network
    - palo-alto-networks
    - jira
    - audit
capability:
  exposes:
    - type: mcp
      namespace: network-security
      port: 8080
      tools:
        - name: audit-firewall-rules
          description: "Query Palo Alto Networks for all security policy rules, detect any allow-all or overly broad rules, and create a Jira ticket for each violation found."
          inputParameters:
            - name: device_group
              in: body
              type: string
              description: "The Palo Alto Networks device group to audit."
          steps:
            - name: get-rules
              type: call
              call: "paloalto.get-security-rules"
              with:
                device_group: "{{device_group}}"
            - name: create-remediation
              type: call
              call: "jira.create-security-remediation"
              with:
                project_key: "SEC"
                issuetype: "Task"
                summary: "Firewall rule audit violations in {{device_group}}"
                description: "Audit found {{get-rules.violation_count}} overly permissive rules in device group {{device_group}}."
  consumes:
    - type: http
      namespace: paloalto
      baseUri: "https://qualcomm-panorama.paloaltonetworks.com/restapi/v10.1"
      authentication:
        type: apikey
        key: "X-PAN-KEY"
        value: "$secrets.paloalto_api_key"
        placement: header
      resources:
        - name: security-rules
          path: "/Objects/SecurityRules"
          operations:
            - name: get-security-rules
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://qualcomm.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-security-remediation
              method: POST

Queries Palo Alto Networks firewall threat logs for a specified source IP over the last 24 hours.

naftiko: "0.5"
info:
  label: "Palo Alto Networks Threat Log Lookup"
  description: "Queries Palo Alto Networks firewall threat logs for a specified source IP over the last 24 hours."
  tags:
    - security
    - palo-alto-networks
    - threat-detection
capability:
  exposes:
    - type: mcp
      namespace: security
      port: 8080
      tools:
        - name: get-threat-logs
          description: "Retrieve threat log entries from Palo Alto Networks for a given source IP in the last 24 hours."
          inputParameters:
            - name: source_ip
              in: body
              type: string
              description: "The source IP address to query threat logs for."
          call: "paloalto.query-threat-logs"
          with:
            source_ip: "{{source_ip}}"
          outputParameters:
            - name: threat_count
              type: number
              mapping: "$.result.log.logs.@count"
            - name: entries
              type: array
              mapping: "$.result.log.logs.entry"
  consumes:
    - type: http
      namespace: paloalto
      baseUri: "https://qualcomm-fw.panw.com/api"
      authentication:
        type: apiKey
        key: "$secrets.paloalto_api_key"
        headerName: "X-PAN-KEY"
      resources:
        - name: threat-logs
          path: "/log?type=threat&query=(addr.src in {{source_ip}})"
          inputParameters:
            - name: source_ip
              in: query
          operations:
            - name: query-threat-logs
              method: GET

Orchestrates the patent filing process by retrieving invention disclosure from SharePoint, creating a tracking ticket in Jira, and notifying the IP legal team via Teams.

naftiko: "0.5"
info:
  label: "Patent Filing Workflow Orchestrator"
  description: "Orchestrates the patent filing process by retrieving invention disclosure from SharePoint, creating a tracking ticket in Jira, and notifying the IP legal team via Teams."
  tags:
    - product-lifecycle
    - sharepoint
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: ip-management
      port: 8080
      tools:
        - name: initiate-patent-filing
          description: "Orchestrate patent filing workflow across SharePoint, Jira, and Teams."
          inputParameters:
            - name: disclosure_id
              in: body
              type: string
              description: "The invention disclosure document ID in SharePoint."
          steps:
            - name: get-disclosure
              type: call
              call: "sharepoint.get-document"
              with:
                document_id: "{{disclosure_id}}"
            - name: create-tracking-ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "PATENT"
                summary: "Patent Filing: {{get-disclosure.title}}"
                issue_type: "Task"
                description: "Invention disclosure: {{get-disclosure.title}} by {{get-disclosure.author}}"
            - name: notify-legal
              type: call
              call: "msteams.send-message"
              with:
                channel: "ip-legal"
                message: "New patent filing initiated: {{get-disclosure.title}}. Jira ticket: {{create-tracking-ticket.key}}."
  consumes:
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites/qualcomm.sharepoint.com"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: documents
          path: "/drive/items/{{document_id}}"
          inputParameters:
            - name: document_id
              in: path
          operations:
            - name: get-document
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://qualcomm.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/ip-legal/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Retrieves current headcount by department and cost center from Workday for use in financial planning and workforce analytics.

naftiko: "0.5"
info:
  label: "Payroll Headcount Snapshot"
  description: "Retrieves current headcount by department and cost center from Workday for use in financial planning and workforce analytics."
  tags:
    - hr
    - finance
    - payroll
    - workday
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: hr-finance
      port: 8080
      tools:
        - name: get-headcount-by-department
          description: "Returns a list of active employees grouped by department and cost center from Workday. Use for headcount planning, budget allocation, and workforce analytics."
          call: "workday.headcount-export"
          outputParameters:
            - name: employees
              type: array
              mapping: "$.data"
  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-export
          path: "/qualcomm/workers"
          operations:
            - name: headcount-export
              method: GET

Checks the last refresh status and timestamp for a Power BI dataset.

naftiko: "0.5"
info:
  label: "Power BI Dataset Refresh Status Lookup"
  description: "Checks the last refresh status and timestamp for a Power BI dataset."
  tags:
    - analytics
    - power-bi
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: bi
      port: 8080
      tools:
        - name: get-dataset-refresh-status
          description: "Retrieve the last refresh status and end time for a Power BI dataset."
          inputParameters:
            - name: dataset_id
              in: body
              type: string
              description: "The Power BI dataset ID."
          call: "powerbi.get-refresh-history"
          with:
            dataset_id: "{{dataset_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.value[0].status"
            - name: end_time
              type: string
              mapping: "$.value[0].endTime"
  consumes:
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: dataset-refreshes
          path: "/datasets/{{dataset_id}}/refreshes?$top=1"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: get-refresh-history
              method: GET

Triggers a Power BI dataset refresh on a scheduled basis and notifies the analytics team in Microsoft Teams with refresh status.

naftiko: "0.5"
info:
  label: "Power BI Report Refresh Trigger"
  description: "Triggers a Power BI dataset refresh on a scheduled basis and notifies the analytics team in Microsoft Teams with refresh status."
  tags:
    - data
    - analytics
    - power-bi
    - microsoft-teams
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: analytics-reporting
      port: 8080
      tools:
        - name: trigger-report-refresh
          description: "Given a Power BI workspace ID and dataset ID, trigger a dataset refresh and post the status to the analytics Teams channel."
          inputParameters:
            - name: workspace_id
              in: body
              type: string
              description: "The Power BI workspace (group) ID."
            - name: dataset_id
              in: body
              type: string
              description: "The Power BI dataset ID to refresh."
          steps:
            - name: refresh-dataset
              type: call
              call: "powerbi.trigger-refresh"
              with:
                workspace_id: "{{workspace_id}}"
                dataset_id: "{{dataset_id}}"
            - name: notify-team
              type: call
              call: "msteams.post-refresh-status"
              with:
                channel_id: "analytics-team"
                message: "Power BI dataset {{dataset_id}} refresh triggered in workspace {{workspace_id}}. Status: {{refresh-dataset.status}}"
  consumes:
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: workspace_id
              in: path
            - name: dataset_id
              in: path
          operations:
            - name: trigger-refresh
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-refresh-status
              method: POST

When a chipset reaches end-of-life, retrieves affected customer accounts from Salesforce, generates a last-buy notification, and updates the product status in SAP.

naftiko: "0.5"
info:
  label: "Product End-of-Life Notification Orchestrator"
  description: "When a chipset reaches end-of-life, retrieves affected customer accounts from Salesforce, generates a last-buy notification, and updates the product status in SAP."
  tags:
    - product-lifecycle
    - salesforce
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: product-lifecycle
      port: 8080
      tools:
        - name: process-eol-notification
          description: "Orchestrate product EOL notification across Salesforce, SAP, and Teams."
          inputParameters:
            - name: product_id
              in: body
              type: string
              description: "The chipset product ID being discontinued."
            - name: last_buy_date
              in: body
              type: string
              description: "The last-buy date in YYYY-MM-DD format."
          steps:
            - name: get-affected-customers
              type: call
              call: "salesforce.query"
              with:
                soql: "SELECT Account.Name, Account.Id FROM OpportunityLineItem WHERE Product2.ProductCode = '{{product_id}}' AND Opportunity.IsClosed = false"
            - name: update-sap-status
              type: call
              call: "sap.update-material-status"
              with:
                material: "{{product_id}}"
                status: "EOL"
                last_buy_date: "{{last_buy_date}}"
            - name: notify-sales
              type: call
              call: "msteams.send-message"
              with:
                channel: "sales-operations"
                message: "EOL Notice: Product {{product_id}} discontinued. Last buy: {{last_buy_date}}. Affected accounts: {{get-affected-customers.totalSize}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://qualcomm.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: query
          path: "/query"
          operations:
            - name: query
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://qualcomm-s4.sap.com/sap/opu/odata/sap/API_PRODUCT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: materials
          path: "/A_Product('{{material}}')"
          inputParameters:
            - name: material
              in: path
          operations:
            - name: update-material-status
              method: PATCH
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/sales-operations/channels/general/messages"
          operations:
            - name: send-message
              method: POST

When production yield drops below threshold, pulls yield data from Snowflake, creates an engineering review in Jira, and alerts the process engineering team via Teams.

naftiko: "0.5"
info:
  label: "Production Yield Alert to Engineering Review"
  description: "When production yield drops below threshold, pulls yield data from Snowflake, creates an engineering review in Jira, and alerts the process engineering team via Teams."
  tags:
    - manufacturing
    - snowflake
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: yield-management
      port: 8080
      tools:
        - name: handle-yield-alert
          description: "Orchestrate yield alert response across Snowflake, Jira, and Teams."
          inputParameters:
            - name: product_line
              in: body
              type: string
              description: "The product line experiencing yield drop."
            - name: current_yield
              in: body
              type: number
              description: "The current yield percentage."
          steps:
            - name: get-yield-trend
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "SELECT date, yield_pct FROM production_yield WHERE product_line = '{{product_line}}' ORDER BY date DESC LIMIT 30"
            - name: create-review
              type: call
              call: "jira.create-issue"
              with:
                project: "FABENG"
                summary: "Yield Alert: {{product_line}} at {{current_yield}}%"
                issue_type: "Task"
                priority: "High"
            - name: alert-engineering
              type: call
              call: "msteams.send-message"
              with:
                channel: "process-engineering"
                message: "Yield Alert: {{product_line}} dropped to {{current_yield}}%. 30-day trend attached. Review: {{create-review.key}}."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://qualcomm.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://qualcomm.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/process-engineering/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Conducts quarterly access reviews by pulling user entitlements from Okta, comparing against roles in Workday, and generating a review report in Confluence.

naftiko: "0.5"
info:
  label: "Quarterly Access Review Orchestrator"
  description: "Conducts quarterly access reviews by pulling user entitlements from Okta, comparing against roles in Workday, and generating a review report in Confluence."
  tags:
    - compliance
    - identity
    - okta
    - workday
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: access-governance
      port: 8080
      tools:
        - name: run-quarterly-access-review
          description: "Orchestrate quarterly access review across Okta, Workday, and Confluence."
          inputParameters:
            - name: department
              in: body
              type: string
              description: "The department to review."
            - name: review_period
              in: body
              type: string
              description: "The review period (e.g., 2026-Q1)."
          steps:
            - name: get-okta-entitlements
              type: call
              call: "okta.list-users"
              with:
                filter: "profile.department eq '{{department}}'"
            - name: get-workday-roles
              type: call
              call: "workday.get-department-workers"
              with:
                department: "{{department}}"
            - name: publish-review-report
              type: call
              call: "confluence.create-page"
              with:
                space: "IAM"
                title: "Access Review - {{department}} - {{review_period}}"
                body: "Okta users: {{get-okta-entitlements.count}}. Workday active employees: {{get-workday-roles.count}}. Review required for discrepancies."
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://qualcomm.okta.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.okta_token"
      resources:
        - name: users
          path: "/users"
          operations:
            - name: list-users
              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: "/qualcomm/workers?department={{department}}"
          inputParameters:
            - name: department
              in: query
          operations:
            - name: get-department-workers
              method: GET
    - type: http
      namespace: confluence
      baseUri: "https://qualcomm.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: create-page
              method: POST

Consolidates quarterly revenue forecasts by pulling pipeline data from Salesforce, financial actuals from SAP, and publishing a consolidated view to Power BI.

naftiko: "0.5"
info:
  label: "Quarterly Revenue Forecast Consolidation"
  description: "Consolidates quarterly revenue forecasts by pulling pipeline data from Salesforce, financial actuals from SAP, and publishing a consolidated view to Power BI."
  tags:
    - finance
    - salesforce
    - sap
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: finance
      port: 8080
      tools:
        - name: consolidate-revenue-forecast
          description: "Orchestrate quarterly revenue forecast consolidation across Salesforce, SAP, and Power BI."
          inputParameters:
            - name: fiscal_quarter
              in: body
              type: string
              description: "The fiscal quarter (e.g., Q3FY26)."
          steps:
            - name: get-pipeline-data
              type: call
              call: "salesforce.query"
              with:
                soql: "SELECT SUM(Amount) total_pipeline FROM Opportunity WHERE FiscalQuarter = '{{fiscal_quarter}}' AND IsClosed = false"
            - name: get-actuals
              type: call
              call: "sap.get-financial-actuals"
              with:
                fiscal_period: "{{fiscal_quarter}}"
            - name: refresh-dashboard
              type: call
              call: "powerbi.trigger-refresh"
              with:
                dataset_id: "revenue-forecast-dataset"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://qualcomm.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: query
          path: "/query"
          operations:
            - name: query
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://qualcomm-s4.sap.com/sap/opu/odata/sap/API_FINANCIAL_ACTUALS_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: actuals
          path: "/A_FinancialActuals?$filter=FiscalPeriod eq '{{fiscal_period}}'"
          inputParameters:
            - name: fiscal_period
              in: query
          operations:
            - name: get-financial-actuals
              method: GET
    - 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"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: trigger-refresh
              method: POST

When an RF test failure is recorded, creates a Jira defect, escalates to the on-call engineer via PagerDuty, and posts failure details to the RF engineering Teams channel.

naftiko: "0.5"
info:
  label: "RF Engineering Test Failure Escalation"
  description: "When an RF test failure is recorded, creates a Jira defect, escalates to the on-call engineer via PagerDuty, and posts failure details to the RF engineering Teams channel."
  tags:
    - chip-design
    - manufacturing
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: rf-engineering
      port: 8080
      tools:
        - name: escalate-rf-test-failure
          description: "Orchestrate RF test failure escalation across Jira, PagerDuty, and Teams."
          inputParameters:
            - name: test_id
              in: body
              type: string
              description: "The RF test case identifier."
            - name: failure_details
              in: body
              type: string
              description: "Description of the RF test failure."
          steps:
            - name: create-defect
              type: call
              call: "jira.create-issue"
              with:
                project: "RFENG"
                summary: "RF Test Failure: {{test_id}}"
                issue_type: "Bug"
                priority: "High"
                description: "{{failure_details}}"
            - name: page-oncall
              type: call
              call: "pagerduty.create-incident"
              with:
                service_id: "rf-engineering"
                title: "RF Test Failure: {{test_id}}"
                urgency: "high"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel: "rf-engineering"
                message: "RF Test Failure {{test_id}}: {{failure_details}}. Jira: {{create-defect.key}}, PagerDuty incident created."
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://qualcomm.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: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: bearer
        token: "$secrets.pagerduty_token"
      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: messages
          path: "/teams/rf-engineering/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Retrieves account details from Salesforce by account ID including name, industry, annual revenue, and account owner.

naftiko: "0.5"
info:
  label: "Salesforce Account Details Lookup"
  description: "Retrieves account details from Salesforce by account ID including name, industry, annual revenue, and account owner."
  tags:
    - sales
    - salesforce
    - crm
capability:
  exposes:
    - type: mcp
      namespace: crm
      port: 8080
      tools:
        - name: get-account-details
          description: "Look up a Salesforce account by ID and return key account information."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "The Salesforce account ID."
          call: "salesforce.get-account"
          with:
            account_id: "{{account_id}}"
          outputParameters:
            - name: name
              type: string
              mapping: "$.Name"
            - name: industry
              type: string
              mapping: "$.Industry"
            - name: annual_revenue
              type: number
              mapping: "$.AnnualRevenue"
            - name: owner
              type: string
              mapping: "$.Owner.Name"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://qualcomm.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{account_id}}"
          inputParameters:
            - name: account_id
              in: path
          operations:
            - name: get-account
              method: GET

When a new Salesforce account is marked as a customer, creates a ServiceNow onboarding project, provisions a SharePoint collaboration space, and notifies the account team in Teams.

naftiko: "0.5"
info:
  label: "Salesforce Customer Onboarding Workflow"
  description: "When a new Salesforce account is marked as a customer, creates a ServiceNow onboarding project, provisions a SharePoint collaboration space, and notifies the account team in Teams."
  tags:
    - crm
    - sales
    - salesforce
    - servicenow
    - microsoft-teams
    - onboarding
capability:
  exposes:
    - type: mcp
      namespace: customer-onboarding
      port: 8080
      tools:
        - name: trigger-customer-onboarding
          description: "Given a Salesforce account ID newly converted to customer status, create a ServiceNow onboarding project, provision a SharePoint site, and notify the account team in Teams."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "The Salesforce account record ID."
          steps:
            - name: get-account
              type: call
              call: "salesforce.get-account"
              with:
                account_id: "{{account_id}}"
            - name: create-project
              type: call
              call: "servicenow.create-onboarding-project"
              with:
                name: "Customer Onboarding: {{get-account.name}}"
                account_id: "{{account_id}}"
            - name: notify-team
              type: call
              call: "msteams.post-customer-welcome"
              with:
                channel_id: "account-management"
                message: "New customer onboarded: {{get-account.name}}. ServiceNow project: {{create-project.number}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://qualcomm.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{account_id}}"
          inputParameters:
            - name: account_id
              in: path
          operations:
            - name: get-account
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://qualcomm.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: projects
          path: "/table/pm_project"
          operations:
            - name: create-onboarding-project
              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/{{channel_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-customer-welcome
              method: POST

Orchestrates deal desk approvals by retrieving opportunity details from Salesforce, checking margin thresholds in Snowflake, and routing approvals via Teams.

naftiko: "0.5"
info:
  label: "Salesforce Deal Desk Approval Orchestrator"
  description: "Orchestrates deal desk approvals by retrieving opportunity details from Salesforce, checking margin thresholds in Snowflake, and routing approvals via Teams."
  tags:
    - sales
    - salesforce
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: deal-desk
      port: 8080
      tools:
        - name: process-deal-approval
          description: "Orchestrate deal desk approval across Salesforce, Snowflake, and Teams."
          inputParameters:
            - name: opportunity_id
              in: body
              type: string
              description: "The Salesforce opportunity ID."
          steps:
            - name: get-opportunity
              type: call
              call: "salesforce.get-opportunity"
              with:
                opportunity_id: "{{opportunity_id}}"
            - name: check-margin
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "SELECT margin_pct, standard_margin FROM pricing_model WHERE product_code = '{{get-opportunity.product_code}}'"
            - name: route-approval
              type: call
              call: "msteams.send-message"
              with:
                channel: "deal-desk"
                message: "Deal Approval Needed: {{get-opportunity.Name}} - ${{get-opportunity.Amount}}. Margin: {{check-margin.margin_pct}}% (standard: {{check-margin.standard_margin}}%)."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://qualcomm.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity/{{opportunity_id}}"
          inputParameters:
            - name: opportunity_id
              in: path
          operations:
            - name: get-opportunity
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://qualcomm.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/deal-desk/channels/general/messages"
          operations:
            - name: send-message
              method: POST

When a new lead is created in Salesforce, enriches it with firmographic data and assigns it to the appropriate sales rep based on territory rules.

naftiko: "0.5"
info:
  label: "Salesforce Lead Enrichment and Assignment"
  description: "When a new lead is created in Salesforce, enriches it with firmographic data and assigns it to the appropriate sales rep based on territory rules."
  tags:
    - crm
    - sales
    - salesforce
    - lead-management
capability:
  exposes:
    - type: mcp
      namespace: crm-leads
      port: 8080
      tools:
        - name: enrich-and-assign-lead
          description: "Given a Salesforce lead ID, retrieve lead details, update the record with enriched company data, and assign it to the correct sales territory owner."
          inputParameters:
            - name: lead_id
              in: body
              type: string
              description: "The Salesforce lead record ID."
          steps:
            - name: get-lead
              type: call
              call: "salesforce-lookup.get-lead"
              with:
                lead_id: "{{lead_id}}"
            - name: update-lead
              type: call
              call: "salesforce-update.update-lead"
              with:
                lead_id: "{{lead_id}}"
                industry: "{{get-lead.industry}}"
                annual_revenue: "{{get-lead.annual_revenue}}"
                employee_count: "{{get-lead.number_of_employees}}"
  consumes:
    - type: http
      namespace: salesforce-lookup
      baseUri: "https://qualcomm.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: leads
          path: "/sobjects/Lead/{{lead_id}}"
          inputParameters:
            - name: lead_id
              in: path
          operations:
            - name: get-lead
              method: GET
    - type: http
      namespace: salesforce-update
      baseUri: "https://qualcomm.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: leads
          path: "/sobjects/Lead/{{lead_id}}"
          inputParameters:
            - name: lead_id
              in: path
          operations:
            - name: update-lead
              method: PATCH

After a Salesforce opportunity closes as Won, dispatches a net promoter score survey to the primary contact and records the response back on the account.

naftiko: "0.5"
info:
  label: "Salesforce NPS Survey Dispatch"
  description: "After a Salesforce opportunity closes as Won, dispatches a net promoter score survey to the primary contact and records the response back on the account."
  tags:
    - crm
    - sales
    - salesforce
    - customer-success
    - nps
capability:
  exposes:
    - type: mcp
      namespace: customer-success
      port: 8080
      tools:
        - name: dispatch-nps-survey
          description: "Given a Salesforce opportunity ID closed as Won, retrieve the primary contact, send an NPS survey link via Microsoft Teams, and log the dispatch on the account."
          inputParameters:
            - name: opportunity_id
              in: body
              type: string
              description: "The Salesforce opportunity ID that was closed Won."
          steps:
            - name: get-opportunity
              type: call
              call: "salesforce-opp.get-opportunity"
              with:
                opportunity_id: "{{opportunity_id}}"
            - name: get-contact
              type: call
              call: "salesforce-contact.get-contact"
              with:
                contact_id: "{{get-opportunity.primary_contact_id}}"
            - name: send-survey
              type: call
              call: "msteams.send-nps-survey"
              with:
                recipient: "{{get-contact.email}}"
                message: "Thank you for choosing Qualcomm. Please take a moment to share your feedback: https://survey.qualcomm.com/nps/{{opportunity_id}}"
  consumes:
    - type: http
      namespace: salesforce-opp
      baseUri: "https://qualcomm.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity/{{opportunity_id}}"
          inputParameters:
            - name: opportunity_id
              in: path
          operations:
            - name: get-opportunity
              method: GET
    - type: http
      namespace: salesforce-contact
      baseUri: "https://qualcomm.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: contacts
          path: "/sobjects/Contact/{{contact_id}}"
          inputParameters:
            - name: contact_id
              in: path
          operations:
            - name: get-contact
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient}}/sendMail"
          inputParameters:
            - name: recipient
              in: path
          operations:
            - name: send-nps-survey
              method: POST

Generates a daily digest of open Salesforce opportunities by stage and region, formatted for delivery in a Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Salesforce Opportunity Pipeline Digest"
  description: "Generates a daily digest of open Salesforce opportunities by stage and region, formatted for delivery in a Microsoft Teams channel."
  tags:
    - crm
    - sales
    - salesforce
    - microsoft-teams
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: crm-reporting
      port: 8080
      tools:
        - name: digest-opportunity-pipeline
          description: "Fetch all open Salesforce opportunities, group them by stage and region, and post a formatted pipeline summary to the sales Microsoft Teams channel."
          inputParameters:
            - name: teams_channel_id
              in: body
              type: string
              description: "The Microsoft Teams channel ID to post the digest to."
          steps:
            - name: get-opportunities
              type: call
              call: "salesforce.query-opportunities"
              with:
                stage: "open"
            - name: post-digest
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "{{teams_channel_id}}"
                message: "Pipeline digest: {{get-opportunities.total_value}} across {{get-opportunities.count}} open opportunities."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://qualcomm.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/query"
          operations:
            - name: query-opportunities
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Retrieves the status and expiration date of a contract in SAP Ariba by contract ID.

naftiko: "0.5"
info:
  label: "SAP Ariba Contract Status Lookup"
  description: "Retrieves the status and expiration date of a contract in SAP Ariba by contract ID."
  tags:
    - procurement
    - sap
    - contract-management
capability:
  exposes:
    - type: mcp
      namespace: procurement
      port: 8080
      tools:
        - name: get-contract-status
          description: "Look up a contract in SAP Ariba and return its status, effective date, and expiration date."
          inputParameters:
            - name: contract_id
              in: body
              type: string
              description: "The SAP Ariba contract ID."
          call: "ariba.get-contract"
          with:
            contract_id: "{{contract_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.Status"
            - name: effective_date
              type: string
              mapping: "$.EffectiveDate"
            - name: expiration_date
              type: string
              mapping: "$.ExpirationDate"
  consumes:
    - type: http
      namespace: ariba
      baseUri: "https://openapi.ariba.com/api/contract-compliance/v1"
      authentication:
        type: bearer
        token: "$secrets.ariba_token"
      resources:
        - name: contracts
          path: "/contracts/{{contract_id}}"
          inputParameters:
            - name: contract_id
              in: path
          operations:
            - name: get-contract
              method: GET

When a purchase requisition is submitted in SAP Ariba, validates the budget in SAP S/4HANA and posts an approval notification to Microsoft Teams.

naftiko: "0.5"
info:
  label: "SAP Ariba Procurement Requisition Approval"
  description: "When a purchase requisition is submitted in SAP Ariba, validates the budget in SAP S/4HANA and posts an approval notification to Microsoft Teams."
  tags:
    - procurement
    - finance
    - sap-ariba
    - sap
    - microsoft-teams
    - approval
capability:
  exposes:
    - type: mcp
      namespace: procurement
      port: 8080
      tools:
        - name: approve-requisition
          description: "Given an SAP Ariba requisition ID, fetch the requisition details, validate available budget in SAP S/4HANA, and notify the approver in Microsoft Teams."
          inputParameters:
            - name: requisition_id
              in: body
              type: string
              description: "The SAP Ariba purchase requisition ID."
            - name: approver_email
              in: body
              type: string
              description: "Email address of the designated approver."
          steps:
            - name: get-requisition
              type: call
              call: "ariba.get-requisition"
              with:
                requisition_id: "{{requisition_id}}"
            - name: check-budget
              type: call
              call: "sap-budget.get-cost-center-budget"
              with:
                cost_center: "{{get-requisition.cost_center}}"
                fiscal_year: "{{get-requisition.fiscal_year}}"
            - name: notify-approver
              type: call
              call: "msteams-notify.send-message"
              with:
                recipient: "{{approver_email}}"
                message: "Requisition {{requisition_id}} for {{get-requisition.total_amount}} {{get-requisition.currency}} awaits your approval. Available budget: {{check-budget.available_amount}}."
  consumes:
    - type: http
      namespace: ariba
      baseUri: "https://openapi.ariba.com/api/purchase-requisition/v1"
      authentication:
        type: apikey
        key: "APIKey"
        value: "$secrets.ariba_api_key"
        placement: header
      resources:
        - name: requisitions
          path: "/requisitions/{{requisition_id}}"
          inputParameters:
            - name: requisition_id
              in: path
          operations:
            - name: get-requisition
              method: GET
    - type: http
      namespace: sap-budget
      baseUri: "https://qualcomm-s4.sap.com/sap/opu/odata/sap/FM_BUDGET_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: cost-center-budgets
          path: "/BudgetAvailability"
          operations:
            - name: get-cost-center-budget
              method: GET
    - type: http
      namespace: msteams-notify
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: chat-messages
          path: "/users/{{recipient}}/sendMail"
          inputParameters:
            - name: recipient
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves open supplier invoices from SAP Ariba, matches them against SAP S/4HANA purchase orders, and flags discrepancies for finance review.

naftiko: "0.5"
info:
  label: "SAP Ariba Supplier Invoice Reconciliation"
  description: "Retrieves open supplier invoices from SAP Ariba, matches them against SAP S/4HANA purchase orders, and flags discrepancies for finance review."
  tags:
    - finance
    - procurement
    - sap-ariba
    - sap
    - invoice-processing
capability:
  exposes:
    - type: mcp
      namespace: invoice-reconciliation
      port: 8080
      tools:
        - name: reconcile-supplier-invoices
          description: "Given a supplier ID and date range, fetch open invoices from SAP Ariba, match each against its SAP purchase order, and return a list of discrepancies."
          inputParameters:
            - name: supplier_id
              in: body
              type: string
              description: "The SAP Ariba supplier ID."
            - name: from_date
              in: body
              type: string
              description: "Start date for invoice query in YYYY-MM-DD format."
            - name: to_date
              in: body
              type: string
              description: "End date for invoice query in YYYY-MM-DD format."
          steps:
            - name: get-invoices
              type: call
              call: "ariba.get-invoices"
              with:
                supplier_id: "{{supplier_id}}"
                from_date: "{{from_date}}"
                to_date: "{{to_date}}"
            - name: get-po-details
              type: call
              call: "sap.get-po-for-invoice"
              with:
                po_number: "{{get-invoices.po_number}}"
  consumes:
    - type: http
      namespace: 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: get-invoices
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://qualcomm-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-for-invoice
              method: GET

Retrieves the approval status and total amount of an expense report in SAP Concur.

naftiko: "0.5"
info:
  label: "SAP Concur Expense Status Lookup"
  description: "Retrieves the approval status and total amount of an expense report in SAP Concur."
  tags:
    - finance
    - sap-concur
    - expense-management
capability:
  exposes:
    - type: mcp
      namespace: expense
      port: 8080
      tools:
        - name: get-expense-report-status
          description: "Look up an expense report in SAP Concur and return its approval status and total."
          inputParameters:
            - name: report_id
              in: body
              type: string
              description: "The SAP Concur expense report ID."
          call: "concur.get-expense-report"
          with:
            report_id: "{{report_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.ApprovalStatusName"
            - name: total
              type: number
              mapping: "$.Total"
            - name: currency
              type: string
              mapping: "$.CurrencyCode"
  consumes:
    - type: http
      namespace: concur
      baseUri: "https://us.api.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

Reconciles goods receipts against invoices in SAP S/4HANA, flags discrepancies, and creates a ServiceNow ticket for the accounts payable team.

naftiko: "0.5"
info:
  label: "SAP Goods Receipt to Invoice Reconciliation"
  description: "Reconciles goods receipts against invoices in SAP S/4HANA, flags discrepancies, and creates a ServiceNow ticket for the accounts payable team."
  tags:
    - finance
    - procurement
    - sap
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: finance-ops
      port: 8080
      tools:
        - name: reconcile-gr-invoices
          description: "Orchestrate goods receipt to invoice reconciliation across SAP and ServiceNow."
          inputParameters:
            - name: po_number
              in: body
              type: string
              description: "The SAP purchase order number."
          steps:
            - name: get-goods-receipts
              type: call
              call: "sap.get-goods-receipts"
              with:
                po_number: "{{po_number}}"
            - name: get-invoices
              type: call
              call: "sap.get-invoices"
              with:
                po_number: "{{po_number}}"
            - name: create-discrepancy-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "GR/Invoice discrepancy for PO {{po_number}}"
                category: "accounts_payable"
                description: "GR total: {{get-goods-receipts.total}}, Invoice total: {{get-invoices.total}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://qualcomm-s4.sap.com/sap/opu/odata/sap/API_INBOUND_DELIVERY_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: goods-receipts
          path: "/A_InbDeliveryHeader?$filter=PurchaseOrder eq '{{po_number}}'"
          inputParameters:
            - name: po_number
              in: query
          operations:
            - name: get-goods-receipts
              method: GET
        - name: invoices
          path: "/A_SupplierInvoice?$filter=PurchaseOrder eq '{{po_number}}'"
          inputParameters:
            - name: po_number
              in: query
          operations:
            - name: get-invoices
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://qualcomm.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

Orchestrates intercompany stock transfers by creating transfer orders in SAP, updating inventory in Snowflake, and notifying logistics via Teams.

naftiko: "0.5"
info:
  label: "SAP Intercompany Transfer Orchestrator"
  description: "Orchestrates intercompany stock transfers by creating transfer orders in SAP, updating inventory in Snowflake, and notifying logistics via Teams."
  tags:
    - supply-chain
    - sap
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: logistics
      port: 8080
      tools:
        - name: process-intercompany-transfer
          description: "Orchestrate intercompany transfer across SAP, Snowflake, and Teams."
          inputParameters:
            - name: material_number
              in: body
              type: string
              description: "The SAP material number."
            - name: source_plant
              in: body
              type: string
              description: "The source plant code."
            - name: target_plant
              in: body
              type: string
              description: "The target plant code."
            - name: quantity
              in: body
              type: number
              description: "Transfer quantity."
          steps:
            - name: create-transfer-order
              type: call
              call: "sap.create-stock-transfer"
              with:
                material: "{{material_number}}"
                source: "{{source_plant}}"
                target: "{{target_plant}}"
                quantity: "{{quantity}}"
            - name: update-inventory-ledger
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "CALL update_inventory_transfer('{{material_number}}', '{{source_plant}}', '{{target_plant}}', {{quantity}})"
            - name: notify-logistics
              type: call
              call: "msteams.send-message"
              with:
                channel: "logistics-ops"
                message: "Intercompany transfer created: {{material_number}} x{{quantity}} from {{source_plant}} to {{target_plant}}. SAP TO: {{create-transfer-order.transfer_order_number}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://qualcomm-s4.sap.com/sap/opu/odata/sap/API_STOCK_TRANSFER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: stock-transfers
          path: "/A_StockTransfer"
          operations:
            - name: create-stock-transfer
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://qualcomm.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/logistics-ops/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Retrieves current stock levels for a specified material number from SAP S/4HANA inventory management.

naftiko: "0.5"
info:
  label: "SAP Inventory Stock Level Lookup"
  description: "Retrieves current stock levels for a specified material number from SAP S/4HANA inventory management."
  tags:
    - supply-chain
    - sap
    - inventory
capability:
  exposes:
    - type: mcp
      namespace: inventory
      port: 8080
      tools:
        - name: get-stock-level
          description: "Look up current stock levels for a material in SAP S/4HANA. Returns available quantity, reserved quantity, and storage location."
          inputParameters:
            - name: material_number
              in: body
              type: string
              description: "The SAP material number to check stock for."
          call: "sap.get-material-stock"
          with:
            material_number: "{{material_number}}"
          outputParameters:
            - name: available_qty
              type: string
              mapping: "$.d.AvailableQuantity"
            - name: reserved_qty
              type: string
              mapping: "$.d.ReservedQuantity"
            - name: storage_location
              type: string
              mapping: "$.d.StorageLocation"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://qualcomm-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: material-stock
          path: "/A_MatlStkInAcctMod(Material='{{material_number}}')"
          inputParameters:
            - name: material_number
              in: path
          operations:
            - name: get-material-stock
              method: GET

Retrieves the bill of materials for a specified material from SAP S/4HANA, returning component list and quantities.

naftiko: "0.5"
info:
  label: "SAP Material Bill of Materials Lookup"
  description: "Retrieves the bill of materials for a specified material from SAP S/4HANA, returning component list and quantities."
  tags:
    - manufacturing
    - sap
    - product-lifecycle
capability:
  exposes:
    - type: mcp
      namespace: engineering
      port: 8080
      tools:
        - name: get-material-bom
          description: "Look up the bill of materials for a SAP material number and return component list with quantities."
          inputParameters:
            - name: material_number
              in: body
              type: string
              description: "The SAP material number."
            - name: plant
              in: body
              type: string
              description: "The SAP plant code."
          call: "sap.get-bom"
          with:
            material: "{{material_number}}"
            plant: "{{plant}}"
          outputParameters:
            - name: components
              type: array
              mapping: "$.d.results[*].Component"
            - name: quantities
              type: array
              mapping: "$.d.results[*].ComponentQuantity"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://qualcomm-s4.sap.com/sap/opu/odata/sap/API_BILL_OF_MATERIAL_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: bom
          path: "/MaterialBOMItem?$filter=Material eq '{{material}}' and Plant eq '{{plant}}'"
          inputParameters:
            - name: material
              in: query
            - name: plant
              in: query
          operations:
            - name: get-bom
              method: GET

Monitors MRP exceptions in SAP, identifies critical material shortages, and creates procurement requisitions with notifications to the supply chain team via Teams.

naftiko: "0.5"
info:
  label: "SAP Material Requirements Planning Alert"
  description: "Monitors MRP exceptions in SAP, identifies critical material shortages, and creates procurement requisitions with notifications to the supply chain team via Teams."
  tags:
    - supply-chain
    - manufacturing
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: mrp
      port: 8080
      tools:
        - name: process-mrp-exceptions
          description: "Orchestrate MRP exception handling across SAP and Teams."
          inputParameters:
            - name: plant
              in: body
              type: string
              description: "The SAP plant code."
          steps:
            - name: get-mrp-exceptions
              type: call
              call: "sap.get-mrp-exceptions"
              with:
                plant: "{{plant}}"
            - name: create-requisitions
              type: call
              call: "sap.create-purchase-requisition"
              with:
                plant: "{{plant}}"
                materials: "{{get-mrp-exceptions.critical_materials}}"
            - name: notify-supply-chain
              type: call
              call: "msteams.send-message"
              with:
                channel: "supply-chain-planning"
                message: "MRP Alert for plant {{plant}}: {{get-mrp-exceptions.exception_count}} exceptions. {{get-mrp-exceptions.critical_count}} critical shortages. Requisitions created."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://qualcomm-s4.sap.com/sap/opu/odata/sap/API_MRP_MATERIALS_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: mrp-exceptions
          path: "/A_MRPMaterial?$filter=MRPPlant eq '{{plant}}' and MRPException ne ''"
          inputParameters:
            - name: plant
              in: query
          operations:
            - name: get-mrp-exceptions
              method: GET
        - name: purchase-requisitions
          path: "/A_PurchaseRequisition"
          operations:
            - name: create-purchase-requisition
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/supply-chain-planning/channels/general/messages"
          operations:
            - name: send-message
              method: POST

At month end, triggers the SAP S/4HANA period-close process, exports a trial balance, and posts a confirmation message to the finance Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "SAP Period-Close Financial Reconciliation"
  description: "At month end, triggers the SAP S/4HANA period-close process, exports a trial balance, and posts a confirmation message to the finance Microsoft Teams channel."
  tags:
    - finance
    - erp
    - sap
    - microsoft-teams
    - period-close
capability:
  exposes:
    - type: mcp
      namespace: finance-close
      port: 8080
      tools:
        - name: run-period-close
          description: "Given a fiscal period and company code, trigger SAP S/4HANA period-close postings and notify the finance team in Teams when complete."
          inputParameters:
            - name: company_code
              in: body
              type: string
              description: "The SAP company code (e.g., 1000 for Qualcomm US)."
            - name: fiscal_period
              in: body
              type: string
              description: "Fiscal period in YYYYMM format."
          steps:
            - name: trigger-close
              type: call
              call: "sap.trigger-period-close"
              with:
                company_code: "{{company_code}}"
                fiscal_period: "{{fiscal_period}}"
            - name: notify-finance
              type: call
              call: "msteams.post-close-notification"
              with:
                channel_id: "finance-team"
                message: "Period close for {{fiscal_period}} (company code {{company_code}}) initiated. SAP job ID: {{trigger-close.job_id}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://qualcomm-s4.sap.com/sap/opu/odata/sap/API_JOURNALENTRYITEMBASIC_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: period-close
          path: "/A_CompanyCode('{{company_code}}')/to_PeriodClose"
          inputParameters:
            - name: company_code
              in: path
          operations:
            - name: trigger-period-close
              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/{{channel_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-close-notification
              method: POST

Looks up a SAP S/4HANA purchase order by PO number and returns structured status, vendor details, and open line items.

naftiko: "0.5"
info:
  label: "SAP Purchase Order Lookup"
  description: "Looks up a SAP S/4HANA purchase order by PO number and returns structured status, vendor details, and open line items."
  tags:
    - finance
    - procurement
    - sap
    - erp
capability:
  exposes:
    - type: mcp
      namespace: erp
      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 item count."
          inputParameters:
            - name: po_number
              in: body
              type: string
              description: "The SAP purchase order number to retrieve."
          call: "sap.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
      baseUri: "https://qualcomm-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

Processes quality notifications from SAP by retrieving defect details, creating a Jira investigation ticket, and alerting the quality engineering team via Teams.

naftiko: "0.5"
info:
  label: "SAP Quality Notification Orchestrator"
  description: "Processes quality notifications from SAP by retrieving defect details, creating a Jira investigation ticket, and alerting the quality engineering team via Teams."
  tags:
    - manufacturing
    - sap
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: quality-mgmt
      port: 8080
      tools:
        - name: process-quality-notification
          description: "Orchestrate quality notification handling across SAP, Jira, and Teams."
          inputParameters:
            - name: notification_number
              in: body
              type: string
              description: "The SAP quality notification number."
          steps:
            - name: get-notification
              type: call
              call: "sap.get-quality-notification"
              with:
                notification_number: "{{notification_number}}"
            - name: create-investigation
              type: call
              call: "jira.create-issue"
              with:
                project: "QUAL"
                summary: "Quality Issue: {{get-notification.description}}"
                issue_type: "Bug"
                priority: "{{get-notification.priority}}"
            - name: alert-quality-team
              type: call
              call: "msteams.send-message"
              with:
                channel: "quality-engineering"
                message: "Quality Notification {{notification_number}}: {{get-notification.description}}. Material: {{get-notification.material}}. Jira: {{create-investigation.key}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://qualcomm-s4.sap.com/sap/opu/odata/sap/API_QUALITY_NOTIFICATION_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: notifications
          path: "/A_QualityNotification('{{notification_number}}')"
          inputParameters:
            - name: notification_number
              in: path
          operations:
            - name: get-quality-notification
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://qualcomm.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/quality-engineering/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Syncs new or updated vendor records from SAP S/4HANA to SAP Ariba to ensure procurement catalog consistency across both systems.

naftiko: "0.5"
info:
  label: "SAP Vendor Master Data Sync"
  description: "Syncs new or updated vendor records from SAP S/4HANA to SAP Ariba to ensure procurement catalog consistency across both systems."
  tags:
    - procurement
    - finance
    - sap
    - sap-ariba
    - data-sync
capability:
  exposes:
    - type: mcp
      namespace: vendor-sync
      port: 8080
      tools:
        - name: sync-vendor-to-ariba
          description: "Given a SAP vendor account number, fetch the vendor master record from SAP S/4HANA and upsert the corresponding supplier profile in SAP Ariba."
          inputParameters:
            - name: vendor_account
              in: body
              type: string
              description: "The SAP vendor account number."
          steps:
            - name: get-vendor
              type: call
              call: "sap.get-vendor"
              with:
                vendor_account: "{{vendor_account}}"
            - name: upsert-supplier
              type: call
              call: "ariba.upsert-supplier"
              with:
                supplier_id: "{{get-vendor.vendor_account}}"
                name: "{{get-vendor.name}}"
                country: "{{get-vendor.country}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://qualcomm-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: vendors
          path: "/A_Supplier('{{vendor_account}}')"
          inputParameters:
            - name: vendor_account
              in: path
          operations:
            - name: get-vendor
              method: GET
    - type: http
      namespace: ariba
      baseUri: "https://openapi.ariba.com/api/supplier/v1"
      authentication:
        type: apikey
        key: "APIKey"
        value: "$secrets.ariba_api_key"
        placement: header
      resources:
        - name: suppliers
          path: "/suppliers/{{supplier_id}}"
          inputParameters:
            - name: supplier_id
              in: path
          operations:
            - name: upsert-supplier
              method: PUT

When a critical CVE is published, checks affected repositories in GitHub, creates patching Jira tickets, and triggers a Datadog security scan to verify remediation.

naftiko: "0.5"
info:
  label: "Security Vulnerability Patch Orchestrator"
  description: "When a critical CVE is published, checks affected repositories in GitHub, creates patching Jira tickets, and triggers a Datadog security scan to verify remediation."
  tags:
    - security
    - github
    - jira
    - datadog
capability:
  exposes:
    - type: mcp
      namespace: security-ops
      port: 8080
      tools:
        - name: orchestrate-vulnerability-patch
          description: "Orchestrate CVE patching across GitHub, Jira, and Datadog."
          inputParameters:
            - name: cve_id
              in: body
              type: string
              description: "The CVE identifier."
            - name: severity
              in: body
              type: string
              description: "The CVE severity level."
          steps:
            - name: find-affected-repos
              type: call
              call: "github.search-code"
              with:
                query: "{{cve_id}} org:qualcomm"
            - name: create-patch-tickets
              type: call
              call: "jira.create-issue"
              with:
                project: "SEC"
                summary: "Patch {{cve_id}} - {{severity}}"
                issue_type: "Bug"
                priority: "Critical"
                description: "Affected repos: {{find-affected-repos.total_count}}"
            - name: trigger-security-scan
              type: call
              call: "datadog.create-synthetics-test"
              with:
                name: "Post-patch verification: {{cve_id}}"
                type: "security_scan"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: code-search
          path: "/search/code"
          operations:
            - name: search-code
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://qualcomm.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: "$secrets.datadog_api_key"
        headerName: "DD-API-KEY"
      resources:
        - name: synthetics
          path: "/synthetics/tests"
          operations:
            - name: create-synthetics-test
              method: POST

Validates export compliance for semiconductor shipments by checking customer details in Salesforce, verifying export classifications in SAP, and logging the compliance check in ServiceNow.

naftiko: "0.5"
info:
  label: "Semiconductor Export Compliance Check Orchestrator"
  description: "Validates export compliance for semiconductor shipments by checking customer details in Salesforce, verifying export classifications in SAP, and logging the compliance check in ServiceNow."
  tags:
    - compliance
    - supply-chain
    - salesforce
    - sap
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: export-compliance
      port: 8080
      tools:
        - name: check-export-compliance
          description: "Orchestrate export compliance validation across Salesforce, SAP, and ServiceNow."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The sales order ID."
            - name: destination_country
              in: body
              type: string
              description: "The destination country code."
          steps:
            - name: get-customer-details
              type: call
              call: "salesforce.get-account-by-order"
              with:
                order_id: "{{order_id}}"
            - name: check-export-classification
              type: call
              call: "sap.get-export-classification"
              with:
                order_id: "{{order_id}}"
                country: "{{destination_country}}"
            - name: log-compliance-check
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Export compliance check: Order {{order_id}} to {{destination_country}}"
                category: "compliance"
                description: "Customer: {{get-customer-details.name}}. Classification: {{check-export-classification.eccn}}. Status: {{check-export-classification.status}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://qualcomm.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Order/{{order_id}}"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: get-account-by-order
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://qualcomm-s4.sap.com/sap/opu/odata/sap/API_EXPORT_CONTROL_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: export-classification
          path: "/A_ExportControl?$filter=SalesOrder eq '{{order_id}}'"
          inputParameters:
            - name: order_id
              in: query
          operations:
            - name: get-export-classification
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://qualcomm.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

Validates vendor compliance by checking SAP Ariba supplier certifications, querying Snowflake for delivery performance metrics, and creating a compliance report in Confluence.

naftiko: "0.5"
info:
  label: "Semiconductor Vendor Compliance Orchestrator"
  description: "Validates vendor compliance by checking SAP Ariba supplier certifications, querying Snowflake for delivery performance metrics, and creating a compliance report in Confluence."
  tags:
    - supply-chain
    - procurement
    - sap
    - snowflake
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: vendor-compliance
      port: 8080
      tools:
        - name: run-vendor-compliance-check
          description: "Orchestrate vendor compliance review across SAP Ariba, Snowflake, and Confluence."
          inputParameters:
            - name: vendor_id
              in: body
              type: string
              description: "The SAP vendor ID."
          steps:
            - name: get-certifications
              type: call
              call: "ariba.get-supplier-profile"
              with:
                vendor_id: "{{vendor_id}}"
            - name: get-delivery-metrics
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "SELECT on_time_rate, quality_rate, avg_lead_days FROM vendor_performance WHERE vendor_id = '{{vendor_id}}'"
            - name: create-compliance-report
              type: call
              call: "confluence.create-page"
              with:
                space: "PROCUREMENT"
                title: "Vendor Compliance Report - {{vendor_id}}"
                body: "Certifications: {{get-certifications.cert_status}}. On-time rate: {{get-delivery-metrics.on_time_rate}}%. Quality rate: {{get-delivery-metrics.quality_rate}}%."
  consumes:
    - type: http
      namespace: ariba
      baseUri: "https://openapi.ariba.com/api/supplier-management/v1"
      authentication:
        type: bearer
        token: "$secrets.ariba_token"
      resources:
        - name: suppliers
          path: "/suppliers/{{vendor_id}}"
          inputParameters:
            - name: vendor_id
              in: path
          operations:
            - name: get-supplier-profile
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://qualcomm.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://qualcomm.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: create-page
              method: POST

Opens a ServiceNow change request for a planned infrastructure or chip platform change, routes it for approval, and notifies stakeholders in Microsoft Teams.

naftiko: "0.5"
info:
  label: "ServiceNow Change Request Lifecycle"
  description: "Opens a ServiceNow change request for a planned infrastructure or chip platform change, routes it for approval, and notifies stakeholders in Microsoft Teams."
  tags:
    - itsm
    - change-management
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: itsm
      port: 8080
      tools:
        - name: open-change-request
          description: "Given a change description, risk level, and scheduled window, create a ServiceNow change request and notify the change advisory board in Teams."
          inputParameters:
            - name: short_description
              in: body
              type: string
              description: "Brief description of the proposed change."
            - name: risk_level
              in: body
              type: string
              description: "Risk level: low, medium, or high."
            - name: scheduled_start
              in: body
              type: string
              description: "Planned start datetime in ISO 8601 format."
            - name: scheduled_end
              in: body
              type: string
              description: "Planned end datetime in ISO 8601 format."
          steps:
            - name: create-change
              type: call
              call: "servicenow.create-change-request"
              with:
                short_description: "{{short_description}}"
                risk: "{{risk_level}}"
                start_date: "{{scheduled_start}}"
                end_date: "{{scheduled_end}}"
            - name: notify-cab
              type: call
              call: "msteams.notify-channel"
              with:
                channel_id: "change-advisory-board"
                message: "New change request {{create-change.number}}: {{short_description}} | Risk: {{risk_level}} | Window: {{scheduled_start}} to {{scheduled_end}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://qualcomm.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: change-requests
          path: "/table/change_request"
          operations:
            - name: create-change-request
              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/{{channel_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: notify-channel
              method: POST

When a ServiceNow P1 incident remains unresolved past its SLA breach time, escalates it by creating a Jira Engineering issue and alerting the CTO channel in Teams.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Escalation to Jira"
  description: "When a ServiceNow P1 incident remains unresolved past its SLA breach time, escalates it by creating a Jira Engineering issue and alerting the CTO channel in Teams."
  tags:
    - itsm
    - incident-response
    - servicenow
    - jira
    - microsoft-teams
    - escalation
capability:
  exposes:
    - type: mcp
      namespace: incident-escalation
      port: 8080
      tools:
        - name: escalate-p1-incident
          description: "Given a ServiceNow incident number that has breached its P1 SLA, create a Jira Engineering ticket and notify the executive escalation Teams channel."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "The ServiceNow incident number (e.g., INC0012345)."
          steps:
            - name: get-incident
              type: call
              call: "servicenow.get-incident"
              with:
                incident_number: "{{incident_number}}"
            - name: create-escalation
              type: call
              call: "jira.create-escalation-ticket"
              with:
                project_key: "ENG"
                issuetype: "Incident"
                summary: "[P1 Escalation] {{get-incident.short_description}}"
                description: "ServiceNow: {{incident_number}}\nImpact: {{get-incident.impact}}\nOpened: {{get-incident.opened_at}}"
            - name: alert-leadership
              type: call
              call: "msteams.post-escalation-alert"
              with:
                channel_id: "executive-escalations"
                message: "P1 incident {{incident_number}} has breached SLA. Jira escalation: {{create-escalation.key}}. {{get-incident.short_description}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://qualcomm.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: get-incident
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://qualcomm.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-escalation-ticket
              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/{{channel_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-escalation-alert
              method: POST

Retrieves the current status, priority, and assigned group for a ServiceNow incident by ticket number.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Status Lookup"
  description: "Retrieves the current status, priority, and assigned group for a ServiceNow incident by ticket number."
  tags:
    - itsm
    - servicenow
    - incident-management
capability:
  exposes:
    - type: mcp
      namespace: itsm
      port: 8080
      tools:
        - name: get-incident-status
          description: "Look up a ServiceNow incident by number and return its state, priority, assignment group, and short description."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "The ServiceNow incident number (e.g., INC0012345)."
          call: "servicenow.get-incident"
          with:
            incident_number: "{{incident_number}}"
          outputParameters:
            - name: state
              type: string
              mapping: "$.result.state"
            - name: priority
              type: string
              mapping: "$.result.priority"
            - name: assignment_group
              type: string
              mapping: "$.result.assignment_group.display_value"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://qualcomm.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident?sysparm_query=number={{incident_number}}"
          inputParameters:
            - name: incident_number
              in: query
          operations:
            - name: get-incident
              method: GET

Manages document approval workflows by monitoring SharePoint for new uploads, creating approval tasks in Jira, and notifying approvers via Teams.

naftiko: "0.5"
info:
  label: "SharePoint Document Approval Workflow Orchestrator"
  description: "Manages document approval workflows by monitoring SharePoint for new uploads, creating approval tasks in Jira, and notifying approvers via Teams."
  tags:
    - documentation
    - sharepoint
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: doc-approval
      port: 8080
      tools:
        - name: process-document-approval
          description: "Orchestrate document approval across SharePoint, Jira, and Teams."
          inputParameters:
            - name: document_id
              in: body
              type: string
              description: "The SharePoint document ID."
            - name: approver_email
              in: body
              type: string
              description: "The approver's email address."
          steps:
            - name: get-document
              type: call
              call: "sharepoint.get-document"
              with:
                document_id: "{{document_id}}"
            - name: create-approval-task
              type: call
              call: "jira.create-issue"
              with:
                project: "DOCAPPR"
                summary: "Approve: {{get-document.name}}"
                issue_type: "Task"
                assignee: "{{approver_email}}"
            - name: notify-approver
              type: call
              call: "msteams.send-message"
              with:
                recipient: "{{approver_email}}"
                message: "Document approval needed: {{get-document.name}}. Please review and approve in Jira: {{create-approval-task.key}}."
  consumes:
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites/qualcomm.sharepoint.com"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: documents
          path: "/drive/items/{{document_id}}"
          inputParameters:
            - name: document_id
              in: path
          operations:
            - name: get-document
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://qualcomm.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}}/sendMail"
          inputParameters:
            - name: recipient
              in: path
          operations:
            - name: send-message
              method: POST

Tracks a silicon wafer lot through the fabrication process by querying SAP manufacturing execution, checking yield data in Snowflake, and updating the ServiceNow CMDB record.

naftiko: "0.5"
info:
  label: "Silicon Wafer Lot Tracking Orchestrator"
  description: "Tracks a silicon wafer lot through the fabrication process by querying SAP manufacturing execution, checking yield data in Snowflake, and updating the ServiceNow CMDB record."
  tags:
    - manufacturing
    - supply-chain
    - sap
    - snowflake
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: fab-ops
      port: 8080
      tools:
        - name: track-wafer-lot
          description: "Orchestrate wafer lot tracking across SAP MES, Snowflake yield data, and ServiceNow CMDB."
          inputParameters:
            - name: lot_id
              in: body
              type: string
              description: "The silicon wafer lot identifier."
          steps:
            - name: get-lot-status
              type: call
              call: "sap.get-production-order"
              with:
                lot_id: "{{lot_id}}"
            - name: get-yield-data
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "SELECT lot_id, wafer_count, pass_count, yield_pct FROM fab_yield WHERE lot_id = '{{lot_id}}'"
            - name: update-cmdb
              type: call
              call: "servicenow.update-ci"
              with:
                ci_name: "LOT-{{lot_id}}"
                status: "{{get-lot-status.status}}"
                yield_pct: "{{get-yield-data.yield_pct}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://qualcomm-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: production-orders
          path: "/A_ProductionOrder?$filter=ManufacturingOrder eq '{{lot_id}}'"
          inputParameters:
            - name: lot_id
              in: query
          operations:
            - name: get-production-order
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://qualcomm.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://qualcomm.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: cmdb
          path: "/table/cmdb_ci"
          operations:
            - name: update-ci
              method: PATCH

Runs quality gate checks for Snapdragon processors by pulling test results from Snowflake, verifying defect counts in Jira, and updating the SAP quality inspection record.

naftiko: "0.5"
info:
  label: "Snapdragon Processor Quality Gate Orchestrator"
  description: "Runs quality gate checks for Snapdragon processors by pulling test results from Snowflake, verifying defect counts in Jira, and updating the SAP quality inspection record."
  tags:
    - manufacturing
    - chip-design
    - snowflake
    - jira
    - sap
capability:
  exposes:
    - type: mcp
      namespace: quality
      port: 8080
      tools:
        - name: run-quality-gate
          description: "Orchestrate quality gate checks across Snowflake test data, Jira defects, and SAP quality inspection."
          inputParameters:
            - name: product_id
              in: body
              type: string
              description: "The Snapdragon processor product ID."
            - name: lot_number
              in: body
              type: string
              description: "The manufacturing lot number."
          steps:
            - name: get-test-results
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "SELECT pass_rate, fail_count, test_suite FROM quality_results WHERE product_id = '{{product_id}}' AND lot = '{{lot_number}}'"
            - name: get-open-defects
              type: call
              call: "jira.search-issues"
              with:
                jql: "project = SNAPQUAL AND labels = {{product_id}} AND status != Closed"
            - name: update-quality-record
              type: call
              call: "sap.update-quality-inspection"
              with:
                lot_number: "{{lot_number}}"
                pass_rate: "{{get-test-results.pass_rate}}"
                open_defects: "{{get-open-defects.total}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://qualcomm.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://qualcomm.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: search
          path: "/search"
          operations:
            - name: search-issues
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://qualcomm-s4.sap.com/sap/opu/odata/sap/API_QUALITY_INSPECTION_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: inspections
          path: "/A_QualityInspection"
          operations:
            - name: update-quality-inspection
              method: PATCH

Queries Snowflake for data pipeline task failures and warehouse credit consumption anomalies, and raises a Jira ticket when thresholds are exceeded.

naftiko: "0.5"
info:
  label: "Snowflake Data Pipeline Health Check"
  description: "Queries Snowflake for data pipeline task failures and warehouse credit consumption anomalies, and raises a Jira ticket when thresholds are exceeded."
  tags:
    - data
    - analytics
    - snowflake
    - jira
    - monitoring
capability:
  exposes:
    - type: mcp
      namespace: data-ops
      port: 8080
      tools:
        - name: check-pipeline-health
          description: "Given a Snowflake warehouse name, query task history for failures in the last 24 hours and open a Jira incident if failures are detected."
          inputParameters:
            - name: warehouse_name
              in: body
              type: string
              description: "The Snowflake warehouse name to inspect."
          steps:
            - name: query-task-history
              type: call
              call: "snowflake.get-task-history"
              with:
                warehouse_name: "{{warehouse_name}}"
            - name: raise-incident
              type: call
              call: "jira.create-data-issue"
              with:
                project_key: "DATA"
                issuetype: "Incident"
                summary: "Snowflake pipeline failures in {{warehouse_name}}"
                description: "Failed tasks detected in warehouse {{warehouse_name}}. Count: {{query-task-history.failure_count}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://qualcomm.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: task-history
          path: "/warehouses/{{warehouse_name}}/tasks/history"
          inputParameters:
            - name: warehouse_name
              in: path
          operations:
            - name: get-task-history
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://qualcomm.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-data-issue
              method: POST

Monitors data quality SLAs in Snowflake by running validation queries, logging results in ServiceNow, and alerting data stewards via Teams when thresholds are breached.

naftiko: "0.5"
info:
  label: "Snowflake Data Quality SLA Monitor Orchestrator"
  description: "Monitors data quality SLAs in Snowflake by running validation queries, logging results in ServiceNow, and alerting data stewards via Teams when thresholds are breached."
  tags:
    - data-engineering
    - snowflake
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: data-quality
      port: 8080
      tools:
        - name: monitor-data-quality-sla
          description: "Orchestrate data quality SLA monitoring across Snowflake, ServiceNow, and Teams."
          inputParameters:
            - name: dataset_name
              in: body
              type: string
              description: "The Snowflake dataset to validate."
            - name: sla_threshold
              in: body
              type: number
              description: "The data quality SLA threshold percentage."
          steps:
            - name: run-quality-checks
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "SELECT COUNT(*) total, SUM(CASE WHEN is_valid THEN 1 ELSE 0 END) valid FROM {{dataset_name}}_quality_checks"
            - name: log-results
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Data quality check: {{dataset_name}}"
                category: "data_quality"
                description: "Total records: {{run-quality-checks.total}}, Valid: {{run-quality-checks.valid}}"
            - name: alert-stewards
              type: call
              call: "msteams.send-message"
              with:
                channel: "data-quality"
                message: "Data Quality SLA for {{dataset_name}}: {{run-quality-checks.valid}}/{{run-quality-checks.total}} valid records. Threshold: {{sla_threshold}}%."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://qualcomm.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://qualcomm.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/data-quality/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Queries Snowflake query history to surface long-running and high-cost queries, then publishes a weekly optimization digest to the data engineering Teams channel.

naftiko: "0.5"
info:
  label: "Snowflake Query Performance Digest"
  description: "Queries Snowflake query history to surface long-running and high-cost queries, then publishes a weekly optimization digest to the data engineering Teams channel."
  tags:
    - data
    - analytics
    - snowflake
    - microsoft-teams
    - performance
capability:
  exposes:
    - type: mcp
      namespace: data-performance
      port: 8080
      tools:
        - name: digest-query-performance
          description: "Fetch the top 20 longest-running Snowflake queries from the past 7 days and post an optimization digest to the data engineering Teams channel."
          inputParameters:
            - name: channel_id
              in: body
              type: string
              description: "Microsoft Teams channel ID for the data engineering team."
          steps:
            - name: get-slow-queries
              type: call
              call: "snowflake.get-query-history"
              with:
                limit: 20
            - name: post-digest
              type: call
              call: "msteams.post-performance-digest"
              with:
                channel_id: "{{channel_id}}"
                message: "Weekly Snowflake query digest: {{get-slow-queries.total_compute_credits}} credits consumed by top 20 queries. Review and optimize."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://qualcomm.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: query-history
          path: "/queries/history"
          operations:
            - name: get-query-history
              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/{{channel_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-performance-digest
              method: POST

Queries Snowflake to return the current row count for a specified table in the analytics warehouse.

naftiko: "0.5"
info:
  label: "Snowflake Table Row Count Lookup"
  description: "Queries Snowflake to return the current row count for a specified table in the analytics warehouse."
  tags:
    - data-engineering
    - snowflake
    - analytics
capability:
  exposes:
    - type: mcp
      namespace: data-ops
      port: 8080
      tools:
        - name: get-table-row-count
          description: "Execute a count query against a Snowflake table and return the row count."
          inputParameters:
            - name: table_name
              in: body
              type: string
              description: "Fully qualified Snowflake table name (e.g., DB.SCHEMA.TABLE)."
          call: "snowflake.execute-query"
          with:
            statement: "SELECT COUNT(*) as row_count FROM {{table_name}}"
          outputParameters:
            - name: row_count
              type: number
              mapping: "$.data[0][0]"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://qualcomm.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST

When a supply chain disruption is detected, queries SAP for affected purchase orders, identifies impacted Salesforce customer accounts, and sends an alert to the supply chain Teams channel.

naftiko: "0.5"
info:
  label: "Supply Chain Disruption Alert Orchestrator"
  description: "When a supply chain disruption is detected, queries SAP for affected purchase orders, identifies impacted Salesforce customer accounts, and sends an alert to the supply chain Teams channel."
  tags:
    - supply-chain
    - sap
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: supply-chain
      port: 8080
      tools:
        - name: handle-disruption-alert
          description: "Orchestrate supply chain disruption response across SAP, Salesforce, and Teams."
          inputParameters:
            - name: supplier_id
              in: body
              type: string
              description: "The SAP supplier ID experiencing disruption."
            - name: disruption_type
              in: body
              type: string
              description: "Type of disruption (e.g., delay, shortage, quality)."
          steps:
            - name: get-affected-pos
              type: call
              call: "sap.search-purchase-orders"
              with:
                supplier: "{{supplier_id}}"
                status: "open"
            - name: get-impacted-accounts
              type: call
              call: "salesforce.query"
              with:
                soql: "SELECT Id, Name FROM Account WHERE Supplier_ID__c = '{{supplier_id}}'"
            - name: send-alert
              type: call
              call: "msteams.send-message"
              with:
                channel: "supply-chain-ops"
                message: "Supply Chain Alert: {{disruption_type}} from supplier {{supplier_id}}. Affected POs: {{get-affected-pos.count}}, Impacted accounts: {{get-impacted-accounts.totalSize}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://qualcomm-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?$filter=Supplier eq '{{supplier}}' and PurchasingDocumentDeletionCode eq ''"
          inputParameters:
            - name: supplier
              in: query
          operations:
            - name: search-purchase-orders
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://qualcomm.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: query
          path: "/query"
          operations:
            - name: query
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/supply-chain-ops/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Detects infrastructure drift by comparing Terraform state with actual Azure resources, creating a Jira remediation ticket, and alerting the platform team via Teams.

naftiko: "0.5"
info:
  label: "Terraform Infrastructure Drift Detection Orchestrator"
  description: "Detects infrastructure drift by comparing Terraform state with actual Azure resources, creating a Jira remediation ticket, and alerting the platform team via Teams."
  tags:
    - devops
    - cloud
    - microsoft-azure
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: platform-engineering
      port: 8080
      tools:
        - name: detect-infra-drift
          description: "Orchestrate infrastructure drift detection across Azure, Jira, and Teams."
          inputParameters:
            - name: workspace_name
              in: body
              type: string
              description: "The Terraform Cloud workspace name."
          steps:
            - name: get-workspace-status
              type: call
              call: "github.get-workflow-run"
              with:
                repo: "qualcomm/infrastructure"
                workflow: "drift-detection"
            - name: create-remediation
              type: call
              call: "jira.create-issue"
              with:
                project: "INFRA"
                summary: "Drift detected: {{workspace_name}}"
                issue_type: "Bug"
                description: "Drift detection run: {{get-workspace-status.conclusion}}"
            - name: alert-platform
              type: call
              call: "msteams.send-message"
              with:
                channel: "platform-engineering"
                message: "Infrastructure drift detected in workspace {{workspace_name}}. Remediation ticket: {{create-remediation.key}}."
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: workflow-runs
          path: "/repos/{{repo}}/actions/workflows/{{workflow}}/runs?per_page=1"
          inputParameters:
            - name: repo
              in: path
            - name: workflow
              in: path
          operations:
            - name: get-workflow-run
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://qualcomm.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/platform-engineering/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Performs three-way matching of vendor invoices by comparing PO, goods receipt, and invoice data in SAP, then routing exceptions to the AP team via ServiceNow.

naftiko: "0.5"
info:
  label: "Vendor Invoice Three-Way Match Orchestrator"
  description: "Performs three-way matching of vendor invoices by comparing PO, goods receipt, and invoice data in SAP, then routing exceptions to the AP team via ServiceNow."
  tags:
    - finance
    - procurement
    - sap
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: accounts-payable
      port: 8080
      tools:
        - name: three-way-match
          description: "Orchestrate three-way invoice matching across SAP and ServiceNow."
          inputParameters:
            - name: invoice_number
              in: body
              type: string
              description: "The SAP invoice document number."
          steps:
            - name: get-invoice
              type: call
              call: "sap.get-invoice"
              with:
                invoice_number: "{{invoice_number}}"
            - name: get-po-details
              type: call
              call: "sap.get-po"
              with:
                po_number: "{{get-invoice.po_number}}"
            - name: get-goods-receipt
              type: call
              call: "sap.get-goods-receipt"
              with:
                po_number: "{{get-invoice.po_number}}"
            - name: create-exception
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Three-way match exception: Invoice {{invoice_number}}"
                category: "accounts_payable"
                description: "PO amount: {{get-po-details.total_value}}, GR amount: {{get-goods-receipt.total}}, Invoice amount: {{get-invoice.amount}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://qualcomm-s4.sap.com/sap/opu/odata/sap/API_SUPPLIER_INVOICE_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: invoices
          path: "/A_SupplierInvoice('{{invoice_number}}')"
          inputParameters:
            - name: invoice_number
              in: path
          operations:
            - name: get-invoice
              method: GET
        - name: purchase-orders
          path: "/A_PurchaseOrder('{{po_number}}')"
          inputParameters:
            - name: po_number
              in: path
          operations:
            - name: get-po
              method: GET
        - name: goods-receipts
          path: "/A_InboundDelivery?$filter=PurchaseOrder eq '{{po_number}}'"
          inputParameters:
            - name: po_number
              in: query
          operations:
            - name: get-goods-receipt
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://qualcomm.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST

Generates a weekly engineering standup digest by pulling sprint progress from Jira, build health from GitHub Actions, and service metrics from Datadog, then posts to Teams.

naftiko: "0.5"
info:
  label: "Weekly Engineering Standup Digest Orchestrator"
  description: "Generates a weekly engineering standup digest by pulling sprint progress from Jira, build health from GitHub Actions, and service metrics from Datadog, then posts to Teams."
  tags:
    - agile
    - jira
    - github
    - datadog
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: engineering-ops
      port: 8080
      tools:
        - name: generate-standup-digest
          description: "Orchestrate weekly standup digest across Jira, GitHub, Datadog, and Teams."
          inputParameters:
            - name: sprint_id
              in: body
              type: string
              description: "The Jira sprint ID."
            - name: team_name
              in: body
              type: string
              description: "The engineering team name."
          steps:
            - name: get-sprint-progress
              type: call
              call: "jira.get-sprint"
              with:
                sprint_id: "{{sprint_id}}"
            - name: get-build-health
              type: call
              call: "github.get-workflow-runs"
              with:
                org: "qualcomm"
                per_page: 20
            - name: get-service-health
              type: call
              call: "datadog.get-slo-summary"
              with:
                tag: "team:{{team_name}}"
            - name: post-digest
              type: call
              call: "msteams.send-message"
              with:
                channel: "{{team_name}}-standup"
                message: "Weekly Digest: Sprint {{get-sprint-progress.name}} - {{get-sprint-progress.completedIssuesCount}}/{{get-sprint-progress.issuesCount}} done. Build success rate: {{get-build-health.success_rate}}%. SLO compliance: {{get-service-health.compliance}}%."
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://qualcomm.atlassian.net/rest/agile/1.0"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: sprints
          path: "/sprint/{{sprint_id}}"
          inputParameters:
            - name: sprint_id
              in: path
          operations:
            - name: get-sprint
              method: GET
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: workflow-runs
          path: "/orgs/{{org}}/actions/runs"
          inputParameters:
            - name: org
              in: path
          operations:
            - name: get-workflow-runs
              method: GET
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.datadog_api_key"
        headerName: "DD-API-KEY"
      resources:
        - name: slos
          path: "/slo"
          operations:
            - name: get-slo-summary
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{team_name}}-standup/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Retrieves an employee's current leave balances and pending absence requests from Workday for use by HR business partners and managers.

naftiko: "0.5"
info:
  label: "Workday Absence and Leave Balance Lookup"
  description: "Retrieves an employee's current leave balances and pending absence requests from Workday for use by HR business partners and managers."
  tags:
    - hr
    - workday
    - leave-management
capability:
  exposes:
    - type: mcp
      namespace: hr-leave
      port: 8080
      tools:
        - name: get-leave-balance
          description: "Given a Workday employee ID, return current PTO, sick leave, and other leave balances along with any pending absence requests."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday worker ID."
          call: "workday.get-leave-balance"
          with:
            worker_id: "{{employee_id}}"
          outputParameters:
            - name: pto_balance
              type: number
              mapping: "$.data.timeOffBalances.ptoBalance"
            - name: sick_balance
              type: number
              mapping: "$.data.timeOffBalances.sickBalance"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: leave-balances
          path: "/qualcomm/workers/{{worker_id}}/timeOffBalances"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-leave-balance
              method: GET

Manages open enrollment by pulling eligible employees from Workday, sending enrollment reminders via Teams, and tracking completion rates in Snowflake.

naftiko: "0.5"
info:
  label: "Workday Benefits Enrollment Orchestrator"
  description: "Manages open enrollment by pulling eligible employees from Workday, sending enrollment reminders via Teams, and tracking completion rates in Snowflake."
  tags:
    - hr
    - workday
    - microsoft-teams
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: benefits
      port: 8080
      tools:
        - name: manage-benefits-enrollment
          description: "Orchestrate benefits enrollment across Workday, Teams, and Snowflake."
          inputParameters:
            - name: enrollment_period
              in: body
              type: string
              description: "The enrollment period identifier."
          steps:
            - name: get-eligible-employees
              type: call
              call: "workday.get-benefits-eligible"
              with:
                period: "{{enrollment_period}}"
            - name: get-completion-rates
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "SELECT enrolled_count, eligible_count, ROUND(enrolled_count*100.0/eligible_count,1) as pct FROM benefits_enrollment WHERE period = '{{enrollment_period}}'"
            - name: send-reminders
              type: call
              call: "msteams.send-message"
              with:
                channel: "hr-benefits"
                message: "Benefits Enrollment Update: {{get-completion-rates.pct}}% complete ({{get-completion-rates.enrolled_count}}/{{get-completion-rates.eligible_count}}). Reminder sent to pending employees."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: benefits
          path: "/qualcomm/benefits/eligibility?period={{period}}"
          inputParameters:
            - name: period
              in: query
          operations:
            - name: get-benefits-eligible
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://qualcomm.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/hr-benefits/channels/general/messages"
          operations:
            - name: send-message
              method: POST

When a compensation change is approved in Workday, syncs the update to SAP payroll, updates the budget in Snowflake, and notifies HR via Teams.

naftiko: "0.5"
info:
  label: "Workday Compensation Change Propagation"
  description: "When a compensation change is approved in Workday, syncs the update to SAP payroll, updates the budget in Snowflake, and notifies HR via Teams."
  tags:
    - hr
    - workday
    - sap
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-comp
      port: 8080
      tools:
        - name: propagate-comp-change
          description: "Orchestrate compensation change propagation across Workday, SAP, Snowflake, and Teams."
          inputParameters:
            - name: worker_id
              in: body
              type: string
              description: "The Workday worker ID."
          steps:
            - name: get-comp-change
              type: call
              call: "workday.get-compensation-change"
              with:
                worker_id: "{{worker_id}}"
            - name: sync-payroll
              type: call
              call: "sap.update-payroll-record"
              with:
                employee_id: "{{worker_id}}"
                new_salary: "{{get-comp-change.new_amount}}"
            - name: update-budget
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "UPDATE hr_budget SET allocated_salary = {{get-comp-change.new_amount}} WHERE worker_id = '{{worker_id}}'"
            - name: notify-hr
              type: call
              call: "msteams.send-message"
              with:
                channel: "hr-operations"
                message: "Compensation change processed for worker {{worker_id}}. New amount: {{get-comp-change.new_amount}}. Payroll and budget updated."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: compensation
          path: "/qualcomm/workers/{{worker_id}}/compensationHistory"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-compensation-change
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://qualcomm-s4.sap.com/sap/opu/odata/sap/API_PAYROLL_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: payroll
          path: "/A_PayrollRecord"
          operations:
            - name: update-payroll-record
              method: PATCH
    - type: http
      namespace: snowflake
      baseUri: "https://qualcomm.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/hr-operations/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Looks up an employee record in Workday by worker ID and returns name, title, department, and manager information.

naftiko: "0.5"
info:
  label: "Workday Employee Directory Lookup"
  description: "Looks up an employee record in Workday by worker ID and returns name, title, department, and manager information."
  tags:
    - hr
    - workday
    - directory
capability:
  exposes:
    - type: mcp
      namespace: hr-directory
      port: 8080
      tools:
        - name: get-employee-details
          description: "Retrieve employee details from Workday including name, title, department, and reporting manager."
          inputParameters:
            - name: worker_id
              in: body
              type: string
              description: "The Workday worker ID to look up."
          call: "workday.get-worker"
          with:
            worker_id: "{{worker_id}}"
          outputParameters:
            - name: full_name
              type: string
              mapping: "$.worker.descriptor"
            - name: title
              type: string
              mapping: "$.worker.businessTitle"
            - name: department
              type: string
              mapping: "$.worker.supervisoryOrganization.descriptor"
            - name: manager
              type: string
              mapping: "$.worker.manager.descriptor"
  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: "/qualcomm/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET

Tracks mandatory training compliance by querying completion status in Workday, identifying non-compliant employees, and sending reminder notifications via Teams.

naftiko: "0.5"
info:
  label: "Workday Learning Compliance Tracker Orchestrator"
  description: "Tracks mandatory training compliance by querying completion status in Workday, identifying non-compliant employees, and sending reminder notifications via Teams."
  tags:
    - hr
    - compliance
    - workday
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: learning
      port: 8080
      tools:
        - name: track-training-compliance
          description: "Orchestrate training compliance tracking across Workday and Teams."
          inputParameters:
            - name: course_id
              in: body
              type: string
              description: "The Workday learning course ID."
            - name: deadline
              in: body
              type: string
              description: "The compliance deadline in YYYY-MM-DD format."
          steps:
            - name: get-completion-status
              type: call
              call: "workday.get-learning-completions"
              with:
                course_id: "{{course_id}}"
            - name: get-non-compliant
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "SELECT worker_id, email FROM employees WHERE worker_id NOT IN (SELECT worker_id FROM training_completions WHERE course_id = '{{course_id}}')"
            - name: send-reminders
              type: call
              call: "msteams.send-message"
              with:
                channel: "hr-compliance"
                message: "Training compliance for course {{course_id}}: {{get-completion-status.completed}}/{{get-completion-status.total}} complete. Deadline: {{deadline}}. {{get-non-compliant.count}} employees need reminders."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: learning
          path: "/qualcomm/learning/completions?course={{course_id}}"
          inputParameters:
            - name: course_id
              in: query
          operations:
            - name: get-learning-completions
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://qualcomm.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/hr-compliance/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Triggers the annual performance review cycle in Workday, assigns review tasks to all active employees, and sends kick-off notifications via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Workday Performance Review Cycle Launcher"
  description: "Triggers the annual performance review cycle in Workday, assigns review tasks to all active employees, and sends kick-off notifications via Microsoft Teams."
  tags:
    - hr
    - performance-management
    - workday
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-performance
      port: 8080
      tools:
        - name: launch-review-cycle
          description: "Given a review cycle name and deadline, initiate the Workday performance review process for all active employees and notify managers in Teams."
          inputParameters:
            - name: cycle_name
              in: body
              type: string
              description: "The performance review cycle name (e.g., 2025 Annual Review)."
            - name: deadline
              in: body
              type: string
              description: "Review completion deadline in YYYY-MM-DD format."
          steps:
            - name: create-cycle
              type: call
              call: "workday.create-review-cycle"
              with:
                name: "{{cycle_name}}"
                deadline: "{{deadline}}"
            - name: notify-managers
              type: call
              call: "msteams.broadcast-review-kickoff"
              with:
                channel_id: "people-managers"
                message: "Performance review cycle '{{cycle_name}}' is now open. Deadline: {{deadline}}. Workday cycle ID: {{create-cycle.cycle_id}}."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: review-cycles
          path: "/qualcomm/performanceReviews"
          operations:
            - name: create-review-cycle
              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/{{channel_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: broadcast-review-kickoff
              method: POST

When an employee's role or department changes in Workday, updates their Salesforce profile, revises Okta group memberships, and notifies their new manager in Teams.

naftiko: "0.5"
info:
  label: "Workday Role Change Propagation"
  description: "When an employee's role or department changes in Workday, updates their Salesforce profile, revises Okta group memberships, and notifies their new manager in Teams."
  tags:
    - hr
    - identity
    - workday
    - salesforce
    - okta
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-role-change
      port: 8080
      tools:
        - name: propagate-role-change
          description: "Given a Workday employee ID and new role details, update the employee's Salesforce user profile, revise Okta group memberships, and send a Teams notification to the new manager."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "Workday worker ID of the employee changing roles."
            - name: new_role
              in: body
              type: string
              description: "The new job title or role name."
            - name: new_department
              in: body
              type: string
              description: "The new department name."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{employee_id}}"
            - name: update-salesforce
              type: call
              call: "salesforce.update-user-profile"
              with:
                user_id: "{{get-employee.salesforce_user_id}}"
                title: "{{new_role}}"
                department: "{{new_department}}"
            - name: notify-manager
              type: call
              call: "msteams.send-role-change-notice"
              with:
                recipient: "{{get-employee.manager_email}}"
                message: "{{get-employee.full_name}} has moved to {{new_department}} as {{new_role}}."
  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: "/qualcomm/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://qualcomm.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: users
          path: "/sobjects/User/{{user_id}}"
          inputParameters:
            - name: user_id
              in: path
          operations:
            - name: update-user-profile
              method: PATCH
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient}}/sendMail"
          inputParameters:
            - name: recipient
              in: path
          operations:
            - name: send-role-change-notice
              method: POST

Retrieves cloud recording details for a specified Zoom meeting ID.

naftiko: "0.5"
info:
  label: "Zoom Meeting Recording Lookup"
  description: "Retrieves cloud recording details for a specified Zoom meeting ID."
  tags:
    - collaboration
    - zoom
    - meetings
capability:
  exposes:
    - type: mcp
      namespace: collaboration
      port: 8080
      tools:
        - name: get-meeting-recordings
          description: "Look up cloud recordings for a Zoom meeting and return recording URLs and duration."
          inputParameters:
            - name: meeting_id
              in: body
              type: string
              description: "The Zoom meeting ID."
          call: "zoom.get-recordings"
          with:
            meeting_id: "{{meeting_id}}"
          outputParameters:
            - name: recording_count
              type: number
              mapping: "$.recording_count"
            - name: recording_files
              type: array
              mapping: "$.recording_files[*].download_url"
  consumes:
    - type: http
      namespace: zoom
      baseUri: "https://api.zoom.us/v2"
      authentication:
        type: bearer
        token: "$secrets.zoom_token"
      resources:
        - name: recordings
          path: "/meetings/{{meeting_id}}/recordings"
          inputParameters:
            - name: meeting_id
              in: path
          operations:
            - name: get-recordings
              method: GET