Qualcomm Capabilities
Naftiko 0.5 capability definitions for Qualcomm - 102 capabilities showing integration workflows and service orchestrations.
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