AT&T Capabilities

Naftiko 0.5 capability definitions for AT&T - 100 capabilities showing integration workflows and service orchestrations.

Sort
Expand

When a 5G tower reaches capacity threshold, retrieves tower metrics from Datadog, creates a ServiceNow change request for capacity expansion, and notifies network engineering via Microsoft Teams.

naftiko: "0.5"
info:
  label: "5G Tower Capacity Alert Handler"
  description: "When a 5G tower reaches capacity threshold, retrieves tower metrics from Datadog, creates a ServiceNow change request for capacity expansion, and notifies network engineering via Microsoft Teams."
  tags:
    - network
    - 5g
    - datadog
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: network-capacity
      port: 8080
      tools:
        - name: handle-tower-capacity-alert
          description: "Given a tower ID and utilization percentage, handle the capacity alert workflow."
          inputParameters:
            - name: tower_id
              in: body
              type: string
              description: "The 5G tower identifier."
            - name: utilization_pct
              in: body
              type: number
              description: "Current utilization percentage."
          steps:
            - name: get-tower-metrics
              type: call
              call: "datadog.get-tower-metrics"
              with:
                tower_id: "{{tower_id}}"
            - name: create-change-request
              type: call
              call: "servicenow.create-change-request"
              with:
                short_description: "5G tower {{tower_id}} capacity expansion - {{utilization_pct}}% utilized"
                category: "network"
                priority: "2"
            - name: notify-engineering
              type: call
              call: "teams.post-message"
              with:
                channel_id: "network-engineering"
                text: "5G tower {{tower_id}} at {{utilization_pct}}% capacity. Change request: {{create-change-request.number}}. Peak traffic: {{get-tower-metrics.peak_traffic}}."
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: metrics
          path: "/query"
          operations:
            - name: get-tower-metrics
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://att.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: create-change-request
              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/channels/messages"
          operations:
            - name: post-message
              method: POST

Syncs benefits enrollment data from ADP to Workday, reconciles discrepancies, and notifies HR via Microsoft Teams when mismatches are found.

naftiko: "0.5"
info:
  label: "ADP Benefits Enrollment Sync"
  description: "Syncs benefits enrollment data from ADP to Workday, reconciles discrepancies, and notifies HR via Microsoft Teams when mismatches are found."
  tags:
    - hr
    - benefits
    - adp
    - workday
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: benefits-sync
      port: 8080
      tools:
        - name: sync-benefits-enrollment
          description: "Given an employee ID, sync benefits enrollment between ADP and Workday and flag mismatches."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "Employee ID to sync."
          steps:
            - name: get-adp-enrollment
              type: call
              call: "adp.get-benefits"
              with:
                employee_id: "{{employee_id}}"
            - name: get-workday-enrollment
              type: call
              call: "workday.get-benefits"
              with:
                employee_id: "{{employee_id}}"
            - name: notify-hr
              type: call
              call: "teams.post-message"
              with:
                channel_id: "hr-benefits"
                text: "Benefits sync for {{employee_id}}: ADP plan: {{get-adp-enrollment.plan_name}}, Workday plan: {{get-workday-enrollment.plan_name}}"
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_token"
      resources:
        - name: benefits
          path: "/workers/{{employee_id}}/benefits"
          operations:
            - name: get-benefits
              method: GET
    - type: http
      namespace: workday
      baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/att"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: benefits
          path: "/workers/{{employee_id}}/benefits"
          operations:
            - name: get-benefits
              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/channels/messages"
          operations:
            - name: post-message
              method: POST

Retrieves a payroll summary for a specified pay period from AT&T ADP.

naftiko: "0.5"
info:
  label: "ADP Payroll Summary Lookup"
  description: "Retrieves a payroll summary for a specified pay period from AT&T ADP."
  tags:
    - hr
    - payroll
    - adp
capability:
  exposes:
    - type: mcp
      namespace: payroll-data
      port: 8080
      tools:
        - name: get-payroll-summary
          description: "Look up ADP payroll summary by pay period. Returns total gross pay, headcount, and deductions."
          inputParameters:
            - name: pay_period_id
              in: body
              type: string
              description: "The ADP pay period identifier."
          call: "adp.get-payroll-summary"
          with:
            pay_period_id: "{{pay_period_id}}"
          outputParameters:
            - name: total_gross
              type: number
              mapping: "$.totalGross"
            - name: headcount
              type: number
              mapping: "$.headcount"
            - name: total_deductions
              type: number
              mapping: "$.totalDeductions"
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/payroll/v1"
      authentication:
        type: bearer
        token: "$secrets.adp_token"
      resources:
        - name: payroll
          path: "/pay-periods/{{pay_period_id}}/summary"
          inputParameters:
            - name: pay_period_id
              in: path
          operations:
            - name: get-payroll-summary
              method: GET

When a CloudWatch alarm triggers for EC2 scaling, retrieves instance metrics, logs the event in Splunk, and creates a Jira ticket for capacity review.

naftiko: "0.5"
info:
  label: "AWS EC2 Auto Scaling Alert Handler"
  description: "When a CloudWatch alarm triggers for EC2 scaling, retrieves instance metrics, logs the event in Splunk, and creates a Jira ticket for capacity review."
  tags:
    - cloud
    - aws
    - auto-scaling
    - splunk
    - jira
capability:
  exposes:
    - type: mcp
      namespace: cloud-scaling
      port: 8080
      tools:
        - name: handle-scaling-alert
          description: "Given a CloudWatch alarm name and EC2 auto scaling group, handle the scaling event."
          inputParameters:
            - name: alarm_name
              in: body
              type: string
              description: "CloudWatch alarm name."
            - name: asg_name
              in: body
              type: string
              description: "Auto Scaling Group name."
          steps:
            - name: get-alarm
              type: call
              call: "cloudwatch.get-alarm"
              with:
                alarm_name: "{{alarm_name}}"
            - name: log-event
              type: call
              call: "splunk.index-event"
              with:
                source: "cloudwatch"
                event: "Auto scaling alert: {{asg_name}} — {{get-alarm.state_reason}}"
            - name: create-ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "CLOUD"
                summary: "EC2 scaling event: {{asg_name}}"
                description: "Alarm: {{alarm_name}}. Reason: {{get-alarm.state_reason}}"
  consumes:
    - type: http
      namespace: cloudwatch
      baseUri: "https://monitoring.us-east-1.amazonaws.com"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.aws_auth_token"
        placement: header
      resources:
        - name: alarms
          path: "/"
          operations:
            - name: get-alarm
              method: GET
    - type: http
      namespace: splunk
      baseUri: "https://splunk.att.com:8088"
      authentication:
        type: bearer
        token: "$secrets.splunk_hec_token"
      resources:
        - name: events
          path: "/services/collector/event"
          operations:
            - name: index-event
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://att.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

When an AKS pod enters CrashLoopBackOff, retrieves pod logs from Datadog, creates a Jira bug for the owning team, and alerts via PagerDuty.

naftiko: "0.5"
info:
  label: "Azure Kubernetes Pod Crash Responder"
  description: "When an AKS pod enters CrashLoopBackOff, retrieves pod logs from Datadog, creates a Jira bug for the owning team, and alerts via PagerDuty."
  tags:
    - cloud
    - kubernetes
    - datadog
    - jira
    - pagerduty
capability:
  exposes:
    - type: mcp
      namespace: k8s-crash-response
      port: 8080
      tools:
        - name: handle-pod-crash
          description: "Given a Kubernetes namespace and pod name, investigate the crash loop and escalate."
          inputParameters:
            - name: k8s_namespace
              in: body
              type: string
              description: "Kubernetes namespace."
            - name: pod_name
              in: body
              type: string
              description: "Pod name in CrashLoopBackOff."
          steps:
            - name: get-logs
              type: call
              call: "datadog.get-pod-logs"
              with:
                namespace: "{{k8s_namespace}}"
                pod_name: "{{pod_name}}"
            - name: create-bug
              type: call
              call: "jira.create-issue"
              with:
                project: "PLATFORM"
                summary: "CrashLoopBackOff: {{k8s_namespace}}/{{pod_name}}"
                issue_type: "Bug"
                description: "Last log: {{get-logs.last_message}}. Restart count: {{get-logs.restart_count}}"
            - name: page-team
              type: call
              call: "pagerduty.create-incident"
              with:
                service_id: "platform-engineering"
                title: "CrashLoopBackOff: {{k8s_namespace}}/{{pod_name}} — {{create-bug.key}}"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: logs
          path: "/logs/events/search"
          operations:
            - name: get-pod-logs
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://att.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: bearer
        token: "$secrets.pagerduty_token"
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: create-incident
              method: POST

Retrieves a summary of Azure cloud resources deployed under a specific AT&T subscription.

naftiko: "0.5"
info:
  label: "Azure Resource Inventory Lookup"
  description: "Retrieves a summary of Azure cloud resources deployed under a specific AT&T subscription."
  tags:
    - cloud
    - azure
capability:
  exposes:
    - type: mcp
      namespace: cloud-inventory
      port: 8080
      tools:
        - name: get-resource-inventory
          description: "List Azure resources for a subscription. Returns resource count by type and total cost estimate."
          inputParameters:
            - name: subscription_id
              in: body
              type: string
              description: "The Azure subscription ID."
          call: "azure.list-resources"
          with:
            subscription_id: "{{subscription_id}}"
          outputParameters:
            - name: resource_count
              type: number
              mapping: "$.total_count"
            - name: resource_types
              type: string
              mapping: "$.type_summary"
  consumes:
    - type: http
      namespace: azure
      baseUri: "https://management.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azure_token"
      resources:
        - name: resources
          path: "/subscriptions/{{subscription_id}}/resources"
          inputParameters:
            - name: subscription_id
              in: path
          operations:
            - name: list-resources
              method: GET

Retrieves the provisioning state and subnet configuration of an Azure virtual network used for AT&T cloud infrastructure.

naftiko: "0.5"
info:
  label: "Azure Virtual Network Status Lookup"
  description: "Retrieves the provisioning state and subnet configuration of an Azure virtual network used for AT&T cloud infrastructure."
  tags:
    - cloud
    - networking
    - microsoft-azure
capability:
  exposes:
    - type: mcp
      namespace: azure-networking
      port: 8080
      tools:
        - name: get-vnet-status
          description: "Given an Azure subscription ID and virtual network name, return its provisioning state and subnet count."
          inputParameters:
            - name: subscription_id
              in: body
              type: string
              description: "Azure subscription ID."
            - name: vnet_name
              in: body
              type: string
              description: "Virtual network name."
          call: "azure.get-vnet"
          with:
            subscription_id: "{{subscription_id}}"
            vnet_name: "{{vnet_name}}"
          outputParameters:
            - name: provisioning_state
              type: string
              mapping: "$.properties.provisioningState"
            - name: subnet_count
              type: number
              mapping: "$.properties.subnets.length"
            - name: address_space
              type: string
              mapping: "$.properties.addressSpace.addressPrefixes[0]"
  consumes:
    - type: http
      namespace: azure
      baseUri: "https://management.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azure_token"
      resources:
        - name: vnets
          path: "/subscriptions/{{subscription_id}}/providers/Microsoft.Network/virtualNetworks/{{vnet_name}}"
          inputParameters:
            - name: subscription_id
              in: path
            - name: vnet_name
              in: path
          operations:
            - name: get-vnet
              method: GET

Scans Box for enterprise contracts nearing expiration, creates a Salesforce task for the account manager, and sends an Outlook email reminder.

naftiko: "0.5"
info:
  label: "Box Contract Expiry Notification"
  description: "Scans Box for enterprise contracts nearing expiration, creates a Salesforce task for the account manager, and sends an Outlook email reminder."
  tags:
    - procurement
    - contracts
    - box
    - salesforce
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: contract-alerts
      port: 8080
      tools:
        - name: notify-contract-expiry
          description: "Given a Box folder ID for contracts, find expiring contracts and notify stakeholders."
          inputParameters:
            - name: folder_id
              in: body
              type: string
              description: "Box folder ID containing contracts."
            - name: days_threshold
              in: body
              type: number
              description: "Days until expiry threshold."
          steps:
            - name: search-contracts
              type: call
              call: "box.search-files"
              with:
                folder_id: "{{folder_id}}"
                query: "expiry"
            - name: create-task
              type: call
              call: "salesforce.create-task"
              with:
                subject: "Contract expiry review — {{search-contracts.file_count}} contracts"
                due_date: "2026-04-15"
            - name: send-reminder
              type: call
              call: "outlook.send-email"
              with:
                to: "procurement@att.com"
                subject: "Contract expiry alert: {{search-contracts.file_count}} contracts within {{days_threshold}} days"
                body: "Please review the contracts in Box folder. Salesforce task: {{create-task.id}}"
  consumes:
    - type: http
      namespace: box
      baseUri: "https://api.box.com/2.0"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: files
          path: "/search"
          operations:
            - name: search-files
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://att.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: tasks
          path: "/sobjects/Task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: outlook
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/me/sendMail"
          operations:
            - name: send-email
              method: POST

Retrieves metadata and sharing details for a file stored in AT&T Box enterprise account.

naftiko: "0.5"
info:
  label: "Box File Metadata Lookup"
  description: "Retrieves metadata and sharing details for a file stored in AT&T Box enterprise account."
  tags:
    - collaboration
    - box
capability:
  exposes:
    - type: mcp
      namespace: file-storage
      port: 8080
      tools:
        - name: get-file-metadata
          description: "Look up Box file metadata by ID. Returns file name, owner, size, and shared link status."
          inputParameters:
            - name: file_id
              in: body
              type: string
              description: "The Box file ID."
          call: "box.get-file"
          with:
            file_id: "{{file_id}}"
          outputParameters:
            - name: name
              type: string
              mapping: "$.name"
            - name: owner
              type: string
              mapping: "$.owned_by.login"
            - name: size_bytes
              type: number
              mapping: "$.size"
  consumes:
    - type: http
      namespace: box
      baseUri: "https://api.box.com/2.0"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: files
          path: "/files/{{file_id}}"
          inputParameters:
            - name: file_id
              in: path
          operations:
            - name: get-file
              method: GET

Coordinates firmware updates across cell towers by verifying current versions, creating a ServiceNow change request, and scheduling the maintenance window in PagerDuty.

naftiko: "0.5"
info:
  label: "Cell Tower Firmware Update Coordinator"
  description: "Coordinates firmware updates across cell towers by verifying current versions, creating a ServiceNow change request, and scheduling the maintenance window in PagerDuty."
  tags:
    - network
    - 5g
    - firmware
    - servicenow
    - pagerduty
capability:
  exposes:
    - type: mcp
      namespace: firmware-management
      port: 8080
      tools:
        - name: coordinate-firmware-update
          description: "Given a tower ID and target firmware version, coordinate the firmware update workflow."
          inputParameters:
            - name: tower_id
              in: body
              type: string
              description: "The cell tower identifier."
            - name: target_version
              in: body
              type: string
              description: "Target firmware version."
          steps:
            - name: get-current-firmware
              type: call
              call: "nms.get-tower-firmware"
              with:
                tower_id: "{{tower_id}}"
            - name: create-change
              type: call
              call: "servicenow.create-change-request"
              with:
                short_description: "Firmware update: tower {{tower_id}} from {{get-current-firmware.version}} to {{target_version}}"
                category: "network"
                priority: "3"
            - name: schedule-maintenance
              type: call
              call: "pagerduty.create-maintenance-window"
              with:
                service_id: "cell-tower-ops"
                description: "Firmware update: {{tower_id}} — CHG: {{create-change.number}}"
  consumes:
    - type: http
      namespace: nms
      baseUri: "https://nms.att.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.nms_token"
      resources:
        - name: towers
          path: "/towers/{{tower_id}}/firmware"
          operations:
            - name: get-tower-firmware
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://att.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: create-change-request
              method: POST
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: bearer
        token: "$secrets.pagerduty_token"
      resources:
        - name: maintenance
          path: "/maintenance_windows"
          operations:
            - name: create-maintenance-window
              method: POST

Creates a ServiceNow change request for network or infrastructure changes and routes it to the CAB board, notifying the requestor in Slack.

naftiko: "0.5"
info:
  label: "Change Management Approval Workflow"
  description: "Creates a ServiceNow change request for network or infrastructure changes and routes it to the CAB board, notifying the requestor in Slack."
  tags:
    - itsm
    - change-management
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: change-mgmt
      port: 8080
      tools:
        - name: create-change-request
          description: "Given change description, type, and risk level, create a ServiceNow change request and notify the requestor via Slack."
          inputParameters:
            - name: short_description
              in: body
              type: string
              description: "Brief description of the change."
            - name: change_type
              in: body
              type: string
              description: "Change type: normal, standard, or emergency."
            - name: risk_level
              in: body
              type: string
              description: "Risk level: low, medium, high, or critical."
            - name: requestor_slack_id
              in: body
              type: string
              description: "The Slack user ID of the change requestor."
          steps:
            - name: create-cr
              type: call
              call: "servicenow-chg.create-change"
              with:
                short_description: "{{short_description}}"
                type: "{{change_type}}"
                risk: "{{risk_level}}"
                assignment_group: "CAB"
            - name: notify-requestor
              type: call
              call: "slack-chg.post-message"
              with:
                channel: "{{requestor_slack_id}}"
                text: "Change request submitted: {{create-cr.number}}. Type: {{change_type}}. Risk: {{risk_level}}. Pending CAB review."
  consumes:
    - type: http
      namespace: servicenow-chg
      baseUri: "https://att.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: slack-chg
      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 operational status of a Cisco network device managed in AT&T network infrastructure.

naftiko: "0.5"
info:
  label: "Cisco Network Device Status"
  description: "Retrieves the operational status of a Cisco network device managed in AT&T network infrastructure."
  tags:
    - network
    - cisco
capability:
  exposes:
    - type: mcp
      namespace: network-devices
      port: 8080
      tools:
        - name: get-device-status
          description: "Check status of a Cisco network device. Returns reachability, uptime, and software version."
          inputParameters:
            - name: device_id
              in: body
              type: string
              description: "The Cisco device ID."
          call: "cisco.get-device"
          with:
            device_id: "{{device_id}}"
          outputParameters:
            - name: reachability
              type: string
              mapping: "$.reachabilityStatus"
            - name: uptime
              type: string
              mapping: "$.upTime"
            - name: software_version
              type: string
              mapping: "$.softwareVersion"
  consumes:
    - type: http
      namespace: cisco
      baseUri: "https://att-dnac.example.com/dna/intent/api/v1"
      authentication:
        type: bearer
        token: "$secrets.cisco_dnac_token"
      resources:
        - name: devices
          path: "/network-device/{{device_id}}"
          inputParameters:
            - name: device_id
              in: path
          operations:
            - name: get-device
              method: GET

Queries the Cisco DNA Center API to retrieve interface status and throughput for a specified router in the AT&T backbone network.

naftiko: "0.5"
info:
  label: "Cisco Router Interface Status"
  description: "Queries the Cisco DNA Center API to retrieve interface status and throughput for a specified router in the AT&T backbone network."
  tags:
    - network
    - cisco
capability:
  exposes:
    - type: mcp
      namespace: network-devices
      port: 8080
      tools:
        - name: get-router-interface
          description: "Given a device hostname and interface name, return the operational status, throughput, and error count."
          inputParameters:
            - name: device_hostname
              in: body
              type: string
              description: "The Cisco router hostname."
            - name: interface_name
              in: body
              type: string
              description: "The interface name (e.g., GigabitEthernet0/0/1)."
          call: "cisco-dnac.get-interface"
          with:
            device_hostname: "{{device_hostname}}"
            interface_name: "{{interface_name}}"
          outputParameters:
            - name: oper_status
              type: string
              mapping: "$.response.status"
            - name: throughput_mbps
              type: number
              mapping: "$.response.throughput"
            - name: error_count
              type: number
              mapping: "$.response.errorCount"
  consumes:
    - type: http
      namespace: cisco-dnac
      baseUri: "https://dnac.att.com/dna/intent/api/v1"
      authentication:
        type: bearer
        token: "$secrets.cisco_dnac_token"
      resources:
        - name: interfaces
          path: "/interface"
          inputParameters:
            - name: device_hostname
              in: query
          operations:
            - name: get-interface
              method: GET

When an AWS cost anomaly is detected, annotates Datadog, opens a Jira FinOps issue, and alerts the cloud finance Slack channel.

naftiko: "0.5"
info:
  label: "Cloud Cost Anomaly Responder"
  description: "When an AWS cost anomaly is detected, annotates Datadog, opens a Jira FinOps issue, and alerts the cloud finance Slack channel."
  tags:
    - finops
    - cloud
    - aws
    - datadog
    - jira
    - slack
capability:
  exposes:
    - type: mcp
      namespace: cloud-finops
      port: 8080
      tools:
        - name: handle-cost-anomaly
          description: "Given an AWS cost anomaly ID, affected service, and estimated overage, create a Datadog event, open a Jira FinOps issue, and notify the cloud finance Slack channel."
          inputParameters:
            - name: anomaly_id
              in: body
              type: string
              description: "The AWS Cost Anomaly Detection anomaly ID."
            - name: aws_service
              in: body
              type: string
              description: "The AWS service generating the anomaly."
            - name: estimated_overage_usd
              in: body
              type: number
              description: "Estimated dollar overage detected."
            - name: business_unit
              in: body
              type: string
              description: "The AT&T business unit owning the AWS account."
          steps:
            - name: annotate-datadog
              type: call
              call: "datadog-finops.create-event"
              with:
                title: "AWS Cost Anomaly: {{aws_service}}"
                text: "Anomaly {{anomaly_id}} — estimated overage: ${{estimated_overage_usd}} — BU: {{business_unit}}"
                alert_type: "warning"
            - name: create-finops-issue
              type: call
              call: "jira-finops.create-issue"
              with:
                project_key: "FINOPS"
                issuetype: "Task"
                summary: "AWS Cost Anomaly: {{aws_service}} — ${{estimated_overage_usd}} overage"
                description: "Anomaly {{anomaly_id}} on {{aws_service}} for {{business_unit}}. Datadog: {{annotate-datadog.id}}."
            - name: alert-slack
              type: call
              call: "slack-finops.post-message"
              with:
                channel: "#cloud-finance-alerts"
                text: "AWS Cost Anomaly: {{aws_service}} | Overage: ${{estimated_overage_usd}} | BU: {{business_unit}} | Jira: {{create-finops-issue.key}}"
  consumes:
    - type: http
      namespace: datadog-finops
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: events
          path: "/events"
          operations:
            - name: create-event
              method: POST
    - type: http
      namespace: jira-finops
      baseUri: "https://att.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-finops
      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

Checks the current state of an AWS CloudWatch alarm used to monitor AT&T cloud workloads.

naftiko: "0.5"
info:
  label: "CloudWatch Alarm Status Check"
  description: "Checks the current state of an AWS CloudWatch alarm used to monitor AT&T cloud workloads."
  tags:
    - cloud
    - monitoring
    - aws
capability:
  exposes:
    - type: mcp
      namespace: cloud-alarms
      port: 8080
      tools:
        - name: get-alarm-status
          description: "Given a CloudWatch alarm name, return its current state, metric name, and threshold."
          inputParameters:
            - name: alarm_name
              in: body
              type: string
              description: "The CloudWatch alarm name."
          call: "cloudwatch.describe-alarm"
          with:
            alarm_name: "{{alarm_name}}"
          outputParameters:
            - name: state
              type: string
              mapping: "$.MetricAlarms[0].StateValue"
            - name: metric_name
              type: string
              mapping: "$.MetricAlarms[0].MetricName"
            - name: threshold
              type: number
              mapping: "$.MetricAlarms[0].Threshold"
  consumes:
    - type: http
      namespace: cloudwatch
      baseUri: "https://monitoring.us-east-1.amazonaws.com"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.aws_auth_token"
        placement: header
      resources:
        - name: alarms
          path: "/"
          inputParameters:
            - name: alarm_name
              in: query
          operations:
            - name: describe-alarm
              method: GET

Searches AT&T Confluence knowledge base for articles matching a given query.

naftiko: "0.5"
info:
  label: "Confluence Knowledge Article Search"
  description: "Searches AT&T Confluence knowledge base for articles matching a given query."
  tags:
    - knowledge-management
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: knowledge-base
      port: 8080
      tools:
        - name: search-articles
          description: "Search Confluence knowledge base articles. Returns matching article titles, URLs, and last updated dates."
          inputParameters:
            - name: query
              in: body
              type: string
              description: "The search query string."
          call: "confluence.search-content"
          with:
            query: "{{query}}"
          outputParameters:
            - name: results
              type: string
              mapping: "$.results"
            - name: total_count
              type: number
              mapping: "$.totalSize"
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://att.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_password"
      resources:
        - name: content
          path: "/search"
          operations:
            - name: search-content
              method: GET

When a ServiceNow post-incident review is completed, extracts lessons learned and updates the relevant Confluence runbook, then notifies the team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Confluence Runbook Auto-Updater"
  description: "When a ServiceNow post-incident review is completed, extracts lessons learned and updates the relevant Confluence runbook, then notifies the team via Microsoft Teams."
  tags:
    - knowledge-management
    - servicenow
    - confluence
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: runbook-management
      port: 8080
      tools:
        - name: update-runbook-from-pir
          description: "Given a ServiceNow incident number from a completed PIR, update the relevant Confluence runbook."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "ServiceNow incident number with completed PIR."
          steps:
            - name: get-pir
              type: call
              call: "servicenow.get-incident"
              with:
                incident_number: "{{incident_number}}"
            - name: update-runbook
              type: call
              call: "confluence.update-page"
              with:
                page_id: "{{get-pir.runbook_page_id}}"
                content: "Lessons learned from {{incident_number}}: {{get-pir.lessons_learned}}"
            - name: notify-team
              type: call
              call: "teams.post-message"
              with:
                channel_id: "sre-team"
                text: "Runbook updated from PIR: {{incident_number}}. Page: {{get-pir.runbook_page_id}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://att.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident/{{incident_number}}"
          operations:
            - name: get-incident
              method: GET
    - type: http
      namespace: confluence
      baseUri: "https://att.atlassian.net/wiki/api/v2"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: pages
          path: "/pages/{{page_id}}"
          operations:
            - name: update-page
              method: PUT
    - type: http
      namespace: teams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.teams_token"
      resources:
        - name: messages
          path: "/teams/channels/messages"
          operations:
            - name: post-message
              method: POST

Checks the protection status and last seen time of a CrowdStrike-managed endpoint at AT&T.

naftiko: "0.5"
info:
  label: "CrowdStrike Endpoint Status Check"
  description: "Checks the protection status and last seen time of a CrowdStrike-managed endpoint at AT&T."
  tags:
    - security
    - crowdstrike
capability:
  exposes:
    - type: mcp
      namespace: endpoint-security
      port: 8080
      tools:
        - name: get-endpoint-status
          description: "Check CrowdStrike protection status for a host. Returns protection status, OS, and last seen timestamp."
          inputParameters:
            - name: hostname
              in: body
              type: string
              description: "The hostname to check."
          call: "crowdstrike.get-host"
          with:
            hostname: "{{hostname}}"
          outputParameters:
            - name: protection_status
              type: string
              mapping: "$.status"
            - name: os_version
              type: string
              mapping: "$.os_version"
            - name: last_seen
              type: string
              mapping: "$.last_seen"
  consumes:
    - type: http
      namespace: crowdstrike
      baseUri: "https://api.crowdstrike.com"
      authentication:
        type: bearer
        token: "$secrets.crowdstrike_token"
      resources:
        - name: hosts
          path: "/devices/queries/devices/v1"
          operations:
            - name: get-host
              method: GET

When CrowdStrike detects malware, isolates the endpoint, creates a ServiceNow security incident, and notifies the security operations center via Microsoft Teams.

naftiko: "0.5"
info:
  label: "CrowdStrike Malware Containment Workflow"
  description: "When CrowdStrike detects malware, isolates the endpoint, creates a ServiceNow security incident, and notifies the security operations center via Microsoft Teams."
  tags:
    - security
    - endpoint
    - crowdstrike
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: malware-response
      port: 8080
      tools:
        - name: contain-malware-endpoint
          description: "Given a CrowdStrike detection ID, contain the endpoint and escalate."
          inputParameters:
            - name: detection_id
              in: body
              type: string
              description: "CrowdStrike detection ID."
          steps:
            - name: get-detection
              type: call
              call: "crowdstrike.get-detection"
              with:
                detection_id: "{{detection_id}}"
            - name: isolate-host
              type: call
              call: "crowdstrike.contain-host"
              with:
                host_id: "{{get-detection.host_id}}"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Malware: {{get-detection.malware_name}} on {{get-detection.hostname}}"
                urgency: "1"
                category: "security"
            - name: alert-soc
              type: call
              call: "teams.post-message"
              with:
                channel_id: "soc-alerts"
                text: "Malware contained: {{get-detection.hostname}}. Detection: {{get-detection.malware_name}}. ServiceNow: {{create-incident.number}}"
  consumes:
    - type: http
      namespace: crowdstrike
      baseUri: "https://api.crowdstrike.com"
      authentication:
        type: bearer
        token: "$secrets.crowdstrike_token"
      resources:
        - name: detections
          path: "/detects/entities/summaries/GET/v1"
          operations:
            - name: get-detection
              method: POST
        - name: hosts
          path: "/hosts/entities/host-actions/v1"
          operations:
            - name: contain-host
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://att.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: teams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.teams_token"
      resources:
        - name: messages
          path: "/teams/channels/messages"
          operations:
            - name: post-message
              method: POST

When CrowdStrike detects a high-severity endpoint threat, creates a ServiceNow security incident, isolates the endpoint, and alerts the SOC via Slack.

naftiko: "0.5"
info:
  label: "CrowdStrike Security Alert Triage"
  description: "When CrowdStrike detects a high-severity endpoint threat, creates a ServiceNow security incident, isolates the endpoint, and alerts the SOC via Slack."
  tags:
    - security
    - crowdstrike
    - servicenow
    - incident-response
    - slack
capability:
  exposes:
    - type: mcp
      namespace: security-ops
      port: 8080
      tools:
        - name: handle-endpoint-detection
          description: "Given a CrowdStrike detection ID and host ID, create a ServiceNow security incident, contain the host, and alert the AT&T SOC Slack channel."
          inputParameters:
            - name: detection_id
              in: body
              type: string
              description: "The CrowdStrike detection ID."
            - name: host_id
              in: body
              type: string
              description: "The CrowdStrike host ID for the affected endpoint."
            - name: severity
              in: body
              type: string
              description: "Detection severity: critical, high, medium, or low."
          steps:
            - name: create-security-incident
              type: call
              call: "servicenow-soc.create-incident"
              with:
                short_description: "CrowdStrike detection {{detection_id}} — {{severity}}"
                category: "security"
                assignment_group: "SOC"
                urgency: "1"
            - name: isolate-host
              type: call
              call: "crowdstrike.contain-host"
              with:
                host_id: "{{host_id}}"
            - name: alert-soc
              type: call
              call: "slack-soc.post-message"
              with:
                channel: "#soc-alerts"
                text: "SECURITY: CrowdStrike {{detection_id}} ({{severity}}) on host {{host_id}}. Host isolated. SNOW: {{create-security-incident.number}}."
  consumes:
    - type: http
      namespace: servicenow-soc
      baseUri: "https://att.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: crowdstrike
      baseUri: "https://api.crowdstrike.com"
      authentication:
        type: bearer
        token: "$secrets.crowdstrike_token"
      resources:
        - name: host-containment
          path: "/devices/entities/devices-actions/v2"
          operations:
            - name: contain-host
              method: POST
    - type: http
      namespace: slack-soc
      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 Snowflake for customer usage patterns, enriches with Salesforce account data, generates a churn risk score using OpenAI, and posts the assessment to the account team Slack channel.

naftiko: "0.5"
info:
  label: "Customer Churn Risk Assessment"
  description: "Queries Snowflake for customer usage patterns, enriches with Salesforce account data, generates a churn risk score using OpenAI, and posts the assessment to the account team Slack channel."
  tags:
    - sales
    - analytics
    - snowflake
    - salesforce
    - openai
    - slack
capability:
  exposes:
    - type: mcp
      namespace: customer-intelligence
      port: 8080
      tools:
        - name: assess-churn-risk
          description: "Given a customer account ID, assess churn risk using usage data and AI analysis."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "The Salesforce account ID."
          steps:
            - name: get-usage-data
              type: call
              call: "snowflake.query-usage"
              with:
                account_id: "{{account_id}}"
            - name: get-account-info
              type: call
              call: "salesforce.get-account"
              with:
                account_id: "{{account_id}}"
            - name: analyze-risk
              type: call
              call: "openai.chat-completion"
              with:
                prompt: "Analyze churn risk for {{get-account-info.name}} with usage trend: {{get-usage-data.trend}} and contract value ${{get-account-info.annual_revenue}}. Provide risk score 1-10 and recommendations."
            - name: notify-team
              type: call
              call: "slack.post-message"
              with:
                channel: "#account-intelligence"
                text: "Churn risk assessment for {{get-account-info.name}}: {{analyze-risk.response}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://att.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: query-usage
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://att.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{account_id}}"
          operations:
            - name: get-account
              method: GET
    - type: http
      namespace: openai
      baseUri: "https://api.openai.com/v1"
      authentication:
        type: bearer
        token: "$secrets.openai_api_key"
      resources:
        - name: completions
          path: "/chat/completions"
          operations:
            - name: chat-completion
              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 Zendesk ticket is flagged for escalation, retrieves account details from Salesforce, creates a ServiceNow incident, and notifies the escalation team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Customer Service Escalation Handler"
  description: "When a Zendesk ticket is flagged for escalation, retrieves account details from Salesforce, creates a ServiceNow incident, and notifies the escalation team via Microsoft Teams."
  tags:
    - customer-support
    - zendesk
    - salesforce
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: customer-escalation
      port: 8080
      tools:
        - name: handle-escalation
          description: "Given a Zendesk ticket ID and customer account number, escalate the case across systems."
          inputParameters:
            - name: ticket_id
              in: body
              type: string
              description: "The Zendesk ticket ID."
            - name: account_number
              in: body
              type: string
              description: "The AT&T customer account number."
          steps:
            - name: get-account
              type: call
              call: "salesforce.get-account"
              with:
                account_number: "{{account_number}}"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Escalation: Zendesk #{{ticket_id}} — {{get-account.Name}}"
                urgency: "2"
                impact: "2"
            - name: notify-team
              type: call
              call: "teams.post-message"
              with:
                channel_id: "customer-escalations"
                text: "Escalation: {{get-account.Name}} ({{account_number}}). Zendesk: {{ticket_id}}. ServiceNow: {{create-incident.number}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://att.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/query"
          operations:
            - name: get-account
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://att.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: teams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.teams_token"
      resources:
        - name: messages
          path: "/teams/channels/messages"
          operations:
            - name: post-message
              method: POST

When Datadog APM detects a latency spike, retrieves trace data, creates a Jira investigation ticket, and alerts the on-call engineer via PagerDuty.

naftiko: "0.5"
info:
  label: "Datadog APM Latency Spike Responder"
  description: "When Datadog APM detects a latency spike, retrieves trace data, creates a Jira investigation ticket, and alerts the on-call engineer via PagerDuty."
  tags:
    - observability
    - apm
    - datadog
    - jira
    - pagerduty
capability:
  exposes:
    - type: mcp
      namespace: apm-response
      port: 8080
      tools:
        - name: handle-latency-spike
          description: "Given a Datadog APM service name and alert ID, investigate and escalate the latency spike."
          inputParameters:
            - name: service_name
              in: body
              type: string
              description: "The APM service name."
            - name: alert_id
              in: body
              type: string
              description: "Datadog alert ID."
          steps:
            - name: get-traces
              type: call
              call: "datadog.get-traces"
              with:
                service_name: "{{service_name}}"
            - name: create-ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "SRE"
                summary: "Latency spike: {{service_name}}"
                description: "P99 latency: {{get-traces.p99_latency}}ms. Error rate: {{get-traces.error_rate}}%"
            - name: page-oncall
              type: call
              call: "pagerduty.create-incident"
              with:
                service_id: "app-reliability"
                title: "Latency spike: {{service_name}} — Jira: {{create-ticket.key}}"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: traces
          path: "/traces"
          operations:
            - name: get-traces
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://att.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: bearer
        token: "$secrets.pagerduty_token"
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: create-incident
              method: POST

Retrieves the current health status of AT&T's monitored network infrastructure hosts and active Datadog monitors, returning a consolidated health snapshot.

naftiko: "0.5"
info:
  label: "Datadog Network Infrastructure Health Check"
  description: "Retrieves the current health status of AT&T's monitored network infrastructure hosts and active Datadog monitors, returning a consolidated health snapshot."
  tags:
    - observability
    - datadog
    - monitoring
    - network
    - infrastructure
capability:
  exposes:
    - type: mcp
      namespace: infra-monitoring
      port: 8080
      tools:
        - name: get-network-health
          description: "Query Datadog for the current status of all monitored network hosts and active alerts for a given environment. Use for NOC dashboards and incident triage."
          inputParameters:
            - name: environment
              in: body
              type: string
              description: "The environment to query: production, staging, or development."
          call: "datadog.list-monitors"
          with:
            tags: "env:{{environment}}"
          outputParameters:
            - name: monitors
              type: array
              mapping: "$.monitors"
  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"
          operations:
            - name: list-monitors
              method: GET
              inputParameters:
                - name: tags
                  in: query

Retrieves the current health status of a specific AT&T service monitored in Datadog.

naftiko: "0.5"
info:
  label: "Datadog Service Health Check"
  description: "Retrieves the current health status of a specific AT&T service monitored in Datadog."
  tags:
    - monitoring
    - datadog
capability:
  exposes:
    - type: mcp
      namespace: observability
      port: 8080
      tools:
        - name: get-service-health
          description: "Check the health of an AT&T service in Datadog. Returns overall status, error rate, and latency."
          inputParameters:
            - name: service_name
              in: body
              type: string
              description: "The Datadog service name."
          call: "datadog.get-service-status"
          with:
            service_name: "{{service_name}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.overall_status"
            - name: error_rate
              type: number
              mapping: "$.error_rate"
            - name: p99_latency_ms
              type: number
              mapping: "$.p99_latency"
  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: services
          path: "/service_map/{{service_name}}"
          inputParameters:
            - name: service_name
              in: path
          operations:
            - name: get-service-status
              method: GET

After a DNS change is deployed, queries Datadog for DNS resolution metrics, verifies propagation, and updates the ServiceNow change request with results.

naftiko: "0.5"
info:
  label: "DNS Change Propagation Verifier"
  description: "After a DNS change is deployed, queries Datadog for DNS resolution metrics, verifies propagation, and updates the ServiceNow change request with results."
  tags:
    - network
    - dns
    - datadog
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: dns-ops
      port: 8080
      tools:
        - name: verify-dns-propagation
          description: "Given a change request number and domain name, verify DNS propagation and update the change record."
          inputParameters:
            - name: change_number
              in: body
              type: string
              description: "ServiceNow change request number."
            - name: domain
              in: body
              type: string
              description: "The domain name to verify."
          steps:
            - name: get-dns-metrics
              type: call
              call: "datadog.query-metrics"
              with:
                query: "dns.resolution_time{domain:{{domain}}}"
            - name: update-change
              type: call
              call: "servicenow.update-change-request"
              with:
                change_number: "{{change_number}}"
                work_notes: "DNS propagation verified. Resolution time: {{get-dns-metrics.avg_value}}ms across {{get-dns-metrics.point_count}} probes."
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: metrics
          path: "/query"
          operations:
            - name: query-metrics
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://att.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: changes
          path: "/table/change_request/{{change_number}}"
          operations:
            - name: update-change-request
              method: PATCH

Retrieves application health score and error rate from Dynatrace for an AT&T customer-facing application.

naftiko: "0.5"
info:
  label: "Dynatrace Application Health Lookup"
  description: "Retrieves application health score and error rate from Dynatrace for an AT&T customer-facing application."
  tags:
    - observability
    - dynatrace
capability:
  exposes:
    - type: mcp
      namespace: app-health
      port: 8080
      tools:
        - name: get-app-health
          description: "Given a Dynatrace application entity ID, return its health score, error rate, and response time."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The Dynatrace application entity ID."
          call: "dynatrace.get-application"
          with:
            entity_id: "{{entity_id}}"
          outputParameters:
            - name: health_score
              type: number
              mapping: "$.healthScore"
            - name: error_rate
              type: number
              mapping: "$.errorRate"
            - name: response_time_ms
              type: number
              mapping: "$.responseTime"
  consumes:
    - type: http
      namespace: dynatrace
      baseUri: "https://att.live.dynatrace.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.dynatrace_api_token"
      resources:
        - name: entities
          path: "/entities/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-application
              method: GET

When a termination is recorded in Workday, deactivates the Okta account, closes open ServiceNow tickets, and posts a summary to the HR Slack channel.

naftiko: "0.5"
info:
  label: "Employee Offboarding Workflow"
  description: "When a termination is recorded in Workday, deactivates the Okta account, closes open ServiceNow tickets, and posts a summary to the HR Slack channel."
  tags:
    - hr
    - offboarding
    - workday
    - okta
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: hr-offboarding
      port: 8080
      tools:
        - name: trigger-employee-offboarding
          description: "Given a Workday employee ID and termination date, deactivate the Okta account and notify the HR Slack channel."
          inputParameters:
            - name: workday_employee_id
              in: body
              type: string
              description: "The Workday worker ID for the departing employee."
            - name: termination_date
              in: body
              type: string
              description: "The termination effective date in ISO 8601 format."
          steps:
            - name: get-worker
              type: call
              call: "workday-off.get-worker"
              with:
                worker_id: "{{workday_employee_id}}"
            - name: deactivate-okta
              type: call
              call: "okta-off.deactivate-user"
              with:
                user_id: "{{get-worker.okta_user_id}}"
            - name: notify-hr
              type: call
              call: "slack-off.post-message"
              with:
                channel: "#hr-ops"
                text: "Offboarding complete for {{get-worker.full_name}} (effective: {{termination_date}}). Okta deactivated."
  consumes:
    - type: http
      namespace: workday-off
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/att/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: okta-off
      baseUri: "https://att.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: users
          path: "/users/{{user_id}}/lifecycle/deactivate"
          inputParameters:
            - name: user_id
              in: path
          operations:
            - name: deactivate-user
              method: POST
    - type: http
      namespace: slack-off
      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 application access, and sends a Slack welcome message.

naftiko: "0.5"
info:
  label: "Employee Onboarding Orchestrator"
  description: "When a new hire is created in Workday, opens a ServiceNow onboarding ticket, provisions Okta application access, and sends a Slack welcome message."
  tags:
    - hr
    - onboarding
    - workday
    - servicenow
    - okta
    - slack
capability:
  exposes:
    - type: mcp
      namespace: hr-onboarding
      port: 8080
      tools:
        - name: trigger-employee-onboarding
          description: "Given a Workday employee ID and start date, orchestrate the full onboarding sequence: create ServiceNow ticket, provision Okta access, and send a Slack welcome."
          inputParameters:
            - name: workday_employee_id
              in: body
              type: string
              description: "The Workday worker ID for the new hire."
            - name: start_date
              in: body
              type: string
              description: "The employee start date in ISO 8601 format."
            - name: department
              in: body
              type: string
              description: "The department the new hire is joining."
          steps:
            - name: get-worker
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{workday_employee_id}}"
            - name: create-onboarding-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "New hire onboarding: {{get-worker.full_name}}"
                category: "hr_onboarding"
                assignment_group: "IT_Onboarding"
            - name: provision-okta
              type: call
              call: "okta.create-user"
              with:
                first_name: "{{get-worker.first_name}}"
                last_name: "{{get-worker.last_name}}"
                email: "{{get-worker.work_email}}"
                department: "{{get-worker.department}}"
            - name: send-slack-welcome
              type: call
              call: "slack.post-message"
              with:
                channel: "#welcome-new-hires"
                text: "Welcome to AT&T, {{get-worker.first_name}} {{get-worker.last_name}}! Starting {{start_date}}. IT ticket: {{create-onboarding-ticket.number}}."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/att/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://att.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://att.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 a contract renewal date approaches in Salesforce, retrieves account health from Snowflake, generates a renewal proposal summary with OpenAI, and creates a Jira task for the account team.

naftiko: "0.5"
info:
  label: "Enterprise Contract Renewal Workflow"
  description: "When a contract renewal date approaches in Salesforce, retrieves account health from Snowflake, generates a renewal proposal summary with OpenAI, and creates a Jira task for the account team."
  tags:
    - sales
    - crm
    - salesforce
    - snowflake
    - openai
    - jira
capability:
  exposes:
    - type: mcp
      namespace: contract-management
      port: 8080
      tools:
        - name: initiate-contract-renewal
          description: "Given a Salesforce account ID approaching renewal, orchestrate the renewal preparation workflow."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "The Salesforce account ID."
            - name: renewal_date
              in: body
              type: string
              description: "The contract renewal date."
          steps:
            - name: get-account
              type: call
              call: "salesforce.get-account"
              with:
                account_id: "{{account_id}}"
            - name: get-usage-metrics
              type: call
              call: "snowflake.query-account-usage"
              with:
                account_id: "{{account_id}}"
            - name: generate-proposal
              type: call
              call: "openai.chat-completion"
              with:
                prompt: "Generate a contract renewal proposal summary for {{get-account.name}}, current value ${{get-account.annual_revenue}}, usage trend: {{get-usage-metrics.trend}}, renewal date: {{renewal_date}}."
            - name: create-renewal-task
              type: call
              call: "jira.create-issue"
              with:
                summary: "Contract renewal: {{get-account.name}} - due {{renewal_date}}"
                description: "{{generate-proposal.response}}"
                project: "SALES"
                issue_type: "Task"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://att.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{account_id}}"
          operations:
            - name: get-account
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://att.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: query-account-usage
              method: POST
    - type: http
      namespace: openai
      baseUri: "https://api.openai.com/v1"
      authentication:
        type: bearer
        token: "$secrets.openai_api_key"
      resources:
        - name: completions
          path: "/chat/completions"
          operations:
            - name: chat-completion
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://att.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_password"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

Generates a weekly account health digest from Salesforce for AT&T's enterprise accounts, summarizing open opportunities, active contracts, and support cases, posted to the sales Slack channel.

naftiko: "0.5"
info:
  label: "Enterprise Customer Account Health Digest"
  description: "Generates a weekly account health digest from Salesforce for AT&T's enterprise accounts, summarizing open opportunities, active contracts, and support cases, posted to the sales Slack channel."
  tags:
    - sales
    - crm
    - salesforce
    - reporting
    - slack
capability:
  exposes:
    - type: mcp
      namespace: account-health
      port: 8080
      tools:
        - name: digest-account-health
          description: "Given a Salesforce account ID and Slack channel, retrieve account status, open opportunities, and active contracts, then post a health digest."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "The Salesforce enterprise account ID."
            - name: slack_channel
              in: body
              type: string
              description: "The Slack channel to post the health digest to."
          steps:
            - name: get-account
              type: call
              call: "salesforce-health.get-account"
              with:
                account_id: "{{account_id}}"
            - name: get-opportunities
              type: call
              call: "salesforce-health.get-account-opportunities"
              with:
                account_id: "{{account_id}}"
            - name: post-digest
              type: call
              call: "slack-health.post-message"
              with:
                channel: "{{slack_channel}}"
                text: "Account Health: {{get-account.name}} | Tier: {{get-account.tier}} | Open Opps: {{get-opportunities.total_count}} | Pipeline: ${{get-opportunities.total_amount}} | Renewal: {{get-account.renewal_date}}"
  consumes:
    - type: http
      namespace: salesforce-health
      baseUri: "https://att.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
        - name: account-opportunities
          path: "/sobjects/Account/{{account_id}}/Opportunities"
          inputParameters:
            - name: account_id
              in: path
          operations:
            - name: get-account-opportunities
              method: GET
    - type: http
      namespace: slack-health
      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 enterprise SLA metrics from Datadog, stores the summary in Snowflake, and emails the report to account managers via Microsoft Outlook.

naftiko: "0.5"
info:
  label: "Enterprise SLA Compliance Reporter"
  description: "Pulls enterprise SLA metrics from Datadog, stores the summary in Snowflake, and emails the report to account managers via Microsoft Outlook."
  tags:
    - sla
    - enterprise
    - datadog
    - snowflake
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: sla-compliance
      port: 8080
      tools:
        - name: generate-sla-report
          description: "Given an enterprise account ID and reporting period, generate the SLA compliance report."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "Enterprise customer account ID."
            - name: period
              in: body
              type: string
              description: "Reporting period (e.g., 2026-Q1)."
          steps:
            - name: get-sla-metrics
              type: call
              call: "datadog.get-sla-metrics"
              with:
                account_id: "{{account_id}}"
                period: "{{period}}"
            - name: store-report
              type: call
              call: "snowflake.insert-report"
              with:
                account_id: "{{account_id}}"
                uptime_pct: "{{get-sla-metrics.uptime_pct}}"
                latency_avg: "{{get-sla-metrics.latency_avg}}"
            - name: email-report
              type: call
              call: "outlook.send-email"
              with:
                to: "{{get-sla-metrics.account_manager_email}}"
                subject: "SLA Report: {{account_id}} — {{period}}"
                body: "Uptime: {{get-sla-metrics.uptime_pct}}%. Avg latency: {{get-sla-metrics.latency_avg}}ms."
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: sla
          path: "/slo/{{account_id}}"
          operations:
            - name: get-sla-metrics
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://att.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: insert-report
              method: POST
    - type: http
      namespace: outlook
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/me/sendMail"
          operations:
            - name: send-email
              method: POST

Retrieves the current pool member status and active connections for an F5 load balancer pool in the AT&T network.

naftiko: "0.5"
info:
  label: "F5 Load Balancer Pool Status"
  description: "Retrieves the current pool member status and active connections for an F5 load balancer pool in the AT&T network."
  tags:
    - network
    - load-balancing
    - f5-networks
capability:
  exposes:
    - type: mcp
      namespace: load-balancer
      port: 8080
      tools:
        - name: get-pool-status
          description: "Given an F5 pool name, return the pool availability status, active member count, and total current connections."
          inputParameters:
            - name: pool_name
              in: body
              type: string
              description: "The F5 load balancer pool name."
          call: "f5.get-pool"
          with:
            pool_name: "{{pool_name}}"
          outputParameters:
            - name: availability
              type: string
              mapping: "$.availabilityState"
            - name: active_members
              type: number
              mapping: "$.activeMemberCount"
            - name: current_connections
              type: number
              mapping: "$.currentConnections"
  consumes:
    - type: http
      namespace: f5
      baseUri: "https://f5.att.com/mgmt/tm/ltm"
      authentication:
        type: basic
        username: "$secrets.f5_user"
        password: "$secrets.f5_password"
      resources:
        - name: pools
          path: "/pool/{{pool_name}}/stats"
          inputParameters:
            - name: pool_name
              in: path
          operations:
            - name: get-pool
              method: GET

Retrieves fiber installation order status from Salesforce, checks technician schedule in ServiceNow, and updates the customer via SMS through the messaging platform.

naftiko: "0.5"
info:
  label: "Fiber Installation Order Tracker"
  description: "Retrieves fiber installation order status from Salesforce, checks technician schedule in ServiceNow, and updates the customer via SMS through the messaging platform."
  tags:
    - fiber
    - installation
    - salesforce
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: fiber-orders
      port: 8080
      tools:
        - name: track-fiber-installation
          description: "Given a Salesforce order ID, track the fiber installation progress and update the customer."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The Salesforce fiber installation order ID."
          steps:
            - name: get-order
              type: call
              call: "salesforce.get-order"
              with:
                order_id: "{{order_id}}"
            - name: get-tech-schedule
              type: call
              call: "servicenow.get-work-order"
              with:
                order_ref: "{{order_id}}"
            - name: send-update
              type: call
              call: "messaging.send-sms"
              with:
                phone: "{{get-order.customer_phone}}"
                message: "AT&T Fiber: Your installation is {{get-tech-schedule.status}}. Technician window: {{get-tech-schedule.scheduled_time}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://att.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: orders
          path: "/sobjects/Order/{{order_id}}"
          operations:
            - name: get-order
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://att.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: work-orders
          path: "/table/wm_order"
          operations:
            - name: get-work-order
              method: GET
    - type: http
      namespace: messaging
      baseUri: "https://messaging.att.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.messaging_api_token"
      resources:
        - name: sms
          path: "/messages/sms"
          operations:
            - name: send-sms
              method: POST

When a fiber outage is detected, queries the affected customer list from Snowflake, creates a ServiceNow major incident, and sends SMS notifications via Twilio.

naftiko: "0.5"
info:
  label: "Fiber Outage Customer Notification"
  description: "When a fiber outage is detected, queries the affected customer list from Snowflake, creates a ServiceNow major incident, and sends SMS notifications via Twilio."
  tags:
    - network
    - fiber
    - snowflake
    - servicenow
    - twilio
capability:
  exposes:
    - type: mcp
      namespace: customer-communications
      port: 8080
      tools:
        - name: handle-fiber-outage
          description: "Given an outage region and severity, orchestrate customer notification workflow."
          inputParameters:
            - name: outage_region
              in: body
              type: string
              description: "The affected fiber region."
            - name: severity
              in: body
              type: string
              description: "Outage severity level."
          steps:
            - name: get-affected-customers
              type: call
              call: "snowflake.query-affected-customers"
              with:
                region: "{{outage_region}}"
            - name: create-major-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Fiber outage in {{outage_region}} - {{severity}}"
                category: "network"
                priority: "1"
            - name: send-notifications
              type: call
              call: "twilio.send-sms-batch"
              with:
                recipients: "{{get-affected-customers.phone_numbers}}"
                message: "AT&T: We are aware of a service disruption in your area. Our team is working to restore service. Incident: {{create-major-incident.number}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://att.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: query-affected-customers
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://att.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: twilio
      baseUri: "https://api.twilio.com/2010-04-01"
      authentication:
        type: basic
        username: "$secrets.twilio_sid"
        password: "$secrets.twilio_password"
      resources:
        - name: messages
          path: "/Accounts/Messages.json"
          operations:
            - name: send-sms-batch
              method: POST

When a FirstNet priority alert fires, retrieves network capacity data from Datadog, creates a P1 ServiceNow incident, and escalates through PagerDuty to the FirstNet operations team.

naftiko: "0.5"
info:
  label: "FirstNet Priority Incident Coordinator"
  description: "When a FirstNet priority alert fires, retrieves network capacity data from Datadog, creates a P1 ServiceNow incident, and escalates through PagerDuty to the FirstNet operations team."
  tags:
    - firstnet
    - public-safety
    - network
    - datadog
    - servicenow
    - pagerduty
capability:
  exposes:
    - type: mcp
      namespace: firstnet-ops
      port: 8080
      tools:
        - name: handle-firstnet-priority
          description: "Given a FirstNet alert ID and affected area, coordinate the priority incident response."
          inputParameters:
            - name: alert_id
              in: body
              type: string
              description: "FirstNet priority alert ID."
            - name: affected_area
              in: body
              type: string
              description: "Geographic area affected."
          steps:
            - name: get-capacity
              type: call
              call: "datadog.get-firstnet-metrics"
              with:
                area: "{{affected_area}}"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "FirstNet priority: {{affected_area}}"
                urgency: "1"
                impact: "1"
                description: "Capacity: {{get-capacity.available_pct}}%. Active first responder sessions: {{get-capacity.active_sessions}}"
            - name: escalate
              type: call
              call: "pagerduty.create-incident"
              with:
                service_id: "firstnet-ops"
                title: "FirstNet P1: {{affected_area}} — {{create-incident.number}}"
                urgency: "high"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: metrics
          path: "/query"
          operations:
            - name: get-firstnet-metrics
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://att.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: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: bearer
        token: "$secrets.pagerduty_token"
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: create-incident
              method: POST

On a GitHub Actions pipeline failure on a protected branch, creates a Jira bug, annotates Datadog, and alerts the engineering team in Slack.

naftiko: "0.5"
info:
  label: "GitHub CI/CD Pipeline Failure Response"
  description: "On a GitHub Actions pipeline failure on a protected branch, creates a Jira bug, annotates Datadog, and alerts the engineering team in Slack."
  tags:
    - devops
    - cicd
    - github
    - jira
    - datadog
    - slack
capability:
  exposes:
    - type: mcp
      namespace: devops-cicd
      port: 8080
      tools:
        - name: handle-pipeline-failure
          description: "Given a GitHub Actions workflow failure, create a Datadog deployment event, open a Jira bug, and alert the engineering Slack channel."
          inputParameters:
            - name: repo_name
              in: body
              type: string
              description: "The GitHub repository in org/repo format."
            - name: workflow_name
              in: body
              type: string
              description: "The GitHub Actions workflow name that failed."
            - name: branch_name
              in: body
              type: string
              description: "The branch where the failure occurred."
            - name: commit_sha
              in: body
              type: string
              description: "The commit SHA that triggered the workflow."
            - name: run_url
              in: body
              type: string
              description: "URL to the failed GitHub Actions run."
          steps:
            - name: create-dd-event
              type: call
              call: "datadog-cicd.create-event"
              with:
                title: "Pipeline failure: {{repo_name}}"
                text: "Workflow {{workflow_name}} failed on {{branch_name}} at {{commit_sha}}"
                alert_type: "error"
            - name: create-jira-bug
              type: call
              call: "jira.create-issue"
              with:
                project_key: "ENG"
                issuetype: "Bug"
                summary: "[CI Failure] {{repo_name}} / {{branch_name}} — {{workflow_name}}"
                description: "Pipeline failure on {{branch_name}}. Commit: {{commit_sha}}. Run: {{run_url}}. Datadog: {{create-dd-event.id}}."
            - name: alert-engineering
              type: call
              call: "slack-cicd.post-message"
              with:
                channel: "#engineering-alerts"
                text: "Pipeline Failure: {{repo_name}} | Branch: {{branch_name}} | Jira: {{create-jira-bug.key}} | Run: {{run_url}}"
  consumes:
    - type: http
      namespace: datadog-cicd
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: events
          path: "/events"
          operations:
            - name: create-event
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://att.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-cicd
      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 metadata about an AT&T GitHub repository including language, last commit, and open issues count.

naftiko: "0.5"
info:
  label: "GitHub Repository Info Lookup"
  description: "Retrieves metadata about an AT&T GitHub repository including language, last commit, and open issues count."
  tags:
    - engineering
    - github
capability:
  exposes:
    - type: mcp
      namespace: code-repos
      port: 8080
      tools:
        - name: get-repo-info
          description: "Look up a GitHub repository by name. Returns description, primary language, open issues, and last push date."
          inputParameters:
            - name: repo_name
              in: body
              type: string
              description: "The repository name in org/repo format."
          call: "github.get-repository"
          with:
            repo_name: "{{repo_name}}"
          outputParameters:
            - name: description
              type: string
              mapping: "$.description"
            - name: language
              type: string
              mapping: "$.language"
            - name: open_issues
              type: number
              mapping: "$.open_issues_count"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: repos
          path: "/repos/{{repo_name}}"
          inputParameters:
            - name: repo_name
              in: path
          operations:
            - name: get-repository
              method: GET

When GitHub Advanced Security finds a critical code scanning alert, creates a Jira security issue and alerts the AppSec team in Slack.

naftiko: "0.5"
info:
  label: "GitHub Security Scan to Jira"
  description: "When GitHub Advanced Security finds a critical code scanning alert, creates a Jira security issue and alerts the AppSec team in Slack."
  tags:
    - security
    - devops
    - github
    - jira
    - slack
capability:
  exposes:
    - type: mcp
      namespace: appsec
      port: 8080
      tools:
        - name: handle-code-scanning-alert
          description: "Given a GitHub code scanning alert in an AT&T repository, create a Jira security issue and notify the AppSec Slack channel."
          inputParameters:
            - name: repo_name
              in: body
              type: string
              description: "The GitHub repository in org/repo format."
            - name: alert_number
              in: body
              type: integer
              description: "The GitHub code scanning alert number."
            - name: alert_severity
              in: body
              type: string
              description: "Alert severity: critical, high, medium, or low."
            - name: rule_description
              in: body
              type: string
              description: "The code scanning rule description."
          steps:
            - name: get-alert
              type: call
              call: "github.get-code-scanning-alert"
              with:
                repo: "{{repo_name}}"
                alert_number: "{{alert_number}}"
            - name: create-security-issue
              type: call
              call: "jira-appsec.create-issue"
              with:
                project_key: "SEC"
                issuetype: "Security Vulnerability"
                summary: "[{{alert_severity}}] {{rule_description}} in {{repo_name}}"
                description: "GitHub alert #{{alert_number}} in {{repo_name}}. Rule: {{rule_description}}. File: {{get-alert.file_path}}."
            - name: alert-appsec
              type: call
              call: "slack-appsec.post-message"
              with:
                channel: "#appsec-alerts"
                text: "Code Scan Alert: {{repo_name}} | {{alert_severity}} | {{rule_description}} | Jira: {{create-security-issue.key}}"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: code-scanning-alerts
          path: "/repos/{{repo}}/code-scanning/alerts/{{alert_number}}"
          inputParameters:
            - name: repo
              in: path
            - name: alert_number
              in: path
          operations:
            - name: get-code-scanning-alert
              method: GET
    - type: http
      namespace: jira-appsec
      baseUri: "https://att.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-appsec
      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 Grafana alert fires for a network dashboard panel, retrieves the panel data, creates a Jira ticket for the responsible team, and posts to the monitoring Teams channel.

naftiko: "0.5"
info:
  label: "Grafana Dashboard Alert to Jira"
  description: "When a Grafana alert fires for a network dashboard panel, retrieves the panel data, creates a Jira ticket for the responsible team, and posts to the monitoring Teams channel."
  tags:
    - observability
    - grafana
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: grafana-alerts
      port: 8080
      tools:
        - name: handle-grafana-alert
          description: "Given a Grafana alert ID, create a Jira ticket and notify."
          inputParameters:
            - name: alert_id
              in: body
              type: string
              description: "Grafana alert rule ID."
            - name: dashboard_uid
              in: body
              type: string
              description: "Grafana dashboard UID."
          steps:
            - name: get-alert
              type: call
              call: "grafana.get-alert"
              with:
                alert_id: "{{alert_id}}"
            - name: create-ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "NOC"
                summary: "Grafana alert: {{get-alert.title}}"
                description: "Dashboard: {{dashboard_uid}}. Message: {{get-alert.message}}"
            - name: notify-monitoring
              type: call
              call: "teams.post-message"
              with:
                channel_id: "noc-monitoring"
                text: "Grafana alert: {{get-alert.title}}. Jira: {{create-ticket.key}}"
  consumes:
    - type: http
      namespace: grafana
      baseUri: "https://grafana.att.com/api"
      authentication:
        type: bearer
        token: "$secrets.grafana_token"
      resources:
        - name: alerts
          path: "/v1/provisioning/alert-rules/{{alert_id}}"
          operations:
            - name: get-alert
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://att.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: teams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.teams_token"
      resources:
        - name: messages
          path: "/teams/channels/messages"
          operations:
            - name: post-message
              method: POST

When a complex ServiceNow incident is created, submits the description to OpenAI for AI-assisted triage and recommended resolution steps, then updates the ticket.

naftiko: "0.5"
info:
  label: "Intelligent Incident Triage with OpenAI"
  description: "When a complex ServiceNow incident is created, submits the description to OpenAI for AI-assisted triage and recommended resolution steps, then updates the ticket."
  tags:
    - ai
    - itsm
    - servicenow
    - openai
    - incident-response
capability:
  exposes:
    - type: mcp
      namespace: ai-triage
      port: 8080
      tools:
        - name: triage-incident-with-ai
          description: "Given a ServiceNow incident number, retrieve the incident, submit to OpenAI for root cause and resolution recommendations, and update the record with AI analysis."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "The ServiceNow incident number, e.g. INC0089012."
          steps:
            - name: get-incident
              type: call
              call: "servicenow-ai.get-incident"
              with:
                number: "{{incident_number}}"
            - name: analyze-incident
              type: call
              call: "openai.create-completion"
              with:
                model: "gpt-4o"
                prompt: "Analyze this IT incident: 1) Probable root cause, 2) Recommended resolution steps, 3) Priority. Incident: {{get-incident.short_description}} — {{get-incident.description}}"
            - name: update-incident
              type: call
              call: "servicenow-ai.update-incident"
              with:
                number: "{{incident_number}}"
                work_notes: "AI Analysis: {{analyze-incident.text}}"
  consumes:
    - type: http
      namespace: servicenow-ai
      baseUri: "https://att.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
              inputParameters:
                - name: number
                  in: query
            - name: update-incident
              method: PATCH
    - type: http
      namespace: openai
      baseUri: "https://api.openai.com/v1"
      authentication:
        type: bearer
        token: "$secrets.openai_api_key"
      resources:
        - name: completions
          path: "/chat/completions"
          operations:
            - name: create-completion
              method: POST

Retires an IT asset by updating ServiceNow CMDB, revoking access in Okta, and creating a Jira ticket for physical retrieval coordination.

naftiko: "0.5"
info:
  label: "IT Asset Retirement Workflow"
  description: "Retires an IT asset by updating ServiceNow CMDB, revoking access in Okta, and creating a Jira ticket for physical retrieval coordination."
  tags:
    - itsm
    - asset-management
    - servicenow
    - okta
    - jira
capability:
  exposes:
    - type: mcp
      namespace: asset-lifecycle
      port: 8080
      tools:
        - name: retire-asset
          description: "Given a ServiceNow asset tag, retire the asset across all systems."
          inputParameters:
            - name: asset_tag
              in: body
              type: string
              description: "The ServiceNow CMDB asset tag."
            - name: assigned_user
              in: body
              type: string
              description: "Email of the user assigned to the asset."
          steps:
            - name: update-cmdb
              type: call
              call: "servicenow.update-asset"
              with:
                asset_tag: "{{asset_tag}}"
                status: "retired"
            - name: revoke-access
              type: call
              call: "okta.deactivate-user-device"
              with:
                user_email: "{{assigned_user}}"
                device_id: "{{asset_tag}}"
            - name: create-retrieval-ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "ITOPS"
                summary: "Asset retrieval: {{asset_tag}} from {{assigned_user}}"
                description: "CMDB status updated. Okta device access revoked."
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://att.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: assets
          path: "/table/alm_hardware/{{asset_tag}}"
          operations:
            - name: update-asset
              method: PATCH
    - type: http
      namespace: okta
      baseUri: "https://att.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: devices
          path: "/users/{{user_email}}/devices"
          operations:
            - name: deactivate-user-device
              method: DELETE
    - type: http
      namespace: jira
      baseUri: "https://att.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

When a critical Datadog alert fires, creates a ServiceNow incident, pages the on-call team in PagerDuty, and posts an alert to the ops Slack channel.

naftiko: "0.5"
info:
  label: "IT Incident Response Chain"
  description: "When a critical Datadog alert fires, creates a ServiceNow incident, pages the on-call team in PagerDuty, and posts an alert to the ops Slack channel."
  tags:
    - itsm
    - incident-response
    - datadog
    - servicenow
    - pagerduty
    - slack
capability:
  exposes:
    - type: mcp
      namespace: it-ops
      port: 8080
      tools:
        - name: handle-critical-alert
          description: "Given a Datadog alert ID, affected service, and severity, create a ServiceNow incident, trigger a PagerDuty page, and notify the ops Slack channel."
          inputParameters:
            - name: alert_id
              in: body
              type: string
              description: "The Datadog alert or monitor ID."
            - name: service_name
              in: body
              type: string
              description: "The name of the affected service or application."
            - name: severity
              in: body
              type: string
              description: "Alert severity: critical, high, medium, or low."
            - name: alert_message
              in: body
              type: string
              description: "The alert message body from Datadog."
          steps:
            - name: create-incident
              type: call
              call: "servicenow-ops.create-incident"
              with:
                short_description: "{{severity}} alert: {{service_name}} — {{alert_id}}"
                description: "{{alert_message}}"
                urgency: "1"
                impact: "1"
                assignment_group: "IT_Operations"
            - name: page-oncall
              type: call
              call: "pagerduty.create-incident"
              with:
                title: "{{severity}} alert on {{service_name}}"
                service_id: "$secrets.pagerduty_service_id"
                body: "{{alert_message}}"
            - name: alert-slack
              type: call
              call: "slack-ops.post-message"
              with:
                channel: "#it-ops-alerts"
                text: "INCIDENT: {{severity}} on {{service_name}} | Datadog: {{alert_id}} | SNOW: {{create-incident.number}} | PD: {{page-oncall.incident_number}}"
  consumes:
    - type: http
      namespace: servicenow-ops
      baseUri: "https://att.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: 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-ops
      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 completion percentage and child issue count for a Jira epic in AT&T engineering projects.

naftiko: "0.5"
info:
  label: "Jira Epic Progress Lookup"
  description: "Retrieves the completion percentage and child issue count for a Jira epic in AT&T engineering projects."
  tags:
    - project-management
    - jira
capability:
  exposes:
    - type: mcp
      namespace: project-tracking
      port: 8080
      tools:
        - name: get-epic-progress
          description: "Given a Jira epic key, return the total issues, completed issues, and completion percentage."
          inputParameters:
            - name: epic_key
              in: body
              type: string
              description: "The Jira epic key (e.g., NET-1234)."
          call: "jira.get-epic"
          with:
            epic_key: "{{epic_key}}"
          outputParameters:
            - name: total_issues
              type: number
              mapping: "$.total"
            - name: done_issues
              type: number
              mapping: "$.done"
            - name: completion_pct
              type: number
              mapping: "$.completionPct"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://att.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: epics
          path: "/search"
          inputParameters:
            - name: epic_key
              in: query
          operations:
            - name: get-epic
              method: GET

Retrieves detailed information about a Jira issue including status, assignee, and sprint for AT&T engineering teams.

naftiko: "0.5"
info:
  label: "Jira Issue Detail Lookup"
  description: "Retrieves detailed information about a Jira issue including status, assignee, and sprint for AT&T engineering teams."
  tags:
    - engineering
    - jira
capability:
  exposes:
    - type: mcp
      namespace: eng-tracking
      port: 8080
      tools:
        - name: get-issue-detail
          description: "Look up a Jira issue by key. Returns summary, status, assignee, and sprint name."
          inputParameters:
            - name: issue_key
              in: body
              type: string
              description: "The Jira issue key."
          call: "jira.get-issue"
          with:
            issue_key: "{{issue_key}}"
          outputParameters:
            - name: summary
              type: string
              mapping: "$.fields.summary"
            - name: status
              type: string
              mapping: "$.fields.status.name"
            - name: assignee
              type: string
              mapping: "$.fields.assignee.displayName"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://att.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_password"
      resources:
        - name: issues
          path: "/issue/{{issue_key}}"
          inputParameters:
            - name: issue_key
              in: path
          operations:
            - name: get-issue
              method: GET

Generates a daily sprint status digest from Jira and posts it to the engineering Slack channel.

naftiko: "0.5"
info:
  label: "Jira Sprint Digest Report"
  description: "Generates a daily sprint status digest from Jira and posts it to the engineering Slack channel."
  tags:
    - devops
    - jira
    - reporting
    - sprint
    - slack
capability:
  exposes:
    - type: mcp
      namespace: sprint-reporting
      port: 8080
      tools:
        - name: digest-sprint-status
          description: "Given a Jira project key and sprint name, fetch all sprint issues and post a summary digest to the engineering Slack channel. Use for daily stand-up prep."
          inputParameters:
            - name: project_key
              in: body
              type: string
              description: "The Jira project key, e.g. NETW or TECH."
            - name: sprint_name
              in: body
              type: string
              description: "The Jira sprint name to summarize."
            - name: slack_channel
              in: body
              type: string
              description: "The Slack channel to post the digest to."
          steps:
            - name: get-sprint-issues
              type: call
              call: "jira-sprint.search-issues"
              with:
                jql: "project = {{project_key}} AND sprint = '{{sprint_name}}'"
            - name: post-digest
              type: call
              call: "slack-sprint.post-message"
              with:
                channel: "{{slack_channel}}"
                text: "Sprint Digest — {{project_key}} / {{sprint_name}}: Total: {{get-sprint-issues.total}} | Done: {{get-sprint-issues.done_count}} | In Progress: {{get-sprint-issues.inprogress_count}} | Blocked: {{get-sprint-issues.blocked_count}}"
  consumes:
    - type: http
      namespace: jira-sprint
      baseUri: "https://att.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/search"
          operations:
            - name: search-issues
              method: GET
              inputParameters:
                - name: jql
                  in: query
    - type: http
      namespace: slack-sprint
      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 candidate applies via LinkedIn Recruiter, enriches their profile in Workday Recruiting and notifies the hiring manager via Slack.

naftiko: "0.5"
info:
  label: "LinkedIn Talent Acquisition Signal"
  description: "When a candidate applies via LinkedIn Recruiter, enriches their profile in Workday Recruiting and notifies the hiring manager via Slack."
  tags:
    - hr
    - recruiting
    - linkedin
    - workday
    - slack
capability:
  exposes:
    - type: mcp
      namespace: talent-acquisition
      port: 8080
      tools:
        - name: enrich-candidate-profile
          description: "Given a LinkedIn member URN and Workday job requisition ID, fetch the LinkedIn profile, create the candidate record in Workday, and notify the hiring manager via Slack."
          inputParameters:
            - name: linkedin_member_urn
              in: body
              type: string
              description: "The LinkedIn member URN for the candidate."
            - name: job_req_id
              in: body
              type: string
              description: "The Workday job requisition ID."
            - name: hiring_manager_slack_id
              in: body
              type: string
              description: "The Slack user ID of the hiring manager."
          steps:
            - name: get-linkedin-profile
              type: call
              call: "linkedin.get-profile"
              with:
                member_urn: "{{linkedin_member_urn}}"
            - name: create-candidate
              type: call
              call: "workday-recruit.create-candidate"
              with:
                job_req_id: "{{job_req_id}}"
                first_name: "{{get-linkedin-profile.firstName}}"
                last_name: "{{get-linkedin-profile.lastName}}"
                headline: "{{get-linkedin-profile.headline}}"
            - name: notify-hiring-manager
              type: call
              call: "slack-recruit.post-message"
              with:
                channel: "{{hiring_manager_slack_id}}"
                text: "New candidate: {{get-linkedin-profile.firstName}} {{get-linkedin-profile.lastName}} applied for req {{job_req_id}}. Workday: {{create-candidate.candidate_id}}."
  consumes:
    - type: http
      namespace: linkedin
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: profiles
          path: "/people/{{member_urn}}"
          inputParameters:
            - name: member_urn
              in: path
          operations:
            - name: get-profile
              method: GET
    - type: http
      namespace: workday-recruit
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: candidates
          path: "/att/jobRequisitions/{{job_req_id}}/candidates"
          inputParameters:
            - name: job_req_id
              in: path
          operations:
            - name: create-candidate
              method: POST
    - type: http
      namespace: slack-recruit
      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

Posts a notification message to a specified Microsoft Teams channel for AT&T team communications.

naftiko: "0.5"
info:
  label: "Microsoft Teams Channel Message Post"
  description: "Posts a notification message to a specified Microsoft Teams channel for AT&T team communications."
  tags:
    - communications
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: team-notifications
      port: 8080
      tools:
        - name: post-channel-message
          description: "Post a message to a Microsoft Teams channel. Returns message ID and timestamp."
          inputParameters:
            - name: channel_id
              in: body
              type: string
              description: "The Teams channel ID."
            - name: message
              in: body
              type: string
              description: "The message text to post."
          call: "teams.post-message"
          with:
            channel_id: "{{channel_id}}"
            message: "{{message}}"
          outputParameters:
            - name: message_id
              type: string
              mapping: "$.id"
            - name: timestamp
              type: string
              mapping: "$.createdDateTime"
  consumes:
    - type: http
      namespace: teams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.teams_token"
      resources:
        - name: channels
          path: "/teams/{{channel_id}}/channels/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Detects BGP routing anomalies via Datadog, correlates with SolarWinds node data, creates a P2 ServiceNow incident, and pages the network operations team.

naftiko: "0.5"
info:
  label: "Network BGP Route Anomaly Handler"
  description: "Detects BGP routing anomalies via Datadog, correlates with SolarWinds node data, creates a P2 ServiceNow incident, and pages the network operations team."
  tags:
    - network
    - bgp
    - datadog
    - solarwinds
    - servicenow
    - pagerduty
capability:
  exposes:
    - type: mcp
      namespace: bgp-monitoring
      port: 8080
      tools:
        - name: handle-bgp-anomaly
          description: "Given a Datadog alert for BGP anomaly, investigate and escalate."
          inputParameters:
            - name: alert_id
              in: body
              type: string
              description: "Datadog BGP anomaly alert ID."
            - name: router_ip
              in: body
              type: string
              description: "Affected router IP address."
          steps:
            - name: get-alert
              type: call
              call: "datadog.get-monitor"
              with:
                alert_id: "{{alert_id}}"
            - name: get-node-info
              type: call
              call: "solarwinds.get-node"
              with:
                ip_address: "{{router_ip}}"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "BGP anomaly: {{get-node-info.node_name}} ({{router_ip}})"
                urgency: "2"
                description: "Alert: {{get-alert.message}}. Node status: {{get-node-info.status}}"
            - name: page-noc
              type: call
              call: "pagerduty.create-incident"
              with:
                service_id: "network-operations"
                title: "BGP anomaly: {{router_ip}} — {{create-incident.number}}"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: monitors
          path: "/monitor/{{alert_id}}"
          operations:
            - name: get-monitor
              method: GET
    - type: http
      namespace: solarwinds
      baseUri: "https://solarwinds.att.com:17778/SolarWinds/InformationService/v3/Json"
      authentication:
        type: basic
        username: "$secrets.solarwinds_user"
        password: "$secrets.solarwinds_password"
      resources:
        - name: nodes
          path: "/Query"
          operations:
            - name: get-node
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://att.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: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: bearer
        token: "$secrets.pagerduty_token"
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: create-incident
              method: POST

Monitors SSL/TLS certificate expiry dates, creates a ServiceNow change request for renewal, and alerts the network security team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Network Certificate Expiry Handler"
  description: "Monitors SSL/TLS certificate expiry dates, creates a ServiceNow change request for renewal, and alerts the network security team via Microsoft Teams."
  tags:
    - security
    - certificates
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: cert-management
      port: 8080
      tools:
        - name: handle-cert-expiry
          description: "Given a domain name and certificate expiry date, initiate the renewal workflow."
          inputParameters:
            - name: domain
              in: body
              type: string
              description: "Domain with expiring certificate."
            - name: expiry_date
              in: body
              type: string
              description: "Certificate expiry date."
            - name: days_remaining
              in: body
              type: number
              description: "Days until expiry."
          steps:
            - name: create-change
              type: call
              call: "servicenow.create-change-request"
              with:
                short_description: "SSL cert renewal: {{domain}} expires {{expiry_date}}"
                category: "security"
                priority: "2"
            - name: notify-team
              type: call
              call: "teams.post-message"
              with:
                channel_id: "network-security"
                text: "Certificate expiring: {{domain}} in {{days_remaining}} days. Change: {{create-change.number}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://att.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: create-change-request
              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/channels/messages"
          operations:
            - name: post-message
              method: POST

Coordinates network maintenance by creating a ServiceNow change request, notifying affected teams via Slack, scheduling a Zoom bridge, and updating Confluence with the maintenance plan.

naftiko: "0.5"
info:
  label: "Network Maintenance Window Coordinator"
  description: "Coordinates network maintenance by creating a ServiceNow change request, notifying affected teams via Slack, scheduling a Zoom bridge, and updating Confluence with the maintenance plan."
  tags:
    - network
    - operations
    - servicenow
    - slack
    - zoom
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: maintenance-ops
      port: 8080
      tools:
        - name: coordinate-maintenance-window
          description: "Given maintenance details, coordinate the full maintenance window workflow."
          inputParameters:
            - name: region
              in: body
              type: string
              description: "The network region for maintenance."
            - name: start_time
              in: body
              type: string
              description: "Maintenance start time."
            - name: duration_hours
              in: body
              type: number
              description: "Expected duration in hours."
          steps:
            - name: create-change
              type: call
              call: "servicenow.create-change-request"
              with:
                short_description: "Network maintenance: {{region}} - {{start_time}}"
                category: "network"
                planned_start: "{{start_time}}"
            - name: create-bridge
              type: call
              call: "zoom.create-meeting"
              with:
                topic: "Network maintenance bridge: {{region}}"
                start_time: "{{start_time}}"
                duration: "{{duration_hours}}"
            - name: notify-teams
              type: call
              call: "slack.post-message"
              with:
                channel: "#network-maintenance"
                text: "Scheduled maintenance for {{region}} at {{start_time}} ({{duration_hours}}h). CR: {{create-change.number}}. Zoom: {{create-bridge.join_url}}"
            - name: update-wiki
              type: call
              call: "confluence.create-page"
              with:
                title: "Maintenance: {{region}} - {{start_time}}"
                body: "Change request: {{create-change.number}}. Duration: {{duration_hours}}h. Zoom bridge: {{create-bridge.join_url}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://att.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: create-change-request
              method: POST
    - type: http
      namespace: zoom
      baseUri: "https://api.zoom.us/v2"
      authentication:
        type: bearer
        token: "$secrets.zoom_token"
      resources:
        - name: meetings
          path: "/users/me/meetings"
          operations:
            - name: create-meeting
              method: POST
    - 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: confluence
      baseUri: "https://att.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_password"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: create-page
              method: POST

When Datadog detects network performance degradation, retrieves affected region details, creates a ServiceNow incident, and notifies the NOC team via Slack.

naftiko: "0.5"
info:
  label: "Network Performance Degradation Response"
  description: "When Datadog detects network performance degradation, retrieves affected region details, creates a ServiceNow incident, and notifies the NOC team via Slack."
  tags:
    - network
    - operations
    - datadog
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: network-ops
      port: 8080
      tools:
        - name: handle-network-degradation
          description: "Given a Datadog alert ID, orchestrate the network degradation response workflow."
          inputParameters:
            - name: alert_id
              in: body
              type: string
              description: "The Datadog alert ID."
            - name: region
              in: body
              type: string
              description: "The affected network region."
          steps:
            - name: get-alert-details
              type: call
              call: "datadog.get-alert"
              with:
                alert_id: "{{alert_id}}"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Network degradation in {{region}}: {{get-alert-details.title}}"
                category: "network"
                priority: "2"
            - name: notify-noc
              type: call
              call: "slack.post-message"
              with:
                channel: "#noc-alerts"
                text: "Network degradation detected in {{region}}. Incident: {{create-incident.number}}. Alert: {{get-alert-details.title}}"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: alerts
          path: "/alerts/{{alert_id}}"
          operations:
            - name: get-alert
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://att.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

When a network service outage is detected via Datadog, creates a ServiceNow major incident, triggers a PagerDuty page for the NOC, and notifies stakeholders in Slack.

naftiko: "0.5"
info:
  label: "Network Service Outage Response"
  description: "When a network service outage is detected via Datadog, creates a ServiceNow major incident, triggers a PagerDuty page for the NOC, and notifies stakeholders in Slack."
  tags:
    - network
    - itsm
    - incident-response
    - datadog
    - pagerduty
    - slack
capability:
  exposes:
    - type: mcp
      namespace: noc-ops
      port: 8080
      tools:
        - name: handle-network-outage
          description: "Given a Datadog network alert ID, affected region, and impacted services, create a ServiceNow major incident, trigger a PagerDuty NOC page, and notify stakeholders in Slack."
          inputParameters:
            - name: alert_id
              in: body
              type: string
              description: "The Datadog alert or monitor ID for the network event."
            - name: affected_region
              in: body
              type: string
              description: "The AT&T network region affected, e.g. Southeast, Midwest."
            - name: impacted_services
              in: body
              type: string
              description: "Comma-separated list of impacted services, e.g. 5G, Fiber, Business."
            - name: estimated_customers_affected
              in: body
              type: integer
              description: "Estimated number of customers affected."
          steps:
            - name: create-major-incident
              type: call
              call: "servicenow-noc.create-incident"
              with:
                short_description: "Network outage: {{affected_region}} — {{impacted_services}}"
                description: "Alert: {{alert_id}}. Estimated customers affected: {{estimated_customers_affected}}."
                urgency: "1"
                impact: "1"
                assignment_group: "NOC"
                severity: "1"
            - name: page-noc
              type: call
              call: "pagerduty-noc.create-incident"
              with:
                title: "Network outage: {{affected_region}} — {{impacted_services}}"
                service_id: "$secrets.pd_noc_service_id"
                body: "Estimated {{estimated_customers_affected}} customers affected. Datadog: {{alert_id}}."
            - name: notify-stakeholders
              type: call
              call: "slack-noc.post-message"
              with:
                channel: "#network-outage-bridge"
                text: "OUTAGE: {{affected_region}} | Services: {{impacted_services}} | ~{{estimated_customers_affected}} customers | SNOW: {{create-major-incident.number}} | PD: {{page-noc.incident_number}}"
  consumes:
    - type: http
      namespace: servicenow-noc
      baseUri: "https://att.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: pagerduty-noc
      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-noc
      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 confirmed in Workday, creates a ServiceNow request for IT equipment, provisions Azure AD account, and sends setup instructions via email through Microsoft Graph.

naftiko: "0.5"
info:
  label: "New Hire IT Equipment Provisioning"
  description: "When a new hire is confirmed in Workday, creates a ServiceNow request for IT equipment, provisions Azure AD account, and sends setup instructions via email through Microsoft Graph."
  tags:
    - hr
    - it-operations
    - workday
    - servicenow
    - azure
    - microsoft-graph
capability:
  exposes:
    - type: mcp
      namespace: it-provisioning
      port: 8080
      tools:
        - name: provision-new-hire-equipment
          description: "Given a Workday employee ID, orchestrate IT equipment provisioning for a new hire."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday employee ID."
            - name: start_date
              in: body
              type: string
              description: "The employee start date."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{employee_id}}"
            - name: create-equipment-request
              type: call
              call: "servicenow.create-request"
              with:
                short_description: "IT equipment for {{get-employee.full_name}} starting {{start_date}}"
                category: "hardware"
                assignment_group: "IT_Provisioning"
            - name: create-azure-account
              type: call
              call: "azure.create-user"
              with:
                display_name: "{{get-employee.full_name}}"
                mail: "{{get-employee.work_email}}"
                department: "{{get-employee.department}}"
            - name: send-setup-email
              type: call
              call: "graph.send-mail"
              with:
                to: "{{get-employee.work_email}}"
                subject: "Welcome to AT&T - IT Setup Instructions"
                body: "Hi {{get-employee.first_name}}, your equipment request {{create-equipment-request.number}} has been submitted. Your Azure account is ready."
  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: "/att/workers/{{worker_id}}"
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://att.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
    - type: http
      namespace: azure
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.azure_ad_token"
      resources:
        - name: users
          path: "/users"
          operations:
            - name: create-user
              method: POST
    - type: http
      namespace: graph
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.graph_token"
      resources:
        - name: mail
          path: "/me/sendMail"
          operations:
            - name: send-mail
              method: POST

Retrieves application performance metrics from New Relic for an AT&T application.

naftiko: "0.5"
info:
  label: "New Relic Application Performance Lookup"
  description: "Retrieves application performance metrics from New Relic for an AT&T application."
  tags:
    - monitoring
    - new-relic
capability:
  exposes:
    - type: mcp
      namespace: apm
      port: 8080
      tools:
        - name: get-app-performance
          description: "Look up New Relic application metrics. Returns response time, throughput, and error rate."
          inputParameters:
            - name: app_id
              in: body
              type: string
              description: "The New Relic application ID."
          call: "newrelic.get-app-metrics"
          with:
            app_id: "{{app_id}}"
          outputParameters:
            - name: response_time_ms
              type: number
              mapping: "$.application.application_summary.response_time"
            - name: throughput
              type: number
              mapping: "$.application.application_summary.throughput"
            - name: error_rate
              type: number
              mapping: "$.application.application_summary.error_rate"
  consumes:
    - type: http
      namespace: newrelic
      baseUri: "https://api.newrelic.com/v2"
      authentication:
        type: apikey
        key: "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-app-metrics
              method: GET

When a New Relic SLO error budget is nearly exhausted, retrieves SLO details, creates a Jira ticket for the owning team, and posts to the reliability channel in Teams.

naftiko: "0.5"
info:
  label: "New Relic Error Budget Alert Handler"
  description: "When a New Relic SLO error budget is nearly exhausted, retrieves SLO details, creates a Jira ticket for the owning team, and posts to the reliability channel in Teams."
  tags:
    - reliability
    - slo
    - new-relic
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: error-budget
      port: 8080
      tools:
        - name: handle-error-budget-alert
          description: "Given a New Relic SLO ID and remaining error budget percentage, escalate."
          inputParameters:
            - name: slo_id
              in: body
              type: string
              description: "New Relic SLO ID."
            - name: remaining_budget_pct
              in: body
              type: number
              description: "Remaining error budget percentage."
          steps:
            - name: get-slo
              type: call
              call: "newrelic.get-slo"
              with:
                slo_id: "{{slo_id}}"
            - name: create-ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "SRE"
                summary: "Error budget alert: {{get-slo.name}} — {{remaining_budget_pct}}% remaining"
                priority: "High"
            - name: notify-reliability
              type: call
              call: "teams.post-message"
              with:
                channel_id: "reliability-engineering"
                text: "Error budget alert: {{get-slo.name}} has {{remaining_budget_pct}}% remaining. Jira: {{create-ticket.key}}"
  consumes:
    - type: http
      namespace: newrelic
      baseUri: "https://api.newrelic.com/v2"
      authentication:
        type: apikey
        key: "Api-Key"
        value: "$secrets.newrelic_api_key"
        placement: header
      resources:
        - name: slos
          path: "/slo/{{slo_id}}"
          operations:
            - name: get-slo
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://att.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: teams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.teams_token"
      resources:
        - name: messages
          path: "/teams/channels/messages"
          operations:
            - name: post-message
              method: POST

Checks the latest run status and response time for a New Relic synthetic monitor tracking AT&T customer portal availability.

naftiko: "0.5"
info:
  label: "New Relic Synthetic Monitor Status"
  description: "Checks the latest run status and response time for a New Relic synthetic monitor tracking AT&T customer portal availability."
  tags:
    - observability
    - synthetic-monitoring
    - new-relic
capability:
  exposes:
    - type: mcp
      namespace: synthetic-monitors
      port: 8080
      tools:
        - name: get-monitor-status
          description: "Given a New Relic synthetic monitor ID, return the latest status, response time, and location."
          inputParameters:
            - name: monitor_id
              in: body
              type: string
              description: "The New Relic synthetic monitor ID."
          call: "newrelic.get-synthetic-monitor"
          with:
            monitor_id: "{{monitor_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.status"
            - name: response_time_ms
              type: number
              mapping: "$.responseTime"
            - name: location
              type: string
              mapping: "$.location"
  consumes:
    - type: http
      namespace: newrelic
      baseUri: "https://synthetics.newrelic.com/synthetics/api/v3"
      authentication:
        type: apikey
        key: "Api-Key"
        value: "$secrets.newrelic_api_key"
        placement: header
      resources:
        - name: monitors
          path: "/monitors/{{monitor_id}}"
          inputParameters:
            - name: monitor_id
              in: path
          operations:
            - name: get-synthetic-monitor
              method: GET

Audits Okta MFA enrollment compliance, identifies non-compliant users, creates a Jira tracking ticket, and notifies the security team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Okta MFA Compliance Audit Workflow"
  description: "Audits Okta MFA enrollment compliance, identifies non-compliant users, creates a Jira tracking ticket, and notifies the security team via Microsoft Teams."
  tags:
    - security
    - identity
    - okta
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: mfa-compliance
      port: 8080
      tools:
        - name: audit-mfa-compliance
          description: "Given a department name, audit MFA enrollment compliance and create tracking items for gaps."
          inputParameters:
            - name: department
              in: body
              type: string
              description: "Department name to audit."
          steps:
            - name: get-mfa-stats
              type: call
              call: "okta.get-mfa-enrollment"
              with:
                department: "{{department}}"
            - name: create-ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "SEC"
                summary: "MFA compliance gap: {{department}} — {{get-mfa-stats.non_compliant_count}} users"
                description: "Enrolled: {{get-mfa-stats.enrolled_count}}. Non-compliant: {{get-mfa-stats.non_compliant_count}}."
            - name: notify-security
              type: call
              call: "teams.post-message"
              with:
                channel_id: "security-compliance"
                text: "MFA audit: {{department}} has {{get-mfa-stats.non_compliant_count}} non-compliant users. Jira: {{create-ticket.key}}"
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://att.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: factors
          path: "/users"
          operations:
            - name: get-mfa-enrollment
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://att.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: teams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.teams_token"
      resources:
        - name: messages
          path: "/teams/channels/messages"
          operations:
            - name: post-message
              method: POST

When a new employee joins AT&T, provisions appropriate Okta application assignments based on their department and role from Workday.

naftiko: "0.5"
info:
  label: "Okta User Access Provisioning"
  description: "When a new employee joins AT&T, provisions appropriate Okta application assignments based on their department and role from Workday."
  tags:
    - identity
    - security
    - okta
    - workday
    - access-management
capability:
  exposes:
    - type: mcp
      namespace: identity-provisioning
      port: 8080
      tools:
        - name: provision-okta-access
          description: "Given a Workday employee ID and Okta user ID, retrieve department and role from Workday, then assign appropriate Okta application groups."
          inputParameters:
            - name: workday_employee_id
              in: body
              type: string
              description: "The Workday worker ID for the employee."
            - name: okta_user_id
              in: body
              type: string
              description: "The Okta user ID for the employee."
          steps:
            - name: get-worker-profile
              type: call
              call: "workday-okta.get-worker"
              with:
                worker_id: "{{workday_employee_id}}"
            - name: assign-app-groups
              type: call
              call: "okta-prov.assign-group"
              with:
                user_id: "{{okta_user_id}}"
                department: "{{get-worker-profile.department}}"
  consumes:
    - type: http
      namespace: workday-okta
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/att/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: okta-prov
      baseUri: "https://att.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: group-members
          path: "/groups/{{group_id}}/users/{{user_id}}"
          inputParameters:
            - name: group_id
              in: path
            - name: user_id
              in: path
          operations:
            - name: assign-group
              method: PUT

Checks the current status and last login time of an Okta user account at AT&T.

naftiko: "0.5"
info:
  label: "Okta User Status Check"
  description: "Checks the current status and last login time of an Okta user account at AT&T."
  tags:
    - security
    - okta
capability:
  exposes:
    - type: mcp
      namespace: iam-users
      port: 8080
      tools:
        - name: get-user-status
          description: "Look up an Okta user status by email. Returns account status, last login, and assigned applications count."
          inputParameters:
            - name: user_email
              in: body
              type: string
              description: "The user email address."
          call: "okta.get-user"
          with:
            user_email: "{{user_email}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.status"
            - name: last_login
              type: string
              mapping: "$.lastLogin"
            - name: app_count
              type: number
              mapping: "$.app_count"
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://att.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: users
          path: "/users/{{user_email}}"
          inputParameters:
            - name: user_email
              in: path
          operations:
            - name: get-user
              method: GET

When an Oracle database performance threshold is breached, retrieves metrics from Datadog, creates a ServiceNow incident, and notifies the DBA team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Oracle Database Performance Alert Handler"
  description: "When an Oracle database performance threshold is breached, retrieves metrics from Datadog, creates a ServiceNow incident, and notifies the DBA team via Microsoft Teams."
  tags:
    - database
    - performance
    - oracle
    - datadog
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: db-performance
      port: 8080
      tools:
        - name: handle-db-performance-alert
          description: "Given a Datadog alert ID for Oracle database performance, investigate and escalate."
          inputParameters:
            - name: alert_id
              in: body
              type: string
              description: "Datadog monitor alert ID."
            - name: db_instance
              in: body
              type: string
              description: "Oracle database instance name."
          steps:
            - name: get-alert
              type: call
              call: "datadog.get-monitor"
              with:
                alert_id: "{{alert_id}}"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Oracle DB performance: {{db_instance}}"
                urgency: "2"
                description: "{{get-alert.message}}"
            - name: notify-dba
              type: call
              call: "teams.post-message"
              with:
                channel_id: "dba-team"
                text: "Oracle performance alert: {{db_instance}}. {{get-alert.message}}. ServiceNow: {{create-incident.number}}"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: monitors
          path: "/monitor/{{alert_id}}"
          operations:
            - name: get-monitor
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://att.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: teams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.teams_token"
      resources:
        - name: messages
          path: "/teams/channels/messages"
          operations:
            - name: post-message
              method: POST

When a PagerDuty network incident goes unacknowledged past SLA, escalates to senior on-call, creates a Jira post-mortem issue, and notifies the incident Slack channel.

naftiko: "0.5"
info:
  label: "PagerDuty Incident Escalation"
  description: "When a PagerDuty network incident goes unacknowledged past SLA, escalates to senior on-call, creates a Jira post-mortem issue, and notifies the incident Slack channel."
  tags:
    - itsm
    - incident-response
    - pagerduty
    - jira
    - slack
capability:
  exposes:
    - type: mcp
      namespace: incident-escalation
      port: 8080
      tools:
        - name: escalate-unacknowledged-incident
          description: "Given an unacknowledged PagerDuty incident ID, escalate to senior on-call policy, create a Jira post-mortem issue, and notify the incident Slack bridge channel."
          inputParameters:
            - name: pd_incident_id
              in: body
              type: string
              description: "The PagerDuty incident ID to escalate."
            - name: service_name
              in: body
              type: string
              description: "The affected service name."
            - name: incident_summary
              in: body
              type: string
              description: "Brief description of the incident."
          steps:
            - name: escalate-pd
              type: call
              call: "pagerduty-esc.escalate-incident"
              with:
                incident_id: "{{pd_incident_id}}"
                escalation_policy_id: "$secrets.pd_senior_escalation_policy"
            - name: create-postmortem
              type: call
              call: "jira-pm.create-issue"
              with:
                project_key: "PM"
                issuetype: "Post-mortem"
                summary: "Post-mortem: {{service_name}} — {{pd_incident_id}}"
                description: "{{incident_summary}}"
            - name: notify-bridge
              type: call
              call: "slack-esc.post-message"
              with:
                channel: "#incident-bridge"
                text: "Incident ESCALATED: {{service_name}} | PD: {{pd_incident_id}} | Post-mortem: {{create-postmortem.key}}"
  consumes:
    - type: http
      namespace: pagerduty-esc
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.pagerduty_token"
        placement: header
      resources:
        - name: incident-escalations
          path: "/incidents/{{incident_id}}"
          inputParameters:
            - name: incident_id
              in: path
          operations:
            - name: escalate-incident
              method: PUT
    - type: http
      namespace: jira-pm
      baseUri: "https://att.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-esc
      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

After a PagerDuty incident resolves, retrieves incident timeline, creates a Confluence postmortem page, and posts the link to the SRE channel in Microsoft Teams.

naftiko: "0.5"
info:
  label: "PagerDuty Incident Postmortem Creator"
  description: "After a PagerDuty incident resolves, retrieves incident timeline, creates a Confluence postmortem page, and posts the link to the SRE channel in Microsoft Teams."
  tags:
    - sre
    - postmortem
    - pagerduty
    - confluence
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: incident-postmortem
      port: 8080
      tools:
        - name: create-postmortem
          description: "Given a PagerDuty incident ID, generate a postmortem document."
          inputParameters:
            - name: incident_id
              in: body
              type: string
              description: "PagerDuty incident ID."
          steps:
            - name: get-incident
              type: call
              call: "pagerduty.get-incident"
              with:
                incident_id: "{{incident_id}}"
            - name: create-page
              type: call
              call: "confluence.create-page"
              with:
                space_key: "SRE"
                title: "Postmortem: {{get-incident.title}}"
                content: "Duration: {{get-incident.duration}}. Service: {{get-incident.service_name}}. Timeline: {{get-incident.timeline}}"
            - name: notify-sre
              type: call
              call: "teams.post-message"
              with:
                channel_id: "sre-team"
                text: "Postmortem created for PD-{{incident_id}}: {{get-incident.title}}. Confluence: {{create-page.url}}"
  consumes:
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: bearer
        token: "$secrets.pagerduty_token"
      resources:
        - name: incidents
          path: "/incidents/{{incident_id}}"
          operations:
            - name: get-incident
              method: GET
    - type: http
      namespace: confluence
      baseUri: "https://att.atlassian.net/wiki/api/v2"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: pages
          path: "/pages"
          operations:
            - name: create-page
              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/channels/messages"
          operations:
            - name: post-message
              method: POST

Retrieves the current on-call engineer for a specified AT&T PagerDuty escalation policy.

naftiko: "0.5"
info:
  label: "PagerDuty On-Call Schedule Lookup"
  description: "Retrieves the current on-call engineer for a specified AT&T PagerDuty escalation policy."
  tags:
    - operations
    - pagerduty
capability:
  exposes:
    - type: mcp
      namespace: on-call
      port: 8080
      tools:
        - name: get-on-call
          description: "Look up the current on-call engineer for a PagerDuty policy. Returns name, contact, and shift end time."
          inputParameters:
            - name: policy_id
              in: body
              type: string
              description: "The PagerDuty escalation policy ID."
          call: "pagerduty.get-on-call"
          with:
            policy_id: "{{policy_id}}"
          outputParameters:
            - name: on_call_name
              type: string
              mapping: "$.oncalls[0].user.name"
            - name: email
              type: string
              mapping: "$.oncalls[0].user.email"
            - name: shift_end
              type: string
              mapping: "$.oncalls[0].end"
  consumes:
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: bearer
        token: "$secrets.pagerduty_token"
      resources:
        - name: oncalls
          path: "/oncalls"
          operations:
            - name: get-on-call
              method: GET

Returns current headcount by department and cost center from Workday for workforce planning and cost analysis.

naftiko: "0.5"
info:
  label: "Payroll Headcount Snapshot"
  description: "Returns current headcount by department and cost center from Workday for workforce planning and cost analysis."
  tags:
    - hr
    - finance
    - reporting
    - workday
    - headcount
capability:
  exposes:
    - type: mcp
      namespace: hr-reporting
      port: 8080
      tools:
        - name: get-headcount-by-department
          description: "Returns a list of active AT&T employees grouped by department and cost center from Workday. Use for headcount planning, budget reviews, and workforce analytics."
          call: "workday-hc.headcount-report"
          outputParameters:
            - name: employees
              type: array
              mapping: "$.data"
  consumes:
    - type: http
      namespace: workday-hc
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: headcount
          path: "/att/reports/headcount"
          operations:
            - name: headcount-report
              method: GET

Triggers a Power BI dataset refresh for AT&T's network KPI report and notifies the network analytics team via Slack when complete.

naftiko: "0.5"
info:
  label: "Power BI Network KPI Report Refresh"
  description: "Triggers a Power BI dataset refresh for AT&T's network KPI report and notifies the network analytics team via Slack when complete."
  tags:
    - data
    - analytics
    - power-bi
    - reporting
    - slack
capability:
  exposes:
    - type: mcp
      namespace: bi-reporting
      port: 8080
      tools:
        - name: refresh-network-kpi-report
          description: "Given a Power BI workspace ID and dataset ID for the network KPI report, trigger a refresh and notify the network analytics Slack channel."
          inputParameters:
            - name: workspace_id
              in: body
              type: string
              description: "The Power BI workspace (group) ID."
            - name: dataset_id
              in: body
              type: string
              description: "The Power BI dataset ID for the network KPI report."
            - name: slack_channel
              in: body
              type: string
              description: "The Slack channel to notify on completion."
          steps:
            - name: trigger-refresh
              type: call
              call: "powerbi.refresh-dataset"
              with:
                workspace_id: "{{workspace_id}}"
                dataset_id: "{{dataset_id}}"
            - name: notify-analytics
              type: call
              call: "slack-pbi.post-message"
              with:
                channel: "{{slack_channel}}"
                text: "Network KPI dataset {{dataset_id}} refresh triggered. Refresh ID: {{trigger-refresh.refresh_id}}."
  consumes:
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: dataset-refreshes
          path: "/groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: workspace_id
              in: path
            - name: dataset_id
              in: path
          operations:
            - name: refresh-dataset
              method: POST
    - type: http
      namespace: slack-pbi
      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

Checks the last refresh status and timing of an AT&T Power BI dataset.

naftiko: "0.5"
info:
  label: "Power BI Report Status Check"
  description: "Checks the last refresh status and timing of an AT&T Power BI dataset."
  tags:
    - analytics
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: bi-reports
      port: 8080
      tools:
        - name: get-dataset-refresh-status
          description: "Check the last refresh status of a Power BI dataset. Returns status, start time, and end time."
          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: start_time
              type: string
              mapping: "$.value[0].startTime"
            - 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: datasets
          path: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: get-refresh-history
              method: GET

Aggregates vendor spend data from SAP, refreshes the Power BI dashboard, and posts the report link to the procurement finance channel in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Quarterly Vendor Spend Report Generator"
  description: "Aggregates vendor spend data from SAP, refreshes the Power BI dashboard, and posts the report link to the procurement finance channel in Microsoft Teams."
  tags:
    - finance
    - procurement
    - sap
    - power-bi
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: vendor-spend
      port: 8080
      tools:
        - name: generate-vendor-spend-report
          description: "Given a fiscal quarter identifier, aggregate vendor spend and generate the quarterly report."
          inputParameters:
            - name: fiscal_quarter
              in: body
              type: string
              description: "Fiscal quarter identifier (e.g., FY26-Q1)."
          steps:
            - name: get-vendor-spend
              type: call
              call: "sap.get-vendor-spend"
              with:
                fiscal_quarter: "{{fiscal_quarter}}"
            - name: refresh-dashboard
              type: call
              call: "powerbi.refresh-dataset"
              with:
                dataset_id: "vendor-spend-quarterly"
            - name: notify-finance
              type: call
              call: "teams.post-message"
              with:
                channel_id: "procurement-finance"
                text: "{{fiscal_quarter}} vendor spend report ready. Total spend: {{get-vendor-spend.total_amount}}. Dashboard refreshed."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://att-s4.sap.com/sap/opu/odata/sap/API_PURCHASING_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: vendor-spend
          path: "/A_VendorSpend"
          operations:
            - name: get-vendor-spend
              method: GET
    - 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"
          operations:
            - name: refresh-dataset
              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/channels/messages"
          operations:
            - name: post-message
              method: POST

Audits S3 bucket lifecycle policies for compliance, logs findings in Snowflake, and creates a Jira ticket for non-compliant buckets.

naftiko: "0.5"
info:
  label: "S3 Data Lifecycle Compliance Checker"
  description: "Audits S3 bucket lifecycle policies for compliance, logs findings in Snowflake, and creates a Jira ticket for non-compliant buckets."
  tags:
    - cloud
    - compliance
    - aws
    - snowflake
    - jira
capability:
  exposes:
    - type: mcp
      namespace: data-lifecycle
      port: 8080
      tools:
        - name: check-s3-compliance
          description: "Given an S3 bucket name, audit its lifecycle policy and flag compliance gaps."
          inputParameters:
            - name: bucket_name
              in: body
              type: string
              description: "The S3 bucket name to audit."
          steps:
            - name: get-policy
              type: call
              call: "aws-s3.get-lifecycle"
              with:
                bucket_name: "{{bucket_name}}"
            - name: log-finding
              type: call
              call: "snowflake.insert-audit"
              with:
                bucket: "{{bucket_name}}"
                policy_status: "{{get-policy.status}}"
            - name: create-ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "COMPLIANCE"
                summary: "S3 lifecycle non-compliant: {{bucket_name}}"
                description: "Policy status: {{get-policy.status}}. Rules count: {{get-policy.rules_count}}"
  consumes:
    - type: http
      namespace: aws-s3
      baseUri: "https://s3.amazonaws.com"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.aws_auth_token"
        placement: header
      resources:
        - name: lifecycle
          path: "/{{bucket_name}}?lifecycle"
          operations:
            - name: get-lifecycle
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://att.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: insert-audit
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://att.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

Launches a SailPoint access certification campaign, tracks completion in Jira, and sends compliance summary to the governance team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "SailPoint Access Certification Campaign"
  description: "Launches a SailPoint access certification campaign, tracks completion in Jira, and sends compliance summary to the governance team via Microsoft Teams."
  tags:
    - security
    - governance
    - sailpoint
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: access-certification
      port: 8080
      tools:
        - name: launch-certification-campaign
          description: "Given a campaign name and scope, launch a SailPoint certification campaign and track it."
          inputParameters:
            - name: campaign_name
              in: body
              type: string
              description: "Access certification campaign name."
            - name: department
              in: body
              type: string
              description: "Department scope for the campaign."
          steps:
            - name: create-campaign
              type: call
              call: "sailpoint.create-campaign"
              with:
                name: "{{campaign_name}}"
                department: "{{department}}"
            - name: create-tracker
              type: call
              call: "jira.create-issue"
              with:
                project: "GRC"
                summary: "Access certification: {{campaign_name}} — {{department}}"
                description: "Campaign ID: {{create-campaign.id}}. Total reviewers: {{create-campaign.reviewer_count}}"
            - name: notify-governance
              type: call
              call: "teams.post-message"
              with:
                channel_id: "iam-governance"
                text: "Certification campaign launched: {{campaign_name}} for {{department}}. {{create-campaign.reviewer_count}} reviewers. Jira: {{create-tracker.key}}"
  consumes:
    - type: http
      namespace: sailpoint
      baseUri: "https://att.api.identitynow.com/v3"
      authentication:
        type: bearer
        token: "$secrets.sailpoint_token"
      resources:
        - name: campaigns
          path: "/campaigns"
          operations:
            - name: create-campaign
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://att.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: teams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.teams_token"
      resources:
        - name: messages
          path: "/teams/channels/messages"
          operations:
            - name: post-message
              method: POST

When a qualifying LinkedIn signal occurs for an enterprise prospect, enriches the Salesforce contact and notifies the account executive via Slack.

naftiko: "0.5"
info:
  label: "Sales Intelligence Enrichment from LinkedIn"
  description: "When a qualifying LinkedIn signal occurs for an enterprise prospect, enriches the Salesforce contact and notifies the account executive via Slack."
  tags:
    - sales
    - crm
    - salesforce
    - linkedin
    - slack
capability:
  exposes:
    - type: mcp
      namespace: sales-intelligence
      port: 8080
      tools:
        - name: enrich-contact-from-linkedin
          description: "Given a LinkedIn member URN and Salesforce contact ID, fetch the LinkedIn profile, update Salesforce, and notify the account executive via Slack."
          inputParameters:
            - name: linkedin_member_urn
              in: body
              type: string
              description: "The LinkedIn member URN for the contact."
            - name: salesforce_contact_id
              in: body
              type: string
              description: "The Salesforce contact record ID to enrich."
            - name: ae_slack_id
              in: body
              type: string
              description: "The Slack user ID of the owning account executive."
          steps:
            - name: get-linkedin-profile
              type: call
              call: "linkedin.get-profile"
              with:
                member_urn: "{{linkedin_member_urn}}"
            - name: enrich-salesforce
              type: call
              call: "salesforce-si.update-contact"
              with:
                contact_id: "{{salesforce_contact_id}}"
                title: "{{get-linkedin-profile.headline}}"
                linkedin_profile: "https://www.linkedin.com/in/{{get-linkedin-profile.vanityName}}"
            - name: notify-ae
              type: call
              call: "slack-si.post-message"
              with:
                channel: "{{ae_slack_id}}"
                text: "Lead Signal: {{get-linkedin-profile.firstName}} {{get-linkedin-profile.lastName}} | Title: {{get-linkedin-profile.headline}} | Salesforce enriched."
  consumes:
    - type: http
      namespace: linkedin
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: profiles
          path: "/people/{{member_urn}}"
          inputParameters:
            - name: member_urn
              in: path
          operations:
            - name: get-profile
              method: GET
    - type: http
      namespace: salesforce-si
      baseUri: "https://att.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: contacts
          path: "/sobjects/Contact/{{contact_id}}"
          inputParameters:
            - name: contact_id
              in: path
          operations:
            - name: update-contact
              method: PATCH
    - type: http
      namespace: slack-si
      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 status, active services, and open opportunities for an AT&T Salesforce enterprise customer account.

naftiko: "0.5"
info:
  label: "Salesforce Enterprise Account Lookup"
  description: "Retrieves the current status, active services, and open opportunities for an AT&T Salesforce enterprise customer account."
  tags:
    - sales
    - crm
    - salesforce
    - enterprise
capability:
  exposes:
    - type: mcp
      namespace: crm-enterprise
      port: 8080
      tools:
        - name: get-enterprise-account
          description: "Look up a Salesforce enterprise account by ID. Returns account name, active services, contract value, and renewal date. Use for account planning and customer reviews."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "The Salesforce account ID for the enterprise customer."
          call: "salesforce.get-account"
          with:
            account_id: "{{account_id}}"
          outputParameters:
            - name: name
              type: string
              mapping: "$.Name"
            - name: annual_contract_value
              type: number
              mapping: "$.AnnualRevenue"
            - name: tier
              type: string
              mapping: "$.Customer_Tier__c"
            - name: renewal_date
              type: string
              mapping: "$.Contract_Renewal_Date__c"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://att.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

Qualifies a Salesforce lead using ZoomInfo enrichment data, converts it to an opportunity, and notifies the assigned sales rep via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Salesforce Lead to Opportunity Converter"
  description: "Qualifies a Salesforce lead using ZoomInfo enrichment data, converts it to an opportunity, and notifies the assigned sales rep via Microsoft Teams."
  tags:
    - sales
    - crm
    - salesforce
    - zoominfo
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: lead-conversion
      port: 8080
      tools:
        - name: convert-lead
          description: "Given a Salesforce lead ID, enrich with ZoomInfo, convert to opportunity, and notify."
          inputParameters:
            - name: lead_id
              in: body
              type: string
              description: "The Salesforce lead ID to convert."
          steps:
            - name: get-lead
              type: call
              call: "salesforce.get-lead"
              with:
                lead_id: "{{lead_id}}"
            - name: enrich-lead
              type: call
              call: "zoominfo.enrich-company"
              with:
                company_name: "{{get-lead.Company}}"
            - name: convert-lead
              type: call
              call: "salesforce.convert-lead"
              with:
                lead_id: "{{lead_id}}"
                company_size: "{{enrich-lead.employee_count}}"
            - name: notify-rep
              type: call
              call: "teams.post-message"
              with:
                channel_id: "enterprise-sales"
                text: "Lead converted: {{get-lead.Company}} ({{enrich-lead.employee_count}} employees). Opportunity: {{convert-lead.opportunity_id}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://att.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: leads
          path: "/sobjects/Lead/{{lead_id}}"
          operations:
            - name: get-lead
              method: GET
        - name: lead-convert
          path: "/sobjects/Lead/{{lead_id}}/convert"
          operations:
            - name: convert-lead
              method: POST
    - type: http
      namespace: zoominfo
      baseUri: "https://api.zoominfo.com/v2"
      authentication:
        type: bearer
        token: "$secrets.zoominfo_token"
      resources:
        - name: companies
          path: "/enrich/company"
          operations:
            - name: enrich-company
              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/channels/messages"
          operations:
            - name: post-message
              method: POST

Retrieves details of a Salesforce opportunity including stage, value, and close date for AT&T sales teams.

naftiko: "0.5"
info:
  label: "Salesforce Opportunity Lookup"
  description: "Retrieves details of a Salesforce opportunity including stage, value, and close date for AT&T sales teams."
  tags:
    - sales
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: crm-opportunities
      port: 8080
      tools:
        - name: get-opportunity
          description: "Look up a Salesforce opportunity by ID. Returns name, stage, amount, and expected close date."
          inputParameters:
            - name: opportunity_id
              in: body
              type: string
              description: "The Salesforce opportunity ID."
          call: "salesforce.get-opportunity"
          with:
            opportunity_id: "{{opportunity_id}}"
          outputParameters:
            - name: name
              type: string
              mapping: "$.Name"
            - name: stage
              type: string
              mapping: "$.StageName"
            - name: amount
              type: number
              mapping: "$.Amount"
            - name: close_date
              type: string
              mapping: "$.CloseDate"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://att.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

Retrieves a pending expense report from SAP Concur and routes it for manager approval via ServiceNow.

naftiko: "0.5"
info:
  label: "SAP Concur Expense Report Approval"
  description: "Retrieves a pending expense report from SAP Concur and routes it for manager approval via ServiceNow."
  tags:
    - finance
    - expense-management
    - sap-concur
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: expense-mgmt
      port: 8080
      tools:
        - name: process-expense-report
          description: "Given a SAP Concur expense report ID, retrieve the report details and create a ServiceNow approval task for the manager."
          inputParameters:
            - name: expense_report_id
              in: body
              type: string
              description: "The SAP Concur expense report identifier."
            - name: employee_id
              in: body
              type: string
              description: "The employee ID submitting the expense report."
          steps:
            - name: get-expense-report
              type: call
              call: "sap-concur.get-expense-report"
              with:
                report_id: "{{expense_report_id}}"
            - name: create-approval-task
              type: call
              call: "servicenow-exp.create-task"
              with:
                short_description: "Expense approval: {{employee_id}} — {{expense_report_id}}"
                description: "Amount: {{get-expense-report.total_amount}} {{get-expense-report.currency}}."
                assignment_group: "Finance_Expense"
  consumes:
    - type: http
      namespace: sap-concur
      baseUri: "https://www.concursolutions.com/api/v3.0"
      authentication:
        type: bearer
        token: "$secrets.concur_token"
      resources:
        - name: expense-reports
          path: "/expense/reports/{{report_id}}"
          inputParameters:
            - name: report_id
              in: path
          operations:
            - name: get-expense-report
              method: GET
    - type: http
      namespace: servicenow-exp
      baseUri: "https://att.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/task"
          operations:
            - name: create-task
              method: POST

Looks up an AT&T SAP S/4HANA purchase order by number and returns header status, vendor details, and total value.

naftiko: "0.5"
info:
  label: "SAP Purchase Order Lookup"
  description: "Looks up an AT&T SAP S/4HANA purchase order by number and returns header status, vendor details, and total value."
  tags:
    - finance
    - procurement
    - sap
    - erp
capability:
  exposes:
    - type: mcp
      namespace: erp-procurement
      port: 8080
      tools:
        - name: get-purchase-order
          description: "Look up a SAP S/4HANA purchase order by PO number. Returns status, vendor name, total value, and currency. Use for procurement status checks and invoice matching."
          inputParameters:
            - name: po_number
              in: body
              type: string
              description: "The SAP purchase order number, e.g. 4500034567."
          call: "sap-erp.get-po"
          with:
            po_number: "{{po_number}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.d.OverallStatus"
            - name: vendor
              type: string
              mapping: "$.d.Supplier.CompanyName"
            - name: total_value
              type: string
              mapping: "$.d.TotalAmount"
            - name: currency
              type: string
              mapping: "$.d.TransactionCurrency"
  consumes:
    - type: http
      namespace: sap-erp
      baseUri: "https://att-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: purchase-orders
          path: "/A_PurchaseOrder('{{po_number}}')"
          inputParameters:
            - name: po_number
              in: path
          operations:
            - name: get-po
              method: GET
              outputRawFormat: xml

Retrieves vendor master record details from AT&T SAP system for procurement inquiries.

naftiko: "0.5"
info:
  label: "SAP Vendor Master Lookup"
  description: "Retrieves vendor master record details from AT&T SAP system for procurement inquiries."
  tags:
    - procurement
    - sap
capability:
  exposes:
    - type: mcp
      namespace: erp-vendors
      port: 8080
      tools:
        - name: get-vendor
          description: "Look up an SAP vendor by ID. Returns vendor name, payment terms, and category."
          inputParameters:
            - name: vendor_id
              in: body
              type: string
              description: "The SAP vendor ID."
          call: "sap.get-vendor"
          with:
            vendor_id: "{{vendor_id}}"
          outputParameters:
            - name: name
              type: string
              mapping: "$.VendorName"
            - name: payment_terms
              type: string
              mapping: "$.PaymentTerms"
            - name: category
              type: string
              mapping: "$.VendorCategory"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://att-sap.example.com/sap/opu/odata/sap"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: vendors
          path: "/API_BUSINESS_PARTNER/A_Supplier('{{vendor_id}}')"
          inputParameters:
            - name: vendor_id
              in: path
          operations:
            - name: get-vendor
              method: GET

When a critical CVE is detected by CrowdStrike, identifies affected systems, creates a Jira remediation task, triggers a Terraform patching workflow, and notifies the security team.

naftiko: "0.5"
info:
  label: "Security Vulnerability Patch Orchestrator"
  description: "When a critical CVE is detected by CrowdStrike, identifies affected systems, creates a Jira remediation task, triggers a Terraform patching workflow, and notifies the security team."
  tags:
    - security
    - crowdstrike
    - jira
    - terraform
    - slack
capability:
  exposes:
    - type: mcp
      namespace: security-remediation
      port: 8080
      tools:
        - name: orchestrate-vulnerability-patching
          description: "Given a CVE ID, orchestrate the vulnerability patching workflow across affected AT&T systems."
          inputParameters:
            - name: cve_id
              in: body
              type: string
              description: "The CVE identifier."
            - name: severity
              in: body
              type: string
              description: "The vulnerability severity."
          steps:
            - name: get-affected-hosts
              type: call
              call: "crowdstrike.get-vulnerable-hosts"
              with:
                cve_id: "{{cve_id}}"
            - name: create-remediation-task
              type: call
              call: "jira.create-issue"
              with:
                summary: "Patch {{cve_id}} - {{severity}} severity"
                description: "Affected hosts: {{get-affected-hosts.count}}. Remediate {{cve_id}}."
                project: "SEC"
                issue_type: "Task"
            - name: trigger-patch-run
              type: call
              call: "terraform.trigger-run"
              with:
                workspace_id: "security-patching"
                message: "Patching {{cve_id}} per {{create-remediation-task.key}}"
            - name: notify-security
              type: call
              call: "slack.post-message"
              with:
                channel: "#security-ops"
                text: "Vulnerability {{cve_id}} patching initiated. Jira: {{create-remediation-task.key}}. Affected hosts: {{get-affected-hosts.count}}. Terraform run: {{trigger-patch-run.run_id}}."
  consumes:
    - type: http
      namespace: crowdstrike
      baseUri: "https://api.crowdstrike.com"
      authentication:
        type: bearer
        token: "$secrets.crowdstrike_token"
      resources:
        - name: vulnerabilities
          path: "/spotlight/queries/vulnerabilities/v1"
          operations:
            - name: get-vulnerable-hosts
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://att.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_password"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: terraform
      baseUri: "https://app.terraform.io/api/v2"
      authentication:
        type: bearer
        token: "$secrets.terraform_token"
      resources:
        - name: runs
          path: "/runs"
          operations:
            - name: trigger-run
              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 status, schedule, and approval chain of a ServiceNow change request by number.

naftiko: "0.5"
info:
  label: "ServiceNow Change Request Lookup"
  description: "Retrieves the current status, schedule, and approval chain of a ServiceNow change request by number."
  tags:
    - itsm
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: change-management
      port: 8080
      tools:
        - name: get-change-request
          description: "Given a change request number, return its status, scheduled start/end, and approval list."
          inputParameters:
            - name: change_number
              in: body
              type: string
              description: "The ServiceNow change request number (e.g., CHG0012345)."
          call: "servicenow.get-change-request"
          with:
            change_number: "{{change_number}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.result.state"
            - name: scheduled_start
              type: string
              mapping: "$.result.start_date"
            - name: scheduled_end
              type: string
              mapping: "$.result.end_date"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://att.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: changes
          path: "/table/change_request/{{change_number}}"
          inputParameters:
            - name: change_number
              in: path
          operations:
            - name: get-change-request
              method: GET

Retrieves the current status and assignment details of a ServiceNow incident ticket at AT&T.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Status Lookup"
  description: "Retrieves the current status and assignment details of a ServiceNow incident ticket at AT&T."
  tags:
    - it-operations
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: itsm-incidents
      port: 8080
      tools:
        - name: get-incident-status
          description: "Look up a ServiceNow incident by number. Returns state, priority, assigned group, and short description."
          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: "$.state"
            - name: priority
              type: string
              mapping: "$.priority"
            - name: assigned_to
              type: string
              mapping: "$.assigned_to"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://att.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident/{{incident_number}}"
          inputParameters:
            - name: incident_number
              in: path
          operations:
            - name: get-incident
              method: GET

When a new compliance document is uploaded to SharePoint, extracts metadata, creates a Jira review task, and notifies the compliance team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "SharePoint Compliance Document Workflow"
  description: "When a new compliance document is uploaded to SharePoint, extracts metadata, creates a Jira review task, and notifies the compliance team via Microsoft Teams."
  tags:
    - compliance
    - documents
    - sharepoint
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: compliance-docs
      port: 8080
      tools:
        - name: process-compliance-document
          description: "Given a SharePoint document ID, process the compliance document and create review tasks."
          inputParameters:
            - name: document_id
              in: body
              type: string
              description: "SharePoint document ID."
            - name: site_id
              in: body
              type: string
              description: "SharePoint site ID."
          steps:
            - name: get-document
              type: call
              call: "sharepoint.get-document"
              with:
                site_id: "{{site_id}}"
                document_id: "{{document_id}}"
            - name: create-review-task
              type: call
              call: "jira.create-issue"
              with:
                project: "COMPLIANCE"
                summary: "Review: {{get-document.name}}"
                description: "Document uploaded to SharePoint. Author: {{get-document.author}}. Size: {{get-document.size}}"
            - name: notify-compliance
              type: call
              call: "teams.post-message"
              with:
                channel_id: "compliance-reviews"
                text: "New compliance doc: {{get-document.name}}. Jira: {{create-review-task.key}}"
  consumes:
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: documents
          path: "/sites/{{site_id}}/drive/items/{{document_id}}"
          operations:
            - name: get-document
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://att.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: teams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.teams_token"
      resources:
        - name: messages
          path: "/teams/channels/messages"
          operations:
            - name: post-message
              method: POST

When a Snowflake data quality check fails for network or customer data, opens a Jira issue and notifies the data engineering Slack channel.

naftiko: "0.5"
info:
  label: "Snowflake Data Quality Alert"
  description: "When a Snowflake data quality check fails for network or customer data, opens a Jira issue and notifies the data engineering Slack channel."
  tags:
    - data
    - analytics
    - snowflake
    - jira
    - data-quality
    - slack
capability:
  exposes:
    - type: mcp
      namespace: data-quality
      port: 8080
      tools:
        - name: handle-data-quality-failure
          description: "Given a Snowflake table and failed data quality check name, open a Jira data quality issue and notify the data engineering Slack channel."
          inputParameters:
            - name: table_name
              in: body
              type: string
              description: "The fully qualified Snowflake table that failed the quality check."
            - name: check_name
              in: body
              type: string
              description: "The data quality check name that failed."
            - name: failure_detail
              in: body
              type: string
              description: "Description of what failed and relevant metrics."
          steps:
            - name: create-dq-issue
              type: call
              call: "jira-dq.create-issue"
              with:
                project_key: "DATA"
                issuetype: "Bug"
                summary: "[DQ Failure] {{table_name}} — {{check_name}}"
                description: "Data quality check {{check_name}} failed on {{table_name}}. Detail: {{failure_detail}}."
            - name: notify-data-team
              type: call
              call: "slack-dq.post-message"
              with:
                channel: "#data-engineering-alerts"
                text: "Data Quality Failure: {{table_name}} | Check: {{check_name}} | Jira: {{create-dq-issue.key}}"
  consumes:
    - type: http
      namespace: jira-dq
      baseUri: "https://att.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-dq
      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 Snowflake for failed or stalled network analytics data pipeline tasks and alerts the data engineering team via Slack.

naftiko: "0.5"
info:
  label: "Snowflake Network Data Pipeline Health Check"
  description: "Queries Snowflake for failed or stalled network analytics data pipeline tasks and alerts the data engineering team via Slack."
  tags:
    - data
    - analytics
    - snowflake
    - pipeline-monitoring
    - slack
capability:
  exposes:
    - type: mcp
      namespace: data-ops
      port: 8080
      tools:
        - name: get-pipeline-task-failures
          description: "Query Snowflake task history for failed tasks in a given database and schema. Use to triage network data pipeline issues and SLA breaches."
          inputParameters:
            - name: database_name
              in: body
              type: string
              description: "The Snowflake database, e.g. ATT_NETWORK_ANALYTICS."
            - name: schema_name
              in: body
              type: string
              description: "The Snowflake schema, e.g. NETWORK_ETL."
            - name: lookback_hours
              in: body
              type: integer
              description: "Number of hours to look back in task history."
          call: "snowflake.query-task-history"
          with:
            database: "{{database_name}}"
            schema: "{{schema_name}}"
            hours: "{{lookback_hours}}"
          outputParameters:
            - name: failed_tasks
              type: array
              mapping: "$.data"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://att.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: task-history
          path: "/databases/{{database}}/schemas/{{schema}}/tasks/history"
          inputParameters:
            - name: database
              in: path
            - name: schema
              in: path
            - name: hours
              in: query
          operations:
            - name: query-task-history
              method: GET

Executes a predefined query against Snowflake to retrieve AT&T network usage statistics for a given region and date range.

naftiko: "0.5"
info:
  label: "Snowflake Network Usage Query"
  description: "Executes a predefined query against Snowflake to retrieve AT&T network usage statistics for a given region and date range."
  tags:
    - data
    - analytics
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: network-analytics
      port: 8080
      tools:
        - name: query-network-usage
          description: "Query network usage metrics from Snowflake by region and date range. Returns total traffic, peak utilization, and subscriber count."
          inputParameters:
            - name: region
              in: body
              type: string
              description: "The network region code."
            - name: start_date
              in: body
              type: string
              description: "Start date in ISO 8601."
            - name: end_date
              in: body
              type: string
              description: "End date in ISO 8601."
          call: "snowflake.execute-query"
          with:
            region: "{{region}}"
            start_date: "{{start_date}}"
            end_date: "{{end_date}}"
          outputParameters:
            - name: total_traffic_gb
              type: number
              mapping: "$.total_traffic_gb"
            - name: peak_utilization_pct
              type: number
              mapping: "$.peak_utilization_pct"
            - name: subscriber_count
              type: number
              mapping: "$.subscriber_count"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://att.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: execute-query
              method: POST

Executes a read-only Snowflake query to retrieve subscriber usage analytics for a given market segment.

naftiko: "0.5"
info:
  label: "Snowflake Subscriber Analytics Query"
  description: "Executes a read-only Snowflake query to retrieve subscriber usage analytics for a given market segment."
  tags:
    - analytics
    - data
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: subscriber-analytics
      port: 8080
      tools:
        - name: query-subscriber-usage
          description: "Given a market segment code, return the average data usage, peak hour, and subscriber count from Snowflake."
          inputParameters:
            - name: market_segment
              in: body
              type: string
              description: "Market segment code (e.g., SE-ATL, MW-CHI)."
          call: "snowflake.run-query"
          with:
            market_segment: "{{market_segment}}"
          outputParameters:
            - name: avg_data_gb
              type: number
              mapping: "$.data[0].avg_data_gb"
            - name: peak_hour
              type: string
              mapping: "$.data[0].peak_hour"
            - name: subscriber_count
              type: number
              mapping: "$.data[0].subscriber_count"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://att.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          inputParameters:
            - name: market_segment
              in: query
          operations:
            - name: run-query
              method: POST

Retrieves the health status, CPU load, and memory utilization of a network node monitored by SolarWinds at AT&T.

naftiko: "0.5"
info:
  label: "SolarWinds Node Health Check"
  description: "Retrieves the health status, CPU load, and memory utilization of a network node monitored by SolarWinds at AT&T."
  tags:
    - monitoring
    - network
    - solarwinds
capability:
  exposes:
    - type: mcp
      namespace: node-monitoring
      port: 8080
      tools:
        - name: get-node-health
          description: "Given a SolarWinds node ID, return the node status, CPU load percentage, and memory utilization percentage."
          inputParameters:
            - name: node_id
              in: body
              type: string
              description: "The SolarWinds node ID."
          call: "solarwinds.get-node"
          with:
            node_id: "{{node_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.Status"
            - name: cpu_load
              type: number
              mapping: "$.CPULoad"
            - name: memory_pct
              type: number
              mapping: "$.PercentMemoryUsed"
  consumes:
    - type: http
      namespace: solarwinds
      baseUri: "https://solarwinds.att.com:17778/SolarWinds/InformationService/v3/Json"
      authentication:
        type: basic
        username: "$secrets.solarwinds_user"
        password: "$secrets.solarwinds_password"
      resources:
        - name: nodes
          path: "/Query"
          inputParameters:
            - name: node_id
              in: query
          operations:
            - name: get-node
              method: GET

Executes a search query against AT&T Splunk logs to retrieve recent events matching specified criteria.

naftiko: "0.5"
info:
  label: "Splunk Log Search"
  description: "Executes a search query against AT&T Splunk logs to retrieve recent events matching specified criteria."
  tags:
    - security
    - observability
    - splunk
capability:
  exposes:
    - type: mcp
      namespace: log-search
      port: 8080
      tools:
        - name: search-logs
          description: "Search Splunk logs with a given SPL query. Returns matching events with timestamps and source."
          inputParameters:
            - name: search_query
              in: body
              type: string
              description: "The SPL search query."
            - name: time_range
              in: body
              type: string
              description: "Time range for the search."
          call: "splunk.search"
          with:
            search_query: "{{search_query}}"
            time_range: "{{time_range}}"
          outputParameters:
            - name: events
              type: string
              mapping: "$.results"
            - name: event_count
              type: number
              mapping: "$.result_count"
  consumes:
    - type: http
      namespace: splunk
      baseUri: "https://att-splunk.example.com:8089/services"
      authentication:
        type: bearer
        token: "$secrets.splunk_token"
      resources:
        - name: searches
          path: "/search/jobs"
          operations:
            - name: search
              method: POST

Searches Splunk for recent security events matching a given source IP address and returns the event count and severity breakdown.

naftiko: "0.5"
info:
  label: "Splunk Security Event Lookup"
  description: "Searches Splunk for recent security events matching a given source IP address and returns the event count and severity breakdown."
  tags:
    - security
    - siem
    - splunk
capability:
  exposes:
    - type: mcp
      namespace: security-events
      port: 8080
      tools:
        - name: search-events-by-ip
          description: "Given a source IP address, search Splunk for security events in the last 24 hours and return event count and top severity."
          inputParameters:
            - name: source_ip
              in: body
              type: string
              description: "The source IP address to investigate."
          call: "splunk.search"
          with:
            source_ip: "{{source_ip}}"
          outputParameters:
            - name: event_count
              type: number
              mapping: "$.results.event_count"
            - name: top_severity
              type: string
              mapping: "$.results.top_severity"
            - name: latest_event_time
              type: string
              mapping: "$.results.latest_time"
  consumes:
    - type: http
      namespace: splunk
      baseUri: "https://splunk.att.com:8089"
      authentication:
        type: bearer
        token: "$secrets.splunk_token"
      resources:
        - name: search
          path: "/services/search/jobs/export"
          inputParameters:
            - name: source_ip
              in: query
          operations:
            - name: search
              method: GET

Correlates Splunk security events with CrowdStrike threat intelligence, creates a ServiceNow security incident, and notifies the SOC via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Splunk Threat Intelligence Correlator"
  description: "Correlates Splunk security events with CrowdStrike threat intelligence, creates a ServiceNow security incident, and notifies the SOC via Microsoft Teams."
  tags:
    - security
    - threat-intelligence
    - splunk
    - crowdstrike
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: threat-correlation
      port: 8080
      tools:
        - name: correlate-threat-intel
          description: "Given a Splunk search ID with suspicious indicators, correlate with threat intel and escalate."
          inputParameters:
            - name: search_id
              in: body
              type: string
              description: "Splunk search job ID."
            - name: indicator
              in: body
              type: string
              description: "The threat indicator (IP, hash, or domain)."
          steps:
            - name: get-splunk-results
              type: call
              call: "splunk.get-search-results"
              with:
                search_id: "{{search_id}}"
            - name: check-threat-intel
              type: call
              call: "crowdstrike.check-indicator"
              with:
                indicator: "{{indicator}}"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Threat intel match: {{indicator}}"
                urgency: "1"
                description: "Splunk hits: {{get-splunk-results.event_count}}. CrowdStrike verdict: {{check-threat-intel.verdict}}"
            - name: alert-soc
              type: call
              call: "teams.post-message"
              with:
                channel_id: "soc-alerts"
                text: "Threat intel match: {{indicator}}. Verdict: {{check-threat-intel.verdict}}. ServiceNow: {{create-incident.number}}"
  consumes:
    - type: http
      namespace: splunk
      baseUri: "https://splunk.att.com:8089"
      authentication:
        type: bearer
        token: "$secrets.splunk_token"
      resources:
        - name: search
          path: "/services/search/jobs/{{search_id}}/results"
          operations:
            - name: get-search-results
              method: GET
    - type: http
      namespace: crowdstrike
      baseUri: "https://api.crowdstrike.com"
      authentication:
        type: bearer
        token: "$secrets.crowdstrike_token"
      resources:
        - name: intel
          path: "/intel/combined/indicators/v1"
          operations:
            - name: check-indicator
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://att.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: teams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.teams_token"
      resources:
        - name: messages
          path: "/teams/channels/messages"
          operations:
            - name: post-message
              method: POST

Creates a new Terraform Cloud workspace for AT&T network or infrastructure projects and notifies the infrastructure team in Slack.

naftiko: "0.5"
info:
  label: "Terraform Cloud Network Infrastructure Provisioning"
  description: "Creates a new Terraform Cloud workspace for AT&T network or infrastructure projects and notifies the infrastructure team in Slack."
  tags:
    - cloud
    - infrastructure
    - terraform
    - devops
    - slack
capability:
  exposes:
    - type: mcp
      namespace: infra-provisioning
      port: 8080
      tools:
        - name: provision-terraform-workspace
          description: "Given a project name and environment, create a Terraform Cloud workspace for AT&T infrastructure and notify the infrastructure Slack channel."
          inputParameters:
            - name: project_name
              in: body
              type: string
              description: "The project name, e.g. 5g-network-probe or fiber-monitoring."
            - name: environment
              in: body
              type: string
              description: "The deployment environment: dev, staging, or prod."
          steps:
            - name: create-workspace
              type: call
              call: "terraform.create-workspace"
              with:
                org: "att"
                name: "{{project_name}}-{{environment}}"
            - name: notify-infra
              type: call
              call: "slack-tf.post-message"
              with:
                channel: "#infrastructure-team"
                text: "Terraform workspace created: {{project_name}}-{{environment}}. ID: {{create-workspace.workspace_id}}."
  consumes:
    - type: http
      namespace: terraform
      baseUri: "https://app.terraform.io/api/v2"
      authentication:
        type: bearer
        token: "$secrets.terraform_token"
      resources:
        - name: workspaces
          path: "/organizations/{{org}}/workspaces"
          inputParameters:
            - name: org
              in: path
          operations:
            - name: create-workspace
              method: POST
    - type: http
      namespace: slack-tf
      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 infrastructure drift in Terraform Cloud, creates a Jira ticket for the platform team, triggers a remediation plan, and notifies via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Terraform Drift Detection Remediation"
  description: "Detects infrastructure drift in Terraform Cloud, creates a Jira ticket for the platform team, triggers a remediation plan, and notifies via Microsoft Teams."
  tags:
    - infrastructure
    - terraform
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: infra-drift
      port: 8080
      tools:
        - name: handle-terraform-drift
          description: "Given a Terraform workspace name with detected drift, initiate remediation workflow."
          inputParameters:
            - name: workspace_name
              in: body
              type: string
              description: "Terraform Cloud workspace name."
            - name: drift_summary
              in: body
              type: string
              description: "Summary of detected drift."
          steps:
            - name: get-workspace
              type: call
              call: "terraform.get-workspace"
              with:
                workspace_name: "{{workspace_name}}"
            - name: create-ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "INFRA"
                summary: "Terraform drift: {{workspace_name}}"
                description: "{{drift_summary}}. Workspace ID: {{get-workspace.id}}"
            - name: trigger-plan
              type: call
              call: "terraform.create-run"
              with:
                workspace_id: "{{get-workspace.id}}"
                message: "Drift remediation — Jira: {{create-ticket.key}}"
            - name: notify-team
              type: call
              call: "teams.post-message"
              with:
                channel_id: "platform-engineering"
                text: "Terraform drift in {{workspace_name}}. Jira: {{create-ticket.key}}. Run: {{trigger-plan.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/att/workspaces/{{workspace_name}}"
          operations:
            - name: get-workspace
              method: GET
        - name: runs
          path: "/runs"
          operations:
            - name: create-run
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://att.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: teams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.teams_token"
      resources:
        - name: messages
          path: "/teams/channels/messages"
          operations:
            - name: post-message
              method: POST

Retrieves the current state and last run status of a Terraform Cloud workspace used by AT&T infrastructure teams.

naftiko: "0.5"
info:
  label: "Terraform Workspace Status Lookup"
  description: "Retrieves the current state and last run status of a Terraform Cloud workspace used by AT&T infrastructure teams."
  tags:
    - infrastructure
    - terraform
capability:
  exposes:
    - type: mcp
      namespace: iac-workspaces
      port: 8080
      tools:
        - name: get-workspace-status
          description: "Check a Terraform Cloud workspace status. Returns current state version, last run status, and resource count."
          inputParameters:
            - name: workspace_id
              in: body
              type: string
              description: "The Terraform workspace ID."
          call: "terraform.get-workspace"
          with:
            workspace_id: "{{workspace_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.data.attributes.current-run.status"
            - 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: workspaces
          path: "/workspaces/{{workspace_id}}"
          inputParameters:
            - name: workspace_id
              in: path
          operations:
            - name: get-workspace
              method: GET

When Datadog detects VoIP quality degradation, retrieves call quality metrics, creates a ServiceNow incident, and pages the voice engineering team through PagerDuty.

naftiko: "0.5"
info:
  label: "VoIP Quality Degradation Response"
  description: "When Datadog detects VoIP quality degradation, retrieves call quality metrics, creates a ServiceNow incident, and pages the voice engineering team through PagerDuty."
  tags:
    - voice
    - voip
    - datadog
    - servicenow
    - pagerduty
capability:
  exposes:
    - type: mcp
      namespace: voice-quality
      port: 8080
      tools:
        - name: handle-voip-degradation
          description: "Given a Datadog alert ID for VoIP quality, initiate the quality degradation response workflow."
          inputParameters:
            - name: alert_id
              in: body
              type: string
              description: "Datadog monitor alert ID."
            - name: region
              in: body
              type: string
              description: "Affected geographic region."
          steps:
            - name: get-alert-details
              type: call
              call: "datadog.get-monitor"
              with:
                alert_id: "{{alert_id}}"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "VoIP quality degradation — {{region}}"
                urgency: "2"
                description: "{{get-alert-details.message}}"
            - name: page-voice-team
              type: call
              call: "pagerduty.create-incident"
              with:
                service_id: "voice-engineering"
                title: "VoIP degradation: {{region}} — ServiceNow: {{create-incident.number}}"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: monitors
          path: "/monitor/{{alert_id}}"
          operations:
            - name: get-monitor
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://att.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: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: bearer
        token: "$secrets.pagerduty_token"
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: create-incident
              method: POST

When spectrum utilization exceeds threshold, retrieves metrics from Datadog, creates a capacity planning Jira ticket, and alerts the RF engineering team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Wireless Spectrum Capacity Planner"
  description: "When spectrum utilization exceeds threshold, retrieves metrics from Datadog, creates a capacity planning Jira ticket, and alerts the RF engineering team via Microsoft Teams."
  tags:
    - network
    - 5g
    - spectrum
    - datadog
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: spectrum-planning
      port: 8080
      tools:
        - name: handle-spectrum-capacity
          description: "Given a cell site ID and current spectrum utilization, assess capacity and initiate planning workflow."
          inputParameters:
            - name: cell_site_id
              in: body
              type: string
              description: "The cell site identifier."
            - name: utilization_pct
              in: body
              type: number
              description: "Current spectrum utilization percentage."
          steps:
            - name: get-site-metrics
              type: call
              call: "datadog.get-site-metrics"
              with:
                cell_site_id: "{{cell_site_id}}"
            - name: create-planning-ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "RFPLAN"
                summary: "Spectrum capacity review: site {{cell_site_id}} at {{utilization_pct}}%"
                issue_type: "Task"
                description: "Peak throughput: {{get-site-metrics.peak_throughput}}"
            - name: notify-rf-team
              type: call
              call: "teams.post-message"
              with:
                channel_id: "rf-engineering"
                text: "Spectrum alert: Site {{cell_site_id}} at {{utilization_pct}}%. Jira: {{create-planning-ticket.key}}"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: metrics
          path: "/query"
          operations:
            - name: get-site-metrics
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://att.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: teams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.teams_token"
      resources:
        - name: messages
          path: "/teams/channels/messages"
          operations:
            - name: post-message
              method: POST

Looks up the compensation band range and midpoint for a given job profile code in Workday.

naftiko: "0.5"
info:
  label: "Workday Compensation Band Lookup"
  description: "Looks up the compensation band range and midpoint for a given job profile code in Workday."
  tags:
    - hr
    - compensation
    - workday
capability:
  exposes:
    - type: mcp
      namespace: compensation
      port: 8080
      tools:
        - name: get-comp-band
          description: "Given a Workday job profile code, return the compensation band minimum, midpoint, and maximum."
          inputParameters:
            - name: job_profile_code
              in: body
              type: string
              description: "The Workday job profile code."
          call: "workday.get-compensation-band"
          with:
            job_profile_code: "{{job_profile_code}}"
          outputParameters:
            - name: band_min
              type: number
              mapping: "$.Compensation_Band.Minimum"
            - name: band_mid
              type: number
              mapping: "$.Compensation_Band.Midpoint"
            - name: band_max
              type: number
              mapping: "$.Compensation_Band.Maximum"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/att"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: compensation
          path: "/compensationBands/{{job_profile_code}}"
          inputParameters:
            - name: job_profile_code
              in: path
          operations:
            - name: get-compensation-band
              method: GET

Retrieves employee profile details from Workday including role, department, and manager for AT&T workforce queries.

naftiko: "0.5"
info:
  label: "Workday Employee Directory Lookup"
  description: "Retrieves employee profile details from Workday including role, department, and manager for AT&T workforce queries."
  tags:
    - hr
    - workday
capability:
  exposes:
    - type: mcp
      namespace: hr-directory
      port: 8080
      tools:
        - name: get-employee-profile
          description: "Look up an AT&T employee profile by worker ID. Returns name, title, department, and manager."
          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: "$.Full_Name"
            - name: title
              type: string
              mapping: "$.Job_Title"
            - name: department
              type: string
              mapping: "$.Department"
  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: "/att/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET

When an employee department transfer is detected in Workday, updates Okta group memberships, adjusts ServiceNow CMDB assignments, and notifies the manager via Teams.

naftiko: "0.5"
info:
  label: "Workday Org Change Access Sync"
  description: "When an employee department transfer is detected in Workday, updates Okta group memberships, adjusts ServiceNow CMDB assignments, and notifies the manager via Teams."
  tags:
    - hr
    - identity
    - workday
    - okta
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: org-change-sync
      port: 8080
      tools:
        - name: sync-org-change
          description: "Given an employee ID with a department change, sync access across systems."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "Workday employee ID."
            - name: new_department
              in: body
              type: string
              description: "New department name."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                employee_id: "{{employee_id}}"
            - name: update-okta-groups
              type: call
              call: "okta.update-user-groups"
              with:
                user_email: "{{get-employee.email}}"
                department: "{{new_department}}"
            - name: update-cmdb
              type: call
              call: "servicenow.update-user-department"
              with:
                user_email: "{{get-employee.email}}"
                department: "{{new_department}}"
            - name: notify-manager
              type: call
              call: "teams.post-message"
              with:
                channel_id: "hr-notifications"
                text: "Org change processed: {{get-employee.name}} moved to {{new_department}}. Okta groups and ServiceNow updated."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/att"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{employee_id}}"
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: okta
      baseUri: "https://att.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: groups
          path: "/users/{{user_email}}/groups"
          operations:
            - name: update-user-groups
              method: PUT
    - type: http
      namespace: servicenow
      baseUri: "https://att.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: users
          path: "/table/sys_user"
          operations:
            - name: update-user-department
              method: PATCH
    - type: http
      namespace: teams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.teams_token"
      resources:
        - name: messages
          path: "/teams/channels/messages"
          operations:
            - name: post-message
              method: POST

When an employee changes roles in Workday, updates their Okta group memberships and notifies the new manager via Slack.

naftiko: "0.5"
info:
  label: "Workday Role Change Provisioning"
  description: "When an employee changes roles in Workday, updates their Okta group memberships and notifies the new manager via Slack."
  tags:
    - hr
    - identity
    - workday
    - okta
    - slack
capability:
  exposes:
    - type: mcp
      namespace: hr-role-change
      port: 8080
      tools:
        - name: sync-role-change
          description: "Given a Workday employee ID and new role details, update Okta group assignments and notify the new manager via Slack."
          inputParameters:
            - name: workday_employee_id
              in: body
              type: string
              description: "The Workday worker ID for the employee changing roles."
            - name: new_role
              in: body
              type: string
              description: "The new job role or title."
            - name: new_manager_slack_id
              in: body
              type: string
              description: "The Slack user ID of the new manager."
          steps:
            - name: get-worker
              type: call
              call: "workday-role.get-worker"
              with:
                worker_id: "{{workday_employee_id}}"
            - name: update-okta-groups
              type: call
              call: "okta-role.update-user-groups"
              with:
                user_id: "{{get-worker.okta_user_id}}"
                department: "{{get-worker.new_department}}"
            - name: notify-new-manager
              type: call
              call: "slack-role.post-message"
              with:
                channel: "{{new_manager_slack_id}}"
                text: "{{get-worker.full_name}} has joined your team in role: {{new_role}}. Okta access updated."
  consumes:
    - type: http
      namespace: workday-role
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/att/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: okta-role
      baseUri: "https://att.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: users
          path: "/users/{{user_id}}/groups"
          inputParameters:
            - name: user_id
              in: path
          operations:
            - name: update-user-groups
              method: PUT
    - type: http
      namespace: slack-role
      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 details and current status of an AT&T customer support ticket from Zendesk.

naftiko: "0.5"
info:
  label: "Zendesk Customer Ticket Lookup"
  description: "Retrieves the details and current status of an AT&T customer support ticket from Zendesk."
  tags:
    - customer-support
    - zendesk
capability:
  exposes:
    - type: mcp
      namespace: customer-tickets
      port: 8080
      tools:
        - name: get-ticket
          description: "Given a Zendesk ticket ID, return the subject, status, priority, and requester name."
          inputParameters:
            - name: ticket_id
              in: body
              type: string
              description: "The Zendesk ticket ID."
          call: "zendesk.get-ticket"
          with:
            ticket_id: "{{ticket_id}}"
          outputParameters:
            - name: subject
              type: string
              mapping: "$.ticket.subject"
            - name: status
              type: string
              mapping: "$.ticket.status"
            - name: priority
              type: string
              mapping: "$.ticket.priority"
            - name: requester_name
              type: string
              mapping: "$.ticket.requester.name"
  consumes:
    - type: http
      namespace: zendesk
      baseUri: "https://att.zendesk.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.zendesk_token"
      resources:
        - name: tickets
          path: "/tickets/{{ticket_id}}"
          inputParameters:
            - name: ticket_id
              in: path
          operations:
            - name: get-ticket
              method: GET

Retrieves details of an upcoming or past Zoom meeting for AT&T employees.

naftiko: "0.5"
info:
  label: "Zoom Meeting Details Lookup"
  description: "Retrieves details of an upcoming or past Zoom meeting for AT&T employees."
  tags:
    - communications
    - zoom
capability:
  exposes:
    - type: mcp
      namespace: meetings
      port: 8080
      tools:
        - name: get-meeting-details
          description: "Look up a Zoom meeting by ID. Returns topic, start time, duration, and participant count."
          inputParameters:
            - name: meeting_id
              in: body
              type: string
              description: "The Zoom meeting ID."
          call: "zoom.get-meeting"
          with:
            meeting_id: "{{meeting_id}}"
          outputParameters:
            - name: topic
              type: string
              mapping: "$.topic"
            - name: start_time
              type: string
              mapping: "$.start_time"
            - name: duration
              type: number
              mapping: "$.duration"
  consumes:
    - type: http
      namespace: zoom
      baseUri: "https://api.zoom.us/v2"
      authentication:
        type: bearer
        token: "$secrets.zoom_token"
      resources:
        - name: meetings
          path: "/meetings/{{meeting_id}}"
          inputParameters:
            - name: meeting_id
              in: path
          operations:
            - name: get-meeting
              method: GET