Broadcom Capabilities

Naftiko 0.5 capability definitions for Broadcom - 103 capabilities showing integration workflows and service orchestrations.

Sort
Expand

Tracks post-acquisition integration milestones in Jira, syncs progress to SAP project system, and distributes weekly status reports via Confluence.

naftiko: "0.5"
info:
  label: "Acquisition Integration Checklist Orchestrator"
  description: "Tracks post-acquisition integration milestones in Jira, syncs progress to SAP project system, and distributes weekly status reports via Confluence."
  tags:
    - operations
    - jira
    - sap
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: acquisition-integration
      port: 8080
      tools:
        - name: track-integration-milestones
          description: "Track acquisition integration milestones across Jira, SAP, and Confluence."
          inputParameters:
            - name: acquisition_name
              in: body
              type: string
              description: "Name of the acquired company."
            - name: week_number
              in: body
              type: number
              description: "Integration week number."
          steps:
            - name: get-milestones
              type: call
              call: "jira.search-issues"
              with:
                jql: "project=ACQ AND labels={{acquisition_name}}"
            - name: sync-sap
              type: call
              call: "sap.update-project-status"
              with:
                project: "{{acquisition_name}}"
                week: "{{week_number}}"
            - name: publish-report
              type: call
              call: "confluence.create-page"
              with:
                space_key: "ACQ"
                title: "{{acquisition_name}} Integration Week {{week_number}} Status"
                body: "Milestones: {{get-milestones.total}}"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://broadcom.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: GET
    - type: http
      namespace: sap
      baseUri: "https://broadcom-s4.sap.com/sap/opu/odata/sap/PS_PROJECT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: projects
          path: "/A_Project"
          operations:
            - name: update-project-status
              method: PATCH
    - type: http
      namespace: confluence
      baseUri: "https://broadcom.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: content
          path: "/content"
          operations:
            - name: create-page
              method: POST

Given a batch of GitHub Advanced Security CVE alerts, uses Anthropic Claude to assess exploitability and business impact, and routes findings to the appropriate Jira security queues.

naftiko: "0.5"
info:
  label: "AI-Assisted Security Vulnerability Triage"
  description: "Given a batch of GitHub Advanced Security CVE alerts, uses Anthropic Claude to assess exploitability and business impact, and routes findings to the appropriate Jira security queues."
  tags:
    - ai
    - automation
    - anthropic
    - security
    - github
    - jira
    - vulnerability-management
capability:
  exposes:
    - type: mcp
      namespace: ai-security
      port: 8080
      tools:
        - name: triage-vulnerabilities
          description: "Given a list of CVE IDs and affected Broadcom repositories, use Anthropic Claude to assess severity context and exploitability, then create Jira security tickets with triage reasoning. Use for batch CVE assessment across semiconductor, VMware, and CA software repositories."
          inputParameters:
            - name: cve_ids
              in: body
              type: string
              description: "Comma-separated list of CVE IDs to triage."
            - name: product_line
              in: body
              type: string
              description: "The Broadcom product line affected, e.g. 'VMware', 'CA Software', 'Semiconductor'."
          steps:
            - name: assess-cves
              type: call
              call: "anthropic.create-message"
              with:
                model: "claude-opus-4-5"
                max_tokens: 2048
                system: "You are a security triage specialist for an enterprise software and semiconductor company. Assess CVE exploitability, business impact, and recommended remediation priority."
                content: "Assess the following CVEs for {{product_line}}: {{cve_ids}}. For each, provide: exploitability rating, business impact, and remediation priority."
            - name: create-sec-tickets
              type: call
              call: "jira.create-issue"
              with:
                project_key: "SEC"
                issuetype: "Bug"
                summary: "CVE triage batch: {{product_line}} — {{cve_ids}}"
                description: "Product Line: {{product_line}}\nCVEs: {{cve_ids}}\nAI Assessment: {{assess-cves.content}}"
  consumes:
    - type: http
      namespace: anthropic
      baseUri: "https://api.anthropic.com/v1"
      authentication:
        type: apikey
        key: "x-api-key"
        value: "$secrets.anthropic_api_key"
        placement: header
      resources:
        - name: messages
          path: "/messages"
          operations:
            - name: create-message
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://broadcom.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

Validates ASIC tapeout readiness by checking DRC sign-off in Snowflake, verifying open blockers in Jira, and posting readiness summary to the design Teams channel.

naftiko: "0.5"
info:
  label: "ASIC Design Tapeout Readiness Orchestrator"
  description: "Validates ASIC tapeout readiness by checking DRC sign-off in Snowflake, verifying open blockers in Jira, and posting readiness summary to the design Teams channel."
  tags:
    - chip-design
    - manufacturing
    - snowflake
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: chip-engineering
      port: 8080
      tools:
        - name: check-tapeout-readiness
          description: "Orchestrate ASIC tapeout readiness across Snowflake, Jira, and Teams."
          inputParameters:
            - name: design_id
              in: body
              type: string
              description: "The ASIC design identifier."
            - name: jira_epic_key
              in: body
              type: string
              description: "The Jira epic for tapeout sign-off."
          steps:
            - name: get-drc-status
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "SELECT design_id, drc_clean, lvs_clean FROM chip_signoff WHERE design_id = '{{design_id}}'"
            - name: get-blockers
              type: call
              call: "jira.search-issues"
              with:
                jql: "epic = {{jira_epic_key}} AND status != Done"
            - name: post-summary
              type: call
              call: "msteams.send-message"
              with:
                channel: "asic-design"
                message: "Tapeout Readiness {{design_id}}: DRC={{get-drc-status.drc_clean}}, Open blockers={{get-blockers.total}}."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://broadcom.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://broadcom.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/asic-design/channels/general/messages"
          operations:
            - name: send-message
              method: POST

When AWS Cost Explorer detects a spend anomaly for a Broadcom account, creates a Jira ticket for the cloud platform team and posts a Slack summary to the FinOps channel.

naftiko: "0.5"
info:
  label: "AWS Cloud Cost Anomaly Responder"
  description: "When AWS Cost Explorer detects a spend anomaly for a Broadcom account, creates a Jira ticket for the cloud platform team and posts a Slack summary to the FinOps channel."
  tags:
    - cloud
    - finops
    - aws
    - jira
    - slack
    - cost-management
capability:
  exposes:
    - type: mcp
      namespace: finops-ops
      port: 8080
      tools:
        - name: handle-cost-anomaly
          description: "Given an AWS account ID, anomaly detection alert, and owning team name, create a Jira FinOps task and post a Slack alert. Use when cloud spend anomaly thresholds are exceeded for Broadcom AWS accounts running VMware Cloud or semiconductor EDA workloads."
          inputParameters:
            - name: aws_account_id
              in: body
              type: string
              description: "The AWS account ID where the anomaly was detected."
            - name: anomaly_amount
              in: body
              type: number
              description: "The dollar amount exceeding the expected spend baseline."
            - name: team_name
              in: body
              type: string
              description: "The owning team name for Jira ticket routing."
          steps:
            - name: create-ticket
              type: call
              call: "jira.create-issue"
              with:
                project_key: "FINOPS"
                issuetype: "Task"
                summary: "AWS cost anomaly: account {{aws_account_id}} — ${{anomaly_amount}} overage"
                description: "Account: {{aws_account_id}}\nOverage: ${{anomaly_amount}}\nTeam: {{team_name}}"
            - name: notify-finops
              type: call
              call: "slack.post-message"
              with:
                channel: "finops-alerts"
                text: "AWS cost anomaly on account {{aws_account_id}}: ${{anomaly_amount}} over baseline. Team: {{team_name}}. Jira: {{create-ticket.key}}."
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://broadcom.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: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Retrieves the latest build status for an Azure DevOps pipeline.

naftiko: "0.5"
info:
  label: "Azure DevOps Build Status Lookup"
  description: "Retrieves the latest build status for an Azure DevOps pipeline."
  tags:
    - cicd
    - azure-devops
capability:
  exposes:
    - type: mcp
      namespace: devops-builds
      port: 8080
      tools:
        - name: get-build-status
          description: "Look up latest build status for an Azure DevOps pipeline definition."
          inputParameters:
            - name: pipeline_id
              in: body
              type: string
              description: "Azure DevOps pipeline definition ID."
          call: "azdo.get-build"
          with:
            definition_id: "{{pipeline_id}}"
          outputParameters:
            - name: build_status
              type: string
              mapping: "$.value[0].status"
            - name: build_result
              type: string
              mapping: "$.value[0].result"
  consumes:
    - type: http
      namespace: azdo
      baseUri: "https://dev.azure.com/broadcom"
      authentication:
        type: bearer
        token: "$secrets.azdo_token"
      resources:
        - name: builds
          path: "/_apis/build/builds?definitions={{definition_id}}&$top=1"
          inputParameters:
            - name: definition_id
              in: query
          operations:
            - name: get-build
              method: GET

Identifies orphaned Azure resources, generates a cleanup plan, gets approval via ServiceNow, and executes deletion.

naftiko: "0.5"
info:
  label: "Azure Resource Cleanup Orchestrator"
  description: "Identifies orphaned Azure resources, generates a cleanup plan, gets approval via ServiceNow, and executes deletion."
  tags:
    - cloud
    - microsoft-azure
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: azure-cleanup
      port: 8080
      tools:
        - name: cleanup-orphaned-resources
          description: "Identify orphaned Azure resources, get ServiceNow approval, and execute cleanup."
          inputParameters:
            - name: subscription_id
              in: body
              type: string
              description: "Azure subscription ID."
            - name: resource_group
              in: body
              type: string
              description: "Azure resource group."
          steps:
            - name: scan-resources
              type: call
              call: "azure.list-resources"
              with:
                subscription_id: "{{subscription_id}}"
                resource_group: "{{resource_group}}"
            - name: create-approval
              type: call
              call: "servicenow.create-change"
              with:
                short_description: "Azure resource cleanup for {{resource_group}}"
                category: "cloud"
            - name: execute-cleanup
              type: call
              call: "azure.delete-resources"
              with:
                resource_group: "{{resource_group}}"
                change_number: "{{create-approval.number}}"
  consumes:
    - type: http
      namespace: azure
      baseUri: "https://management.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azure_token"
      resources:
        - name: resources
          path: "/subscriptions/{{subscription_id}}/resourceGroups/{{resource_group}}/resources"
          inputParameters:
            - name: subscription_id
              in: path
            - name: resource_group
              in: path
          operations:
            - name: list-resources
              method: GET
            - name: delete-resources
              method: DELETE
    - type: http
      namespace: servicenow
      baseUri: "https://broadcom.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
              method: POST

Queries Azure Cost Management for the month-to-date spend of a 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 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]"
  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 change request for a critical enterprise software or data center system is submitted in ServiceNow, retrieves risk details, routes to the CAB via Slack, and updates the ticket status.

naftiko: "0.5"
info:
  label: "Change Management Approval Gate"
  description: "When a change request for a critical enterprise software or data center system is submitted in ServiceNow, retrieves risk details, routes to the CAB via Slack, and updates the ticket status."
  tags:
    - itsm
    - change-management
    - servicenow
    - slack
    - approval
capability:
  exposes:
    - type: mcp
      namespace: change-management
      port: 8080
      tools:
        - name: route-change-request
          description: "Given a ServiceNow change request number, fetch the change details and risk level, post a CAB review request to the Slack change-advisory channel, and update the change state to under review. Use for all changes to production VMware Cloud, networking, or enterprise software systems."
          inputParameters:
            - name: change_number
              in: body
              type: string
              description: "The ServiceNow change request number, e.g. 'CHG0004567'."
          steps:
            - name: get-change
              type: call
              call: "servicenow.get-change"
              with:
                number: "{{change_number}}"
            - name: notify-cab
              type: call
              call: "slack.post-message"
              with:
                channel: "change-advisory-board"
                text: "CAB Review: {{change_number}} — {{get-change.short_description}} | Risk: {{get-change.risk}} | System: {{get-change.cmdb_ci}} | Planned: {{get-change.start_date}}"
            - name: update-change
              type: call
              call: "servicenow-update.patch-change"
              with:
                sys_id: "{{get-change.sys_id}}"
                state: "2"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://broadcom.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: changes
          path: "/table/change_request"
          operations:
            - name: get-change
              method: GET
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST
    - type: http
      namespace: servicenow-update
      baseUri: "https://broadcom.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: change-patch
          path: "/table/change_request/{{sys_id}}"
          inputParameters:
            - name: sys_id
              in: path
          operations:
            - name: patch-change
              method: PATCH

Validates chip design review checklist completion in Jira, collects sign-off from reviewers via Slack, and updates the milestone tracker in SAP.

naftiko: "0.5"
info:
  label: "Chip Design Review Gate Orchestrator"
  description: "Validates chip design review checklist completion in Jira, collects sign-off from reviewers via Slack, and updates the milestone tracker in SAP."
  tags:
    - engineering
    - jira
    - slack
    - sap
capability:
  exposes:
    - type: mcp
      namespace: design-review
      port: 8080
      tools:
        - name: run-design-review-gate
          description: "Execute chip design review gate by validating Jira checklist, collecting Slack sign-offs, and updating SAP milestone."
          inputParameters:
            - name: design_id
              in: body
              type: string
              description: "Chip design project ID."
            - name: milestone
              in: body
              type: string
              description: "Design milestone name."
          steps:
            - name: check-jira-tasks
              type: call
              call: "jira.get-sprint-issues"
              with:
                project: "{{design_id}}"
                milestone: "{{milestone}}"
            - name: request-signoff
              type: call
              call: "slack.post-message"
              with:
                channel: "#design-reviews"
                text: "Design review gate for {{design_id}} milestone {{milestone}} - all tasks complete. Please sign off."
            - name: update-milestone
              type: call
              call: "sap.update-milestone"
              with:
                project_id: "{{design_id}}"
                milestone: "{{milestone}}"
                status: "approved"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://broadcom.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: search
          path: "/search"
          operations:
            - name: get-sprint-issues
              method: GET
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://broadcom-s4.sap.com/sap/opu/odata/sap/PS_PROJECT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: milestones
          path: "/A_ProjectMilestone"
          operations:
            - name: update-milestone
              method: PATCH

When a GitHub Actions pipeline fails on a protected branch, creates a Jira bug, posts an alert to Slack, and triggers a PagerDuty incident for the on-call engineering team.

naftiko: "0.5"
info:
  label: "CI/CD Pipeline Failure Handler"
  description: "When a GitHub Actions pipeline fails on a protected branch, creates a Jira bug, posts an alert to Slack, and triggers a PagerDuty incident for the on-call engineering team."
  tags:
    - devops
    - cicd
    - github
    - jira
    - slack
    - pagerduty
    - incident-response
capability:
  exposes:
    - type: mcp
      namespace: devops-ops
      port: 8080
      tools:
        - name: handle-pipeline-failure
          description: "Given a GitHub Actions failure on a protected branch, create a Jira bug, post a Slack alert to the engineering channel, and trigger PagerDuty for on-call response. Use for critical CI/CD failures affecting release pipelines."
          inputParameters:
            - name: repo
              in: body
              type: string
              description: "The GitHub repository full name, e.g. 'broadcom/vmware-vsphere'."
            - name: branch
              in: body
              type: string
              description: "The Git branch where the failure occurred."
            - name: run_id
              in: body
              type: string
              description: "The GitHub Actions run ID."
            - name: failed_job
              in: body
              type: string
              description: "The name of the failed CI job."
          steps:
            - name: create-bug
              type: call
              call: "jira.create-issue"
              with:
                project_key: "ENG"
                issuetype: "Bug"
                summary: "[CI Failure] {{repo}} / {{branch}} — {{failed_job}}"
                description: "Repository: {{repo}}\nBranch: {{branch}}\nRun ID: {{run_id}}"
            - name: alert-slack
              type: call
              call: "slack.post-message"
              with:
                channel: "engineering-alerts"
                text: "Pipeline failure in {{repo}} on {{branch}}. Job: {{failed_job}} | Jira: {{create-bug.key}} | Run: {{run_id}}"
            - name: page-oncall
              type: call
              call: "pagerduty.create-incident"
              with:
                title: "CI Failure: {{repo}} {{branch}} {{failed_job}}"
                service_id: "$secrets.pagerduty_engineering_service_id"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://broadcom.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: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.pagerduty_token"
        placement: header
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: create-incident
              method: POST

Queries Cisco DNA Center for the operational status of a network switch interface.

naftiko: "0.5"
info:
  label: "Cisco Switch Interface Status Lookup"
  description: "Queries Cisco DNA Center for the operational status of a network switch interface."
  tags:
    - network
    - cisco
capability:
  exposes:
    - type: mcp
      namespace: network-ops
      port: 8080
      tools:
        - name: get-interface-status
          description: "Look up Cisco switch interface operational status by device and interface name."
          inputParameters:
            - name: device_id
              in: body
              type: string
              description: "Cisco DNA Center device ID."
            - name: interface_name
              in: body
              type: string
              description: "The interface name."
          call: "cisco.get-interface"
          with:
            device_id: "{{device_id}}"
            interface_name: "{{interface_name}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.response[0].status"
            - name: speed
              type: string
              mapping: "$.response[0].speed"
  consumes:
    - type: http
      namespace: cisco
      baseUri: "https://dnac.broadcom.com/dna/intent/api/v1"
      authentication:
        type: bearer
        token: "$secrets.cisco_dnac_token"
      resources:
        - name: interfaces
          path: "/interface/network-device/{{device_id}}"
          inputParameters:
            - name: device_id
              in: path
          operations:
            - name: get-interface
              method: GET

Analyzes AWS cost data, identifies optimization opportunities, creates a Jira epic for implementation, and shares findings on Slack.

naftiko: "0.5"
info:
  label: "Cloud Cost Optimization Recommendation Orchestrator"
  description: "Analyzes AWS cost data, identifies optimization opportunities, creates a Jira epic for implementation, and shares findings on Slack."
  tags:
    - finops
    - aws
    - jira
    - slack
capability:
  exposes:
    - type: mcp
      namespace: cost-optimization
      port: 8080
      tools:
        - name: generate-cost-recommendations
          description: "Generate cloud cost optimization recommendations by analyzing AWS spend, creating Jira implementation epics, and sharing on Slack."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "AWS account ID to analyze."
            - name: lookback_days
              in: body
              type: number
              description: "Number of days to analyze."
          steps:
            - name: get-cost-data
              type: call
              call: "aws.get-cost-and-usage"
              with:
                account_id: "{{account_id}}"
                lookback_days: "{{lookback_days}}"
            - name: create-epic
              type: call
              call: "jira.create-issue"
              with:
                project: "FINOPS"
                summary: "Cost optimization for AWS account {{account_id}}"
                issue_type: "Epic"
            - name: share-findings
              type: call
              call: "slack.post-message"
              with:
                channel: "#finops"
                text: "Cost optimization opportunities for account {{account_id}}: Jira epic {{create-epic.key}}"
  consumes:
    - type: http
      namespace: aws
      baseUri: "https://ce.us-east-1.amazonaws.com"
      authentication:
        type: bearer
        token: "$secrets.aws_ce_token"
      resources:
        - name: cost-and-usage
          path: "/"
          operations:
            - name: get-cost-and-usage
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://broadcom.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: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Identifies SAP Concur expense reports pending manager approval beyond the policy threshold and sends Slack reminders to the responsible approvers.

naftiko: "0.5"
info:
  label: "Concur Expense Report Approval Escalation"
  description: "Identifies SAP Concur expense reports pending manager approval beyond the policy threshold and sends Slack reminders to the responsible approvers."
  tags:
    - finance
    - expense-management
    - sap-concur
    - slack
    - approval
capability:
  exposes:
    - type: mcp
      namespace: expense-ops
      port: 8080
      tools:
        - name: escalate-pending-expenses
          description: "Retrieve expense reports from SAP Concur that have been pending approval beyond the specified number of days and send Slack reminders to the responsible approvers. Use for weekly expense compliance enforcement."
          inputParameters:
            - name: pending_days
              in: body
              type: integer
              description: "Minimum number of days an expense report must be pending to trigger a reminder. Broadcom policy typically requires approval within 5 business days."
          steps:
            - name: get-pending-reports
              type: call
              call: "concur.list-pending-reports"
              with:
                approvalStatusCode: "A_PEND"
                limit: "100"
            - name: notify-approvers
              type: call
              call: "slack.post-message"
              with:
                channel: "expense-reminders"
                text: "Reminder: {{get-pending-reports.count}} expense report(s) have been pending approval for more than {{pending_days}} days. Please review in SAP Concur."
  consumes:
    - type: http
      namespace: concur
      baseUri: "https://www.concursolutions.com/api/v3.0"
      authentication:
        type: bearer
        token: "$secrets.concur_token"
      resources:
        - name: expense-reports
          path: "/expense/reports"
          operations:
            - name: list-pending-reports
              method: GET
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Identifies stale Confluence pages, archives them to long-term storage, and notifies page owners via Slack.

naftiko: "0.5"
info:
  label: "Confluence Knowledge Base Archival Orchestrator"
  description: "Identifies stale Confluence pages, archives them to long-term storage, and notifies page owners via Slack."
  tags:
    - collaboration
    - confluence
    - slack
capability:
  exposes:
    - type: mcp
      namespace: kb-archival
      port: 8080
      tools:
        - name: archive-stale-pages
          description: "Archive stale Confluence pages and notify owners via Slack."
          inputParameters:
            - name: space_key
              in: body
              type: string
              description: "Confluence space key."
            - name: stale_days
              in: body
              type: number
              description: "Days since last modification to consider stale."
          steps:
            - name: find-stale
              type: call
              call: "confluence.search-content"
              with:
                space_key: "{{space_key}}"
                stale_days: "{{stale_days}}"
            - name: archive-pages
              type: call
              call: "confluence.archive-pages"
              with:
                space_key: "{{space_key}}"
                page_ids: "{{find-stale.page_ids}}"
            - name: notify-owners
              type: call
              call: "slack.post-message"
              with:
                channel: "#content-ops"
                text: "Archived {{find-stale.count}} stale pages in {{space_key}}"
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://broadcom.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: content
          path: "/content/search"
          operations:
            - name: search-content
              method: GET
            - name: archive-pages
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              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 by 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://broadcom.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

Returns the total number of pages in a Confluence space.

naftiko: "0.5"
info:
  label: "Confluence Space Page Count Lookup"
  description: "Returns the total number of pages in a Confluence space."
  tags:
    - collaboration
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: wiki-info
      port: 8080
      tools:
        - name: get-space-page-count
          description: "Look up total page count for a Confluence space by space key."
          inputParameters:
            - name: space_key
              in: body
              type: string
              description: "Confluence space key."
          call: "confluence.get-space-content"
          with:
            space_key: "{{space_key}}"
          outputParameters:
            - name: page_count
              type: number
              mapping: "$.size"
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://broadcom.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: content
          path: "/space/{{space_key}}/content/page"
          inputParameters:
            - name: space_key
              in: path
          operations:
            - name: get-space-content
              method: GET

When a Salesforce case is escalated, retrieves account details, creates a priority ServiceNow incident, and notifies the customer success team via Slack.

naftiko: "0.5"
info:
  label: "Customer Escalation Response Orchestrator"
  description: "When a Salesforce case is escalated, retrieves account details, creates a priority ServiceNow incident, and notifies the customer success team via Slack."
  tags:
    - support
    - salesforce
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: customer-escalation
      port: 8080
      tools:
        - name: handle-escalation
          description: "Handle customer escalation by pulling Salesforce case details, opening a ServiceNow P1 incident, and alerting the CS team."
          inputParameters:
            - name: case_id
              in: body
              type: string
              description: "Salesforce case ID."
          steps:
            - name: get-case
              type: call
              call: "salesforce.get-case"
              with:
                case_id: "{{case_id}}"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Customer escalation: {{get-case.subject}}"
                urgency: "1"
                impact: "1"
            - name: notify-cs
              type: call
              call: "slack.post-message"
              with:
                channel: "#customer-success"
                text: "Escalation for {{get-case.account_name}}: {{get-case.subject}}. ServiceNow: {{create-incident.number}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://broadcom.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: servicenow
      baseUri: "https://broadcom.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: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Monitors data center capacity via Datadog, creates a ServiceNow change request when thresholds are breached, and alerts the infrastructure team on Microsoft Teams.

naftiko: "0.5"
info:
  label: "Data Center Capacity Alert Orchestrator"
  description: "Monitors data center capacity via Datadog, creates a ServiceNow change request when thresholds are breached, and alerts the infrastructure team on Microsoft Teams."
  tags:
    - infrastructure
    - datadog
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: dc-capacity
      port: 8080
      tools:
        - name: handle-capacity-alert
          description: "When data center capacity threshold is breached, create a ServiceNow change request and alert the infra team on Teams."
          inputParameters:
            - name: datacenter_id
              in: body
              type: string
              description: "Data center identifier."
            - name: metric_name
              in: body
              type: string
              description: "Capacity metric name."
          steps:
            - name: get-metric
              type: call
              call: "datadog.query-metric"
              with:
                datacenter_id: "{{datacenter_id}}"
                metric: "{{metric_name}}"
            - name: create-change
              type: call
              call: "servicenow.create-change"
              with:
                short_description: "Capacity threshold breached in {{datacenter_id}}"
                category: "infrastructure"
            - name: notify-teams
              type: call
              call: "teams.post-message"
              with:
                channel: "Infrastructure Alerts"
                text: "DC {{datacenter_id}} capacity alert. Change request: {{create-change.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: query
          path: "/query"
          operations:
            - name: query-metric
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://broadcom.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
              method: POST
    - type: http
      namespace: teams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.teams_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          operations:
            - name: post-message
              method: POST

When a Datadog alert fires, enriches it with service metadata, triggers a PagerDuty incident, and posts context to Slack.

naftiko: "0.5"
info:
  label: "Datadog Alert to PagerDuty Escalation Orchestrator"
  description: "When a Datadog alert fires, enriches it with service metadata, triggers a PagerDuty incident, and posts context to Slack."
  tags:
    - observability
    - datadog
    - pagerduty
    - slack
capability:
  exposes:
    - type: mcp
      namespace: alert-escalation
      port: 8080
      tools:
        - name: escalate-datadog-alert
          description: "Escalate a Datadog alert by triggering PagerDuty and posting context to Slack."
          inputParameters:
            - name: monitor_id
              in: body
              type: string
              description: "Datadog monitor ID."
            - name: service_name
              in: body
              type: string
              description: "Affected service name."
          steps:
            - name: get-monitor
              type: call
              call: "datadog.get-monitor-details"
              with:
                monitor_id: "{{monitor_id}}"
            - name: trigger-incident
              type: call
              call: "pagerduty.create-incident"
              with:
                service_name: "{{service_name}}"
                title: "Alert: {{get-monitor.name}}"
            - name: post-context
              type: call
              call: "slack.post-message"
              with:
                channel: "#incidents"
                text: "PagerDuty incident created for {{service_name}}: {{get-monitor.name}}. PD: {{trigger-incident.id}}"
  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-details
              method: GET
    - 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: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

When a Datadog monitor for production semiconductor or VMware infrastructure crosses a critical threshold, creates a PagerDuty incident and posts a Slack alert for on-call response.

naftiko: "0.5"
info:
  label: "Datadog Infrastructure Alert Escalation"
  description: "When a Datadog monitor for production semiconductor or VMware infrastructure crosses a critical threshold, creates a PagerDuty incident and posts a Slack alert for on-call response."
  tags:
    - observability
    - datadog
    - pagerduty
    - slack
    - monitoring
    - incident-response
capability:
  exposes:
    - type: mcp
      namespace: observability-ops
      port: 8080
      tools:
        - name: escalate-monitor-alert
          description: "Given a Datadog monitor ID in ALERT state and PagerDuty service ID, fetch monitor details, trigger a PagerDuty incident, and post a Slack alert. Use for production monitors covering networking chips, VMware infrastructure, or enterprise software SLAs."
          inputParameters:
            - name: monitor_id
              in: body
              type: integer
              description: "The Datadog monitor ID in ALERT state."
            - name: pagerduty_service_id
              in: body
              type: string
              description: "The PagerDuty service ID to route the incident to."
          steps:
            - name: get-monitor
              type: call
              call: "datadog.get-monitor"
              with:
                monitor_id: "{{monitor_id}}"
            - name: create-incident
              type: call
              call: "pagerduty.create-incident"
              with:
                title: "{{get-monitor.name}} — ALERT"
                service_id: "{{pagerduty_service_id}}"
                body: "Monitor: {{get-monitor.name}}\nQuery: {{get-monitor.query}}"
            - name: alert-slack
              type: call
              call: "slack.post-message"
              with:
                channel: "infrastructure-alerts"
                text: "Datadog ALERT: {{get-monitor.name}} | PagerDuty incident created for {{pagerduty_service_id}}."
  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: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.pagerduty_token"
        placement: header
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

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

naftiko: "0.5"
info:
  label: "Datadog 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 for a service from Datadog APM."
          inputParameters:
            - name: service_name
              in: body
              type: string
              description: "The Datadog service name."
          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

Fetches current SLO compliance metrics from Datadog for all production services and publishes a compliance summary to the engineering Confluence space and Slack channel.

naftiko: "0.5"
info:
  label: "Datadog SLO Compliance Report"
  description: "Fetches current SLO compliance metrics from Datadog for all production services and publishes a compliance summary to the engineering Confluence space and Slack channel."
  tags:
    - observability
    - datadog
    - confluence
    - slack
    - reporting
    - slo
capability:
  exposes:
    - type: mcp
      namespace: slo-reporting
      port: 8080
      tools:
        - name: publish-slo-report
          description: "Fetch all SLO metrics from Datadog for production Broadcom services and publish a structured compliance report to Confluence, then announce in the engineering Slack channel. Use weekly before reliability review meetings."
          inputParameters:
            - name: confluence_page_id
              in: body
              type: string
              description: "The Confluence page ID where the SLO report will be published."
          steps:
            - name: get-slos
              type: call
              call: "datadog.list-slos"
              with:
                tags: "env:production"
            - name: update-report
              type: call
              call: "confluence.update-page"
              with:
                page_id: "{{confluence_page_id}}"
                content: "SLO Report: {{get-slos.count}} SLOs tracked in production."
            - name: notify-engineering
              type: call
              call: "slack.post-message"
              with:
                channel: "engineering-reliability"
                text: "Weekly SLO report published to Confluence. {{get-slos.count}} SLOs tracked. Review: {{update-report.url}}"
  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"
          operations:
            - name: list-slos
              method: GET
    - type: http
      namespace: confluence
      baseUri: "https://broadcom.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: pages
          path: "/content/{{page_id}}"
          inputParameters:
            - name: page_id
              in: path
          operations:
            - name: update-page
              method: PUT
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Detects performance regressions via Dynatrace, creates a Jira performance bug, and notifies the development team via Slack.

naftiko: "0.5"
info:
  label: "Dynatrace Performance Regression Orchestrator"
  description: "Detects performance regressions via Dynatrace, creates a Jira performance bug, and notifies the development team via Slack."
  tags:
    - observability
    - dynatrace
    - jira
    - slack
capability:
  exposes:
    - type: mcp
      namespace: perf-regression
      port: 8080
      tools:
        - name: handle-perf-regression
          description: "Detect Dynatrace performance regressions, open Jira bugs, and alert the dev team on Slack."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Dynatrace entity ID."
            - name: threshold_ms
              in: body
              type: number
              description: "Response time threshold in milliseconds."
          steps:
            - name: get-metrics
              type: call
              call: "dynatrace.get-entity-metrics"
              with:
                entity_id: "{{entity_id}}"
            - name: create-bug
              type: call
              call: "jira.create-issue"
              with:
                project: "PERF"
                summary: "Performance regression for {{entity_id}}"
                issue_type: "Bug"
            - name: alert-devs
              type: call
              call: "slack.post-message"
              with:
                channel: "#performance"
                text: "Performance regression detected for {{entity_id}}. Jira: {{create-bug.key}}"
  consumes:
    - type: http
      namespace: dynatrace
      baseUri: "https://broadcom.live.dynatrace.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.dynatrace_token"
      resources:
        - name: metrics
          path: "/metrics/query"
          operations:
            - name: get-entity-metrics
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://broadcom.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: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

When an employee termination is processed in Workday, deactivates their Okta account, closes open ServiceNow tickets, and notifies the IT offboarding team via Slack.

naftiko: "0.5"
info:
  label: "Employee Offboarding Workflow"
  description: "When an employee termination is processed in Workday, deactivates their Okta account, closes open ServiceNow tickets, and notifies the IT offboarding team via Slack."
  tags:
    - hr
    - offboarding
    - workday
    - okta
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: hr-offboarding
      port: 8080
      tools:
        - name: trigger-offboarding
          description: "Given a Workday employee ID and termination date, retrieve employee details, deactivate the Okta account, and post an IT offboarding notification to Slack. Invoke when an employee departure is confirmed."
          inputParameters:
            - name: workday_employee_id
              in: body
              type: string
              description: "The Workday worker ID of the departing employee."
            - name: termination_date
              in: body
              type: string
              description: "The employee's final working day in ISO 8601 format."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{workday_employee_id}}"
            - name: deactivate-okta
              type: call
              call: "okta.deactivate-user"
              with:
                user_login: "{{get-employee.work_email}}"
            - name: notify-it
              type: call
              call: "slack.post-message"
              with:
                channel: "it-offboarding"
                text: "Offboarding initiated: {{get-employee.full_name}} ({{get-employee.work_email}}). Okta deactivated. Last day: {{termination_date}}."
  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: "/broadcom/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: okta
      baseUri: "https://broadcom.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: user-deactivate
          path: "/users/{{user_login}}/lifecycle/deactivate"
          inputParameters:
            - name: user_login
              in: path
          operations:
            - name: deactivate-user
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

When a new hire is created in Workday, opens a ServiceNow onboarding ticket, provisions Okta identity access, and sends a Slack welcome message to the employee and their manager.

naftiko: "0.5"
info:
  label: "Employee Onboarding Orchestrator"
  description: "When a new hire is created in Workday, opens a ServiceNow onboarding ticket, provisions Okta identity access, and sends a Slack welcome message to the employee and their manager."
  tags:
    - hr
    - onboarding
    - workday
    - servicenow
    - okta
    - slack
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 onboarding sequence: retrieve employee details from Workday, open a ServiceNow onboarding ticket, provision Okta account, and send a Slack welcome. Invoke when a new hire is confirmed in Workday."
          inputParameters:
            - name: workday_employee_id
              in: body
              type: string
              description: "The Workday worker ID for the new hire."
            - name: start_date
              in: body
              type: string
              description: "The employee's start date in ISO 8601 format."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{workday_employee_id}}"
            - name: open-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                category: "hr_onboarding"
                short_description: "New hire onboarding: {{get-employee.full_name}}"
                assigned_group: "IT_Onboarding"
            - name: provision-okta
              type: call
              call: "okta.create-user"
              with:
                first_name: "{{get-employee.first_name}}"
                last_name: "{{get-employee.last_name}}"
                email: "{{get-employee.work_email}}"
            - name: send-welcome
              type: call
              call: "slack.post-message"
              with:
                channel: "{{get-employee.work_email}}"
                text: "Welcome to Broadcom, {{get-employee.first_name}}! Your IT onboarding ticket is {{open-ticket.number}}. Start date: {{start_date}}."
  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: "/broadcom/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://broadcom.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: okta
      baseUri: "https://broadcom.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: users
          path: "/users"
          operations:
            - name: create-user
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

When an employee changes roles in Workday, updates Okta group memberships, modifies ServiceNow access, and sends a transition checklist via Slack.

naftiko: "0.5"
info:
  label: "Employee Role Transition Orchestrator"
  description: "When an employee changes roles in Workday, updates Okta group memberships, modifies ServiceNow access, and sends a transition checklist via Slack."
  tags:
    - hr
    - workday
    - okta
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: role-transition
      port: 8080
      tools:
        - name: process-role-transition
          description: "Process employee role transition by updating Okta groups, ServiceNow access, and sending a Slack checklist."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "Workday employee ID."
            - name: new_role
              in: body
              type: string
              description: "New role title."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{employee_id}}"
            - name: update-groups
              type: call
              call: "okta.update-groups"
              with:
                user_email: "{{get-employee.work_email}}"
                role: "{{new_role}}"
            - name: update-access
              type: call
              call: "servicenow.update-access"
              with:
                user: "{{get-employee.work_email}}"
                role: "{{new_role}}"
            - name: send-checklist
              type: call
              call: "slack.post-message"
              with:
                channel: "{{get-employee.work_email}}"
                text: "Role transition to {{new_role}} initiated. Please review your access changes."
  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: "/broadcom/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: okta
      baseUri: "https://broadcom.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: groups
          path: "/groups"
          operations:
            - name: update-groups
              method: PUT
    - type: http
      namespace: servicenow
      baseUri: "https://broadcom.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: access
          path: "/table/sys_user_role"
          operations:
            - name: update-access
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Runs quality gates for Broadcom ethernet controllers by pulling test results from Snowflake, checking Jira defects, and updating SAP quality records.

naftiko: "0.5"
info:
  label: "Ethernet Controller Quality Gate Orchestrator"
  description: "Runs quality gates for Broadcom ethernet controllers by pulling test results from Snowflake, checking Jira defects, and updating SAP quality records."
  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, Jira, and SAP."
          inputParameters:
            - name: product_id
              in: body
              type: string
              description: "The ethernet controller product ID."
          steps:
            - name: get-test-results
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "SELECT pass_rate, fail_count FROM quality_results WHERE product_id = '{{product_id}}'"
            - name: get-defects
              type: call
              call: "jira.search-issues"
              with:
                jql: "project = ETHQUAL AND labels = {{product_id}} AND status != Closed"
            - name: update-sap-quality
              type: call
              call: "sap.update-quality-inspection"
              with:
                product_id: "{{product_id}}"
                pass_rate: "{{get-test-results.pass_rate}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://broadcom.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://broadcom.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://broadcom-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

Scans firmware images for known vulnerabilities, creates a Jira ticket for critical findings, and notifies the engineering team via Slack.

naftiko: "0.5"
info:
  label: "Firmware Vulnerability Scan and Patch Orchestrator"
  description: "Scans firmware images for known vulnerabilities, creates a Jira ticket for critical findings, and notifies the engineering team via Slack."
  tags:
    - security
    - firmware
    - jira
    - slack
capability:
  exposes:
    - type: mcp
      namespace: firmware-security
      port: 8080
      tools:
        - name: scan-and-patch-firmware
          description: "Scan a firmware image for vulnerabilities, open a Jira issue for critical findings, and alert the team on Slack."
          inputParameters:
            - name: firmware_version
              in: body
              type: string
              description: "Firmware version identifier."
            - name: product_line
              in: body
              type: string
              description: "Product line name."
          steps:
            - name: scan-firmware
              type: call
              call: "scanner.scan-image"
              with:
                firmware_version: "{{firmware_version}}"
                product_line: "{{product_line}}"
            - name: create-jira-ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "FW-SEC"
                summary: "Critical vulnerabilities in {{product_line}} firmware {{firmware_version}}"
                issue_type: "Bug"
            - name: notify-team
              type: call
              call: "slack.post-message"
              with:
                channel: "#firmware-security"
                text: "Firmware scan complete for {{product_line}} v{{firmware_version}}. Jira: {{create-jira-ticket.key}}"
  consumes:
    - type: http
      namespace: scanner
      baseUri: "https://firmware-scanner.broadcom.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.firmware_scanner_token"
      resources:
        - name: scans
          path: "/scan"
          operations:
            - name: scan-image
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://broadcom.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: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Validates that all GitHub Actions checks pass, runs security scan, and promotes the build to production with a ServiceNow change request.

naftiko: "0.5"
info:
  label: "GitHub Actions Deployment Gate Orchestrator"
  description: "Validates that all GitHub Actions checks pass, runs security scan, and promotes the build to production with a ServiceNow change request."
  tags:
    - cicd
    - github
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: deployment-gate
      port: 8080
      tools:
        - name: process-deployment-gate
          description: "Validate GitHub Actions checks, run security scan, and promote to production with ServiceNow change."
          inputParameters:
            - name: repo
              in: body
              type: string
              description: "GitHub repository (org/repo)."
            - name: commit_sha
              in: body
              type: string
              description: "Git commit SHA."
          steps:
            - name: check-status
              type: call
              call: "github.get-check-runs"
              with:
                repo: "{{repo}}"
                sha: "{{commit_sha}}"
            - name: create-change
              type: call
              call: "servicenow.create-change"
              with:
                short_description: "Production deployment for {{repo}} at {{commit_sha}}"
                category: "deployment"
            - name: trigger-deploy
              type: call
              call: "github.create-deployment"
              with:
                repo: "{{repo}}"
                ref: "{{commit_sha}}"
                environment: "production"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: check-runs
          path: "/repos/{{repo}}/commits/{{sha}}/check-runs"
          inputParameters:
            - name: repo
              in: path
            - name: sha
              in: path
          operations:
            - name: get-check-runs
              method: GET
            - name: create-deployment
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://broadcom.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
              method: POST

On a new pull request in GitHub, triggers a security scan and posts results back as a PR review comment to enforce secure coding practices across semiconductor and infrastructure software codebases.

naftiko: "0.5"
info:
  label: "GitHub Pull Request Security Scan Gate"
  description: "On a new pull request in GitHub, triggers a security scan and posts results back as a PR review comment to enforce secure coding practices across semiconductor and infrastructure software codebases."
  tags:
    - devops
    - security
    - github
    - code-quality
    - vulnerability-management
capability:
  exposes:
    - type: mcp
      namespace: security-scanning
      port: 8080
      tools:
        - name: scan-pull-request
          description: "Given a GitHub repository and pull request number, retrieve PR details, post a security review placeholder, and request review from the security team. Use when a PR targets main, release, or firmware branches."
          inputParameters:
            - name: repo
              in: body
              type: string
              description: "The GitHub repository full name, e.g. 'broadcom/linux-kernel-patches'."
            - name: pr_number
              in: body
              type: integer
              description: "The GitHub pull request number."
            - name: commit_sha
              in: body
              type: string
              description: "The HEAD commit SHA of the pull request."
          steps:
            - name: get-pr
              type: call
              call: "github.get-pull-request"
              with:
                repo: "{{repo}}"
                pull_number: "{{pr_number}}"
            - name: post-review
              type: call
              call: "github-review.create-pr-review"
              with:
                repo: "{{repo}}"
                pull_number: "{{pr_number}}"
                commit_id: "{{commit_sha}}"
                body: "Security review triggered for PR #{{pr_number}} in {{repo}}. Scanning {{get-pr.changed_files}} files."
                event: "COMMENT"
  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/{{pull_number}}"
          inputParameters:
            - name: repo
              in: path
            - name: pull_number
              in: path
          operations:
            - name: get-pull-request
              method: GET
    - type: http
      namespace: github-review
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: pr-reviews
          path: "/repos/{{repo}}/pulls/{{pull_number}}/reviews"
          inputParameters:
            - name: repo
              in: path
            - name: pull_number
              in: path
          operations:
            - name: create-pr-review
              method: POST

When a new GitHub release is tagged for a VMware or CA software product, compiles structured release notes from merged PRs and publishes to Confluence and the product Slack channel.

naftiko: "0.5"
info:
  label: "GitHub Release Notes Publisher"
  description: "When a new GitHub release is tagged for a VMware or CA software product, compiles structured release notes from merged PRs and publishes to Confluence and the product Slack channel."
  tags:
    - devops
    - github
    - confluence
    - slack
    - 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 merged PRs since the prior tag, compile structured release notes, publish to Confluence, and announce in the product Slack channel. Use when a VMware, CA, or infrastructure software release is cut."
          inputParameters:
            - name: repo
              in: body
              type: string
              description: "The GitHub repository full name, e.g. 'broadcom/vsphere-client'."
            - name: release_tag
              in: body
              type: string
              description: "The release tag, e.g. 'v8.0.3'."
            - name: confluence_space_key
              in: body
              type: string
              description: "The Confluence space key for release notes, e.g. 'VMWREL'."
          steps:
            - name: get-prs
              type: call
              call: "github.list-merged-prs"
              with:
                repo: "{{repo}}"
            - name: publish-notes
              type: call
              call: "confluence.create-page"
              with:
                space_key: "{{confluence_space_key}}"
                title: "Release Notes: {{repo}} {{release_tag}}"
                body: "Release {{release_tag}} — {{get-prs.count}} changes merged."
            - name: announce
              type: call
              call: "slack.post-message"
              with:
                channel: "product-releases"
                text: "{{repo}} {{release_tag}} released. Notes: {{publish-notes.url}}"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: pulls
          path: "/repos/{{repo}}/pulls"
          inputParameters:
            - name: repo
              in: path
          operations:
            - name: list-merged-prs
              method: GET
    - type: http
      namespace: confluence
      baseUri: "https://broadcom.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: create-page
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

When a developer joins a product team, grants them access to the relevant GitHub repositories and sends a Slack confirmation to the team lead.

naftiko: "0.5"
info:
  label: "GitHub Repository Access Provisioning"
  description: "When a developer joins a product team, grants them access to the relevant GitHub repositories and sends a Slack confirmation to the team lead."
  tags:
    - devops
    - identity
    - github
    - slack
    - access-management
capability:
  exposes:
    - type: mcp
      namespace: dev-access
      port: 8080
      tools:
        - name: provision-repo-access
          description: "Given a GitHub username, repository name, and permission level, add the developer as a repository collaborator and notify the team lead in Slack. Use when a new engineer joins a Broadcom product team working on VMware, CA software, or semiconductor IP."
          inputParameters:
            - name: github_username
              in: body
              type: string
              description: "The GitHub username of the developer."
            - name: repo_name
              in: body
              type: string
              description: "The full GitHub repository name, e.g. 'broadcom/esxi-kernel'."
            - name: permission
              in: body
              type: string
              description: "Permission level: 'read', 'triage', 'write', 'maintain', or 'admin'."
            - name: team_lead_slack_id
              in: body
              type: string
              description: "The Slack user ID of the team lead."
          steps:
            - name: add-collaborator
              type: call
              call: "github.add-repo-collaborator"
              with:
                repo: "{{repo_name}}"
                username: "{{github_username}}"
                permission: "{{permission}}"
            - name: notify-lead
              type: call
              call: "slack.post-dm"
              with:
                channel: "{{team_lead_slack_id}}"
                text: "{{github_username}} granted {{permission}} access to {{repo_name}}."
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: collaborators
          path: "/repos/{{repo}}/collaborators/{{username}}"
          inputParameters:
            - name: repo
              in: path
            - name: username
              in: path
          operations:
            - name: add-repo-collaborator
              method: PUT
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: dm
          path: "/chat.postMessage"
          operations:
            - name: post-dm
              method: POST

Retrieves branch protection rules for a GitHub repository branch.

naftiko: "0.5"
info:
  label: "GitHub Repository Branch Protection Lookup"
  description: "Retrieves branch protection rules for a GitHub repository 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 repository branch."
          inputParameters:
            - name: repo_name
              in: body
              type: string
              description: "Repository in org/repo format."
            - name: branch
              in: body
              type: string
              description: "The branch name."
          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

Retrieves the count of open Dependabot alerts for a GitHub repository.

naftiko: "0.5"
info:
  label: "GitHub Repository Vulnerability Count Lookup"
  description: "Retrieves the count of open Dependabot alerts for a GitHub repository."
  tags:
    - security
    - github
capability:
  exposes:
    - type: mcp
      namespace: repo-security
      port: 8080
      tools:
        - name: get-vulnerability-count
          description: "Look up open Dependabot alert count for a GitHub repository."
          inputParameters:
            - name: repo_name
              in: body
              type: string
              description: "GitHub repository name (org/repo)."
          call: "github.get-alerts"
          with:
            repo: "{{repo_name}}"
          outputParameters:
            - name: alert_count
              type: number
              mapping: "$.length"
            - name: critical_count
              type: number
              mapping: "$.critical_count"
  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?state=open"
          inputParameters:
            - name: repo
              in: path
          operations:
            - name: get-alerts
              method: GET

Aggregates financial close data from SAP into Google Sheets, validates reconciliation totals, and distributes the report via email.

naftiko: "0.5"
info:
  label: "Google Sheets Financial Close Orchestrator"
  description: "Aggregates financial close data from SAP into Google Sheets, validates reconciliation totals, and distributes the report via email."
  tags:
    - finance
    - sap
    - google-sheets
    - email
capability:
  exposes:
    - type: mcp
      namespace: financial-close
      port: 8080
      tools:
        - name: run-financial-close
          description: "Aggregate SAP financial close data to Google Sheets, validate reconciliation, and email report."
          inputParameters:
            - name: fiscal_period
              in: body
              type: string
              description: "Fiscal period (e.g., 2026-03)."
            - name: company_code
              in: body
              type: string
              description: "SAP company code."
          steps:
            - name: get-close-data
              type: call
              call: "sap.get-period-close"
              with:
                period: "{{fiscal_period}}"
                company_code: "{{company_code}}"
            - name: update-sheet
              type: call
              call: "sheets.update-spreadsheet"
              with:
                spreadsheet_id: "financial-close-2026"
                data: "{{get-close-data.results}}"
            - name: send-report
              type: call
              call: "email.send-message"
              with:
                to: "finance-team@broadcom.com"
                subject: "Financial Close Report - {{fiscal_period}}"
                body: "Close data published to Google Sheets."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://broadcom-s4.sap.com/sap/opu/odata/sap/FI_PERIOD_CLOSE_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: period-close
          path: "/A_PeriodClose"
          operations:
            - name: get-period-close
              method: GET
    - type: http
      namespace: sheets
      baseUri: "https://sheets.googleapis.com/v4"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: spreadsheets
          path: "/spreadsheets/{{spreadsheet_id}}/values:batchUpdate"
          inputParameters:
            - name: spreadsheet_id
              in: path
          operations:
            - name: update-spreadsheet
              method: POST
    - type: http
      namespace: email
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.graph_token"
      resources:
        - name: mail
          path: "/me/sendMail"
          operations:
            - name: send-message
              method: POST

Retrieves a snapshot of a Grafana dashboard panel for a given time range.

naftiko: "0.5"
info:
  label: "Grafana Dashboard Snapshot Lookup"
  description: "Retrieves a snapshot of a Grafana dashboard panel for a given time range."
  tags:
    - observability
    - grafana
capability:
  exposes:
    - type: mcp
      namespace: grafana-dashboards
      port: 8080
      tools:
        - name: get-dashboard-snapshot
          description: "Retrieve Grafana dashboard snapshot by dashboard UID."
          inputParameters:
            - name: dashboard_uid
              in: body
              type: string
              description: "Grafana dashboard UID."
          call: "grafana.get-dashboard"
          with:
            uid: "{{dashboard_uid}}"
          outputParameters:
            - name: title
              type: string
              mapping: "$.dashboard.title"
            - name: panels
              type: string
              mapping: "$.dashboard.panels"
  consumes:
    - type: http
      namespace: grafana
      baseUri: "https://grafana.broadcom.com/api"
      authentication:
        type: bearer
        token: "$secrets.grafana_token"
      resources:
        - name: dashboards
          path: "/dashboards/uid/{{uid}}"
          inputParameters:
            - name: uid
              in: path
          operations:
            - name: get-dashboard
              method: GET

Discovers installed software via ServiceNow Discovery, reconciles against license entitlements, and creates remediation tasks in Jira.

naftiko: "0.5"
info:
  label: "ITAM Software Discovery Orchestrator"
  description: "Discovers installed software via ServiceNow Discovery, reconciles against license entitlements, and creates remediation tasks in Jira."
  tags:
    - compliance
    - servicenow
    - jira
capability:
  exposes:
    - type: mcp
      namespace: itam-discovery
      port: 8080
      tools:
        - name: discover-and-reconcile-software
          description: "Discover installed software, reconcile licenses, and create Jira remediation tasks."
          inputParameters:
            - name: ci_class
              in: body
              type: string
              description: "ServiceNow CI class name."
          steps:
            - name: get-installed-software
              type: call
              call: "servicenow.get-discovery-results"
              with:
                ci_class: "{{ci_class}}"
            - name: reconcile-licenses
              type: call
              call: "servicenow.get-license-compliance"
              with:
                ci_class: "{{ci_class}}"
            - name: create-remediation
              type: call
              call: "jira.create-issue"
              with:
                project: "ITAM"
                summary: "License compliance remediation for {{ci_class}}"
                issue_type: "Task"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://broadcom.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: discovery
          path: "/table/cmdb_ci_software"
          operations:
            - name: get-discovery-results
              method: GET
            - name: get-license-compliance
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://broadcom.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

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

naftiko: "0.5"
info:
  label: "Jira Issue Details Lookup"
  description: "Retrieves Jira issue details 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 details."
          inputParameters:
            - name: issue_key
              in: body
              type: string
              description: "The Jira issue key."
          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"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://broadcom.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

Validates Jira release readiness by checking unresolved issues, generating release notes in Confluence, and triggering a GitHub release.

naftiko: "0.5"
info:
  label: "Jira Release Readiness Gate Orchestrator"
  description: "Validates Jira release readiness by checking unresolved issues, generating release notes in Confluence, and triggering a GitHub release."
  tags:
    - cicd
    - jira
    - confluence
    - github
capability:
  exposes:
    - type: mcp
      namespace: release-gate
      port: 8080
      tools:
        - name: validate-release-readiness
          description: "Validate release by checking Jira issues, publishing Confluence notes, and creating a GitHub release."
          inputParameters:
            - name: project_key
              in: body
              type: string
              description: "Jira project key."
            - name: version
              in: body
              type: string
              description: "Release version."
          steps:
            - name: check-issues
              type: call
              call: "jira.search-issues"
              with:
                jql: "project={{project_key}} AND fixVersion={{version}} AND resolution=Unresolved"
            - name: create-release-notes
              type: call
              call: "confluence.create-page"
              with:
                space_key: "{{project_key}}"
                title: "Release Notes - {{version}}"
            - name: create-release
              type: call
              call: "github.create-release"
              with:
                tag: "v{{version}}"
                name: "{{project_key}} {{version}}"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://broadcom.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: GET
    - type: http
      namespace: confluence
      baseUri: "https://broadcom.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: content
          path: "/content"
          operations:
            - name: create-page
              method: POST
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: releases
          path: "/repos/broadcom/{{repo}}/releases"
          operations:
            - name: create-release
              method: POST

Generates a sprint planning digest for a Broadcom engineering project in Jira and posts the issue breakdown to the team Slack channel.

naftiko: "0.5"
info:
  label: "Jira Sprint Planning Digest"
  description: "Generates a sprint planning digest for a Broadcom engineering project in Jira and posts the issue breakdown to the team Slack channel."
  tags:
    - devops
    - jira
    - slack
    - sprint-planning
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: sprint-reporting
      port: 8080
      tools:
        - name: digest-sprint-board
          description: "Given a Jira project key and sprint ID, fetch all open issues grouped by priority and post a sprint digest to the team Slack channel. Use at the start of sprint planning for VMware, CA software, or semiconductor engineering teams."
          inputParameters:
            - name: project_key
              in: body
              type: string
              description: "The Jira project key, e.g. 'VMWRC' or 'CAENG'."
            - name: sprint_id
              in: body
              type: integer
              description: "The Jira sprint ID."
            - name: slack_channel
              in: body
              type: string
              description: "The Slack channel to post the digest to."
          steps:
            - name: get-issues
              type: call
              call: "jira.search-issues"
              with:
                jql: "project={{project_key}} AND sprint={{sprint_id}} AND status != Done"
            - name: post-digest
              type: call
              call: "slack.post-message"
              with:
                channel: "{{slack_channel}}"
                text: "Sprint {{sprint_id}} digest for {{project_key}}: {{get-issues.total}} open issues."
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://broadcom.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: search-issues
              method: GET
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Provisions a new Kubernetes namespace with resource quotas, configures RBAC via Okta groups, and logs the provisioning in ServiceNow.

naftiko: "0.5"
info:
  label: "Kubernetes Namespace Provisioning Orchestrator"
  description: "Provisions a new Kubernetes namespace with resource quotas, configures RBAC via Okta groups, and logs the provisioning in ServiceNow."
  tags:
    - infrastructure
    - kubernetes
    - okta
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: k8s-provisioning
      port: 8080
      tools:
        - name: provision-namespace
          description: "Provision a K8s namespace with quotas, configure RBAC via Okta, and log in ServiceNow."
          inputParameters:
            - name: namespace_name
              in: body
              type: string
              description: "Kubernetes namespace name."
            - name: team_name
              in: body
              type: string
              description: "Team requesting the namespace."
          steps:
            - name: create-namespace
              type: call
              call: "k8s.create-namespace"
              with:
                name: "{{namespace_name}}"
                team: "{{team_name}}"
            - name: configure-rbac
              type: call
              call: "okta.assign-group"
              with:
                group_name: "k8s-{{namespace_name}}"
                team: "{{team_name}}"
            - name: log-provision
              type: call
              call: "servicenow.create-request"
              with:
                short_description: "K8s namespace provisioned: {{namespace_name}} for {{team_name}}"
  consumes:
    - type: http
      namespace: k8s
      baseUri: "https://k8s-api.broadcom.com"
      authentication:
        type: bearer
        token: "$secrets.k8s_token"
      resources:
        - name: namespaces
          path: "/api/v1/namespaces"
          operations:
            - name: create-namespace
              method: POST
    - type: http
      namespace: okta
      baseUri: "https://broadcom.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: groups
          path: "/groups"
          operations:
            - name: assign-group
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://broadcom.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST

Retrieves follower count for the Broadcom LinkedIn company page.

naftiko: "0.5"
info:
  label: "LinkedIn Company Follower Count Lookup"
  description: "Retrieves follower count for the Broadcom LinkedIn company page."
  tags:
    - marketing
    - linkedin
    - social-media
capability:
  exposes:
    - type: mcp
      namespace: social
      port: 8080
      tools:
        - name: get-follower-stats
          description: "Retrieve follower statistics for the Broadcom LinkedIn page."
          inputParameters:
            - name: time_range
              in: body
              type: string
              description: "Time range for follower data."
          call: "linkedin.get-follower-statistics"
          with:
            organization_id: "broadcom"
          outputParameters:
            - name: total_followers
              type: number
              mapping: "$.elements[0].followerCounts.organicFollowerCount"
  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:broadcom"
          operations:
            - name: get-follower-statistics
              method: GET

Fetches engagement and follower metrics from Broadcom's LinkedIn company page for the reporting period and posts a digest to the corporate communications Slack channel.

naftiko: "0.5"
info:
  label: "LinkedIn Company Page Performance Digest"
  description: "Fetches engagement and follower metrics from Broadcom's LinkedIn company page for the reporting period and posts a digest to the corporate communications Slack channel."
  tags:
    - marketing
    - social
    - linkedin
    - slack
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: social-reporting
      port: 8080
      tools:
        - name: digest-linkedin-performance
          description: "Fetch follower growth and post engagement metrics from Broadcom's LinkedIn page for a given reporting period and post a summary to the corporate communications Slack channel. Use for weekly and monthly social performance reviews."
          inputParameters:
            - name: start_date
              in: body
              type: string
              description: "The start of the reporting period in ISO 8601 format."
            - name: end_date
              in: body
              type: string
              description: "The end of the reporting period in ISO 8601 format."
          steps:
            - name: get-follower-stats
              type: call
              call: "linkedin.get-follower-stats"
              with:
                organization_id: "$secrets.broadcom_linkedin_org_id"
            - name: get-share-stats
              type: call
              call: "linkedin-shares.get-share-stats"
              with:
                organization_id: "$secrets.broadcom_linkedin_org_id"
                start: "{{start_date}}"
                end: "{{end_date}}"
            - name: post-digest
              type: call
              call: "slack.post-message"
              with:
                channel: "corporate-communications"
                text: "LinkedIn digest ({{start_date}} to {{end_date}}): followers {{get-follower-stats.follower_count}}, impressions {{get-share-stats.impression_count}}, engagements {{get-share-stats.engagement_count}}."
  consumes:
    - type: http
      namespace: linkedin
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: follower-stats
          path: "/organizationalEntityFollowerStatistics"
          operations:
            - name: get-follower-stats
              method: GET
    - type: http
      namespace: linkedin-shares
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: share-stats
          path: "/organizationalEntityShareStatistics"
          operations:
            - name: get-share-stats
              method: GET
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Retrieves candidate applications from LinkedIn Recruiter, creates candidate profiles in Workday, and notifies hiring managers via Slack.

naftiko: "0.5"
info:
  label: "LinkedIn Talent Pipeline Orchestrator"
  description: "Retrieves candidate applications from LinkedIn Recruiter, creates candidate profiles in Workday, and notifies hiring managers via Slack."
  tags:
    - hr
    - linkedin
    - workday
    - slack
capability:
  exposes:
    - type: mcp
      namespace: talent-pipeline
      port: 8080
      tools:
        - name: process-talent-pipeline
          description: "Process LinkedIn talent pipeline by creating Workday profiles and notifying hiring managers."
          inputParameters:
            - name: job_posting_id
              in: body
              type: string
              description: "LinkedIn job posting ID."
          steps:
            - name: get-applicants
              type: call
              call: "linkedin.get-applications"
              with:
                posting_id: "{{job_posting_id}}"
            - name: create-candidates
              type: call
              call: "workday.create-candidate"
              with:
                source: "LinkedIn"
                posting_id: "{{job_posting_id}}"
            - name: notify-managers
              type: call
              call: "slack.post-message"
              with:
                channel: "#hiring"
                text: "New LinkedIn applicants for posting {{job_posting_id}}: {{get-applicants.count}} candidates"
  consumes:
    - type: http
      namespace: linkedin
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: applications
          path: "/jobApplications"
          operations:
            - name: get-applications
              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: candidates
          path: "/broadcom/candidates"
          operations:
            - name: create-candidate
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Runs Looker data quality checks, exports results to Google Sheets, and alerts data stewards via Slack.

naftiko: "0.5"
info:
  label: "Looker Data Quality Report Orchestrator"
  description: "Runs Looker data quality checks, exports results to Google Sheets, and alerts data stewards via Slack."
  tags:
    - analytics
    - looker
    - google-sheets
    - slack
capability:
  exposes:
    - type: mcp
      namespace: data-quality-report
      port: 8080
      tools:
        - name: generate-data-quality-report
          description: "Run Looker data quality checks, export to Google Sheets, and notify data stewards."
          inputParameters:
            - name: look_id
              in: body
              type: string
              description: "Looker Look ID for data quality dashboard."
          steps:
            - name: run-look
              type: call
              call: "looker.run-look"
              with:
                look_id: "{{look_id}}"
            - name: export-to-sheets
              type: call
              call: "sheets.update-spreadsheet"
              with:
                spreadsheet_id: "dq-report-2026"
                data: "{{run-look.results}}"
            - name: notify-stewards
              type: call
              call: "slack.post-message"
              with:
                channel: "#data-quality"
                text: "Data quality report generated. Results: {{run-look.row_count}} issues found."
  consumes:
    - type: http
      namespace: looker
      baseUri: "https://broadcom.looker.com/api/4.0"
      authentication:
        type: bearer
        token: "$secrets.looker_token"
      resources:
        - name: looks
          path: "/looks/{{look_id}}/run/json"
          inputParameters:
            - name: look_id
              in: path
          operations:
            - name: run-look
              method: GET
    - type: http
      namespace: sheets
      baseUri: "https://sheets.googleapis.com/v4"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: spreadsheets
          path: "/spreadsheets/{{spreadsheet_id}}/values:batchUpdate"
          inputParameters:
            - name: spreadsheet_id
              in: path
          operations:
            - name: update-spreadsheet
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Retrieves recent messages from a Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Microsoft Teams Channel Message Lookup"
  description: "Retrieves recent messages from a Microsoft Teams channel."
  tags:
    - collaboration
    - microsoft-teams
    - messaging
capability:
  exposes:
    - type: mcp
      namespace: messaging
      port: 8080
      tools:
        - name: get-channel-messages
          description: "Retrieve last 10 messages from a Teams channel."
          inputParameters:
            - name: team_id
              in: body
              type: string
              description: "The Teams team ID."
            - name: channel_id
              in: body
              type: string
              description: "The 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

Retrieves running configuration from Cisco switches, stores the backup in AWS S3, and logs the backup event in ServiceNow CMDB.

naftiko: "0.5"
info:
  label: "Network Switch Config Backup Orchestrator"
  description: "Retrieves running configuration from Cisco switches, stores the backup in AWS S3, and logs the backup event in ServiceNow CMDB."
  tags:
    - network
    - cisco
    - aws-s3
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: switch-backup
      port: 8080
      tools:
        - name: backup-switch-config
          description: "Back up Cisco switch running config to S3 and log in ServiceNow CMDB."
          inputParameters:
            - name: switch_hostname
              in: body
              type: string
              description: "Cisco switch hostname."
          steps:
            - name: get-config
              type: call
              call: "cisco.get-running-config"
              with:
                hostname: "{{switch_hostname}}"
            - name: store-backup
              type: call
              call: "s3.put-object"
              with:
                bucket: "broadcom-switch-backups"
                key: "{{switch_hostname}}/running-config.txt"
            - name: log-cmdb
              type: call
              call: "servicenow.update-ci"
              with:
                hostname: "{{switch_hostname}}"
                last_backup: "{{store-backup.timestamp}}"
  consumes:
    - type: http
      namespace: cisco
      baseUri: "https://dnac.broadcom.com/dna/intent/api/v1"
      authentication:
        type: bearer
        token: "$secrets.cisco_dnac_token"
      resources:
        - name: configs
          path: "/network-device/config"
          operations:
            - name: get-running-config
              method: GET
    - type: http
      namespace: s3
      baseUri: "https://s3.amazonaws.com"
      authentication:
        type: bearer
        token: "$secrets.aws_s3_token"
      resources:
        - name: objects
          path: "/{{bucket}}/{{key}}"
          operations:
            - name: put-object
              method: PUT
    - type: http
      namespace: servicenow
      baseUri: "https://broadcom.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: cmdb
          path: "/table/cmdb_ci_netgear"
          operations:
            - name: update-ci
              method: PATCH

Orchestrates firmware releases for Broadcom network switch ASICs by verifying CI status in GitHub, creating a Jira release ticket, and publishing notes to Confluence.

naftiko: "0.5"
info:
  label: "Network Switch Firmware Release Orchestrator"
  description: "Orchestrates firmware releases for Broadcom network switch ASICs by verifying CI status in GitHub, creating a Jira release ticket, and publishing notes to Confluence."
  tags:
    - chip-design
    - product-lifecycle
    - github
    - jira
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: firmware-release
      port: 8080
      tools:
        - name: release-switch-firmware
          description: "Orchestrate network switch firmware release across GitHub, Jira, and Confluence."
          inputParameters:
            - name: repo_name
              in: body
              type: string
              description: "The firmware repository name."
            - name: version
              in: body
              type: string
              description: "The firmware version."
          steps:
            - name: check-ci
              type: call
              call: "github.get-workflow-run"
              with:
                repo: "{{repo_name}}"
                branch: "release/{{version}}"
            - name: create-ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "NETSW"
                summary: "Firmware Release {{version}}"
                issue_type: "Task"
            - name: publish-notes
              type: call
              call: "confluence.create-page"
              with:
                space: "FIRMWARE"
                title: "Release Notes - {{version}}"
                body: "Firmware {{version}} released. CI: {{check-ci.conclusion}}. Jira: {{create-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://broadcom.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://broadcom.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 application health status and response time from New Relic APM.

naftiko: "0.5"
info:
  label: "New Relic Application Health Lookup"
  description: "Retrieves application health status and response time from New Relic APM."
  tags:
    - observability
    - new-relic
capability:
  exposes:
    - type: mcp
      namespace: apm-health
      port: 8080
      tools:
        - name: get-app-health
          description: "Look up New Relic application health by app ID."
          inputParameters:
            - name: app_id
              in: body
              type: string
              description: "The New Relic application ID."
          call: "newrelic.get-application"
          with:
            app_id: "{{app_id}}"
          outputParameters:
            - name: health_status
              type: string
              mapping: "$.application.health_status"
            - name: response_time
              type: number
              mapping: "$.application.application_summary.response_time"
  consumes:
    - type: http
      namespace: newrelic
      baseUri: "https://api.newrelic.com/v2"
      authentication:
        type: apikey
        key: "X-Api-Key"
        value: "$secrets.newrelic_api_key"
        placement: header
      resources:
        - name: applications
          path: "/applications/{{app_id}}.json"
          inputParameters:
            - name: app_id
              in: path
          operations:
            - name: get-application
              method: GET

Lists users assigned to a specific Okta application.

naftiko: "0.5"
info:
  label: "Okta Application Assignment Lookup"
  description: "Lists users assigned to a specific Okta application."
  tags:
    - identity
    - okta
capability:
  exposes:
    - type: mcp
      namespace: iam-apps
      port: 8080
      tools:
        - name: get-app-assignments
          description: "Look up users assigned to an Okta application by app ID."
          inputParameters:
            - name: app_id
              in: body
              type: string
              description: "Okta application ID."
          call: "okta.get-app-users"
          with:
            app_id: "{{app_id}}"
          outputParameters:
            - name: user_count
              type: number
              mapping: "$.length"
            - name: users
              type: string
              mapping: "$"
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://broadcom.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: app-users
          path: "/apps/{{app_id}}/users"
          inputParameters:
            - name: app_id
              in: path
          operations:
            - name: get-app-users
              method: GET

Fetches all users assigned to a critical enterprise application in Okta, generates an access review report, and creates a ServiceNow compliance review task.

naftiko: "0.5"
info:
  label: "Okta User Access Review"
  description: "Fetches all users assigned to a critical enterprise application in Okta, generates an access review report, and creates a ServiceNow compliance review task."
  tags:
    - identity
    - security
    - okta
    - servicenow
    - compliance
    - access-management
capability:
  exposes:
    - type: mcp
      namespace: identity-compliance
      port: 8080
      tools:
        - name: run-access-review
          description: "Given an Okta application ID and ServiceNow assignment group, list all users assigned to the application and create a ServiceNow access review task. Use for quarterly reviews of access to VMware Cloud Director, CA Clarity, and other enterprise applications."
          inputParameters:
            - name: okta_app_id
              in: body
              type: string
              description: "The Okta application ID, e.g. '0oa1x2y3z4w5v6u7t8s9'."
            - name: assignment_group
              in: body
              type: string
              description: "The ServiceNow group to assign the review task."
          steps:
            - name: list-app-users
              type: call
              call: "okta.list-app-users"
              with:
                app_id: "{{okta_app_id}}"
            - name: create-review-task
              type: call
              call: "servicenow.create-incident"
              with:
                category: "access_review"
                short_description: "Access review: {{okta_app_id}} — {{list-app-users.count}} active users"
                assigned_group: "{{assignment_group}}"
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://broadcom.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: app-users
          path: "/apps/{{app_id}}/users"
          inputParameters:
            - name: app_id
              in: path
          operations:
            - name: list-app-users
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://broadcom.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST

Retrieves all group memberships for an Okta user by email address.

naftiko: "0.5"
info:
  label: "Okta User Group Membership Lookup"
  description: "Retrieves all group memberships for an Okta user by 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."
          inputParameters:
            - name: user_email
              in: body
              type: string
              description: "The Okta user email address."
          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://broadcom.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

Retrieves the current on-call engineer for a PagerDuty escalation policy.

naftiko: "0.5"
info:
  label: "PagerDuty On-Call Schedule Lookup"
  description: "Retrieves the current on-call engineer for a PagerDuty escalation policy."
  tags:
    - operations
    - pagerduty
capability:
  exposes:
    - type: mcp
      namespace: oncall-ops
      port: 8080
      tools:
        - name: get-oncall-engineer
          description: "Look up current on-call engineer by PagerDuty escalation policy ID."
          inputParameters:
            - name: policy_id
              in: body
              type: string
              description: "PagerDuty escalation policy ID."
          call: "pagerduty.get-oncall"
          with:
            policy_id: "{{policy_id}}"
          outputParameters:
            - name: oncall_name
              type: string
              mapping: "$.oncalls[0].user.name"
            - name: oncall_email
              type: string
              mapping: "$.oncalls[0].user.email"
  consumes:
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: bearer
        token: "$secrets.pagerduty_token"
      resources:
        - name: oncalls
          path: "/oncalls?escalation_policy_ids[]={{policy_id}}"
          inputParameters:
            - name: policy_id
              in: query
          operations:
            - name: get-oncall
              method: GET

Queries Palo Alto Networks firewall threat logs for a specified source IP.

naftiko: "0.5"
info:
  label: "Palo Alto Networks Threat Log Lookup"
  description: "Queries Palo Alto Networks firewall threat logs for a specified source IP."
  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 for a source IP."
          inputParameters:
            - name: source_ip
              in: body
              type: string
              description: "The source IP address."
          call: "paloalto.query-threat-logs"
          with:
            source_ip: "{{source_ip}}"
          outputParameters:
            - name: threat_count
              type: number
              mapping: "$.result.log.logs.@count"
  consumes:
    - type: http
      namespace: paloalto
      baseUri: "https://broadcom-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

Retrieves upcoming patent filing deadlines from the IP management system, creates reminder tasks in Jira, and sends digest notifications via email.

naftiko: "0.5"
info:
  label: "Patent Filing Deadline Tracker Orchestrator"
  description: "Retrieves upcoming patent filing deadlines from the IP management system, creates reminder tasks in Jira, and sends digest notifications via email."
  tags:
    - legal
    - jira
    - email
capability:
  exposes:
    - type: mcp
      namespace: ip-tracking
      port: 8080
      tools:
        - name: track-patent-deadlines
          description: "Track patent filing deadlines, create Jira reminders, and send email notifications."
          inputParameters:
            - name: days_ahead
              in: body
              type: number
              description: "Number of days ahead to look for deadlines."
          steps:
            - name: get-deadlines
              type: call
              call: "ip-mgmt.get-upcoming-deadlines"
              with:
                days_ahead: "{{days_ahead}}"
            - name: create-tasks
              type: call
              call: "jira.create-issue"
              with:
                project: "IP"
                summary: "Patent filing deadlines in next {{days_ahead}} days"
                issue_type: "Task"
            - name: send-digest
              type: call
              call: "email.send-message"
              with:
                to: "ip-team@broadcom.com"
                subject: "Patent Filing Deadline Digest"
                body: "Upcoming deadlines: {{get-deadlines.count}} filings due"
  consumes:
    - type: http
      namespace: ip-mgmt
      baseUri: "https://ip-management.broadcom.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ip_mgmt_token"
      resources:
        - name: deadlines
          path: "/deadlines"
          operations:
            - name: get-upcoming-deadlines
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://broadcom.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: email
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.graph_token"
      resources:
        - name: mail
          path: "/me/sendMail"
          operations:
            - name: send-message
              method: POST

Checks the last refresh status for a Power BI dataset.

naftiko: "0.5"
info:
  label: "Power BI Dataset Refresh Status Lookup"
  description: "Checks the last refresh status 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 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, validates data completeness from Snowflake, and sends a dashboard-ready notification to executives via email.

naftiko: "0.5"
info:
  label: "Power BI Executive Dashboard Refresh Orchestrator"
  description: "Triggers a Power BI dataset refresh, validates data completeness from Snowflake, and sends a dashboard-ready notification to executives via email."
  tags:
    - analytics
    - power-bi
    - snowflake
    - email
capability:
  exposes:
    - type: mcp
      namespace: exec-dashboard
      port: 8080
      tools:
        - name: refresh-executive-dashboard
          description: "Refresh Power BI executive dashboard, validate Snowflake data, and notify executives."
          inputParameters:
            - name: dataset_id
              in: body
              type: string
              description: "Power BI dataset ID."
          steps:
            - name: refresh-dataset
              type: call
              call: "powerbi.trigger-refresh"
              with:
                dataset_id: "{{dataset_id}}"
            - name: validate-data
              type: call
              call: "snowflake.run-validation"
              with:
                dataset_id: "{{dataset_id}}"
            - name: notify-execs
              type: call
              call: "email.send-message"
              with:
                to: "executives@broadcom.com"
                subject: "Executive Dashboard Updated"
                body: "Dashboard refreshed. Data validation: {{validate-data.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: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: trigger-refresh
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://broadcom.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-validation
              method: POST
    - type: http
      namespace: email
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.graph_token"
      resources:
        - name: mail
          path: "/me/sendMail"
          operations:
            - name: send-message
              method: POST

Notifies customers of product EOL by pulling affected accounts from Salesforce, updating SAP material status, and alerting sales via Teams.

naftiko: "0.5"
info:
  label: "Product End-of-Life Notification Orchestrator"
  description: "Notifies customers of product EOL by pulling affected accounts from Salesforce, updating SAP material status, and alerting sales via Teams."
  tags:
    - product-lifecycle
    - salesforce
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: product-lifecycle
      port: 8080
      tools:
        - name: process-eol
          description: "Orchestrate product EOL notification across Salesforce, SAP, and Teams."
          inputParameters:
            - name: product_id
              in: body
              type: string
              description: "The product ID being discontinued."
          steps:
            - name: get-accounts
              type: call
              call: "salesforce.query"
              with:
                soql: "SELECT Name FROM Account WHERE Product__c = '{{product_id}}'"
            - name: update-sap
              type: call
              call: "sap.update-material"
              with:
                material: "{{product_id}}"
                status: "EOL"
            - name: notify-sales
              type: call
              call: "msteams.send-message"
              with:
                channel: "sales"
                message: "EOL: {{product_id}}. Affected accounts: {{get-accounts.totalSize}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://broadcom.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://broadcom-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: update-material
              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/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Validates product launch readiness by checking Jira release blockers, verifying documentation in Confluence, and scheduling the launch announcement in Slack.

naftiko: "0.5"
info:
  label: "Product Launch Readiness Orchestrator"
  description: "Validates product launch readiness by checking Jira release blockers, verifying documentation in Confluence, and scheduling the launch announcement in Slack."
  tags:
    - product
    - jira
    - confluence
    - slack
capability:
  exposes:
    - type: mcp
      namespace: launch-readiness
      port: 8080
      tools:
        - name: check-launch-readiness
          description: "Validate product launch readiness by checking Jira blockers, Confluence docs, and scheduling Slack announcement."
          inputParameters:
            - name: product_name
              in: body
              type: string
              description: "Product name."
            - name: release_version
              in: body
              type: string
              description: "Release version."
          steps:
            - name: check-blockers
              type: call
              call: "jira.search-issues"
              with:
                jql: "project={{product_name}} AND type=Bug AND priority=Blocker AND fixVersion={{release_version}}"
            - name: verify-docs
              type: call
              call: "confluence.get-page"
              with:
                space_key: "{{product_name}}"
                title: "Release Notes {{release_version}}"
            - name: schedule-announcement
              type: call
              call: "slack.post-message"
              with:
                channel: "#product-launches"
                text: "{{product_name}} v{{release_version}} launch readiness: {{check-blockers.total}} blockers remaining"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://broadcom.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: GET
    - type: http
      namespace: confluence
      baseUri: "https://broadcom.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: content
          path: "/content"
          operations:
            - name: get-page
              method: GET
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Pulls software license usage from ServiceNow SAM, compares against entitlements, and generates a compliance report in Confluence.

naftiko: "0.5"
info:
  label: "Quarterly License Compliance Audit Orchestrator"
  description: "Pulls software license usage from ServiceNow SAM, compares against entitlements, and generates a compliance report in Confluence."
  tags:
    - compliance
    - servicenow
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: license-audit
      port: 8080
      tools:
        - name: run-license-audit
          description: "Run quarterly license compliance audit by pulling usage data from ServiceNow and publishing results to Confluence."
          inputParameters:
            - name: audit_quarter
              in: body
              type: string
              description: "Fiscal quarter (e.g., Q1-2026)."
            - name: space_key
              in: body
              type: string
              description: "Confluence space key for audit reports."
          steps:
            - name: get-license-usage
              type: call
              call: "servicenow.get-sam-report"
              with:
                quarter: "{{audit_quarter}}"
            - name: publish-report
              type: call
              call: "confluence.create-page"
              with:
                space_key: "{{space_key}}"
                title: "License Compliance Audit - {{audit_quarter}}"
                body: "Usage report: {{get-license-usage.summary}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://broadcom.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: sam
          path: "/table/sam_sw_license"
          operations:
            - name: get-sam-report
              method: GET
    - type: http
      namespace: confluence
      baseUri: "https://broadcom.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: content
          path: "/content"
          operations:
            - name: create-page
              method: POST

Initiates an OpenShift cluster upgrade, monitors progress via Datadog, and posts status updates to Microsoft Teams.

naftiko: "0.5"
info:
  label: "Red Hat OpenShift Cluster Upgrade Orchestrator"
  description: "Initiates an OpenShift cluster upgrade, monitors progress via Datadog, and posts status updates to Microsoft Teams."
  tags:
    - infrastructure
    - openshift
    - datadog
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: cluster-upgrade
      port: 8080
      tools:
        - name: upgrade-openshift-cluster
          description: "Upgrade an OpenShift cluster, monitor via Datadog, and post status to Teams."
          inputParameters:
            - name: cluster_name
              in: body
              type: string
              description: "OpenShift cluster name."
            - name: target_version
              in: body
              type: string
              description: "Target OpenShift version."
          steps:
            - name: initiate-upgrade
              type: call
              call: "openshift.start-upgrade"
              with:
                cluster: "{{cluster_name}}"
                version: "{{target_version}}"
            - name: check-health
              type: call
              call: "datadog.get-cluster-health"
              with:
                cluster: "{{cluster_name}}"
            - name: post-status
              type: call
              call: "teams.post-message"
              with:
                channel: "Platform Ops"
                text: "OpenShift cluster {{cluster_name}} upgrade to {{target_version}} initiated. Health: {{check-health.status}}"
  consumes:
    - type: http
      namespace: openshift
      baseUri: "https://api.openshift.broadcom.com"
      authentication:
        type: bearer
        token: "$secrets.openshift_token"
      resources:
        - name: clusters
          path: "/apis/config.openshift.io/v1/clusterversions"
          operations:
            - name: start-upgrade
              method: PATCH
    - 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"
          operations:
            - name: get-cluster-health
              method: GET
    - type: http
      namespace: teams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.teams_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          operations:
            - name: post-message
              method: POST

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

naftiko: "0.5"
info:
  label: "Salesforce Account Details Lookup"
  description: "Retrieves account details from Salesforce including name, industry, and annual revenue."
  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."
          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"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://broadcom.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

Fetches Salesforce opportunities with upcoming renewal dates for VMware and CA enterprise customers, and posts a renewal digest to the account team Slack channel.

naftiko: "0.5"
info:
  label: "Salesforce Customer Renewal Opportunity Tracker"
  description: "Fetches Salesforce opportunities with upcoming renewal dates for VMware and CA enterprise customers, and posts a renewal digest to the account team Slack channel."
  tags:
    - crm
    - sales
    - salesforce
    - slack
    - account-management
    - renewal
capability:
  exposes:
    - type: mcp
      namespace: crm-reporting
      port: 8080
      tools:
        - name: digest-renewal-opportunities
          description: "Given a Salesforce territory and number of days to look ahead, fetch all opportunities with renewal dates within that window, and post a renewal digest to the account team Slack channel. Use weekly for enterprise renewal pipeline management."
          inputParameters:
            - name: territory
              in: body
              type: string
              description: "The Salesforce territory or region filter, e.g. 'AMER-Enterprise'."
            - name: days_ahead
              in: body
              type: integer
              description: "Number of days ahead to look for upcoming renewals."
          steps:
            - name: get-renewals
              type: call
              call: "salesforce.search-renewal-opps"
              with:
                territory: "{{territory}}"
                days_ahead: "{{days_ahead}}"
            - name: post-digest
              type: call
              call: "slack.post-message"
              with:
                channel: "sales-renewals"
                text: "Renewal digest for {{territory}}: {{get-renewals.count}} opportunities renewing in the next {{days_ahead}} days. Total value: ${{get-renewals.total_value}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://broadcom.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity"
          operations:
            - name: search-renewal-opps
              method: GET
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Routes Salesforce opportunities above threshold to deal desk for approval, creates a Slack approval thread, and updates the opportunity stage upon approval.

naftiko: "0.5"
info:
  label: "Salesforce Deal Desk Approval Orchestrator"
  description: "Routes Salesforce opportunities above threshold to deal desk for approval, creates a Slack approval thread, and updates the opportunity stage upon approval."
  tags:
    - sales
    - salesforce
    - slack
capability:
  exposes:
    - type: mcp
      namespace: deal-desk
      port: 8080
      tools:
        - name: process-deal-approval
          description: "Route Salesforce opportunities to deal desk, create Slack approval threads, and update opportunity stage."
          inputParameters:
            - name: opportunity_id
              in: body
              type: string
              description: "Salesforce opportunity ID."
          steps:
            - name: get-opportunity
              type: call
              call: "salesforce.get-opportunity"
              with:
                opportunity_id: "{{opportunity_id}}"
            - name: request-approval
              type: call
              call: "slack.post-message"
              with:
                channel: "#deal-desk"
                text: "Deal approval requested: {{get-opportunity.name}} - ${{get-opportunity.amount}}"
            - name: update-stage
              type: call
              call: "salesforce.update-opportunity"
              with:
                opportunity_id: "{{opportunity_id}}"
                stage: "Pending Approval"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://broadcom.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: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

When a new Salesforce lead is created from a trade show or enterprise event, enriches the record with firmographic data from ZoomInfo and assigns it to the correct field sales representative.

naftiko: "0.5"
info:
  label: "Salesforce New Lead Enrichment"
  description: "When a new Salesforce lead is created from a trade show or enterprise event, enriches the record with firmographic data from ZoomInfo and assigns it to the correct field sales representative."
  tags:
    - crm
    - sales
    - salesforce
    - zoominfo
    - lead-management
capability:
  exposes:
    - type: mcp
      namespace: lead-enrichment
      port: 8080
      tools:
        - name: enrich-new-lead
          description: "Given a Salesforce lead ID, retrieve the lead, look up company firmographics from ZoomInfo, update the Salesforce lead with enriched data, and assign to the correct enterprise sales representative. Use for leads from VMware Explore, RSA, or other enterprise events."
          inputParameters:
            - name: lead_id
              in: body
              type: string
              description: "The Salesforce Lead ID (18-character)."
          steps:
            - name: get-lead
              type: call
              call: "salesforce.get-lead"
              with:
                lead_id: "{{lead_id}}"
            - name: enrich-company
              type: call
              call: "zoominfo.search-company"
              with:
                name: "{{get-lead.Company}}"
                domain: "{{get-lead.Website}}"
            - name: update-lead
              type: call
              call: "salesforce-update.update-lead"
              with:
                lead_id: "{{lead_id}}"
                NumberOfEmployees: "{{enrich-company.employeeCount}}"
                AnnualRevenue: "{{enrich-company.revenue}}"
                Industry: "{{enrich-company.industry}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://broadcom.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: zoominfo
      baseUri: "https://api.zoominfo.com/search"
      authentication:
        type: bearer
        token: "$secrets.zoominfo_token"
      resources:
        - name: company-search
          path: "/company"
          operations:
            - name: search-company
              method: POST
    - type: http
      namespace: salesforce-update
      baseUri: "https://broadcom.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: lead-update
          path: "/sobjects/Lead/{{lead_id}}"
          inputParameters:
            - name: lead_id
              in: path
          operations:
            - name: update-lead
              method: PATCH

Updates a Salesforce enterprise software opportunity to the next stage and notifies the account team via Slack when a deal milestone is confirmed.

naftiko: "0.5"
info:
  label: "Salesforce Opportunity Stage Advancement"
  description: "Updates a Salesforce enterprise software opportunity to the next stage and notifies the account team via Slack when a deal milestone is confirmed."
  tags:
    - crm
    - sales
    - salesforce
    - slack
capability:
  exposes:
    - type: mcp
      namespace: crm-ops
      port: 8080
      tools:
        - name: advance-opportunity-stage
          description: "Given a Salesforce opportunity ID and new stage name, update the opportunity and post a Slack notification to the sales team. Use when a VMware, CA, or semiconductor customer deal progresses to a new stage."
          inputParameters:
            - name: opportunity_id
              in: body
              type: string
              description: "The Salesforce Opportunity ID (18-character)."
            - name: new_stage
              in: body
              type: string
              description: "The new pipeline stage, e.g. 'Proposal/Price Quote', 'Negotiation/Review', 'Closed Won'."
          steps:
            - name: update-opp
              type: call
              call: "salesforce.update-opportunity"
              with:
                opportunity_id: "{{opportunity_id}}"
                StageName: "{{new_stage}}"
            - name: notify-team
              type: call
              call: "slack.post-message"
              with:
                channel: "sales-wins"
                text: "Opportunity {{opportunity_id}} advanced to: {{new_stage}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://broadcom.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: update-opportunity
              method: PATCH
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Retrieves contract status and expiration date from SAP Ariba.

naftiko: "0.5"
info:
  label: "SAP Ariba Contract Status Lookup"
  description: "Retrieves contract status and expiration date from SAP Ariba."
  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."
          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: 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 new supplier is approved for a Broadcom manufacturing or EMS partner relationship, creates their profile in SAP Ariba and notifies the supply chain team via Slack.

naftiko: "0.5"
info:
  label: "SAP Ariba Supplier Onboarding"
  description: "When a new supplier is approved for a Broadcom manufacturing or EMS partner relationship, creates their profile in SAP Ariba and notifies the supply chain team via Slack."
  tags:
    - procurement
    - sap-ariba
    - slack
    - supplier-management
    - supply-chain
capability:
  exposes:
    - type: mcp
      namespace: procurement-ops
      port: 8080
      tools:
        - name: onboard-supplier
          description: "Given a supplier name, DUNS number, and commodity code, create the supplier profile in SAP Ariba, trigger the qualification workflow, and notify the Broadcom supply chain team in Slack. Use when a new semiconductor supply chain or EMS partner is approved."
          inputParameters:
            - name: supplier_name
              in: body
              type: string
              description: "The legal name of the supplier."
            - name: duns_number
              in: body
              type: string
              description: "The Dun & Bradstreet DUNS number for the supplier."
            - name: commodity_code
              in: body
              type: string
              description: "The commodity code for supplier classification."
          steps:
            - name: create-supplier
              type: call
              call: "ariba.create-supplier"
              with:
                name: "{{supplier_name}}"
                duns: "{{duns_number}}"
                commodity: "{{commodity_code}}"
            - name: trigger-qualification
              type: call
              call: "ariba-qual.trigger-survey"
              with:
                supplier_id: "{{create-supplier.id}}"
            - name: notify-supply-chain
              type: call
              call: "slack.post-message"
              with:
                channel: "supply-chain-ops"
                text: "Supplier {{supplier_name}} onboarded in Ariba (ID: {{create-supplier.id}}). Qualification survey triggered."
  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"
          operations:
            - name: create-supplier
              method: POST
    - type: http
      namespace: ariba-qual
      baseUri: "https://openapi.ariba.com/api/supplier-management/v1"
      authentication:
        type: bearer
        token: "$secrets.ariba_token"
      resources:
        - name: qualification-surveys
          path: "/suppliers/{{supplier_id}}/qualificationSurveys"
          inputParameters:
            - name: supplier_id
              in: path
          operations:
            - name: trigger-survey
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Retrieves current budget utilization from SAP, calculates reallocation recommendations, and submits an approval request via ServiceNow.

naftiko: "0.5"
info:
  label: "SAP Budget Reallocation Orchestrator"
  description: "Retrieves current budget utilization from SAP, calculates reallocation recommendations, and submits an approval request via ServiceNow."
  tags:
    - finance
    - sap
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: budget-realloc
      port: 8080
      tools:
        - name: reallocate-budget
          description: "Analyze SAP budget utilization, generate reallocation recommendations, and submit ServiceNow approval."
          inputParameters:
            - name: cost_center
              in: body
              type: string
              description: "SAP cost center code."
            - name: fiscal_year
              in: body
              type: string
              description: "Fiscal year."
          steps:
            - name: get-budget
              type: call
              call: "sap.get-budget-utilization"
              with:
                cost_center: "{{cost_center}}"
                fiscal_year: "{{fiscal_year}}"
            - name: submit-approval
              type: call
              call: "servicenow.create-request"
              with:
                short_description: "Budget reallocation for {{cost_center}} FY{{fiscal_year}}"
                category: "finance"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://broadcom-s4.sap.com/sap/opu/odata/sap/FI_BUDGET_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: budget
          path: "/A_BudgetUtilization(CostCenter='{{cost_center}}')"
          inputParameters:
            - name: cost_center
              in: path
          operations:
            - name: get-budget-utilization
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://broadcom.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST

Queries SAP S/4HANA for budget and actuals data by cost center for a given period and posts a variance summary to the finance leadership Slack channel.

naftiko: "0.5"
info:
  label: "SAP Budget vs Actuals Variance Report"
  description: "Queries SAP S/4HANA for budget and actuals data by cost center for a given period and posts a variance summary to the finance leadership Slack channel."
  tags:
    - finance
    - erp
    - sap
    - reporting
    - budgeting
capability:
  exposes:
    - type: mcp
      namespace: finance-reporting
      port: 8080
      tools:
        - name: publish-budget-variance
          description: "Given a SAP controlling area and fiscal period, retrieve cost center actuals vs. budget and post a variance summary to the finance Slack channel. Use monthly for budget reviews."
          inputParameters:
            - name: controlling_area
              in: body
              type: string
              description: "The SAP controlling area code."
            - name: fiscal_period
              in: body
              type: string
              description: "The fiscal period in YYYYMM format, e.g. '202603'."
          steps:
            - name: get-actuals
              type: call
              call: "sap.get-cost-center-actuals"
              with:
                controlling_area: "{{controlling_area}}"
                period: "{{fiscal_period}}"
            - name: post-summary
              type: call
              call: "slack.post-message"
              with:
                channel: "finance-leadership"
                text: "Budget variance for period {{fiscal_period}}: Actuals {{get-actuals.total_actual}}, Budget {{get-actuals.total_budget}}. Variance: {{get-actuals.variance_pct}}%."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://broadcom-s4.sap.com/sap/opu/odata/sap/FCO_PI_CONTROLLING_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: cost-center-actuals
          path: "/CostCenterActualsSet"
          operations:
            - name: get-cost-center-actuals
              method: GET
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

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

naftiko: "0.5"
info:
  label: "SAP Concur Expense Status Lookup"
  description: "Retrieves the approval status and total 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-status
          description: "Look up expense report status in SAP Concur."
          inputParameters:
            - name: report_id
              in: body
              type: string
              description: "The 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"
  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

Retrieves current stock levels for a 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 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 for a material in SAP."
          inputParameters:
            - name: material_number
              in: body
              type: string
              description: "The SAP material number."
          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"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://broadcom-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 semiconductor component from SAP S/4HANA.

naftiko: "0.5"
info:
  label: "SAP Material Bill of Materials Lookup"
  description: "Retrieves the bill of materials for a semiconductor component from SAP S/4HANA."
  tags:
    - manufacturing
    - sap
    - product-lifecycle
capability:
  exposes:
    - type: mcp
      namespace: engineering
      port: 8080
      tools:
        - name: get-material-bom
          description: "Look up bill of materials for a SAP material."
          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"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://broadcom-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

Detects material shortages from SAP MRP, creates an urgent purchase requisition, and notifies procurement via Slack.

naftiko: "0.5"
info:
  label: "SAP Material Shortage Alert Orchestrator"
  description: "Detects material shortages from SAP MRP, creates an urgent purchase requisition, and notifies procurement via Slack."
  tags:
    - supply-chain
    - sap
    - slack
capability:
  exposes:
    - type: mcp
      namespace: material-shortage
      port: 8080
      tools:
        - name: handle-material-shortage
          description: "Detect SAP material shortages, create purchase requisitions, and alert procurement."
          inputParameters:
            - name: plant_code
              in: body
              type: string
              description: "SAP plant code."
            - name: material_number
              in: body
              type: string
              description: "SAP material number."
          steps:
            - name: check-mrp
              type: call
              call: "sap.get-mrp-results"
              with:
                plant: "{{plant_code}}"
                material: "{{material_number}}"
            - name: create-pr
              type: call
              call: "sap.create-purchase-req"
              with:
                material: "{{material_number}}"
                plant: "{{plant_code}}"
                urgency: "high"
            - name: notify-procurement
              type: call
              call: "slack.post-message"
              with:
                channel: "#procurement"
                text: "Material shortage: {{material_number}} at plant {{plant_code}}. PR created: {{create-pr.number}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://broadcom-s4.sap.com/sap/opu/odata/sap/MM_MRP_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: mrp
          path: "/A_MRPResult"
          operations:
            - name: get-mrp-results
              method: GET
            - name: create-purchase-req
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Looks up a SAP S/4HANA purchase order by number, returning header status, vendor name, total value, and currency.

naftiko: "0.5"
info:
  label: "SAP Purchase Order Lookup"
  description: "Looks up a SAP S/4HANA purchase order by number, returning header status, vendor name, total value, and currency."
  tags:
    - finance
    - erp
    - sap
    - procurement
capability:
  exposes:
    - type: mcp
      namespace: erp
      port: 8080
      tools:
        - name: get-purchase-order
          description: "Given a SAP purchase order number, retrieve the PO header including status, vendor, total amount, and currency. Use for procurement validation and AP invoice matching."
          inputParameters:
            - name: po_number
              in: body
              type: string
              description: "The SAP purchase order number, e.g. '4500034567'."
          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_amount
              type: string
              mapping: "$.d.TotalAmount"
            - name: currency
              type: string
              mapping: "$.d.TransactionCurrency"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://broadcom-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

Retrieves the current status and delivery details for a SAP purchase order by PO number.

naftiko: "0.5"
info:
  label: "SAP Purchase Order Status Lookup"
  description: "Retrieves the current status and delivery details for a SAP purchase order by PO number."
  tags:
    - procurement
    - sap
    - erp
capability:
  exposes:
    - type: mcp
      namespace: procurement
      port: 8080
      tools:
        - name: get-po-status
          description: "Look up a SAP purchase order by number and return status, vendor, and delivery date."
          inputParameters:
            - name: po_number
              in: body
              type: string
              description: "The SAP purchase order number."
          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: delivery_date
              type: string
              mapping: "$.d.DeliveryDate"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://broadcom-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

Retrieves the payment status of a vendor invoice from SAP.

naftiko: "0.5"
info:
  label: "SAP Vendor Invoice Status Lookup"
  description: "Retrieves the payment status of a vendor invoice from SAP."
  tags:
    - finance
    - sap
capability:
  exposes:
    - type: mcp
      namespace: vendor-finance
      port: 8080
      tools:
        - name: get-invoice-status
          description: "Look up SAP vendor invoice payment status by invoice number."
          inputParameters:
            - name: invoice_number
              in: body
              type: string
              description: "The SAP vendor invoice number."
          call: "sap.get-invoice"
          with:
            invoice_number: "{{invoice_number}}"
          outputParameters:
            - name: payment_status
              type: string
              mapping: "$.d.PaymentStatus"
            - name: amount
              type: number
              mapping: "$.d.InvoiceAmount"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://broadcom-s4.sap.com/sap/opu/odata/sap/FI_VENDOR_INVOICE_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: invoices
          path: "/A_VendorInvoice('{{invoice_number}}')"
          inputParameters:
            - name: invoice_number
              in: path
          operations:
            - name: get-invoice
              method: GET

When a security incident is detected, collects logs from Splunk, captures affected host snapshots from VMware, and creates a forensics case in ServiceNow.

naftiko: "0.5"
info:
  label: "Security Incident Forensics Orchestrator"
  description: "When a security incident is detected, collects logs from Splunk, captures affected host snapshots from VMware, and creates a forensics case in ServiceNow."
  tags:
    - security
    - splunk
    - vmware
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: incident-forensics
      port: 8080
      tools:
        - name: collect-forensics
          description: "Collect forensic evidence by gathering Splunk logs, VMware snapshots, and creating a ServiceNow forensics case."
          inputParameters:
            - name: incident_id
              in: body
              type: string
              description: "Security incident identifier."
            - name: host_name
              in: body
              type: string
              description: "Affected host name."
          steps:
            - name: collect-logs
              type: call
              call: "splunk.export-search"
              with:
                query: "host={{host_name}} incident={{incident_id}}"
            - name: take-snapshot
              type: call
              call: "vmware.create-snapshot"
              with:
                vm_name: "{{host_name}}"
                description: "Forensics snapshot for incident {{incident_id}}"
            - name: create-case
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Forensics case for incident {{incident_id}}"
                category: "security"
  consumes:
    - type: http
      namespace: splunk
      baseUri: "https://splunk.broadcom.com:8089/services"
      authentication:
        type: bearer
        token: "$secrets.splunk_token"
      resources:
        - name: search
          path: "/search/jobs/export"
          operations:
            - name: export-search
              method: POST
    - type: http
      namespace: vmware
      baseUri: "https://vcenter.broadcom.com/api/vcenter"
      authentication:
        type: bearer
        token: "$secrets.vcenter_token"
      resources:
        - name: snapshots
          path: "/vm/{{vm_id}}/snapshots"
          operations:
            - name: create-snapshot
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://broadcom.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

Tracks wafer yield by querying SAP production data, pulling yield analytics from Snowflake, and updating ServiceNow CMDB records.

naftiko: "0.5"
info:
  label: "Semiconductor Wafer Yield Tracking Orchestrator"
  description: "Tracks wafer yield by querying SAP production data, pulling yield analytics from Snowflake, and updating ServiceNow CMDB records."
  tags:
    - manufacturing
    - sap
    - snowflake
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: fab-ops
      port: 8080
      tools:
        - name: track-wafer-yield
          description: "Orchestrate wafer yield tracking across SAP, Snowflake, and ServiceNow."
          inputParameters:
            - name: lot_id
              in: body
              type: string
              description: "The wafer lot identifier."
          steps:
            - name: get-production-data
              type: call
              call: "sap.get-production-order"
              with:
                lot_id: "{{lot_id}}"
            - name: get-yield-analytics
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "SELECT yield_pct, defect_count FROM fab_yield WHERE lot_id = '{{lot_id}}'"
            - name: update-cmdb
              type: call
              call: "servicenow.update-ci"
              with:
                ci_name: "LOT-{{lot_id}}"
                yield: "{{get-yield-analytics.yield_pct}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://broadcom-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"
          operations:
            - name: get-production-order
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://broadcom.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://broadcom.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

Retrieves incident status, priority, and assignment group from ServiceNow by ticket number.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Status Lookup"
  description: "Retrieves incident status, priority, and assignment group from ServiceNow 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 and return its current state and assignment."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "The ServiceNow incident number."
          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://broadcom.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

When a high-priority ServiceNow incident is raised for a critical enterprise software or infrastructure system, fetches on-call information from PagerDuty, assigns the ticket, and posts to the operations Slack channel.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Triage and On-Call Routing"
  description: "When a high-priority ServiceNow incident is raised for a critical enterprise software or infrastructure system, fetches on-call information from PagerDuty, assigns the ticket, and posts to the operations Slack channel."
  tags:
    - itsm
    - incident-response
    - servicenow
    - pagerduty
    - slack
capability:
  exposes:
    - type: mcp
      namespace: itsm-ops
      port: 8080
      tools:
        - name: triage-incident
          description: "Given a ServiceNow incident number and priority, fetch incident details, get the on-call engineer from PagerDuty, assign the ticket, and alert the operations Slack channel. Use for P1/P2 incidents on VMware, CA, or semiconductor product infrastructure."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "The ServiceNow incident number, e.g. 'INC0099887'."
            - name: priority
              in: body
              type: string
              description: "Incident priority: 1 (Critical), 2 (High)."
          steps:
            - name: get-incident
              type: call
              call: "servicenow.get-incident"
              with:
                number: "{{incident_number}}"
            - name: get-oncall
              type: call
              call: "pagerduty.get-oncall-user"
              with:
                schedule_id: "$secrets.pagerduty_it_schedule_id"
            - name: assign-incident
              type: call
              call: "servicenow-assign.update-incident"
              with:
                sys_id: "{{get-incident.sys_id}}"
                assigned_to: "{{get-oncall.user_email}}"
            - name: alert-ops
              type: call
              call: "slack.post-message"
              with:
                channel: "it-incidents"
                text: "P{{priority}} {{incident_number}}: {{get-incident.short_description}} — assigned to {{get-oncall.user_name}}."
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://broadcom.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: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.pagerduty_token"
        placement: header
      resources:
        - name: oncalls
          path: "/oncalls"
          operations:
            - name: get-oncall-user
              method: GET
    - type: http
      namespace: servicenow-assign
      baseUri: "https://broadcom.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incident-update
          path: "/table/incident/{{sys_id}}"
          inputParameters:
            - name: sys_id
              in: path
          operations:
            - name: update-incident
              method: PATCH
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

When wafer inspection detects defects above threshold, logs details in SAP quality module, creates a Jira defect ticket, and notifies fab managers via Slack.

naftiko: "0.5"
info:
  label: "Silicon Wafer Defect Escalation Orchestrator"
  description: "When wafer inspection detects defects above threshold, logs details in SAP quality module, creates a Jira defect ticket, and notifies fab managers via Slack."
  tags:
    - manufacturing
    - sap
    - jira
    - slack
capability:
  exposes:
    - type: mcp
      namespace: wafer-quality
      port: 8080
      tools:
        - name: escalate-wafer-defect
          description: "Escalate wafer defect by logging in SAP, opening a Jira ticket, and alerting fab managers."
          inputParameters:
            - name: wafer_lot_id
              in: body
              type: string
              description: "Wafer lot identifier."
            - name: defect_count
              in: body
              type: number
              description: "Number of defects detected."
          steps:
            - name: log-quality
              type: call
              call: "sap.create-quality-notification"
              with:
                lot_id: "{{wafer_lot_id}}"
                defect_count: "{{defect_count}}"
            - name: create-defect
              type: call
              call: "jira.create-issue"
              with:
                project: "FAB"
                summary: "Wafer defect escalation for lot {{wafer_lot_id}}"
                description: "Defect count: {{defect_count}}"
            - name: alert-managers
              type: call
              call: "slack.post-message"
              with:
                channel: "#fab-alerts"
                text: "Wafer lot {{wafer_lot_id}} has {{defect_count}} defects. Jira: {{create-defect.key}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://broadcom-s4.sap.com/sap/opu/odata/sap/QM_NOTIFICATION_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: notifications
          path: "/A_QualityNotification"
          operations:
            - name: create-quality-notification
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://broadcom.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: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Monitors Snowflake for stale or failed data pipeline runs supporting sales, finance, and product analytics, and creates Jira tasks for SLA breaches.

naftiko: "0.5"
info:
  label: "Snowflake Data Pipeline Health Monitor"
  description: "Monitors Snowflake for stale or failed data pipeline runs supporting sales, finance, and product analytics, and creates Jira tasks for SLA breaches."
  tags:
    - data
    - analytics
    - snowflake
    - jira
    - monitoring
    - data-quality
capability:
  exposes:
    - type: mcp
      namespace: data-ops
      port: 8080
      tools:
        - name: check-pipeline-health
          description: "Given a Snowflake pipeline name and SLA threshold in minutes, verify the pipeline completed within SLA and create a Jira task if breached. Use for monitoring sales, finance, and product analytics data pipelines."
          inputParameters:
            - name: pipeline_name
              in: body
              type: string
              description: "The Snowflake task name, e.g. 'BROADCOM_REVENUE_DAILY_LOAD'."
            - name: sla_minutes
              in: body
              type: integer
              description: "Maximum allowed minutes since last successful pipeline run."
          steps:
            - name: check-run
              type: call
              call: "snowflake.query-task-history"
              with:
                task_name: "{{pipeline_name}}"
            - name: create-task
              type: call
              call: "jira.create-issue"
              with:
                project_key: "DATA"
                issuetype: "Task"
                summary: "SLA breach: {{pipeline_name}} exceeded {{sla_minutes}} minutes"
                description: "Pipeline: {{pipeline_name}}\nLast success: {{check-run.last_success_time}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://broadcom.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: task-history
          path: "/databases/broadcom/schemas/monitoring/tasks/{{task_name}}/history"
          inputParameters:
            - name: task_name
              in: path
          operations:
            - name: query-task-history
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://broadcom.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

Checks Snowflake task execution status, validates row counts against source systems, and creates a Jira ticket for any data discrepancies.

naftiko: "0.5"
info:
  label: "Snowflake ETL Pipeline Health Orchestrator"
  description: "Checks Snowflake task execution status, validates row counts against source systems, and creates a Jira ticket for any data discrepancies."
  tags:
    - data
    - snowflake
    - jira
capability:
  exposes:
    - type: mcp
      namespace: etl-health
      port: 8080
      tools:
        - name: check-etl-pipeline-health
          description: "Check Snowflake ETL pipeline health, validate row counts, and create Jira tickets for discrepancies."
          inputParameters:
            - name: pipeline_name
              in: body
              type: string
              description: "ETL pipeline name."
          steps:
            - name: get-task-status
              type: call
              call: "snowflake.get-task-history"
              with:
                pipeline: "{{pipeline_name}}"
            - name: validate-counts
              type: call
              call: "snowflake.run-validation-query"
              with:
                pipeline: "{{pipeline_name}}"
            - name: create-ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "DATA"
                summary: "ETL discrepancy in {{pipeline_name}}"
                issue_type: "Bug"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://broadcom.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: get-task-history
              method: POST
            - name: run-validation-query
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://broadcom.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

Checks the execution status and row count of a Snowflake query by statement handle.

naftiko: "0.5"
info:
  label: "Snowflake Query Execution Status Lookup"
  description: "Checks the execution status and row count of a Snowflake query by statement handle."
  tags:
    - data
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: data-warehouse
      port: 8080
      tools:
        - name: get-query-status
          description: "Look up Snowflake query execution status by statement handle."
          inputParameters:
            - name: statement_handle
              in: body
              type: string
              description: "Snowflake SQL statement handle."
          call: "snowflake.get-statement"
          with:
            handle: "{{statement_handle}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.statementStatusUrl"
            - name: row_count
              type: number
              mapping: "$.resultSetMetaData.numRows"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://broadcom.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements/{{handle}}"
          inputParameters:
            - name: handle
              in: path
          operations:
            - name: get-statement
              method: GET

Queries Snowflake for the current row count of a specified analytics table.

naftiko: "0.5"
info:
  label: "Snowflake Table Row Count Lookup"
  description: "Queries Snowflake for the current row count of a specified analytics table."
  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."
          inputParameters:
            - name: table_name
              in: body
              type: string
              description: "Fully qualified Snowflake table name."
          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://broadcom.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST

When SolarWinds detects a network outage, creates a ServiceNow major incident, notifies the NOC via Slack, and initiates automated diagnostics.

naftiko: "0.5"
info:
  label: "SolarWinds Network Outage Response Orchestrator"
  description: "When SolarWinds detects a network outage, creates a ServiceNow major incident, notifies the NOC via Slack, and initiates automated diagnostics."
  tags:
    - network
    - solarwinds
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: network-outage
      port: 8080
      tools:
        - name: respond-to-outage
          description: "Respond to SolarWinds network outage by creating ServiceNow incident, alerting NOC, and running diagnostics."
          inputParameters:
            - name: node_name
              in: body
              type: string
              description: "SolarWinds node name."
            - name: alert_severity
              in: body
              type: string
              description: "Alert severity level."
          steps:
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Network outage: {{node_name}}"
                urgency: "1"
                impact: "1"
            - name: notify-noc
              type: call
              call: "slack.post-message"
              with:
                channel: "#noc-alerts"
                text: "Network outage detected: {{node_name}} ({{alert_severity}}). Incident: {{create-incident.number}}"
            - name: run-diagnostics
              type: call
              call: "solarwinds.run-diagnostics"
              with:
                node_name: "{{node_name}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://broadcom.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: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST
    - type: http
      namespace: solarwinds
      baseUri: "https://solarwinds.broadcom.com/api/v2"
      authentication:
        type: basic
        username: "$secrets.solarwinds_user"
        password: "$secrets.solarwinds_password"
      resources:
        - name: diagnostics
          path: "/nodes/{{node_name}}/diagnostics"
          inputParameters:
            - name: node_name
              in: path
          operations:
            - name: run-diagnostics
              method: POST

Queries Splunk for recent security events matching a given search query.

naftiko: "0.5"
info:
  label: "Splunk Security Event Lookup"
  description: "Queries Splunk for recent security events matching a given search query."
  tags:
    - security
    - splunk
capability:
  exposes:
    - type: mcp
      namespace: security-events
      port: 8080
      tools:
        - name: search-security-events
          description: "Search Splunk for security events by query string."
          inputParameters:
            - name: search_query
              in: body
              type: string
              description: "Splunk search query string."
          call: "splunk.search-events"
          with:
            query: "{{search_query}}"
          outputParameters:
            - name: event_count
              type: number
              mapping: "$.results.length"
            - name: events
              type: string
              mapping: "$.results"
  consumes:
    - type: http
      namespace: splunk
      baseUri: "https://splunk.broadcom.com:8089/services"
      authentication:
        type: bearer
        token: "$secrets.splunk_token"
      resources:
        - name: search
          path: "/search/jobs/export"
          inputParameters:
            - name: query
              in: query
          operations:
            - name: search-events
              method: GET

Checks SSL certificate expiry dates, initiates renewal requests, and updates the certificate inventory in ServiceNow CMDB.

naftiko: "0.5"
info:
  label: "SSL Certificate Renewal Orchestrator"
  description: "Checks SSL certificate expiry dates, initiates renewal requests, and updates the certificate inventory in ServiceNow CMDB."
  tags:
    - security
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: cert-renewal
      port: 8080
      tools:
        - name: renew-ssl-certificates
          description: "Check expiring SSL certificates, initiate renewal, and update ServiceNow CMDB."
          inputParameters:
            - name: domain
              in: body
              type: string
              description: "Domain name to check."
            - name: days_before_expiry
              in: body
              type: number
              description: "Days before expiry threshold."
          steps:
            - name: check-cert
              type: call
              call: "cert-mgmt.check-expiry"
              with:
                domain: "{{domain}}"
                threshold_days: "{{days_before_expiry}}"
            - name: request-renewal
              type: call
              call: "cert-mgmt.request-renewal"
              with:
                domain: "{{domain}}"
            - name: update-cmdb
              type: call
              call: "servicenow.update-ci"
              with:
                name: "{{domain}}"
                renewal_status: "pending"
  consumes:
    - type: http
      namespace: cert-mgmt
      baseUri: "https://cert-manager.broadcom.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.cert_mgmt_token"
      resources:
        - name: certificates
          path: "/certificates"
          operations:
            - name: check-expiry
              method: GET
            - name: request-renewal
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://broadcom.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: cmdb
          path: "/table/cmdb_ci_certificate"
          operations:
            - name: update-ci
              method: PATCH

Handles supply chain disruptions by querying SAP for affected POs, identifying impacted Salesforce accounts, and alerting supply chain ops via Teams.

naftiko: "0.5"
info:
  label: "Supply Chain Disruption Alert Orchestrator"
  description: "Handles supply chain disruptions by querying SAP for affected POs, identifying impacted Salesforce accounts, and alerting supply chain ops via Teams."
  tags:
    - supply-chain
    - sap
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: supply-chain
      port: 8080
      tools:
        - name: handle-disruption
          description: "Orchestrate supply chain disruption response across SAP, Salesforce, and Teams."
          inputParameters:
            - name: supplier_id
              in: body
              type: string
              description: "The SAP supplier ID."
            - name: disruption_type
              in: body
              type: string
              description: "Type of disruption."
          steps:
            - name: get-affected-pos
              type: call
              call: "sap.search-purchase-orders"
              with:
                supplier: "{{supplier_id}}"
            - 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: "Disruption: {{disruption_type}} from {{supplier_id}}. POs: {{get-affected-pos.count}}, Accounts: {{get-impacted-accounts.totalSize}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://broadcom-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}}'"
          inputParameters:
            - name: supplier
              in: query
          operations:
            - name: search-purchase-orders
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://broadcom.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

Creates a new Terraform Cloud workspace for a project, links the GitHub repository, and notifies the infrastructure team via Slack.

naftiko: "0.5"
info:
  label: "Terraform Cloud Workspace Provisioner"
  description: "Creates a new Terraform Cloud workspace for a project, links the GitHub repository, and notifies the infrastructure team via Slack."
  tags:
    - cloud
    - infrastructure
    - terraform
    - github
    - slack
capability:
  exposes:
    - type: mcp
      namespace: infra-provisioning
      port: 8080
      tools:
        - name: provision-terraform-workspace
          description: "Given a workspace name, GitHub repository, and Terraform organization, create a Terraform Cloud workspace linked to the repository and notify the infrastructure team in Slack. Use when a new VMware Cloud, semiconductor test, or enterprise software project needs cloud infrastructure."
          inputParameters:
            - name: workspace_name
              in: body
              type: string
              description: "The desired Terraform Cloud workspace name, e.g. 'broadcom-vcenter-prod'."
            - name: github_repo
              in: body
              type: string
              description: "The GitHub repository to link, e.g. 'broadcom/vsphere-automation'."
            - name: tf_org
              in: body
              type: string
              description: "The Terraform Cloud organization name."
          steps:
            - name: create-workspace
              type: call
              call: "terraform.create-workspace"
              with:
                name: "{{workspace_name}}"
                organization: "{{tf_org}}"
            - name: link-vcs
              type: call
              call: "terraform-vcs.configure-vcs"
              with:
                workspace_id: "{{create-workspace.id}}"
                repo: "{{github_repo}}"
            - name: notify-infra
              type: call
              call: "slack.post-message"
              with:
                channel: "infrastructure"
                text: "Terraform workspace {{workspace_name}} created and linked to {{github_repo}}. ID: {{create-workspace.id}}."
  consumes:
    - type: http
      namespace: terraform
      baseUri: "https://app.terraform.io/api/v2"
      authentication:
        type: bearer
        token: "$secrets.terraform_token"
      resources:
        - name: workspaces
          path: "/organizations/{{organization}}/workspaces"
          inputParameters:
            - name: organization
              in: path
          operations:
            - name: create-workspace
              method: POST
    - type: http
      namespace: terraform-vcs
      baseUri: "https://app.terraform.io/api/v2"
      authentication:
        type: bearer
        token: "$secrets.terraform_token"
      resources:
        - name: workspace-vcs
          path: "/workspaces/{{workspace_id}}/relationships/vars"
          inputParameters:
            - name: workspace_id
              in: path
          operations:
            - name: configure-vcs
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Retrieves the current state version and resource count for a Terraform Cloud workspace.

naftiko: "0.5"
info:
  label: "Terraform Workspace State Lookup"
  description: "Retrieves the current state version and resource count for a Terraform Cloud workspace."
  tags:
    - infrastructure
    - terraform
capability:
  exposes:
    - type: mcp
      namespace: iac-state
      port: 8080
      tools:
        - name: get-workspace-state
          description: "Look up Terraform Cloud workspace state by workspace ID."
          inputParameters:
            - name: workspace_id
              in: body
              type: string
              description: "Terraform Cloud workspace ID."
          call: "terraform.get-state"
          with:
            workspace_id: "{{workspace_id}}"
          outputParameters:
            - name: state_version
              type: string
              mapping: "$.data.attributes.serial"
            - name: resource_count
              type: number
              mapping: "$.data.attributes.resource-count"
  consumes:
    - type: http
      namespace: terraform
      baseUri: "https://app.terraform.io/api/v2"
      authentication:
        type: bearer
        token: "$secrets.terraform_token"
      resources:
        - name: state-versions
          path: "/workspaces/{{workspace_id}}/current-state-version"
          inputParameters:
            - name: workspace_id
              in: path
          operations:
            - name: get-state
              method: GET

Reviews vendor compliance by checking SAP Ariba certifications, querying delivery metrics in Snowflake, and publishing a report to Confluence.

naftiko: "0.5"
info:
  label: "Vendor Compliance Review Orchestrator"
  description: "Reviews vendor compliance by checking SAP Ariba certifications, querying delivery metrics in Snowflake, and publishing a report to Confluence."
  tags:
    - supply-chain
    - procurement
    - sap
    - snowflake
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: vendor-compliance
      port: 8080
      tools:
        - name: review-vendor-compliance
          description: "Orchestrate vendor compliance review across SAP Ariba, Snowflake, and Confluence."
          inputParameters:
            - name: vendor_id
              in: body
              type: string
              description: "The vendor ID."
          steps:
            - name: get-certifications
              type: call
              call: "ariba.get-supplier-profile"
              with:
                vendor_id: "{{vendor_id}}"
            - name: get-metrics
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "SELECT on_time_rate, quality_rate FROM vendor_performance WHERE vendor_id = '{{vendor_id}}'"
            - name: publish-report
              type: call
              call: "confluence.create-page"
              with:
                space: "PROCUREMENT"
                title: "Vendor Compliance - {{vendor_id}}"
                body: "On-time: {{get-metrics.on_time_rate}}%, Quality: {{get-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://broadcom.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://broadcom.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

Pulls vendor compliance data from SAP Ariba, runs a risk scoring model, and publishes assessment results to Confluence.

naftiko: "0.5"
info:
  label: "Vendor Risk Assessment Orchestrator"
  description: "Pulls vendor compliance data from SAP Ariba, runs a risk scoring model, and publishes assessment results to Confluence."
  tags:
    - procurement
    - sap-ariba
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: vendor-risk
      port: 8080
      tools:
        - name: assess-vendor-risk
          description: "Assess vendor risk by pulling SAP Ariba data, scoring risk, and publishing results to Confluence."
          inputParameters:
            - name: vendor_id
              in: body
              type: string
              description: "SAP Ariba vendor ID."
            - name: assessment_year
              in: body
              type: string
              description: "Assessment year."
          steps:
            - name: get-vendor-data
              type: call
              call: "ariba.get-vendor-profile"
              with:
                vendor_id: "{{vendor_id}}"
            - name: score-risk
              type: call
              call: "risk-engine.calculate-score"
              with:
                vendor_id: "{{vendor_id}}"
                compliance_data: "{{get-vendor-data.compliance_status}}"
            - name: publish-assessment
              type: call
              call: "confluence.create-page"
              with:
                space_key: "VRISK"
                title: "Vendor Risk Assessment - {{get-vendor-data.vendor_name}} - {{assessment_year}}"
                body: "Risk score: {{score-risk.score}}"
  consumes:
    - type: http
      namespace: ariba
      baseUri: "https://openapi.ariba.com/api/supplier-management/v1"
      authentication:
        type: bearer
        token: "$secrets.ariba_token"
      resources:
        - name: vendors
          path: "/suppliers/{{vendor_id}}"
          inputParameters:
            - name: vendor_id
              in: path
          operations:
            - name: get-vendor-profile
              method: GET
    - type: http
      namespace: risk-engine
      baseUri: "https://risk-api.broadcom.com/v1"
      authentication:
        type: bearer
        token: "$secrets.risk_engine_token"
      resources:
        - name: scoring
          path: "/score"
          operations:
            - name: calculate-score
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://broadcom.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: content
          path: "/content"
          operations:
            - name: create-page
              method: POST

Retrieves the power state and resource allocation for a VMware virtual machine.

naftiko: "0.5"
info:
  label: "VMware vCenter VM Status Lookup"
  description: "Retrieves the power state and resource allocation for a VMware virtual machine."
  tags:
    - infrastructure
    - vmware
capability:
  exposes:
    - type: mcp
      namespace: vmware-infra
      port: 8080
      tools:
        - name: get-vm-status
          description: "Look up VM power state and CPU/memory allocation by VM name."
          inputParameters:
            - name: vm_name
              in: body
              type: string
              description: "The VMware virtual machine name."
          call: "vcenter.get-vm"
          with:
            vm_name: "{{vm_name}}"
          outputParameters:
            - name: power_state
              type: string
              mapping: "$.value[0].power_state"
            - name: cpu_count
              type: number
              mapping: "$.value[0].cpu_count"
  consumes:
    - type: http
      namespace: vcenter
      baseUri: "https://vcenter.broadcom.com/api/vcenter"
      authentication:
        type: bearer
        token: "$secrets.vcenter_token"
      resources:
        - name: vms
          path: "/vm?filter.names={{vm_name}}"
          inputParameters:
            - name: vm_name
              in: query
          operations:
            - name: get-vm
              method: GET

Decommissions a VMware VM by powering it off, archiving disks to S3, removing DNS records from Cloudflare, and closing the ServiceNow CI record.

naftiko: "0.5"
info:
  label: "VMware VM Lifecycle Decommission Orchestrator"
  description: "Decommissions a VMware VM by powering it off, archiving disks to S3, removing DNS records from Cloudflare, and closing the ServiceNow CI record."
  tags:
    - infrastructure
    - vmware
    - aws-s3
    - cloudflare
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: vm-decommission
      port: 8080
      tools:
        - name: decommission-vm
          description: "Decommission a VMware VM by powering off, archiving disks to S3, removing DNS, and closing ServiceNow CI."
          inputParameters:
            - name: vm_name
              in: body
              type: string
              description: "VMware virtual machine name."
          steps:
            - name: power-off
              type: call
              call: "vmware.power-off-vm"
              with:
                vm_name: "{{vm_name}}"
            - name: archive-disks
              type: call
              call: "s3.put-object"
              with:
                bucket: "broadcom-vm-archives"
                key: "{{vm_name}}/disk-backup.vmdk"
            - name: remove-dns
              type: call
              call: "cloudflare.delete-record"
              with:
                hostname: "{{vm_name}}.broadcom.com"
            - name: close-ci
              type: call
              call: "servicenow.update-ci"
              with:
                name: "{{vm_name}}"
                status: "retired"
  consumes:
    - type: http
      namespace: vmware
      baseUri: "https://vcenter.broadcom.com/api/vcenter"
      authentication:
        type: bearer
        token: "$secrets.vcenter_token"
      resources:
        - name: vms
          path: "/vm/{{vm_id}}/power"
          operations:
            - name: power-off-vm
              method: POST
    - type: http
      namespace: s3
      baseUri: "https://s3.amazonaws.com"
      authentication:
        type: bearer
        token: "$secrets.aws_s3_token"
      resources:
        - name: objects
          path: "/{{bucket}}/{{key}}"
          operations:
            - name: put-object
              method: PUT
    - type: http
      namespace: cloudflare
      baseUri: "https://api.cloudflare.com/client/v4"
      authentication:
        type: bearer
        token: "$secrets.cloudflare_token"
      resources:
        - name: dns
          path: "/zones/{{zone_id}}/dns_records"
          operations:
            - name: delete-record
              method: DELETE
    - type: http
      namespace: servicenow
      baseUri: "https://broadcom.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: cmdb
          path: "/table/cmdb_ci_server"
          operations:
            - name: update-ci
              method: PATCH

Retrieves compensation band details for a job profile from Workday.

naftiko: "0.5"
info:
  label: "Workday Compensation Band Lookup"
  description: "Retrieves compensation band details for a job profile from Workday."
  tags:
    - hr
    - workday
capability:
  exposes:
    - type: mcp
      namespace: hr-compensation
      port: 8080
      tools:
        - name: get-compensation-band
          description: "Look up Workday compensation band by job profile ID."
          inputParameters:
            - name: job_profile_id
              in: body
              type: string
              description: "Workday job profile ID."
          call: "workday.get-comp-band"
          with:
            job_profile_id: "{{job_profile_id}}"
          outputParameters:
            - name: min_salary
              type: number
              mapping: "$.compensation.minimum"
            - name: max_salary
              type: number
              mapping: "$.compensation.maximum"
  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: "/broadcom/compensationBands/{{job_profile_id}}"
          inputParameters:
            - name: job_profile_id
              in: path
          operations:
            - name: get-comp-band
              method: GET

Retrieves employee details from Workday including name, title, department, and manager.

naftiko: "0.5"
info:
  label: "Workday Employee Directory Lookup"
  description: "Retrieves employee details from Workday including name, title, department, and manager."
  tags:
    - hr
    - workday
    - directory
capability:
  exposes:
    - type: mcp
      namespace: hr-directory
      port: 8080
      tools:
        - name: get-employee-details
          description: "Look up a Workday employee by worker ID and return their profile information."
          inputParameters:
            - name: worker_id
              in: body
              type: string
              description: "The Workday worker ID."
          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"
  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: "/broadcom/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET

Pulls current headcount from Workday, compares against hiring plan targets, and publishes a gap analysis to Confluence.

naftiko: "0.5"
info:
  label: "Workday Headcount Forecast Orchestrator"
  description: "Pulls current headcount from Workday, compares against hiring plan targets, and publishes a gap analysis to Confluence."
  tags:
    - hr
    - workday
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: headcount-forecast
      port: 8080
      tools:
        - name: generate-headcount-forecast
          description: "Generate headcount forecast by comparing Workday actuals to hiring plan and publishing to Confluence."
          inputParameters:
            - name: department
              in: body
              type: string
              description: "Department name."
            - name: fiscal_quarter
              in: body
              type: string
              description: "Fiscal quarter."
          steps:
            - name: get-headcount
              type: call
              call: "workday.get-headcount"
              with:
                department: "{{department}}"
            - name: publish-analysis
              type: call
              call: "confluence.create-page"
              with:
                space_key: "HR"
                title: "Headcount Forecast - {{department}} - {{fiscal_quarter}}"
                body: "Current headcount: {{get-headcount.total}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: headcount
          path: "/broadcom/headcountReport"
          operations:
            - name: get-headcount
              method: GET
    - type: http
      namespace: confluence
      baseUri: "https://broadcom.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: content
          path: "/content"
          operations:
            - name: create-page
              method: POST

Returns current headcount by department and cost center from Workday for finance and HR reporting.

naftiko: "0.5"
info:
  label: "Workday Headcount Snapshot"
  description: "Returns current headcount by department and cost center from Workday for finance and HR reporting."
  tags:
    - hr
    - finance
    - workday
    - reporting
    - headcount
capability:
  exposes:
    - type: mcp
      namespace: hr-reporting
      port: 8080
      tools:
        - name: get-headcount-snapshot
          description: "Returns all active Broadcom employees grouped by department and cost center from Workday. Use for headcount planning, finance budgeting, and workforce analytics."
          call: "workday.list-workers"
          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
          path: "/broadcom/workers"
          operations:
            - name: list-workers
              method: GET

Initiates a performance review cycle in Workday for a Broadcom division, creates a Jira tracking epic, and notifies HR business partners via Slack.

naftiko: "0.5"
info:
  label: "Workday Performance Review Cycle Kickoff"
  description: "Initiates a performance review cycle in Workday for a Broadcom division, creates a Jira tracking epic, and notifies HR business partners via Slack."
  tags:
    - hr
    - performance-management
    - workday
    - jira
    - slack
capability:
  exposes:
    - type: mcp
      namespace: hr-performance
      port: 8080
      tools:
        - name: kickoff-review-cycle
          description: "Given a Workday division ID and review period, initiate the performance review process, create a Jira epic to track progress, and notify HR BPs in Slack. Use at the start of each semi-annual performance review cycle."
          inputParameters:
            - name: division_id
              in: body
              type: string
              description: "The Workday division ID, e.g. 'DIV-VMWARE-CLOUD' or 'DIV-SEMICONDUCTOR'."
            - name: review_period
              in: body
              type: string
              description: "The review period label, e.g. 'H1-2026'."
          steps:
            - name: initiate-review
              type: call
              call: "workday.create-review-process"
              with:
                division_id: "{{division_id}}"
                period: "{{review_period}}"
            - name: create-epic
              type: call
              call: "jira.create-issue"
              with:
                project_key: "HR"
                issuetype: "Epic"
                summary: "Performance Review {{review_period}} — {{division_id}}"
            - name: notify-hrbp
              type: call
              call: "slack.post-message"
              with:
                channel: "hrbp-team"
                text: "Performance review {{review_period}} initiated for {{division_id}}. Jira epic: {{create-epic.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: review-processes
          path: "/broadcom/performanceManagement/reviewProcesses"
          operations:
            - name: create-review-process
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://broadcom.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: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Retrieves cloud recording details for a Zoom meeting.

naftiko: "0.5"
info:
  label: "Zoom Meeting Recording Lookup"
  description: "Retrieves cloud recording details for a Zoom meeting."
  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."
          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"
  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

After a Zoom webinar ends, retrieves registrant data, creates leads in Salesforce, and triggers a follow-up email campaign via HubSpot.

naftiko: "0.5"
info:
  label: "Zoom Webinar Lead Capture Orchestrator"
  description: "After a Zoom webinar ends, retrieves registrant data, creates leads in Salesforce, and triggers a follow-up email campaign via HubSpot."
  tags:
    - marketing
    - zoom
    - salesforce
    - hubspot
capability:
  exposes:
    - type: mcp
      namespace: webinar-leads
      port: 8080
      tools:
        - name: capture-webinar-leads
          description: "Capture Zoom webinar leads, create Salesforce records, and trigger HubSpot follow-up."
          inputParameters:
            - name: webinar_id
              in: body
              type: string
              description: "Zoom webinar ID."
          steps:
            - name: get-registrants
              type: call
              call: "zoom.get-webinar-registrants"
              with:
                webinar_id: "{{webinar_id}}"
            - name: create-leads
              type: call
              call: "salesforce.create-lead"
              with:
                source: "Zoom Webinar {{webinar_id}}"
            - name: trigger-campaign
              type: call
              call: "hubspot.enroll-contacts"
              with:
                workflow_id: "webinar-followup"
                webinar_id: "{{webinar_id}}"
  consumes:
    - type: http
      namespace: zoom
      baseUri: "https://api.zoom.us/v2"
      authentication:
        type: bearer
        token: "$secrets.zoom_token"
      resources:
        - name: webinars
          path: "/webinars/{{webinar_id}}/registrants"
          inputParameters:
            - name: webinar_id
              in: path
          operations:
            - name: get-webinar-registrants
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://broadcom.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: leads
          path: "/sobjects/Lead"
          operations:
            - name: create-lead
              method: POST
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: workflows
          path: "/automation/v4/workflows"
          operations:
            - name: enroll-contacts
              method: POST