Alaska Airlines Capabilities

Naftiko 0.5 capability definitions for Alaska Airlines - 100 capabilities showing integration workflows and service orchestrations.

Sort
Expand

Queries Workday for employees with elevated system access roles and cross-checks Entra ID group memberships to identify access requiring recertification. Creates Jira review tasks for the security team for each exception found.

naftiko: "0.5"
info:
  label: "Access Certification Review"
  description: "Queries Workday for employees with elevated system access roles and cross-checks Entra ID group memberships to identify access requiring recertification. Creates Jira review tasks for the security team for each exception found."
  tags:
    - security
    - identity
    - access-management
    - workday
    - microsoft-entra
    - jira
capability:
  exposes:
    - type: mcp
      namespace: access-review
      port: 8080
      tools:
        - name: run-access-certification
          description: "Given an Entra ID group ID and department scope, retrieve group memberships, validate against Workday job roles, and create Jira review tasks for access mismatches. Use for quarterly access certification campaigns."
          inputParameters:
            - name: group_id
              in: body
              type: string
              description: "The Entra ID group ID to certify (e.g., grp-alaska-sabre-admin)."
            - name: department
              in: body
              type: string
              description: "The Alaska Airlines department scope for the review."
          steps:
            - name: get-group-members
              type: call
              call: "entra-access.get-group-members"
              with:
                group_id: "{{group_id}}"
            - name: get-workday-roles
              type: call
              call: "workday-access.get-workers"
              with:
                department: "{{department}}"
            - name: create-review-task
              type: call
              call: "jira-access.create-issue"
              with:
                project_key: "SEC"
                summary: "Access certification: {{group_id}} — {{department}}"
                description: "{{get-group-members.member_count}} members require access recertification in {{department}}."
                issue_type: "Task"
  consumes:
    - type: http
      namespace: entra-access
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: group-members
          path: "/groups/{{group_id}}/members"
          inputParameters:
            - name: group_id
              in: path
          operations:
            - name: get-group-members
              method: GET
    - type: http
      namespace: workday-access
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/alaska-airlines/workers"
          inputParameters:
            - name: department
              in: query
          operations:
            - name: get-workers
              method: GET
    - type: http
      namespace: jira-access
      baseUri: "https://alaska-airlines.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issue
          path: "/issue"
          inputParameters:
            - name: project_key
              in: body
            - name: summary
              in: body
            - name: description
              in: body
            - name: issue_type
              in: body
          operations:
            - name: create-issue
              method: POST

When a major irregular operation (IRROP) event is detected, sends flight disruption details to Anthropic Claude for recovery option summarization, and posts recommended re-accommodation options to the Salesforce Service Cloud case and the operations Teams channel.

naftiko: "0.5"
info:
  label: "AI-Assisted Passenger Disruption Triage"
  description: "When a major irregular operation (IRROP) event is detected, sends flight disruption details to Anthropic Claude for recovery option summarization, and posts recommended re-accommodation options to the Salesforce Service Cloud case and the operations Teams channel."
  tags:
    - ai
    - customer-service
    - anthropic
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: irrop-ai
      port: 8080
      tools:
        - name: triage-passenger-disruption
          description: "Given a Salesforce case ID and flight disruption details, send disruption context to Anthropic Claude for recovery option summarization, update the Salesforce case with recommendations, and notify the ops team in Teams. Use during IRROP events to accelerate re-accommodation decisions."
          inputParameters:
            - name: case_id
              in: body
              type: string
              description: "The Salesforce service case ID for the disrupted passenger."
            - name: disruption_details
              in: body
              type: string
              description: "A description of the disruption event (cancelled flight, delay duration, affected routes)."
            - name: passenger_tier
              in: body
              type: string
              description: "The passenger's Mileage Plan elite tier (MVP, MVP Gold, MVP Gold 75K)."
          steps:
            - name: summarize-with-claude
              type: call
              call: "anthropic-irrop.create-message"
              with:
                model: "claude-opus-4-5"
                max_tokens: 512
                messages: "[{\"role\":\"user\",\"content\":\"Summarize top 3 re-accommodation options for a {{passenger_tier}} passenger given this IRROP: {{disruption_details}}\"}]"
            - name: update-salesforce-case
              type: call
              call: "salesforce-irrop.update-case"
              with:
                case_id: "{{case_id}}"
                recovery_options: "{{summarize-with-claude.content}}"
            - name: notify-ops-team
              type: call
              call: "msteams-irrop.send-message"
              with:
                channel_id: "operations-irrop"
                message: "IRROP triage complete for case {{case_id}} ({{passenger_tier}}). Recovery options updated in Salesforce."
  consumes:
    - type: http
      namespace: anthropic-irrop
      baseUri: "https://api.anthropic.com/v1"
      authentication:
        type: apikey
        key: "x-api-key"
        value: "$secrets.anthropic_api_key"
        placement: header
      resources:
        - name: message
          path: "/messages"
          inputParameters:
            - name: model
              in: body
            - name: max_tokens
              in: body
            - name: messages
              in: body
          operations:
            - name: create-message
              method: POST
    - type: http
      namespace: salesforce-irrop
      baseUri: "https://alaska-airlines.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: case
          path: "/sobjects/Case/{{case_id}}"
          inputParameters:
            - name: case_id
              in: path
            - name: recovery_options
              in: body
          operations:
            - name: update-case
              method: PATCH
    - type: http
      namespace: msteams-irrop
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: message
          path: "/teams/{{channel_id}}/channels/messages"
          inputParameters:
            - name: channel_id
              in: path
            - name: message
              in: body
          operations:
            - name: send-message
              method: POST

Tracks component lifecycle by pulling installation data from Oracle ERP, usage metrics from Snowflake, and creating Jira maintenance tasks when limits approach.

naftiko: "0.5"
info:
  label: "Aircraft Component Lifecycle Tracker"
  description: "Tracks component lifecycle by pulling installation data from Oracle ERP, usage metrics from Snowflake, and creating Jira maintenance tasks when limits approach."
  tags:
    - maintenance
    - oracle-erp
    - snowflake
    - jira
capability:
  exposes:
    - type: mcp
      namespace: maintenance
      port: 8080
      tools:
        - name: track_component_lifecycle
          description: "Given a part number, check lifecycle status and create tasks if needed."
          inputParameters:
            - name: part_number
              in: body
              type: string
              description: "The component part number."
          steps:
            - name: get-install-data
              type: call
              call: "oracle-erp.get-component"
              with:
                part_number: "{{part_number}}"
            - name: get-usage
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT flight_hours, cycles, remaining_life_pct FROM component_usage WHERE part_number = '{{part_number}}'"
            - name: create-task
              type: call
              call: "jira.create-issue"
              with:
                project: "MX"
                summary: "Component lifecycle: {{part_number}} at {{get-usage.data[0].REMAINING_LIFE_PCT}}% remaining"
                issuetype: "Task"
  consumes:
    - type: http
      namespace: oracle-erp
      baseUri: "https://alaska-erp.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: basic
        username: "$secrets.oracle_erp_user"
        password: "$secrets.oracle_erp_pass"
      resources:
        - name: components
          path: "/fixedAssets/components/{{part_number}}"
          inputParameters:
            - name: part_number
              in: path
          operations:
            - name: get-component
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://alaska.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://alaska-airlines.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

Prepares aircraft lease return documentation by retrieving maintenance records from Oracle ERP, compliance data from Snowflake, and uploading the package to SharePoint.

naftiko: "0.5"
info:
  label: "Aircraft Lease Return Preparation"
  description: "Prepares aircraft lease return documentation by retrieving maintenance records from Oracle ERP, compliance data from Snowflake, and uploading the package to SharePoint."
  tags:
    - fleet
    - oracle-erp
    - snowflake
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: fleet
      port: 8080
      tools:
        - name: prepare_lease_return
          description: "Given a tail number, compile lease return documentation package."
          inputParameters:
            - name: tail_number
              in: body
              type: string
              description: "The aircraft tail number."
          steps:
            - name: get-maintenance
              type: call
              call: "oracle-erp.get-maintenance-history"
              with:
                asset_id: "{{tail_number}}"
            - name: get-compliance
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT ad_number, compliance_date, status FROM ad_compliance WHERE tail_number = '{{tail_number}}'"
            - name: upload-package
              type: call
              call: "sharepoint.upload-file"
              with:
                folder: "Fleet/LeaseReturns/{{tail_number}}"
                filename: "lease_return_package.json"
                content: "Maintenance records: {{get-maintenance.count}}. AD compliance items: {{get-compliance.row_count}}"
  consumes:
    - type: http
      namespace: oracle-erp
      baseUri: "https://alaska-erp.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: basic
        username: "$secrets.oracle_erp_user"
        password: "$secrets.oracle_erp_pass"
      resources:
        - name: maintenance
          path: "/fixedAssets/{{asset_id}}/maintenance"
          inputParameters:
            - name: asset_id
              in: path
          operations:
            - name: get-maintenance-history
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://alaska.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites/alaskaair.sharepoint.com"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: files
          path: "/drive/root:/{{folder}}/{{filename}}:/content"
          inputParameters:
            - name: folder
              in: path
            - name: filename
              in: path
          operations:
            - name: upload-file
              method: PUT

Syncs aircraft maintenance work orders between the MRO system and ServiceNow, creates Jira tasks for engineering review, and notifies maintenance teams via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Aircraft Maintenance Work Order Sync"
  description: "Syncs aircraft maintenance work orders between the MRO system and ServiceNow, creates Jira tasks for engineering review, and notifies maintenance teams via Microsoft Teams."
  tags:
    - maintenance
    - mro
    - servicenow
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: maintenance
      port: 8080
      tools:
        - name: sync-maintenance-order
          description: "Given an aircraft tail number and work order ID, sync MRO data to ServiceNow, create Jira task, and notify maintenance."
          inputParameters:
            - name: work_order_id
              in: body
              type: string
              description: "The maintenance work order ID."
          steps:
            - name: get-work-order
              type: call
              call: servicenow.get-work-order
              with:
                work_order_id: "{{work_order_id}}"
            - name: create-task
              type: call
              call: jira.create-issue
              with:
                project_key: "MRO"
                summary: "Review: WO {{work_order_id}}"
                issue_type: "Task"
            - name: notify-team
              type: call
              call: msteams.send-message
              with:
                channel_id: "$secrets.teams_maintenance_channel_id"
                text: "MAINTENANCE: WO {{work_order_id}} synced. Jira: {{create-task.key}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://alaskaairlines.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: jira
      baseUri: "https://alaska-airlines.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Audits weight and balance records by retrieving load data from Snowflake, comparing with aircraft limits from Oracle ERP, and flagging exceptions in a Jira ticket.

naftiko: "0.5"
info:
  label: "Aircraft Weight and Balance Audit"
  description: "Audits weight and balance records by retrieving load data from Snowflake, comparing with aircraft limits from Oracle ERP, and flagging exceptions in a Jira ticket."
  tags:
    - safety
    - snowflake
    - oracle-erp
    - jira
capability:
  exposes:
    - type: mcp
      namespace: safety
      port: 8080
      tools:
        - name: audit_weight_balance
          description: "Given a tail number and date range, audit weight and balance compliance."
          inputParameters:
            - name: tail_number
              in: body
              type: string
              description: "The aircraft tail number."
            - name: date_from
              in: body
              type: string
              description: "Start date."
          steps:
            - name: get-load-data
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT flight_number, takeoff_weight, max_weight, cg_position FROM weight_balance WHERE tail_number = '{{tail_number}}' AND flight_date >= '{{date_from}}'"
            - name: get-limits
              type: call
              call: "oracle-erp.get-aircraft-limits"
              with:
                tail_number: "{{tail_number}}"
            - name: flag-exceptions
              type: call
              call: "jira.create-issue"
              with:
                project: "SAFETY"
                summary: "W&B audit: {{tail_number}} - {{get-load-data.row_count}} flights reviewed"
                issuetype: "Task"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://alaska.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: oracle-erp
      baseUri: "https://alaska-erp.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: basic
        username: "$secrets.oracle_erp_user"
        password: "$secrets.oracle_erp_pass"
      resources:
        - name: aircraft
          path: "/fixedAssets/{{tail_number}}/limits"
          inputParameters:
            - name: tail_number
              in: path
          operations:
            - name: get-aircraft-limits
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://alaska-airlines.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

Coordinates deicing resources by checking weather forecasts and flight schedules in Snowflake, posting resource requirements to the station operations Teams channel and creating a ServiceNow request.

naftiko: "0.5"
info:
  label: "Airport Deicing Resource Coordinator"
  description: "Coordinates deicing resources by checking weather forecasts and flight schedules in Snowflake, posting resource requirements to the station operations Teams channel and creating a ServiceNow request."
  tags:
    - flight-operations
    - snowflake
    - microsoft-teams
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: flight-operations
      port: 8080
      tools:
        - name: coordinate_deicing
          description: "Given a station, check deicing requirements and coordinate resources."
          inputParameters:
            - name: station
              in: body
              type: string
              description: "The station IATA code."
          steps:
            - name: get-requirements
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT departures_count, temp_forecast, precipitation_type FROM deicing_forecast WHERE station = '{{station}}' AND forecast_date = CURRENT_DATE()"
            - name: post-requirements
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "station-ops-{{station}}"
                message: "Deicing forecast {{station}}: {{get-requirements.data[0].DEPARTURES_COUNT}} departures. Temp: {{get-requirements.data[0].TEMP_FORECAST}}. Precip: {{get-requirements.data[0].PRECIPITATION_TYPE}}"
            - name: create-request
              type: call
              call: "servicenow.create-request"
              with:
                short_description: "Deicing resources: {{station}}"
                category: "ground_ops"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://alaska.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/station-ops/channels/general/messages"
          operations:
            - name: send-message
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://alaskaair.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_pass"
      resources:
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST

Monitors lounge capacity by querying guest counts from Snowflake, checking Mileage Plan tier eligibility in Salesforce, and posting capacity alerts to the lounge operations Slack channel.

naftiko: "0.5"
info:
  label: "Airport Lounge Capacity Monitor"
  description: "Monitors lounge capacity by querying guest counts from Snowflake, checking Mileage Plan tier eligibility in Salesforce, and posting capacity alerts to the lounge operations Slack channel."
  tags:
    - customer-service
    - snowflake
    - salesforce
    - slack
capability:
  exposes:
    - type: mcp
      namespace: customer-service
      port: 8080
      tools:
        - name: monitor_lounge_capacity
          description: "Given a station, check current lounge occupancy and upcoming eligible guests."
          inputParameters:
            - name: station
              in: body
              type: string
              description: "The airport station code."
          steps:
            - name: get-occupancy
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT current_guests, capacity, pct_full FROM lounge_occupancy WHERE station = '{{station}}'"
            - name: get-upcoming
              type: call
              call: "salesforce.get-eligible-pax"
              with:
                station: "{{station}}"
            - name: alert-ops
              type: call
              call: "slack.post-message"
              with:
                channel: "lounge-ops"
                text: "Lounge {{station}}: {{get-occupancy.data[0].CURRENT_GUESTS}}/{{get-occupancy.data[0].CAPACITY}} ({{get-occupancy.data[0].PCT_FULL}}%). Upcoming eligible: {{get-upcoming.count}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://alaska.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://alaskaair.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: eligible
          path: "/query?q=SELECT+Count+FROM+Booking__c+WHERE+Station__c='{{station}}'+AND+Tier__c+IN+('MVP+Gold','75K')"
          inputParameters:
            - name: station
              in: query
          operations:
            - name: get-eligible-pax
              method: GET
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Optimizes station staffing by pulling flight schedules from Snowflake, checking available staff in Workday, and posting recommendations to the station managers Slack channel.

naftiko: "0.5"
info:
  label: "Airport Station Staffing Optimizer"
  description: "Optimizes station staffing by pulling flight schedules from Snowflake, checking available staff in Workday, and posting recommendations to the station managers Slack channel."
  tags:
    - flight-operations
    - snowflake
    - workday
    - slack
capability:
  exposes:
    - type: mcp
      namespace: flight-operations
      port: 8080
      tools:
        - name: optimize_station_staffing
          description: "Given a station and date, optimize staffing levels."
          inputParameters:
            - name: station
              in: body
              type: string
              description: "The station IATA code."
            - name: date
              in: body
              type: string
              description: "Date in YYYY-MM-DD."
          steps:
            - name: get-schedule
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT hour_block, flight_count, pax_total FROM hourly_schedule WHERE station = '{{station}}' AND ops_date = '{{date}}'"
            - name: get-staff
              type: call
              call: "workday.get-station-staff"
              with:
                station: "{{station}}"
                date: "{{date}}"
            - name: post-recommendations
              type: call
              call: "slack.post-message"
              with:
                channel: "station-mgrs-{{station}}"
                text: "Staffing for {{station}} on {{date}}: Peak flights: {{get-schedule.max_flights}}. Available staff: {{get-staff.available_count}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://alaska.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: staff
          path: "/alaska/staffing?station={{station}}&date={{date}}"
          inputParameters:
            - name: station
              in: query
            - name: date
              in: query
          operations:
            - name: get-station-staff
              method: GET
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Optimizes cargo revenue by querying capacity utilization from Snowflake, checking booking requests in Salesforce, and posting optimization suggestions to the cargo Slack channel.

naftiko: "0.5"
info:
  label: "Cargo Revenue Optimization"
  description: "Optimizes cargo revenue by querying capacity utilization from Snowflake, checking booking requests in Salesforce, and posting optimization suggestions to the cargo Slack channel."
  tags:
    - commercial
    - snowflake
    - salesforce
    - slack
capability:
  exposes:
    - type: mcp
      namespace: commercial
      port: 8080
      tools:
        - name: optimize_cargo_revenue
          description: "Given a route, analyze cargo capacity and booking requests for optimization."
          inputParameters:
            - name: route
              in: body
              type: string
              description: "The route (e.g., SEA-ANC)."
          steps:
            - name: get-capacity
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT available_weight_kg, utilization_pct, revenue_per_kg FROM cargo_capacity WHERE route = '{{route}}'"
            - name: get-bookings
              type: call
              call: "salesforce.get-cargo-requests"
              with:
                route: "{{route}}"
            - name: post-suggestions
              type: call
              call: "slack.post-message"
              with:
                channel: "cargo-revenue"
                text: "Cargo {{route}}: Utilization {{get-capacity.data[0].UTILIZATION_PCT}}%. Pending requests: {{get-bookings.count}}. Revenue/kg: ${{get-capacity.data[0].REVENUE_PER_KG}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://alaska.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://alaskaair.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: cargo
          path: "/query?q=SELECT+Id+FROM+Cargo_Request__c+WHERE+Route__c='{{route}}'+AND+Status__c='Pending'"
          inputParameters:
            - name: route
              in: query
          operations:
            - name: get-cargo-requests
              method: GET
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Optimizes catering orders by retrieving passenger counts from Snowflake, checking dietary preferences in Salesforce, and sending optimized orders to the catering Slack channel.

naftiko: "0.5"
info:
  label: "Catering Order Optimization"
  description: "Optimizes catering orders by retrieving passenger counts from Snowflake, checking dietary preferences in Salesforce, and sending optimized orders to the catering Slack channel."
  tags:
    - flight-operations
    - snowflake
    - salesforce
    - slack
capability:
  exposes:
    - type: mcp
      namespace: flight-operations
      port: 8080
      tools:
        - name: optimize_catering
          description: "Given a flight number and date, optimize the catering order."
          inputParameters:
            - name: flight_number
              in: body
              type: string
              description: "The flight number."
          steps:
            - name: get-pax-count
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT pax_count, first_class, premium FROM bookings WHERE flight_number = '{{flight_number}}'"
            - name: get-preferences
              type: call
              call: "salesforce.get-dietary-prefs"
              with:
                flight: "{{flight_number}}"
            - name: send-order
              type: call
              call: "slack.post-message"
              with:
                channel: "catering-ops"
                text: "Catering for {{flight_number}}: {{get-pax-count.data[0].PAX_COUNT}} pax. Special meals: {{get-preferences.special_count}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://alaska.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://alaskaair.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: dietary
          path: "/query?q=SELECT+Count+FROM+Dietary_Preference__c+WHERE+Flight__c='{{flight}}'"
          inputParameters:
            - name: flight
              in: query
          operations:
            - name: get-dietary-prefs
              method: GET
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

When a GitHub Actions pipeline fails on a critical airline systems repository, creates a Jira incident ticket, alerts the platform engineering team in Microsoft Teams, and logs the event in Datadog. Ensures rapid response to software build failures.

naftiko: "0.5"
info:
  label: "CI/CD Pipeline Failure Response"
  description: "When a GitHub Actions pipeline fails on a critical airline systems repository, creates a Jira incident ticket, alerts the platform engineering team in Microsoft Teams, and logs the event in Datadog. Ensures rapid response to software build failures."
  tags:
    - devops
    - cicd
    - github
    - jira
    - datadog
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: cicd-ops
      port: 8080
      tools:
        - name: handle-pipeline-failure
          description: "Given a GitHub repository name, workflow run ID, and branch, create a Jira incident, alert the engineering Teams channel, and log a Datadog event. Use when a CI/CD pipeline failure occurs on a critical branch."
          inputParameters:
            - name: repo_name
              in: body
              type: string
              description: "The GitHub repository name where the failure occurred (e.g., reservation-system)."
            - name: run_id
              in: body
              type: string
              description: "The GitHub Actions workflow run ID."
            - name: branch
              in: body
              type: string
              description: "The branch where the failure occurred (e.g., main, release/2025)."
          steps:
            - name: create-jira-issue
              type: call
              call: "jira-eng.create-issue"
              with:
                project_key: "ENG"
                summary: "Pipeline failure: {{repo_name}} on {{branch}}"
                issue_type: "Bug"
                priority: "High"
            - name: notify-engineering
              type: call
              call: "msteams-eng.send-message"
              with:
                channel_id: "engineering-alerts"
                message: "CI/CD failure in {{repo_name}} ({{branch}}). Jira: {{create-jira-issue.key}}. Run: {{run_id}}"
            - name: log-datadog
              type: call
              call: "datadog-cicd.create-event"
              with:
                title: "Pipeline failure: {{repo_name}}"
                text: "Run {{run_id}} failed on {{branch}}"
                tags: "repo:{{repo_name}},branch:{{branch}}"
  consumes:
    - type: http
      namespace: jira-eng
      baseUri: "https://alaska-airlines.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issue
          path: "/issue"
          inputParameters:
            - name: project_key
              in: body
            - name: summary
              in: body
            - name: issue_type
              in: body
            - name: priority
              in: body
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams-eng
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: message
          path: "/teams/{{channel_id}}/channels/messages"
          inputParameters:
            - name: channel_id
              in: path
            - name: message
              in: body
          operations:
            - name: send-message
              method: POST
    - 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: event
          path: "/events"
          inputParameters:
            - name: title
              in: body
            - name: text
              in: body
            - name: tags
              in: body
          operations:
            - name: create-event
              method: POST

When Datadog detects an AWS cloud spend anomaly, retrieves cost details, creates a ServiceNow incident, and alerts the FinOps team in Microsoft Teams. Enables rapid cost containment for Alaska Airlines cloud infrastructure.

naftiko: "0.5"
info:
  label: "Cloud FinOps Cost Anomaly Responder"
  description: "When Datadog detects an AWS cloud spend anomaly, retrieves cost details, creates a ServiceNow incident, and alerts the FinOps team in Microsoft Teams. Enables rapid cost containment for Alaska Airlines cloud infrastructure."
  tags:
    - finops
    - cloud
    - datadog
    - aws
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: finops-ops
      port: 8080
      tools:
        - name: handle-cost-anomaly
          description: "Given a Datadog alert ID and AWS account ID, retrieve cost breakdown, open a ServiceNow incident, and notify the FinOps Teams channel. Use when AWS cloud spend exceeds expected thresholds."
          inputParameters:
            - name: alert_id
              in: body
              type: string
              description: "The Datadog monitor alert ID for the cost anomaly."
            - name: aws_account_id
              in: body
              type: string
              description: "The AWS account ID where the cost anomaly was detected."
            - name: threshold_percent
              in: body
              type: number
              description: "The percentage over budget that triggered the alert."
          steps:
            - name: get-datadog-alert
              type: call
              call: "datadog-finops.get-monitor"
              with:
                monitor_id: "{{alert_id}}"
            - name: create-snow-incident
              type: call
              call: "servicenow-finops.create-incident"
              with:
                short_description: "AWS cost anomaly: {{threshold_percent}}% over budget on account {{aws_account_id}}"
                category: "Cloud"
                urgency: "2"
            - name: notify-finops-team
              type: call
              call: "msteams-finops.send-message"
              with:
                channel_id: "finops-alerts"
                message: "Cost anomaly: {{threshold_percent}}% over budget on AWS account {{aws_account_id}}. Incident: {{create-snow-incident.number}}"
  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: monitor
          path: "/monitor/{{monitor_id}}"
          inputParameters:
            - name: monitor_id
              in: path
          operations:
            - name: get-monitor
              method: GET
    - type: http
      namespace: servicenow-finops
      baseUri: "https://alaska-airlines.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_pass"
      resources:
        - name: incident
          path: "/table/incident"
          inputParameters:
            - name: short_description
              in: body
            - name: category
              in: body
            - name: urgency
              in: body
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams-finops
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: message
          path: "/teams/{{channel_id}}/channels/messages"
          inputParameters:
            - name: channel_id
              in: path
            - name: message
              in: body
          operations:
            - name: send-message
              method: POST

Searches the Alaska Airlines safety Confluence space for bulletins and advisories matching a query.

naftiko: "0.5"
info:
  label: "Confluence Safety Bulletin Search"
  description: "Searches the Alaska Airlines safety Confluence space for bulletins and advisories matching a query."
  tags:
    - safety
    - confluence
    - knowledge-management
capability:
  exposes:
    - type: mcp
      namespace: safety
      port: 8080
      tools:
        - name: search-safety-bulletins
          description: "Search the safety Confluence space for bulletins matching a text query."
          inputParameters:
            - name: query
              in: body
              type: string
              description: "The search query."
          call: "confluence.search"
          with:
            cql: "space = SAFETY AND text ~ '{{query}}'"
          outputParameters:
            - name: results
              type: array
              mapping: "$.results"
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://alaska-airlines.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: search
          path: "/search?cql={{cql}}"
          inputParameters:
            - name: cql
              in: query
          operations:
            - name: search
              method: GET

Processes contractor offboarding by deactivating the Okta account, closing the ServiceNow asset record, and sending confirmation via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Contractor Offboarding Workflow"
  description: "Processes contractor offboarding by deactivating the Okta account, closing the ServiceNow asset record, and sending confirmation via Microsoft Teams."
  tags:
    - hr
    - okta
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: offboard_contractor
          description: "Given a contractor email, process the offboarding across systems."
          inputParameters:
            - name: contractor_email
              in: body
              type: string
              description: "The contractor's email address."
          steps:
            - name: deactivate-okta
              type: call
              call: "okta.deactivate-user"
              with:
                login: "{{contractor_email}}"
            - name: close-assets
              type: call
              call: "servicenow.update-ci"
              with:
                user: "{{contractor_email}}"
                status: "retired"
            - name: confirm
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "hr-admin"
                message: "Contractor {{contractor_email}} offboarded. Okta deactivated. Assets closed."
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://alaskaair.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: users
          path: "/users/{{login}}/lifecycle/deactivate"
          inputParameters:
            - name: login
              in: path
          operations:
            - name: deactivate-user
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://alaskaair.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_pass"
      resources:
        - name: ci
          path: "/table/cmdb_ci"
          operations:
            - name: update-ci
              method: PATCH
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/hr-admin/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Processes crew base transfers by updating the Workday record, adjusting Okta access groups for the new base, and notifying the crew member and new base manager via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Crew Base Transfer Processing"
  description: "Processes crew base transfers by updating the Workday record, adjusting Okta access groups for the new base, and notifying the crew member and new base manager via Microsoft Teams."
  tags:
    - crew-management
    - workday
    - okta
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: crew-management
      port: 8080
      tools:
        - name: process_base_transfer
          description: "Given a crew member ID and new base, process the transfer."
          inputParameters:
            - name: crew_id
              in: body
              type: string
              description: "The crew member Workday ID."
            - name: new_base
              in: body
              type: string
              description: "The new base station code."
          steps:
            - name: update-workday
              type: call
              call: "workday.update-worker-location"
              with:
                worker_id: "{{crew_id}}"
                location: "{{new_base}}"
            - name: update-access
              type: call
              call: "okta.update-user-groups"
              with:
                user_id: "{{crew_id}}"
                new_group: "crew-{{new_base}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "crew-admin"
                message: "Base transfer completed: {{crew_id}} to {{new_base}}. Workday and Okta updated."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/alaska/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: update-worker-location
              method: PATCH
    - type: http
      namespace: okta
      baseUri: "https://alaskaair.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: groups
          path: "/users/{{user_id}}/groups"
          inputParameters:
            - name: user_id
              in: path
          operations:
            - name: update-user-groups
              method: PUT
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/crew-admin/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Evaluates crew fatigue risk by checking duty times in Workday, cross-referencing rest periods in Snowflake, and alerting crew scheduling via Slack if risk thresholds are exceeded.

naftiko: "0.5"
info:
  label: "Crew Fatigue Risk Assessment"
  description: "Evaluates crew fatigue risk by checking duty times in Workday, cross-referencing rest periods in Snowflake, and alerting crew scheduling via Slack if risk thresholds are exceeded."
  tags:
    - crew-management
    - workday
    - snowflake
    - slack
capability:
  exposes:
    - type: mcp
      namespace: crew-management
      port: 8080
      tools:
        - name: assess_fatigue_risk
          description: "Given a crew member ID, evaluate fatigue risk based on duty and rest records."
          inputParameters:
            - name: crew_id
              in: body
              type: string
              description: "The crew member identifier."
          steps:
            - name: get-duty-hours
              type: call
              call: "workday.get-duty-record"
              with:
                worker_id: "{{crew_id}}"
            - name: get-rest-periods
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT rest_hours, duty_date FROM crew_rest WHERE crew_id = '{{crew_id}}' ORDER BY duty_date DESC LIMIT 7"
            - name: alert-scheduling
              type: call
              call: "slack.post-message"
              with:
                channel: "crew-scheduling"
                text: "Fatigue assessment for {{crew_id}}: Recent duty hours: {{get-duty-hours.total_hours}}. Min rest: {{get-rest-periods.data[0].REST_HOURS}}h"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: duty
          path: "/alaska/workers/{{worker_id}}/timeOff"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-duty-record
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://alaska.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: 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

Coordinates crew hotel bookings by checking crew layover schedules in Workday, querying hotel availability, and confirming bookings with a notification to crew scheduling via Slack.

naftiko: "0.5"
info:
  label: "Crew Hotel Booking Coordinator"
  description: "Coordinates crew hotel bookings by checking crew layover schedules in Workday, querying hotel availability, and confirming bookings with a notification to crew scheduling via Slack."
  tags:
    - crew-management
    - workday
    - slack
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: crew-management
      port: 8080
      tools:
        - name: coordinate_crew_hotels
          description: "Given a station and date, coordinate crew hotel bookings."
          inputParameters:
            - name: station
              in: body
              type: string
              description: "The layover station."
            - name: date
              in: body
              type: string
              description: "Layover date."
          steps:
            - name: get-layovers
              type: call
              call: "workday.get-crew-layovers"
              with:
                station: "{{station}}"
                date: "{{date}}"
            - name: notify-scheduling
              type: call
              call: "slack.post-message"
              with:
                channel: "crew-scheduling"
                text: "Hotel coordination for {{station}} on {{date}}: {{get-layovers.crew_count}} crew members need rooms."
            - name: confirm-bookings
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "crew-admin"
                message: "Hotel bookings confirmed for {{station}} ({{date}}). {{get-layovers.crew_count}} rooms."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: layovers
          path: "/alaska/crewLayovers?station={{station}}&date={{date}}"
          inputParameters:
            - name: station
              in: query
            - name: date
              in: query
          operations:
            - name: get-crew-layovers
              method: GET
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/crew-admin/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Detects crew scheduling conflicts in Workday, creates a Jira task for crew planning, and notifies the crew scheduling team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Crew Scheduling Conflict Resolver"
  description: "Detects crew scheduling conflicts in Workday, creates a Jira task for crew planning, and notifies the crew scheduling team via Microsoft Teams."
  tags:
    - crew-operations
    - scheduling
    - workday
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: crew-ops
      port: 8080
      tools:
        - name: resolve-crew-conflict
          description: "Given a crew member ID and date range, detect scheduling conflicts in Workday, create Jira task, and notify crew scheduling via Teams."
          inputParameters:
            - name: crew_member_id
              in: body
              type: string
              description: "The Workday employee ID of the crew member."
            - name: date_range
              in: body
              type: string
              description: "The date range to check."
          steps:
            - name: check-schedule
              type: call
              call: workday.get-crew-schedule
              with:
                employee_id: "{{crew_member_id}}"
                range: "{{date_range}}"
            - name: create-task
              type: call
              call: jira.create-issue
              with:
                project_key: "CREW"
                summary: "Scheduling conflict: {{crew_member_id}} — {{date_range}}"
                description: "Conflicts: {{check-schedule.conflict_count}}"
                issue_type: "Task"
            - name: notify-scheduling
              type: call
              call: msteams.send-message
              with:
                channel_id: "$secrets.teams_crew_channel_id"
                text: "CREW CONFLICT: {{crew_member_id}} has {{check-schedule.conflict_count}} conflicts in {{date_range}}. Jira: {{create-task.key}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.workday.com/ccx/api/v1/alaska-airlines"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: schedules
          path: "/workers/{{employee_id}}/schedule"
          inputParameters:
            - name: employee_id
              in: path
          operations:
            - name: get-crew-schedule
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://alaska-airlines.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Analyzes complaint trends by querying Salesforce case data, enriching with flight data from Snowflake, and posting a trend report to the customer experience Teams channel.

naftiko: "0.5"
info:
  label: "Customer Complaint Trend Analysis"
  description: "Analyzes complaint trends by querying Salesforce case data, enriching with flight data from Snowflake, and posting a trend report to the customer experience Teams channel."
  tags:
    - customer-service
    - salesforce
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: customer-service
      port: 8080
      tools:
        - name: analyze_complaint_trends
          description: "Given a period, compile complaint trends and post the analysis."
          inputParameters:
            - name: period
              in: body
              type: string
              description: "Reporting period (e.g., 2026-03)."
          steps:
            - name: get-complaints
              type: call
              call: "salesforce.get-case-trends"
              with:
                period: "{{period}}"
            - name: get-flight-context
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT category, count(*) as cnt FROM complaints WHERE period = '{{period}}' GROUP BY category ORDER BY cnt DESC"
            - name: post-analysis
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "customer-experience"
                message: "Complaint Trends {{period}} | Total cases: {{get-complaints.total}}. Top category: {{get-flight-context.data[0].CATEGORY}} ({{get-flight-context.data[0].CNT}})"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://alaskaair.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: cases
          path: "/query?q=SELECT+Count()+FROM+Case+WHERE+CreatedDate>=THIS_MONTH"
          operations:
            - name: get-case-trends
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://alaska.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/customer-experience/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Compiles the daily operations briefing by pulling flight performance from Snowflake, crew staffing from Workday, and posting the brief to the leadership Teams channel.

naftiko: "0.5"
info:
  label: "Daily Operations Briefing Compiler"
  description: "Compiles the daily operations briefing by pulling flight performance from Snowflake, crew staffing from Workday, and posting the brief to the leadership Teams channel."
  tags:
    - flight-operations
    - snowflake
    - workday
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: flight-operations
      port: 8080
      tools:
        - name: compile_daily_briefing
          description: "Given a date, compile the daily operations briefing."
          inputParameters:
            - name: report_date
              in: body
              type: string
              description: "Report date in YYYY-MM-DD."
          steps:
            - name: get-flight-performance
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT on_time_pct, completion_factor, cancellation_count FROM daily_ops WHERE ops_date = '{{report_date}}'"
            - name: get-staffing
              type: call
              call: "workday.get-staffing-summary"
              with:
                date: "{{report_date}}"
            - name: post-briefing
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "ops-leadership"
                message: "Daily Ops Brief {{report_date}} | OTP: {{get-flight-performance.data[0].ON_TIME_PCT}}% | Completion: {{get-flight-performance.data[0].COMPLETION_FACTOR}}% | Cancellations: {{get-flight-performance.data[0].CANCELLATION_COUNT}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://alaska.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: staffing
          path: "/alaska/staffing/summary?date={{date}}"
          inputParameters:
            - name: date
              in: query
          operations:
            - name: get-staffing-summary
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/ops-leadership/channels/general/messages"
          operations:
            - name: send-message
              method: POST

When Snowflake query SLAs are breached, retrieves the offending queries, creates a Jira ticket for the data team, and alerts the analytics Slack channel.

naftiko: "0.5"
info:
  label: "Data Warehouse SLA Breach Handler"
  description: "When Snowflake query SLAs are breached, retrieves the offending queries, creates a Jira ticket for the data team, and alerts the analytics Slack channel."
  tags:
    - data-engineering
    - snowflake
    - jira
    - slack
capability:
  exposes:
    - type: mcp
      namespace: data-engineering
      port: 8080
      tools:
        - name: handle_sla_breach
          description: "Given a warehouse name, investigate SLA breaches and create tickets."
          inputParameters:
            - name: warehouse
              in: body
              type: string
              description: "The Snowflake warehouse name."
          steps:
            - name: get-slow-queries
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT query_id, execution_time, user_name FROM query_history WHERE warehouse = '{{warehouse}}' AND execution_time > sla_threshold ORDER BY execution_time DESC LIMIT 10"
            - name: create-ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "DATA"
                summary: "SLA breach: {{warehouse}} - {{get-slow-queries.row_count}} slow queries"
                issuetype: "Bug"
            - name: alert-team
              type: call
              call: "slack.post-message"
              with:
                channel: "data-analytics"
                text: "SLA breach on {{warehouse}}: {{get-slow-queries.row_count}} queries exceeded threshold. Jira: {{create-ticket.key}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://alaska.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://alaska-airlines.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Retrieves SLO compliance history from Datadog for Alaska Airlines customer-facing applications, publishes the weekly report to Confluence, and refreshes the Power BI operations dashboard. Ensures on-time performance visibility for leadership.

naftiko: "0.5"
info:
  label: "Datadog Application SLO Report"
  description: "Retrieves SLO compliance history from Datadog for Alaska Airlines customer-facing applications, publishes the weekly report to Confluence, and refreshes the Power BI operations dashboard. Ensures on-time performance visibility for leadership."
  tags:
    - observability
    - slo
    - datadog
    - confluence
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: slo-reporting
      port: 8080
      tools:
        - name: publish-slo-report
          description: "Given a Datadog SLO ID list and report week, retrieve compliance data, publish to Confluence, and refresh Power BI. Use for weekly application SLO reporting across Alaska Airlines digital platforms."
          inputParameters:
            - name: slo_ids
              in: body
              type: string
              description: "Comma-separated Datadog SLO IDs to include in the report."
            - name: report_week
              in: body
              type: string
              description: "The ISO week identifier for the report (e.g., 2025-W14)."
          steps:
            - name: get-slo-history
              type: call
              call: "datadog-slo.get-slo-history"
              with:
                slo_ids: "{{slo_ids}}"
            - name: publish-confluence-page
              type: call
              call: "confluence-slo.create-page"
              with:
                space_key: "OPS"
                title: "SLO Report — {{report_week}}"
                body: "Weekly SLO compliance: {{get-slo-history.summary}}"
            - name: refresh-powerbi
              type: call
              call: "powerbi-slo.trigger-refresh"
              with:
                dataset_id: "$secrets.powerbi_slo_dataset_id"
  consumes:
    - type: http
      namespace: datadog-slo
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: slo-history
          path: "/slo/history"
          inputParameters:
            - name: slo_ids
              in: query
          operations:
            - name: get-slo-history
              method: GET
    - type: http
      namespace: confluence-slo
      baseUri: "https://alaska-airlines.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: page
          path: "/content"
          inputParameters:
            - name: space_key
              in: body
            - name: title
              in: body
            - name: body
              in: body
          operations:
            - name: create-page
              method: POST
    - type: http
      namespace: powerbi-slo
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: refresh
          path: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: trigger-refresh
              method: POST

Retrieves the current status of Datadog monitors for flight operations systems, returning monitor name, status, and last triggered time.

naftiko: "0.5"
info:
  label: "Datadog Flight Systems Monitor Status"
  description: "Retrieves the current status of Datadog monitors for flight operations systems, returning monitor name, status, and last triggered time."
  tags:
    - it-operations
    - datadog
    - monitoring
capability:
  exposes:
    - type: mcp
      namespace: monitoring
      port: 8080
      tools:
        - name: get-flight-system-monitors
          description: "Given a monitor tag, retrieve the status of flight systems monitors from Datadog."
          inputParameters:
            - name: tag
              in: body
              type: string
              description: "The Datadog monitor tag to filter by."
          call: "datadog.get-monitors"
          with:
            tag: "{{tag}}"
          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?tags={{tag}}"
          inputParameters:
            - name: tag
              in: query
          operations:
            - name: get-monitors
              method: GET

Queries Datadog for the current health status of a monitored flight operations service, returning uptime, error rate, and p99 latency.

naftiko: "0.5"
info:
  label: "Datadog Service Health Check"
  description: "Queries Datadog for the current health status of a monitored flight operations service, returning uptime, error rate, and p99 latency."
  tags:
    - observability
    - monitoring
    - datadog
    - sre
capability:
  exposes:
    - type: mcp
      namespace: observability
      port: 8080
      tools:
        - name: get-service-health
          description: "Check health of an Alaska Airlines service in Datadog. Returns uptime, error rate, and p99 latency."
          inputParameters:
            - name: service_name
              in: body
              type: string
              description: "The Datadog service name."
          call: datadog.get-service-metrics
          with:
            service_name: "{{service_name}}"
          outputParameters:
            - name: uptime_pct
              type: string
              mapping: "$.series[0].pointlist[-1][1]"
            - name: error_rate
              type: string
              mapping: "$.series[1].pointlist[-1][1]"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: metrics
          path: "/query"
          operations:
            - name: get-service-metrics
              method: GET

When an employee departure is confirmed in Workday, deactivates the Microsoft Entra ID account, closes open Jira tasks, and sends a handover summary to the departing employee's manager via Teams. Ensures complete offboarding for Alaska Airlines staff.

naftiko: "0.5"
info:
  label: "Employee Offboarding Orchestration"
  description: "When an employee departure is confirmed in Workday, deactivates the Microsoft Entra ID account, closes open Jira tasks, and sends a handover summary to the departing employee's manager via Teams. Ensures complete offboarding for Alaska Airlines staff."
  tags:
    - hr
    - offboarding
    - workday
    - microsoft-entra
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-offboarding
      port: 8080
      tools:
        - name: trigger-employee-offboarding
          description: "Given a Workday employee ID and last working day, disable the Entra ID account and notify the manager in Teams. Use when an employee's departure is confirmed in Workday."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday worker ID of the departing employee."
            - name: last_working_day
              in: body
              type: string
              description: "The employee's last working day in ISO 8601 format (YYYY-MM-DD)."
          steps:
            - name: get-worker
              type: call
              call: "workday-off.get-worker"
              with:
                employee_id: "{{employee_id}}"
            - name: disable-entra-account
              type: call
              call: "entra-id.disable-user"
              with:
                userPrincipalName: "{{get-worker.email}}"
                accountEnabled: false
            - name: notify-manager
              type: call
              call: "msteams-off.send-message"
              with:
                channel_id: "{{get-worker.manager_email}}"
                message: "Offboarding complete for {{get-worker.display_name}}. Last day: {{last_working_day}}. Account 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: worker
          path: "/alaska-airlines/workers/{{employee_id}}"
          inputParameters:
            - name: employee_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: entra-id
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: user
          path: "/users/{{userPrincipalName}}"
          inputParameters:
            - name: userPrincipalName
              in: path
            - name: accountEnabled
              in: body
          operations:
            - name: disable-user
              method: PATCH
    - type: http
      namespace: msteams-off
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: message
          path: "/users/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
            - name: message
              in: body
          operations:
            - name: send-message
              method: POST

When an employee role change is approved in Workday, updates Entra ID group memberships and notifies both the employee and their new manager via Microsoft Teams. Supports Alaska Airlines access provisioning for crew and corporate role transitions.

naftiko: "0.5"
info:
  label: "Employee Role Change Provisioning"
  description: "When an employee role change is approved in Workday, updates Entra ID group memberships and notifies both the employee and their new manager via Microsoft Teams. Supports Alaska Airlines access provisioning for crew and corporate role transitions."
  tags:
    - hr
    - identity
    - role-change
    - workday
    - microsoft-entra
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-role-change
      port: 8080
      tools:
        - name: provision-role-change
          description: "Given a Workday employee ID, old Entra group ID, and new Entra group ID, update group memberships and notify the employee and new manager in Teams. Use when an employee's role or position changes are approved."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday worker ID of the employee changing roles."
            - name: old_group_id
              in: body
              type: string
              description: "The Entra ID group ID to remove the employee from."
            - name: new_group_id
              in: body
              type: string
              description: "The Entra ID group ID to add the employee to."
          steps:
            - name: get-worker-info
              type: call
              call: "workday-role.get-worker"
              with:
                employee_id: "{{employee_id}}"
            - name: remove-old-group
              type: call
              call: "entra-role.remove-group-member"
              with:
                group_id: "{{old_group_id}}"
                user_id: "{{get-worker-info.entra_object_id}}"
            - name: add-new-group
              type: call
              call: "entra-role.add-group-member"
              with:
                group_id: "{{new_group_id}}"
                user_id: "{{get-worker-info.entra_object_id}}"
            - name: notify-employee
              type: call
              call: "msteams-role.send-message"
              with:
                channel_id: "{{get-worker-info.email}}"
                message: "Your role has been updated in Alaska Airlines systems. New access is now active."
  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: worker
          path: "/alaska-airlines/workers/{{employee_id}}"
          inputParameters:
            - name: employee_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: entra-role
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: group-member
          path: "/groups/{{group_id}}/members/{{user_id}}/$ref"
          inputParameters:
            - name: group_id
              in: path
            - name: user_id
              in: path
          operations:
            - name: add-group-member
              method: POST
            - name: remove-group-member
              method: DELETE
    - type: http
      namespace: msteams-role
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: message
          path: "/users/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
            - name: message
              in: body
          operations:
            - name: send-message
              method: POST

When engine health parameters exceed thresholds in Snowflake, retrieves maintenance history from Oracle ERP, and pages the powerplant engineering team via PagerDuty.

naftiko: "0.5"
info:
  label: "Engine Health Monitoring Alert"
  description: "When engine health parameters exceed thresholds in Snowflake, retrieves maintenance history from Oracle ERP, and pages the powerplant engineering team via PagerDuty."
  tags:
    - maintenance
    - snowflake
    - oracle-erp
    - pagerduty
capability:
  exposes:
    - type: mcp
      namespace: maintenance
      port: 8080
      tools:
        - name: alert_engine_health
          description: "Given a tail number and engine position, check health parameters and alert if needed."
          inputParameters:
            - name: tail_number
              in: body
              type: string
              description: "The aircraft tail number."
            - name: engine_position
              in: body
              type: string
              description: "Engine position (1 or 2)."
          steps:
            - name: get-health-data
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT egt_margin, oil_consumption, vibration_level FROM engine_health WHERE tail_number = '{{tail_number}}' AND engine_pos = '{{engine_position}}' ORDER BY reading_date DESC LIMIT 1"
            - name: get-mx-history
              type: call
              call: "oracle-erp.get-engine-maintenance"
              with:
                tail_number: "{{tail_number}}"
                engine_position: "{{engine_position}}"
            - name: page-powerplant
              type: call
              call: "pagerduty.create-incident"
              with:
                title: "Engine health alert: {{tail_number}} E{{engine_position}}"
                service_id: "powerplant-engineering"
                urgency: "high"
                body: "EGT margin: {{get-health-data.data[0].EGT_MARGIN}}. Last shop visit: {{get-mx-history.last_shop_visit}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://alaska.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: oracle-erp
      baseUri: "https://alaska-erp.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: basic
        username: "$secrets.oracle_erp_user"
        password: "$secrets.oracle_erp_pass"
      resources:
        - name: engine-maintenance
          path: "/fixedAssets/{{tail_number}}/engines/{{engine_position}}/maintenance"
          inputParameters:
            - name: tail_number
              in: path
            - name: engine_position
              in: path
          operations:
            - name: get-engine-maintenance
              method: GET
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: bearer
        token: "$secrets.pagerduty_api_key"
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: create-incident
              method: POST

Tracks FAA Airworthiness Directive compliance by querying the compliance database in Snowflake, cross-referencing fleet data in Oracle ERP, and posting status to the safety Teams channel.

naftiko: "0.5"
info:
  label: "FAA AD Compliance Tracker"
  description: "Tracks FAA Airworthiness Directive compliance by querying the compliance database in Snowflake, cross-referencing fleet data in Oracle ERP, and posting status to the safety Teams channel."
  tags:
    - compliance
    - snowflake
    - oracle-erp
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: compliance
      port: 8080
      tools:
        - name: track_ad_compliance
          description: "Given an AD number, check fleet compliance status."
          inputParameters:
            - name: ad_number
              in: body
              type: string
              description: "The FAA AD reference number."
          steps:
            - name: get-compliance-status
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT tail_number, compliance_status, due_date FROM ad_compliance WHERE ad_number = '{{ad_number}}'"
            - name: get-fleet-info
              type: call
              call: "oracle-erp.get-fleet-assets"
              with:
                ad_number: "{{ad_number}}"
            - name: post-status
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "safety-compliance"
                message: "AD {{ad_number}} compliance: {{get-compliance-status.row_count}} aircraft tracked. Fleet assets: {{get-fleet-info.count}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://alaska.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: oracle-erp
      baseUri: "https://alaska-erp.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: basic
        username: "$secrets.oracle_erp_user"
        password: "$secrets.oracle_erp_pass"
      resources:
        - name: fleet
          path: "/fixedAssets?ad={{ad_number}}"
          inputParameters:
            - name: ad_number
              in: query
          operations:
            - name: get-fleet-assets
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/safety-compliance/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Orchestrates Aircraft on Ground response by identifying the AOG aircraft in Snowflake, paging the maintenance duty manager via PagerDuty, and creating an emergency Jira ticket.

naftiko: "0.5"
info:
  label: "Fleet AOG Response Orchestrator"
  description: "Orchestrates Aircraft on Ground response by identifying the AOG aircraft in Snowflake, paging the maintenance duty manager via PagerDuty, and creating an emergency Jira ticket."
  tags:
    - maintenance
    - snowflake
    - pagerduty
    - jira
capability:
  exposes:
    - type: mcp
      namespace: maintenance
      port: 8080
      tools:
        - name: respond_to_aog
          description: "Given a tail number and station, initiate AOG response procedures."
          inputParameters:
            - name: tail_number
              in: body
              type: string
              description: "The aircraft tail number."
            - name: station
              in: body
              type: string
              description: "The station IATA code."
          steps:
            - name: get-aircraft-info
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT fleet_type, next_scheduled_flight, pax_affected FROM fleet_status WHERE tail_number = '{{tail_number}}'"
            - name: page-duty-manager
              type: call
              call: "pagerduty.create-incident"
              with:
                title: "AOG: {{tail_number}} at {{station}}"
                service_id: "maintenance-ops"
                urgency: "high"
            - name: create-mx-ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "MX"
                summary: "AOG: {{tail_number}} at {{station}} - {{get-aircraft-info.data[0].FLEET_TYPE}}"
                issuetype: "Bug"
                priority: "Critical"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://alaska.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: bearer
        token: "$secrets.pagerduty_api_key"
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://alaska-airlines.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

Tracks fleet insurance renewals by pulling policy dates from Oracle ERP, checking claims history in Snowflake, and notifying the risk management team via Microsoft Teams before expiry.

naftiko: "0.5"
info:
  label: "Fleet Insurance Renewal Tracker"
  description: "Tracks fleet insurance renewals by pulling policy dates from Oracle ERP, checking claims history in Snowflake, and notifying the risk management team via Microsoft Teams before expiry."
  tags:
    - finance
    - oracle-erp
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: finance
      port: 8080
      tools:
        - name: track_insurance_renewals
          description: "Given a days-ahead threshold, identify policies nearing renewal."
          inputParameters:
            - name: days_ahead
              in: body
              type: string
              description: "Number of days to look ahead."
          steps:
            - name: get-expiring-policies
              type: call
              call: "oracle-erp.get-insurance-policies"
              with:
                days_ahead: "{{days_ahead}}"
            - name: get-claims-history
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT policy_id, claim_count, total_payout FROM insurance_claims GROUP BY policy_id"
            - name: notify-risk-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "risk-management"
                message: "Insurance renewals: {{get-expiring-policies.count}} policies expiring in {{days_ahead}} days. Claims history available for review."
  consumes:
    - type: http
      namespace: oracle-erp
      baseUri: "https://alaska-erp.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: basic
        username: "$secrets.oracle_erp_user"
        password: "$secrets.oracle_erp_pass"
      resources:
        - name: policies
          path: "/insurancePolicies?expiringIn={{days_ahead}}"
          inputParameters:
            - name: days_ahead
              in: query
          operations:
            - name: get-insurance-policies
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://alaska.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/risk-management/channels/general/messages"
          operations:
            - name: send-message
              method: POST

When a flight irregularity is detected, retrieves flight details from Snowflake, creates a ServiceNow incident for operations, rebooking tasks in Salesforce, and alerts operations via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Flight Irregular Operations Handler"
  description: "When a flight irregularity is detected, retrieves flight details from Snowflake, creates a ServiceNow incident for operations, rebooking tasks in Salesforce, and alerts operations via Microsoft Teams."
  tags:
    - flight-operations
    - irrops
    - snowflake
    - servicenow
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: flight-ops
      port: 8080
      tools:
        - name: handle-irregular-ops
          description: "Given a flight number and date, retrieve IRROPS details from Snowflake, create ServiceNow incident, Salesforce rebooking tasks, and alert operations via Teams."
          inputParameters:
            - name: flight_number
              in: body
              type: string
              description: "The flight number, e.g. AS123."
            - name: flight_date
              in: body
              type: string
              description: "The flight date."
          steps:
            - name: query-flight
              type: call
              call: snowflake.query-flight-details
              with:
                flight: "{{flight_number}}"
                date: "{{flight_date}}"
            - name: create-incident
              type: call
              call: servicenow.create-incident
              with:
                short_description: "IRROPS: {{flight_number}} on {{flight_date}}"
                description: "Status: {{query-flight.status}}. Affected passengers: {{query-flight.pax_count}}."
                urgency: "1"
            - name: create-rebooking
              type: call
              call: salesforce.create-rebooking-task
              with:
                flight: "{{flight_number}}"
                pax_count: "{{query-flight.pax_count}}"
            - name: alert-ops
              type: call
              call: msteams.send-message
              with:
                channel_id: "$secrets.teams_ops_channel_id"
                text: "IRROPS: {{flight_number}} on {{flight_date}} — {{query-flight.pax_count}} pax affected. INC {{create-incident.number}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://alaska-airlines.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: query-flight-details
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://alaskaairlines.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: salesforce
      baseUri: "https://alaska-airlines.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: tasks
          path: "/sobjects/Task"
          operations:
            - name: create-rebooking-task
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

When a Priority-1 incident impacting flight operations systems is created in ServiceNow, retrieves Datadog alert context, pages the on-call engineer via PagerDuty, and assembles a war-room Teams channel. Ensures rapid response for Alaska Airlines operational technology outages.

naftiko: "0.5"
info:
  label: "Flight Operations IT Priority-1 Incident Triage"
  description: "When a Priority-1 incident impacting flight operations systems is created in ServiceNow, retrieves Datadog alert context, pages the on-call engineer via PagerDuty, and assembles a war-room Teams channel. Ensures rapid response for Alaska Airlines operational technology outages."
  tags:
    - itsm
    - incident-response
    - servicenow
    - datadog
    - pagerduty
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: it-ops
      port: 8080
      tools:
        - name: handle-p1-incident
          description: "Given a ServiceNow incident number and Datadog monitor ID, retrieve alert context, page the on-call team via PagerDuty, and post a war-room summary to the ops Teams channel. Use when a P1 incident affecting flight operations systems is created."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "The ServiceNow incident number (e.g., INC0012345)."
            - name: monitor_id
              in: body
              type: string
              description: "The Datadog monitor ID for the triggering alert."
            - name: affected_system
              in: body
              type: string
              description: "The name of the affected operational system (e.g., DCS, PSS, crew-scheduling)."
          steps:
            - name: get-snow-incident
              type: call
              call: "servicenow-it.get-incident"
              with:
                number: "{{incident_number}}"
            - name: get-datadog-alert
              type: call
              call: "datadog-it.get-monitor"
              with:
                monitor_id: "{{monitor_id}}"
            - name: page-oncall
              type: call
              call: "pagerduty-it.create-incident"
              with:
                title: "P1: {{get-snow-incident.short_description}} — {{affected_system}}"
                service_id: "$secrets.pagerduty_ops_service_id"
                urgency: "high"
            - name: notify-war-room
              type: call
              call: "msteams-it.send-message"
              with:
                channel_id: "it-incident-response"
                message: "P1 ACTIVE: {{affected_system}} — {{get-snow-incident.short_description}}. PD: {{page-oncall.incident_number}}"
  consumes:
    - type: http
      namespace: servicenow-it
      baseUri: "https://alaska-airlines.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_pass"
      resources:
        - name: incident
          path: "/table/incident"
          inputParameters:
            - name: number
              in: query
          operations:
            - name: get-incident
              method: GET
    - type: http
      namespace: datadog-it
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: monitor
          path: "/monitor/{{monitor_id}}"
          inputParameters:
            - name: monitor_id
              in: path
          operations:
            - name: get-monitor
              method: GET
    - type: http
      namespace: pagerduty-it
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.pagerduty_token"
        placement: header
      resources:
        - name: incident
          path: "/incidents"
          inputParameters:
            - name: title
              in: body
            - name: service_id
              in: body
            - name: urgency
              in: body
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams-it
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: message
          path: "/teams/{{channel_id}}/channels/messages"
          inputParameters:
            - name: channel_id
              in: path
            - name: message
              in: body
          operations:
            - name: send-message
              method: POST

Compiles fuel cost variance by pulling planned costs from Oracle ERP, actual consumption from Snowflake, and posting the variance report to the fuel management Teams channel.

naftiko: "0.5"
info:
  label: "Fuel Cost Variance Analysis"
  description: "Compiles fuel cost variance by pulling planned costs from Oracle ERP, actual consumption from Snowflake, and posting the variance report to the fuel management Teams channel."
  tags:
    - finance
    - oracle-erp
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: finance
      port: 8080
      tools:
        - name: analyze-fuel-variance
          description: "Given a period, compile planned vs actual fuel costs and post the variance report."
          inputParameters:
            - name: period
              in: body
              type: string
              description: "Reporting period (e.g., 2026-03)."
          steps:
            - name: get-planned
              type: call
              call: "oracle-erp.get-fuel-budget"
              with:
                period: "{{period}}"
            - name: get-actual
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT SUM(fuel_cost) as actual_cost, SUM(gallons) as gallons FROM fuel_consumption WHERE period = '{{period}}'"
            - name: post-report
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "fuel-management"
                message: "Fuel variance for {{period}} | Planned: {{get-planned.budget}} | Actual: {{get-actual.data[0].ACTUAL_COST}} | Gallons: {{get-actual.data[0].GALLONS}}"
  consumes:
    - type: http
      namespace: oracle-erp
      baseUri: "https://alaska-erp.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: basic
        username: "$secrets.oracle_erp_user"
        password: "$secrets.oracle_erp_pass"
      resources:
        - name: budget
          path: "/budgets?category=FUEL&period={{period}}"
          inputParameters:
            - name: period
              in: query
          operations:
            - name: get-fuel-budget
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://alaska.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/fuel-management/channels/general/messages"
          operations:
            - name: send-message
              method: POST

When a gate conflict is detected, retrieves flight details from Snowflake, checks alternative gates, and notifies the ramp coordinator via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Gate Assignment Conflict Resolver"
  description: "When a gate conflict is detected, retrieves flight details from Snowflake, checks alternative gates, and notifies the ramp coordinator via Microsoft Teams."
  tags:
    - flight-operations
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: flight-ops
      port: 8080
      tools:
        - name: resolve-gate-conflict
          description: "Given a flight number and station, identify the conflict and notify the ramp team."
          inputParameters:
            - name: flight_number
              in: body
              type: string
              description: "The flight number."
            - name: station
              in: body
              type: string
              description: "The IATA station code."
          steps:
            - name: get-conflict-details
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT flight_number, gate, arrival_time, departure_time FROM gate_assignments WHERE station = '{{station}}' AND gate IN (SELECT gate FROM gate_assignments WHERE flight_number = '{{flight_number}}')"
            - name: notify-ramp
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "ramp-ops-{{station}}"
                message: "Gate conflict at {{station}} for flight {{flight_number}}. {{get-conflict-details.row_count}} flights sharing gate."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://alaska.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/ramp-ops/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Retrieves the latest deployment status for a GitHub repository, returning environment, state, and timestamp.

naftiko: "0.5"
info:
  label: "GitHub Deployment Pipeline Status"
  description: "Retrieves the latest deployment status for a GitHub repository, returning environment, state, and timestamp."
  tags:
    - engineering
    - github
    - ci-cd
capability:
  exposes:
    - type: mcp
      namespace: engineering
      port: 8080
      tools:
        - name: get-deployment-status
          description: "Given a repository and environment, retrieve the latest deployment status."
          inputParameters:
            - name: repo
              in: body
              type: string
              description: "The GitHub repository (org/repo format)."
            - name: environment
              in: body
              type: string
              description: "The deployment environment."
          call: "github.get-deployments"
          with:
            repo: "{{repo}}"
            environment: "{{environment}}"
          outputParameters:
            - name: state
              type: string
              mapping: "$.deployments[0].statuses[0].state"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: deployments
          path: "/repos/{{repo}}/deployments?environment={{environment}}&per_page=1"
          inputParameters:
            - name: repo
              in: path
            - name: environment
              in: query
          operations:
            - name: get-deployments
              method: GET

Creates a GitHub release tag for an Alaska Airlines digital product, publishes release notes to Confluence, and notifies the engineering and operations Teams channels. Coordinates software release activities across the airline's digital portfolio.

naftiko: "0.5"
info:
  label: "GitHub Release Deployment Coordination"
  description: "Creates a GitHub release tag for an Alaska Airlines digital product, publishes release notes to Confluence, and notifies the engineering and operations Teams channels. Coordinates software release activities across the airline's digital portfolio."
  tags:
    - devops
    - release-management
    - github
    - confluence
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: release-mgmt
      port: 8080
      tools:
        - name: coordinate-release
          description: "Given a GitHub repository, version tag, and release notes, create the GitHub release, publish to Confluence, and notify the engineering Teams channel. Use when releasing a new version of an Alaska Airlines digital system."
          inputParameters:
            - name: repo_owner
              in: body
              type: string
              description: "The GitHub organization or owner name."
            - name: repo_name
              in: body
              type: string
              description: "The GitHub repository name (e.g., alaskaair-mobile-app, alaskaair-booking-api)."
            - name: version_tag
              in: body
              type: string
              description: "The semantic version tag (e.g., v3.12.0)."
            - name: release_notes
              in: body
              type: string
              description: "The release notes describing changes in this version."
          steps:
            - name: create-github-release
              type: call
              call: "github-release.create-release"
              with:
                owner: "{{repo_owner}}"
                repo: "{{repo_name}}"
                tag_name: "{{version_tag}}"
                body: "{{release_notes}}"
            - name: publish-confluence
              type: call
              call: "confluence-release.create-page"
              with:
                space_key: "ENG"
                title: "Release: {{repo_name}} {{version_tag}}"
                body: "{{release_notes}}"
            - name: notify-engineering
              type: call
              call: "msteams-release.send-message"
              with:
                channel_id: "engineering-releases"
                message: "Released {{version_tag}} for {{repo_name}}. Notes: {{publish-confluence.url}}"
  consumes:
    - type: http
      namespace: github-release
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: release
          path: "/repos/{{owner}}/{{repo}}/releases"
          inputParameters:
            - name: owner
              in: path
            - name: repo
              in: path
            - name: tag_name
              in: body
            - name: body
              in: body
          operations:
            - name: create-release
              method: POST
    - type: http
      namespace: confluence-release
      baseUri: "https://alaska-airlines.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: page
          path: "/content"
          inputParameters:
            - name: space_key
              in: body
            - name: title
              in: body
            - name: body
              in: body
          operations:
            - name: create-page
              method: POST
    - type: http
      namespace: msteams-release
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: message
          path: "/teams/{{channel_id}}/channels/messages"
          inputParameters:
            - name: channel_id
              in: path
            - name: message
              in: body
          operations:
            - name: send-message
              method: POST

Schedules ground equipment maintenance by retrieving equipment status from ServiceNow CMDB, checking usage hours in Snowflake, and creating work orders in Jira.

naftiko: "0.5"
info:
  label: "Ground Equipment Maintenance Scheduler"
  description: "Schedules ground equipment maintenance by retrieving equipment status from ServiceNow CMDB, checking usage hours in Snowflake, and creating work orders in Jira."
  tags:
    - maintenance
    - servicenow
    - snowflake
    - jira
capability:
  exposes:
    - type: mcp
      namespace: maintenance
      port: 8080
      tools:
        - name: schedule_gse_maintenance
          description: "Given an equipment type and station, schedule maintenance based on usage."
          inputParameters:
            - name: equipment_type
              in: body
              type: string
              description: "The ground equipment type."
            - name: station
              in: body
              type: string
              description: "The station code."
          steps:
            - name: get-equipment
              type: call
              call: "servicenow.get-gse-assets"
              with:
                type: "{{equipment_type}}"
                station: "{{station}}"
            - name: get-usage
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT asset_id, usage_hours, last_service FROM gse_usage WHERE equipment_type = '{{equipment_type}}' AND station = '{{station}}' AND usage_hours > service_interval"
            - name: create-work-orders
              type: call
              call: "jira.create-issue"
              with:
                project: "GSE"
                summary: "GSE maintenance: {{equipment_type}} at {{station}} - {{get-usage.row_count}} units due"
                issuetype: "Task"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://alaskaair.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_pass"
      resources:
        - name: cmdb
          path: "/table/cmdb_ci?sysparm_query=type={{type}}^station={{station}}"
          inputParameters:
            - name: type
              in: query
            - name: station
              in: query
          operations:
            - name: get-gse-assets
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://alaska.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://alaska-airlines.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

Monitors ground handling SLAs by querying turnaround times from Snowflake, comparing against contract thresholds in Oracle ERP, and flagging breaches via Slack to the ground ops team.

naftiko: "0.5"
info:
  label: "Ground Handling SLA Monitor"
  description: "Monitors ground handling SLAs by querying turnaround times from Snowflake, comparing against contract thresholds in Oracle ERP, and flagging breaches via Slack to the ground ops team."
  tags:
    - flight-operations
    - snowflake
    - oracle-erp
    - slack
capability:
  exposes:
    - type: mcp
      namespace: flight-operations
      port: 8080
      tools:
        - name: monitor_gha_sla
          description: "Given a station and date, check ground handling SLA compliance."
          inputParameters:
            - name: station
              in: body
              type: string
              description: "The station IATA code."
            - name: date
              in: body
              type: string
              description: "Date in YYYY-MM-DD."
          steps:
            - name: get-turnaround-times
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT avg_turnaround_min, breach_count, total_flights FROM gha_performance WHERE station = '{{station}}' AND ops_date = '{{date}}'"
            - name: get-sla-thresholds
              type: call
              call: "oracle-erp.get-contract-sla"
              with:
                station: "{{station}}"
            - name: alert-ops
              type: call
              call: "slack.post-message"
              with:
                channel: "ground-ops"
                text: "GHA SLA {{station}} ({{date}}): Avg turnaround: {{get-turnaround-times.data[0].AVG_TURNAROUND_MIN}}min. SLA target: {{get-sla-thresholds.target_min}}min. Breaches: {{get-turnaround-times.data[0].BREACH_COUNT}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://alaska.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: oracle-erp
      baseUri: "https://alaska-erp.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: basic
        username: "$secrets.oracle_erp_user"
        password: "$secrets.oracle_erp_pass"
      resources:
        - name: contracts
          path: "/contracts/sla?station={{station}}"
          inputParameters:
            - name: station
              in: query
          operations:
            - name: get-contract-sla
              method: GET
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Activates the incident command structure by paging duty managers via PagerDuty, creating a war room in Microsoft Teams, and logging the activation in ServiceNow.

naftiko: "0.5"
info:
  label: "Incident Command Activation"
  description: "Activates the incident command structure by paging duty managers via PagerDuty, creating a war room in Microsoft Teams, and logging the activation in ServiceNow."
  tags:
    - flight-operations
    - pagerduty
    - microsoft-teams
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: flight-operations
      port: 8080
      tools:
        - name: activate_incident_command
          description: "Given an incident type and severity, activate the command structure."
          inputParameters:
            - name: incident_type
              in: body
              type: string
              description: "Type of operational incident."
            - name: severity
              in: body
              type: string
              description: "Severity level (1-5)."
          steps:
            - name: page-managers
              type: call
              call: "pagerduty.create-incident"
              with:
                title: "INCIDENT COMMAND: {{incident_type}} - Sev {{severity}}"
                service_id: "ops-command"
                urgency: "high"
            - name: create-warroom
              type: call
              call: "msteams.create-channel"
              with:
                team_id: "incident-response"
                name: "IC-{{incident_type}}-{{severity}}"
            - name: log-activation
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Incident Command activated: {{incident_type}}"
                priority: "{{severity}}"
                category: "operations"
  consumes:
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: bearer
        token: "$secrets.pagerduty_api_key"
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/{{team_id}}/channels"
          inputParameters:
            - name: team_id
              in: path
          operations:
            - name: create-channel
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://alaskaair.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_pass"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST

Synchronizes IFE content by checking the content catalog in Snowflake, validating licensing in SharePoint, and creating deployment tasks in Jira for the IFE engineering team.

naftiko: "0.5"
info:
  label: "Inflight Entertainment Content Sync"
  description: "Synchronizes IFE content by checking the content catalog in Snowflake, validating licensing in SharePoint, and creating deployment tasks in Jira for the IFE engineering team."
  tags:
    - it-operations
    - snowflake
    - sharepoint
    - jira
capability:
  exposes:
    - type: mcp
      namespace: it-operations
      port: 8080
      tools:
        - name: sync_ife_content
          description: "Given a content cycle, synchronize IFE content across fleet."
          inputParameters:
            - name: cycle
              in: body
              type: string
              description: "The content cycle identifier."
          steps:
            - name: get-catalog
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT title, content_type, license_end FROM ife_catalog WHERE cycle = '{{cycle}}' AND status = 'APPROVED'"
            - name: check-licenses
              type: call
              call: "sharepoint.search-documents"
              with:
                query: "IFE license {{cycle}}"
            - name: create-deployment
              type: call
              call: "jira.create-issue"
              with:
                project: "IFE"
                summary: "IFE content deployment: Cycle {{cycle}} - {{get-catalog.row_count}} titles"
                issuetype: "Task"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://alaska.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites/alaskaair.sharepoint.com"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: search
          path: "/drive/root/search(q='{{query}}')"
          inputParameters:
            - name: query
              in: query
          operations:
            - name: search-documents
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://alaska-airlines.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

Enforces IT change freezes by checking the freeze calendar in ServiceNow, blocking pending GitHub deployments, and notifying the engineering team via Slack.

naftiko: "0.5"
info:
  label: "IT Change Freeze Enforcement"
  description: "Enforces IT change freezes by checking the freeze calendar in ServiceNow, blocking pending GitHub deployments, and notifying the engineering team via Slack."
  tags:
    - it-operations
    - servicenow
    - github
    - slack
capability:
  exposes:
    - type: mcp
      namespace: it-operations
      port: 8080
      tools:
        - name: enforce_change_freeze
          description: "Check if a change freeze is active and block pending deployments."
          inputParameters:
            - name: repo
              in: body
              type: string
              description: "The GitHub repository to check."
          steps:
            - name: check-freeze
              type: call
              call: "servicenow.get-freeze-status"
              with:
                date: "today"
            - name: get-pending-deploys
              type: call
              call: "github.get-pending-deployments"
              with:
                repo: "{{repo}}"
            - name: notify-team
              type: call
              call: "slack.post-message"
              with:
                channel: "engineering"
                text: "Change freeze active. {{get-pending-deploys.count}} pending deployments for {{repo}} are blocked."
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://alaskaair.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_pass"
      resources:
        - name: freeze
          path: "/table/change_freeze?sysparm_query=active=true"
          operations:
            - name: get-freeze-status
              method: GET
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: deployments
          path: "/repos/{{repo}}/deployments?task=deploy&per_page=10"
          inputParameters:
            - name: repo
              in: path
          operations:
            - name: get-pending-deployments
              method: GET
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Retrieves an aircraft maintenance Jira ticket by key, returning status, assigned technician, priority, and aircraft tail number.

naftiko: "0.5"
info:
  label: "Jira Maintenance Ticket Lookup"
  description: "Retrieves an aircraft maintenance Jira ticket by key, returning status, assigned technician, priority, and aircraft tail number."
  tags:
    - maintenance
    - jira
capability:
  exposes:
    - type: mcp
      namespace: maintenance
      port: 8080
      tools:
        - name: get-maintenance-ticket
          description: "Given a Jira ticket key, retrieve the maintenance task details."
          inputParameters:
            - name: ticket_key
              in: body
              type: string
              description: "The Jira ticket key, e.g. MX-4567."
          call: "jira.get-issue"
          with:
            issue_key: "{{ticket_key}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.fields.status.name"
            - name: assignee
              type: string
              mapping: "$.fields.assignee.displayName"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://alaska-airlines.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue/{{issue_key}}"
          inputParameters:
            - name: issue_key
              in: path
          operations:
            - name: get-issue
              method: GET

Queries LinkedIn Talent Solutions for candidates with airline or travel industry experience matching active Alaska Airlines recruiting requisitions, and creates Jira recruiting tasks for each qualified candidate profile found.

naftiko: "0.5"
info:
  label: "LinkedIn Corporate Travel Talent Pipeline"
  description: "Queries LinkedIn Talent Solutions for candidates with airline or travel industry experience matching active Alaska Airlines recruiting requisitions, and creates Jira recruiting tasks for each qualified candidate profile found."
  tags:
    - hr
    - recruiting
    - linkedin
    - jira
capability:
  exposes:
    - type: mcp
      namespace: talent-acquisition
      port: 8080
      tools:
        - name: enrich-talent-pipeline
          description: "Given a LinkedIn job posting ID and role discipline, retrieve matching candidate profiles from LinkedIn and create a Jira recruiting task for follow-up. Use when sourcing candidates for Alaska Airlines corporate or operations roles."
          inputParameters:
            - name: job_posting_id
              in: body
              type: string
              description: "The LinkedIn job posting ID for the active requisition."
            - name: discipline
              in: body
              type: string
              description: "The role discipline to filter candidates (e.g., Operations, Technology, Commercial)."
          steps:
            - name: get-candidates
              type: call
              call: "linkedin-talent.search-candidates"
              with:
                jobPostingId: "{{job_posting_id}}"
                discipline: "{{discipline}}"
            - name: create-recruiter-task
              type: call
              call: "jira-recruiting.create-issue"
              with:
                project_key: "RECRUIT"
                summary: "Candidate pipeline: {{discipline}} — {{job_posting_id}}"
                description: "{{get-candidates.total_count}} candidates identified for {{discipline}} requisition."
                issue_type: "Task"
  consumes:
    - type: http
      namespace: linkedin-talent
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: candidates
          path: "/talentSearch"
          inputParameters:
            - name: jobPostingId
              in: query
            - name: discipline
              in: query
          operations:
            - name: search-candidates
              method: GET
    - type: http
      namespace: jira-recruiting
      baseUri: "https://alaska-airlines.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issue
          path: "/issue"
          inputParameters:
            - name: project_key
              in: body
            - name: summary
              in: body
            - name: description
              in: body
            - name: issue_type
              in: body
          operations:
            - name: create-issue
              method: POST

Identifies members due for tier downgrade by querying activity in Snowflake, updating status in Salesforce, and sending retention offer emails via Microsoft Graph.

naftiko: "0.5"
info:
  label: "Loyalty Tier Downgrade Notification"
  description: "Identifies members due for tier downgrade by querying activity in Snowflake, updating status in Salesforce, and sending retention offer emails via Microsoft Graph."
  tags:
    - loyalty
    - snowflake
    - salesforce
    - microsoft-graph
capability:
  exposes:
    - type: mcp
      namespace: loyalty
      port: 8080
      tools:
        - name: process_tier_downgrades
          description: "Given a cycle date, identify and process tier downgrades with retention offers."
          inputParameters:
            - name: cycle_date
              in: body
              type: string
              description: "The tier evaluation date."
          steps:
            - name: get-downgrade-candidates
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT member_id, current_tier, qualifying_miles, email FROM loyalty_members WHERE qualifying_miles < tier_threshold AND eval_date = '{{cycle_date}}'"
            - name: update-salesforce
              type: call
              call: "salesforce.update-tier-status"
              with:
                cycle_date: "{{cycle_date}}"
                count: "{{get-downgrade-candidates.row_count}}"
            - name: send-retention-emails
              type: call
              call: "msgraph.send-mail"
              with:
                to: "loyalty-ops@alaskaair.com"
                subject: "Tier downgrade cycle: {{cycle_date}}"
                body: "{{get-downgrade-candidates.row_count}} members identified for tier downgrade. Retention offers initiated."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://alaska.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://alaskaair.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: tiers
          path: "/sobjects/Loyalty_Tier_Change__c"
          operations:
            - name: update-tier-status
              method: POST
    - type: http
      namespace: msgraph
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/me/sendMail"
          operations:
            - name: send-mail
              method: POST

Retrieves recent messages from the flight operations Microsoft Teams channel, returning message content, sender, and timestamp.

naftiko: "0.5"
info:
  label: "Microsoft Teams Flight Ops Channel Lookup"
  description: "Retrieves recent messages from the flight operations Microsoft Teams channel, returning message content, sender, and timestamp."
  tags:
    - flight-operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: flight-ops
      port: 8080
      tools:
        - name: get-flight-ops-messages
          description: "Retrieve the latest messages from the flight ops Teams channel."
          inputParameters:
            - name: channel_id
              in: body
              type: string
              description: "The Teams channel ID."
          call: "msteams.get-messages"
          with:
            channel_id: "{{channel_id}}"
          outputParameters:
            - name: messages
              type: array
              mapping: "$.value"
  consumes:
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/flight-ops/channels/{{channel_id}}/messages?$top=10"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: get-messages
              method: GET

Detects potential loyalty program fraud by analyzing redemption patterns in Snowflake, checking account flags in Salesforce, and creating a ServiceNow investigation ticket.

naftiko: "0.5"
info:
  label: "Mileage Plan Fraud Detection"
  description: "Detects potential loyalty program fraud by analyzing redemption patterns in Snowflake, checking account flags in Salesforce, and creating a ServiceNow investigation ticket."
  tags:
    - loyalty
    - snowflake
    - salesforce
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: loyalty
      port: 8080
      tools:
        - name: detect_loyalty_fraud
          description: "Given a member ID, analyze redemption patterns and flag suspicious activity."
          inputParameters:
            - name: member_id
              in: body
              type: string
              description: "The Mileage Plan member ID."
          steps:
            - name: get-patterns
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT redemption_count, total_miles, avg_per_txn FROM loyalty_redemptions WHERE member_id = '{{member_id}}' AND period = CURRENT_MONTH()"
            - name: get-account
              type: call
              call: "salesforce.get-member"
              with:
                member_id: "{{member_id}}"
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Fraud investigation: Member {{member_id}}"
                description: "Redemptions: {{get-patterns.data[0].REDEMPTION_COUNT}}. Account tier: {{get-account.tier}}"
                category: "fraud"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://alaska.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://alaskaair.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: members
          path: "/sobjects/Loyalty_Member__c/{{member_id}}"
          inputParameters:
            - name: member_id
              in: path
          operations:
            - name: get-member
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://alaskaair.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_pass"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST

Reconciles partner airline mileage accruals by pulling transaction data from Snowflake, comparing with partner reports in SharePoint, and creating a ServiceNow ticket for discrepancies.

naftiko: "0.5"
info:
  label: "Mileage Plan Partnership Reconciliation"
  description: "Reconciles partner airline mileage accruals by pulling transaction data from Snowflake, comparing with partner reports in SharePoint, and creating a ServiceNow ticket for discrepancies."
  tags:
    - loyalty
    - snowflake
    - sharepoint
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: loyalty
      port: 8080
      tools:
        - name: reconcile_partnerships
          description: "Given a partner code and period, reconcile mileage accruals."
          inputParameters:
            - name: partner_code
              in: body
              type: string
              description: "The partner airline code."
            - name: period
              in: body
              type: string
              description: "Reconciliation period."
          steps:
            - name: get-our-data
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT SUM(miles) as total_miles, COUNT(*) as txn_count FROM partner_accruals WHERE partner = '{{partner_code}}' AND period = '{{period}}'"
            - name: get-partner-report
              type: call
              call: "sharepoint.search-documents"
              with:
                query: "{{partner_code}} reconciliation {{period}}"
            - name: flag-discrepancies
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Partner recon: {{partner_code}} - {{period}}"
                description: "Our records: {{get-our-data.data[0].TXN_COUNT}} txns, {{get-our-data.data[0].TOTAL_MILES}} miles. Partner report: {{get-partner-report.result_count}} docs found."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://alaska.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites/alaskaair.sharepoint.com"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: search
          path: "/drive/root/search(q='{{query}}')"
          inputParameters:
            - name: query
              in: query
          operations:
            - name: search-documents
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://alaskaair.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_pass"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST

Runs network planning scenarios by querying demand data from Snowflake, pulling cost assumptions from Oracle ERP, and posting scenario results to the network planning Teams channel.

naftiko: "0.5"
info:
  label: "Network Planning Scenario Analysis"
  description: "Runs network planning scenarios by querying demand data from Snowflake, pulling cost assumptions from Oracle ERP, and posting scenario results to the network planning Teams channel."
  tags:
    - commercial
    - snowflake
    - oracle-erp
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: commercial
      port: 8080
      tools:
        - name: run_scenario_analysis
          description: "Given a route and scenario parameters, run the network planning analysis."
          inputParameters:
            - name: route
              in: body
              type: string
              description: "The route to analyze (e.g., SEA-LAX)."
            - name: frequency
              in: body
              type: string
              description: "Proposed daily frequency."
          steps:
            - name: get-demand
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT avg_demand, seasonality_factor, competitor_share FROM route_demand WHERE route = '{{route}}'"
            - name: get-costs
              type: call
              call: "oracle-erp.get-route-costs"
              with:
                route: "{{route}}"
                frequency: "{{frequency}}"
            - name: post-results
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "network-planning"
                message: "Scenario: {{route}} at {{frequency}}x daily. Demand: {{get-demand.data[0].AVG_DEMAND}}. Est. cost: {{get-costs.total_cost}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://alaska.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: oracle-erp
      baseUri: "https://alaska-erp.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: basic
        username: "$secrets.oracle_erp_user"
        password: "$secrets.oracle_erp_pass"
      resources:
        - name: costs
          path: "/routeCosts?route={{route}}&frequency={{frequency}}"
          inputParameters:
            - name: route
              in: query
            - name: frequency
              in: query
          operations:
            - name: get-route-costs
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/network-planning/channels/general/messages"
          operations:
            - name: send-message
              method: POST

When a new hire is created in Workday, opens a ServiceNow onboarding ticket, provisions a Microsoft Teams workspace, and sends a welcome notification to the hiring manager. Ensures day-one readiness for Alaska Airlines crew and corporate staff.

naftiko: "0.5"
info:
  label: "New Employee Onboarding Orchestration"
  description: "When a new hire is created in Workday, opens a ServiceNow onboarding ticket, provisions a Microsoft Teams workspace, and sends a welcome notification to the hiring manager. Ensures day-one readiness for Alaska Airlines crew and corporate staff."
  tags:
    - hr
    - onboarding
    - workday
    - servicenow
    - microsoft-teams
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 across ServiceNow for ticket creation and Microsoft Teams for welcome notification. Invoke when a new hire record is confirmed in Workday."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday worker ID for the new hire."
            - name: start_date
              in: body
              type: string
              description: "The new hire's start date in ISO 8601 format (YYYY-MM-DD)."
            - name: department
              in: body
              type: string
              description: "The department the employee is joining (e.g., Flight Operations, Customer Service)."
          steps:
            - name: get-worker
              type: call
              call: "workday-onboard.get-worker"
              with:
                employee_id: "{{employee_id}}"
            - name: create-onboarding-ticket
              type: call
              call: "servicenow-onboard.create-incident"
              with:
                short_description: "Onboarding: {{get-worker.display_name}}"
                caller_id: "{{get-worker.manager_email}}"
                assignment_group: "IT Onboarding"
            - name: notify-manager
              type: call
              call: "msteams-hr.send-message"
              with:
                channel_id: "{{department}}-general"
                message: "Welcome {{get-worker.display_name}} joining on {{start_date}}! Onboarding ticket: {{create-onboarding-ticket.number}}"
  consumes:
    - type: http
      namespace: workday-onboard
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: worker
          path: "/alaska-airlines/workers/{{employee_id}}"
          inputParameters:
            - name: employee_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: servicenow-onboard
      baseUri: "https://alaska-airlines.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_pass"
      resources:
        - name: incident
          path: "/table/incident"
          inputParameters:
            - name: short_description
              in: body
            - name: caller_id
              in: body
            - name: assignment_group
              in: body
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams-hr
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: message
          path: "/teams/{{channel_id}}/channels/messages"
          inputParameters:
            - name: channel_id
              in: path
            - name: message
              in: body
          operations:
            - name: send-message
              method: POST

Coordinates new route launches by creating marketing tasks in Jira, setting up revenue monitoring in Snowflake, and notifying commercial teams via Microsoft Teams.

naftiko: "0.5"
info:
  label: "New Route Launch Coordination"
  description: "Coordinates new route launches by creating marketing tasks in Jira, setting up revenue monitoring in Snowflake, and notifying commercial teams via Microsoft Teams."
  tags:
    - commercial
    - jira
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: commercial
      port: 8080
      tools:
        - name: coordinate_route_launch
          description: "Given route details, coordinate the launch across marketing, revenue, and commercial teams."
          inputParameters:
            - name: origin
              in: body
              type: string
              description: "Origin IATA code."
            - name: destination
              in: body
              type: string
              description: "Destination IATA code."
            - name: launch_date
              in: body
              type: string
              description: "Launch date in YYYY-MM-DD."
          steps:
            - name: create-marketing-epic
              type: call
              call: "jira.create-issue"
              with:
                project: "MKT"
                summary: "New route launch: {{origin}}-{{destination}} on {{launch_date}}"
                issuetype: "Epic"
            - name: setup-monitoring
              type: call
              call: "snowflake.run-query"
              with:
                query: "INSERT INTO route_monitoring (origin, destination, launch_date, status) VALUES ('{{origin}}', '{{destination}}', '{{launch_date}}', 'ACTIVE')"
            - name: notify-commercial
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "commercial-planning"
                message: "New route {{origin}}-{{destination}} launching {{launch_date}}. Marketing epic: {{create-marketing-epic.key}}. Revenue monitoring active."
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://alaska-airlines.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: snowflake
      baseUri: "https://alaska.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/commercial-planning/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Retrieves all application assignments for an Okta user by email, returning app names and assignment status for access review.

naftiko: "0.5"
info:
  label: "Okta Employee Access Review Lookup"
  description: "Retrieves all application assignments for an Okta user by email, returning app names and assignment status for access review."
  tags:
    - security
    - okta
    - identity
capability:
  exposes:
    - type: mcp
      namespace: identity
      port: 8080
      tools:
        - name: get-user-apps
          description: "Given an Okta user email, retrieve all assigned applications for access review."
          inputParameters:
            - name: user_email
              in: body
              type: string
              description: "The user's Okta login email."
          call: "okta.get-user-apps"
          with:
            user_email: "{{user_email}}"
          outputParameters:
            - name: apps
              type: array
              mapping: "$.appLinks"
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://alaskaair.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: user-apps
          path: "/users/{{user_email}}/appLinks"
          inputParameters:
            - name: user_email
              in: path
          operations:
            - name: get-user-apps
              method: GET

Handles inflight WiFi incidents by retrieving connectivity data from Datadog, identifying the affected aircraft in Snowflake, and creating a vendor escalation ticket in ServiceNow.

naftiko: "0.5"
info:
  label: "Onboard WiFi Incident Handler"
  description: "Handles inflight WiFi incidents by retrieving connectivity data from Datadog, identifying the affected aircraft in Snowflake, and creating a vendor escalation ticket in ServiceNow."
  tags:
    - it-operations
    - datadog
    - snowflake
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: it-operations
      port: 8080
      tools:
        - name: handle_wifi_incident
          description: "Given a flight number, investigate WiFi issues and escalate to the vendor."
          inputParameters:
            - name: flight_number
              in: body
              type: string
              description: "The flight number."
          steps:
            - name: get-connectivity
              type: call
              call: "datadog.get-wifi-metrics"
              with:
                flight: "{{flight_number}}"
            - name: get-aircraft
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT tail_number, wifi_vendor, equipment_type FROM flight_assignments WHERE flight_number = '{{flight_number}}'"
            - name: create-vendor-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "WiFi incident: {{flight_number}} - {{get-aircraft.data[0].TAIL_NUMBER}}"
                description: "Connectivity: {{get-connectivity.uptime_pct}}%. Vendor: {{get-aircraft.data[0].WIFI_VENDOR}}"
                category: "vendor_escalation"
  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: wifi
          path: "/query?query=wifi.uptime{flight:{{flight}}}"
          inputParameters:
            - name: flight
              in: query
          operations:
            - name: get-wifi-metrics
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://alaska.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://alaskaair.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_pass"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST

Retrieves supplier invoices from Oracle ERP pending approval, validates invoice details against purchase orders, and routes approved invoices for payment. Supports Alaska Airlines accounts payable processing for vendor payments.

naftiko: "0.5"
info:
  label: "Oracle ERP Accounts Payable Invoice Processing"
  description: "Retrieves supplier invoices from Oracle ERP pending approval, validates invoice details against purchase orders, and routes approved invoices for payment. Supports Alaska Airlines accounts payable processing for vendor payments."
  tags:
    - finance
    - accounts-payable
    - oracle
capability:
  exposes:
    - type: mcp
      namespace: ap-processing
      port: 8080
      tools:
        - name: process-ap-invoice
          description: "Given an Oracle ERP invoice ID and PO number, retrieve invoice details, validate against the purchase order, and approve for payment in Oracle. Use when a supplier invoice requires three-way match validation."
          inputParameters:
            - name: invoice_id
              in: body
              type: string
              description: "The Oracle ERP invoice ID to process."
            - name: po_number
              in: body
              type: string
              description: "The purchase order number for three-way matching."
          steps:
            - name: get-invoice
              type: call
              call: "oracle-ap-invoice.get-invoice"
              with:
                InvoiceId: "{{invoice_id}}"
            - name: get-purchase-order
              type: call
              call: "oracle-ap-po.get-order"
              with:
                PONumber: "{{po_number}}"
            - name: approve-invoice
              type: call
              call: "oracle-ap-invoice.approve-invoice"
              with:
                InvoiceId: "{{invoice_id}}"
                ApprovalStatus: "APPROVED"
  consumes:
    - type: http
      namespace: oracle-ap-invoice
      baseUri: "https://alaska-airlines.oraclecloud.com/fscmRestApi/resources/11.13.18.05"
      authentication:
        type: basic
        username: "$secrets.oracle_erp_user"
        password: "$secrets.oracle_erp_pass"
      resources:
        - name: invoice
          path: "/invoices/{{InvoiceId}}"
          inputParameters:
            - name: InvoiceId
              in: path
          operations:
            - name: get-invoice
              method: GET
            - name: approve-invoice
              method: PATCH
    - type: http
      namespace: oracle-ap-po
      baseUri: "https://alaska-airlines.oraclecloud.com/fscmRestApi/resources/11.13.18.05"
      authentication:
        type: basic
        username: "$secrets.oracle_erp_user"
        password: "$secrets.oracle_erp_pass"
      resources:
        - name: order
          path: "/purchaseOrders/{{PONumber}}"
          inputParameters:
            - name: PONumber
              in: path
          operations:
            - name: get-order
              method: GET

Retrieves an aircraft fixed asset record from Oracle ERP by asset number, returning book value, depreciation schedule, and acquisition date.

naftiko: "0.5"
info:
  label: "Oracle ERP Asset Lookup"
  description: "Retrieves an aircraft fixed asset record from Oracle ERP by asset number, returning book value, depreciation schedule, and acquisition date."
  tags:
    - finance
    - oracle-erp
    - fleet
capability:
  exposes:
    - type: mcp
      namespace: finance
      port: 8080
      tools:
        - name: get-aircraft-asset
          description: "Given an Oracle asset number, retrieve the aircraft fixed asset details."
          inputParameters:
            - name: asset_number
              in: body
              type: string
              description: "The Oracle ERP fixed asset number."
          call: "oracle-erp.get-asset"
          with:
            asset_number: "{{asset_number}}"
          outputParameters:
            - name: book_value
              type: string
              mapping: "$.NetBookValue"
            - name: acquisition_date
              type: string
              mapping: "$.AcquisitionDate"
  consumes:
    - type: http
      namespace: oracle-erp
      baseUri: "https://alaska-erp.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: basic
        username: "$secrets.oracle_erp_user"
        password: "$secrets.oracle_erp_pass"
      resources:
        - name: assets
          path: "/fixedAssets/{{asset_number}}"
          inputParameters:
            - name: asset_number
              in: path
          operations:
            - name: get-asset
              method: GET

Processes budget transfers by validating the request in Oracle ERP, checking available budget in Snowflake, and logging the approval in ServiceNow.

naftiko: "0.5"
info:
  label: "Oracle ERP Budget Transfer Workflow"
  description: "Processes budget transfers by validating the request in Oracle ERP, checking available budget in Snowflake, and logging the approval in ServiceNow."
  tags:
    - finance
    - oracle-erp
    - snowflake
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: finance
      port: 8080
      tools:
        - name: process_budget_transfer
          description: "Given source and target cost centers and amount, process the budget transfer."
          inputParameters:
            - name: source_cc
              in: body
              type: string
              description: "Source cost center."
            - name: target_cc
              in: body
              type: string
              description: "Target cost center."
            - name: amount
              in: body
              type: string
              description: "Transfer amount."
          steps:
            - name: validate-budget
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT available_budget FROM cost_center_budgets WHERE cost_center = '{{source_cc}}'"
            - name: execute-transfer
              type: call
              call: "oracle-erp.create-budget-transfer"
              with:
                source: "{{source_cc}}"
                target: "{{target_cc}}"
                amount: "{{amount}}"
            - name: log-approval
              type: call
              call: "servicenow.create-record"
              with:
                table: "u_budget_transfers"
                source: "{{source_cc}}"
                target: "{{target_cc}}"
                amount: "{{amount}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://alaska.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: oracle-erp
      baseUri: "https://alaska-erp.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: basic
        username: "$secrets.oracle_erp_user"
        password: "$secrets.oracle_erp_pass"
      resources:
        - name: budget-transfers
          path: "/budgetTransfers"
          operations:
            - name: create-budget-transfer
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://alaskaair.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_pass"
      resources:
        - name: records
          path: "/table/{{table}}"
          inputParameters:
            - name: table
              in: path
          operations:
            - name: create-record
              method: POST

Retrieves an accounts payable invoice from Oracle ERP by invoice number and returns status, supplier, amount, and due date.

naftiko: "0.5"
info:
  label: "Oracle ERP Invoice Status"
  description: "Retrieves an accounts payable invoice from Oracle ERP by invoice number and returns status, supplier, amount, and due date."
  tags:
    - finance
    - accounts-payable
    - oracle
    - erp
capability:
  exposes:
    - type: mcp
      namespace: erp
      port: 8080
      tools:
        - name: get-invoice-status
          description: "Look up an Oracle ERP AP invoice. Returns status, supplier, amount, and due date."
          inputParameters:
            - name: invoice_number
              in: body
              type: string
              description: "The Oracle invoice number."
          call: oracle.get-invoice
          with:
            invoice_number: "{{invoice_number}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.InvoiceStatus"
            - name: supplier
              type: string
              mapping: "$.Supplier"
            - name: amount
              type: string
              mapping: "$.InvoiceAmount"
  consumes:
    - type: http
      namespace: oracle
      baseUri: "https://alaska-airlines-erp.oracle.com/fscmRestApi/resources/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_token"
      resources:
        - name: invoices
          path: "/payablesInvoices/{{invoice_number}}"
          inputParameters:
            - name: invoice_number
              in: path
          operations:
            - name: get-invoice
              method: GET

Retrieves a journal entry from Oracle ERP by header ID, returning posting status, ledger, period, and total debits and credits.

naftiko: "0.5"
info:
  label: "Oracle ERP Journal Entry Lookup"
  description: "Retrieves a journal entry from Oracle ERP by header ID, returning posting status, ledger, period, and total debits and credits."
  tags:
    - finance
    - oracle-erp
capability:
  exposes:
    - type: mcp
      namespace: finance
      port: 8080
      tools:
        - name: get-journal-entry
          description: "Given a journal header ID, retrieve the journal entry details from Oracle ERP."
          inputParameters:
            - name: header_id
              in: body
              type: string
              description: "The Oracle GL journal header ID."
          call: "oracle-erp.get-journal"
          with:
            header_id: "{{header_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.Status"
            - name: total_debits
              type: string
              mapping: "$.TotalDebits"
  consumes:
    - type: http
      namespace: oracle-erp
      baseUri: "https://alaska-erp.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: basic
        username: "$secrets.oracle_erp_user"
        password: "$secrets.oracle_erp_pass"
      resources:
        - name: journals
          path: "/journals/{{header_id}}"
          inputParameters:
            - name: header_id
              in: path
          operations:
            - name: get-journal
              method: GET

Retrieves a purchase order from Oracle ERP by PO number, returning status, supplier name, total amount, and currency for procurement tracking.

naftiko: "0.5"
info:
  label: "Oracle ERP Purchase Order Lookup"
  description: "Retrieves a purchase order from Oracle ERP by PO number, returning status, supplier name, total amount, and currency for procurement tracking."
  tags:
    - finance
    - procurement
    - oracle
    - erp
capability:
  exposes:
    - type: mcp
      namespace: erp
      port: 8080
      tools:
        - name: get-purchase-order
          description: "Look up an Alaska Airlines Oracle ERP purchase order. Returns status, supplier, total amount, and currency."
          inputParameters:
            - name: po_number
              in: body
              type: string
              description: "The Oracle purchase order number."
          call: oracle.get-po
          with:
            po_number: "{{po_number}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.OrderStatus"
            - name: supplier
              type: string
              mapping: "$.Supplier"
            - name: total_amount
              type: string
              mapping: "$.TotalAmount"
  consumes:
    - type: http
      namespace: oracle
      baseUri: "https://alaska-airlines-erp.oracle.com/fscmRestApi/resources/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_token"
      resources:
        - name: purchase-orders
          path: "/purchaseOrders/{{po_number}}"
          inputParameters:
            - name: po_number
              in: path
          operations:
            - name: get-po
              method: GET

Retrieves the current accounts payable balance for a vendor from Oracle ERP by vendor ID, returning outstanding amount and payment terms.

naftiko: "0.5"
info:
  label: "Oracle ERP Vendor Balance Lookup"
  description: "Retrieves the current accounts payable balance for a vendor from Oracle ERP by vendor ID, returning outstanding amount and payment terms."
  tags:
    - finance
    - oracle-erp
capability:
  exposes:
    - type: mcp
      namespace: finance
      port: 8080
      tools:
        - name: get-vendor-balance
          description: "Given a vendor ID, retrieve the AP balance and payment terms from Oracle ERP."
          inputParameters:
            - name: vendor_id
              in: body
              type: string
              description: "The Oracle ERP vendor ID."
          call: "oracle-erp.get-vendor-balance"
          with:
            vendor_id: "{{vendor_id}}"
          outputParameters:
            - name: outstanding_amount
              type: string
              mapping: "$.OutstandingAmount"
            - name: payment_terms
              type: string
              mapping: "$.PaymentTerms"
  consumes:
    - type: http
      namespace: oracle-erp
      baseUri: "https://alaska-erp.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: basic
        username: "$secrets.oracle_erp_user"
        password: "$secrets.oracle_erp_pass"
      resources:
        - name: vendors
          path: "/suppliers/{{vendor_id}}"
          inputParameters:
            - name: vendor_id
              in: path
          operations:
            - name: get-vendor-balance
              method: GET

Automates Oracle ERP period close steps, validates GL balances, refreshes Power BI financial dashboard, and posts close status to the finance Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Oracle Period Close Automation"
  description: "Automates Oracle ERP period close steps, validates GL balances, refreshes Power BI financial dashboard, and posts close status to the finance Microsoft Teams channel."
  tags:
    - finance
    - period-close
    - oracle
    - power-bi
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: finance
      port: 8080
      tools:
        - name: run-period-close
          description: "Given a fiscal period, run Oracle ERP close validation, refresh Power BI dashboard, and post status to finance Teams."
          inputParameters:
            - name: fiscal_period
              in: body
              type: string
              description: "The fiscal period to close, e.g. 2025-12."
          steps:
            - name: validate-balances
              type: call
              call: oracle.validate-gl-close
              with:
                period: "{{fiscal_period}}"
            - name: refresh-dashboard
              type: call
              call: powerbi.trigger-refresh
              with:
                dataset_id: "$secrets.powerbi_finance_dataset_id"
            - name: post-status
              type: call
              call: msteams.send-message
              with:
                channel_id: "$secrets.teams_finance_channel_id"
                text: "PERIOD CLOSE: {{fiscal_period}} — Status: {{validate-balances.status}}, Unreconciled: {{validate-balances.unreconciled_count}} accounts."
  consumes:
    - type: http
      namespace: oracle
      baseUri: "https://alaska-airlines-erp.oracle.com/fscmRestApi/resources/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_token"
      resources:
        - name: gl-close
          path: "/generalLedgerPeriodClose"
          operations:
            - name: validate-gl-close
              method: POST
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: refreshes
          path: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: trigger-refresh
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves the current on-call duty manager from the PagerDuty flight operations schedule, returning name and contact details.

naftiko: "0.5"
info:
  label: "PagerDuty Flight Ops On-Call Lookup"
  description: "Retrieves the current on-call duty manager from the PagerDuty flight operations schedule, returning name and contact details."
  tags:
    - flight-operations
    - pagerduty
capability:
  exposes:
    - type: mcp
      namespace: flight-ops
      port: 8080
      tools:
        - name: get-flight-ops-oncall
          description: "Retrieve the currently on-call flight operations duty manager."
          inputParameters:
            - name: schedule_id
              in: body
              type: string
              description: "The PagerDuty schedule ID for flight ops."
          call: "pagerduty.get-oncall"
          with:
            schedule_id: "{{schedule_id}}"
          outputParameters:
            - name: name
              type: string
              mapping: "$.oncalls[0].user.name"
            - name: email
              type: string
              mapping: "$.oncalls[0].user.email"
  consumes:
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: bearer
        token: "$secrets.pagerduty_api_key"
      resources:
        - name: oncalls
          path: "/oncalls?schedule_ids[]={{schedule_id}}"
          inputParameters:
            - name: schedule_id
              in: query
          operations:
            - name: get-oncall
              method: GET

Processes passenger compensation claims by retrieving the booking from Salesforce, calculating entitlement from Snowflake delay data, and sending the compensation offer via email.

naftiko: "0.5"
info:
  label: "Passenger Compensation Workflow"
  description: "Processes passenger compensation claims by retrieving the booking from Salesforce, calculating entitlement from Snowflake delay data, and sending the compensation offer via email."
  tags:
    - customer-service
    - salesforce
    - snowflake
    - microsoft-graph
capability:
  exposes:
    - type: mcp
      namespace: customer-service
      port: 8080
      tools:
        - name: process_compensation
          description: "Given a PNR and flight number, process the compensation claim."
          inputParameters:
            - name: pnr
              in: body
              type: string
              description: "The passenger name record."
            - name: flight_number
              in: body
              type: string
              description: "The affected flight number."
          steps:
            - name: get-booking
              type: call
              call: "salesforce.get-booking"
              with:
                pnr: "{{pnr}}"
            - name: get-delay-data
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT delay_minutes, delay_reason FROM flight_delays WHERE flight_number = '{{flight_number}}' ORDER BY flight_date DESC LIMIT 1"
            - name: send-offer
              type: call
              call: "msgraph.send-mail"
              with:
                to: "{{get-booking.passenger_email}}"
                subject: "Compensation for flight {{flight_number}}"
                body: "Dear {{get-booking.passenger_name}}, regarding your delayed flight {{flight_number}} ({{get-delay-data.data[0].DELAY_MINUTES}} min delay), we would like to offer compensation."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://alaskaair.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: bookings
          path: "/query?q=SELECT+Id,Passenger_Email__c,Passenger_Name__c+FROM+Booking__c+WHERE+PNR__c='{{pnr}}'"
          inputParameters:
            - name: pnr
              in: query
          operations:
            - name: get-booking
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://alaska.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: msgraph
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/me/sendMail"
          operations:
            - name: send-mail
              method: POST

When a high-priority passenger complaint is received in Salesforce, creates a ServiceNow case for investigation, logs analytics in Snowflake, and notifies customer relations via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Passenger Complaint Escalation Workflow"
  description: "When a high-priority passenger complaint is received in Salesforce, creates a ServiceNow case for investigation, logs analytics in Snowflake, and notifies customer relations via Microsoft Teams."
  tags:
    - customer-service
    - complaints
    - salesforce
    - servicenow
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: customer-service
      port: 8080
      tools:
        - name: escalate-complaint
          description: "Given a Salesforce case ID for a passenger complaint, create ServiceNow investigation case, log to Snowflake, and notify customer relations."
          inputParameters:
            - name: case_id
              in: body
              type: string
              description: "The Salesforce case ID."
          steps:
            - name: get-case
              type: call
              call: salesforce.get-case
              with:
                case_id: "{{case_id}}"
            - name: create-investigation
              type: call
              call: servicenow.create-case
              with:
                short_description: "Passenger complaint: {{get-case.subject}}"
                description: "{{get-case.description}}"
                priority: "{{get-case.priority}}"
            - name: log-analytics
              type: call
              call: snowflake.insert-record
              with:
                table: "CUSTOMER_SERVICE.COMPLAINTS"
                case_id: "{{case_id}}"
                category: "{{get-case.category}}"
            - name: notify-team
              type: call
              call: msteams.send-message
              with:
                channel_id: "$secrets.teams_cs_channel_id"
                text: "COMPLAINT: {{get-case.subject}} — Priority: {{get-case.priority}}. SNOW: {{create-investigation.number}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://alaska-airlines.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: cases
          path: "/sobjects/Case/{{case_id}}"
          inputParameters:
            - name: case_id
              in: path
          operations:
            - name: get-case
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://alaskaairlines.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: cases
          path: "/table/sn_customerservice_case"
          operations:
            - name: create-case
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://alaska-airlines.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: insert-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Queries Oracle ERP for Alaska Airlines financial period close status across cost centers, identifies open items, and triggers a Power BI executive dashboard refresh. Supports month-end financial close for the finance team.

naftiko: "0.5"
info:
  label: "Period Close Financial Status Check"
  description: "Queries Oracle ERP for Alaska Airlines financial period close status across cost centers, identifies open items, and triggers a Power BI executive dashboard refresh. Supports month-end financial close for the finance team."
  tags:
    - finance
    - period-close
    - oracle
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: finance-close
      port: 8080
      tools:
        - name: get-period-close-status
          description: "Given a fiscal period and ledger ID, retrieve open/closed status from Oracle ERP and trigger a Power BI finance dashboard refresh. Use during month-end close to monitor financial period status."
          inputParameters:
            - name: fiscal_period
              in: body
              type: string
              description: "The fiscal period in YYYY-MM format."
            - name: ledger_id
              in: body
              type: string
              description: "The Oracle ERP ledger ID for Alaska Airlines."
          steps:
            - name: get-period-status
              type: call
              call: "oracle-erp.get-period-status"
              with:
                PeriodName: "{{fiscal_period}}"
                LedgerId: "{{ledger_id}}"
            - name: refresh-powerbi
              type: call
              call: "powerbi-finance.trigger-refresh"
              with:
                dataset_id: "$secrets.powerbi_period_close_dataset_id"
  consumes:
    - type: http
      namespace: oracle-erp
      baseUri: "https://alaska-airlines.oraclecloud.com/fscmRestApi/resources/11.13.18.05"
      authentication:
        type: basic
        username: "$secrets.oracle_erp_user"
        password: "$secrets.oracle_erp_pass"
      resources:
        - name: period-status
          path: "/openingPeriods"
          inputParameters:
            - name: PeriodName
              in: query
            - name: LedgerId
              in: query
          operations:
            - name: get-period-status
              method: GET
    - type: http
      namespace: powerbi-finance
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: refresh
          path: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: trigger-refresh
              method: POST

Monitors pilot training certificate expiration dates in Workday, identifies those expiring within 30 days, and creates training enrollment requests in ServiceNow.

naftiko: "0.5"
info:
  label: "Pilot Training Expiration Alert"
  description: "Monitors pilot training certificate expiration dates in Workday, identifies those expiring within 30 days, and creates training enrollment requests in ServiceNow."
  tags:
    - crew-management
    - workday
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: crew-management
      port: 8080
      tools:
        - name: alert_training_expiration
          description: "Given a fleet type, check for pilots with expiring certifications and create training requests."
          inputParameters:
            - name: fleet_type
              in: body
              type: string
              description: "Aircraft fleet type (e.g., B737, E175)."
          steps:
            - name: get-expiring
              type: call
              call: "workday.get-expiring-certs"
              with:
                fleet_type: "{{fleet_type}}"
                days_ahead: "30"
            - name: create-requests
              type: call
              call: "servicenow.create-request"
              with:
                short_description: "Training renewals: {{fleet_type}} - {{get-expiring.count}} pilots"
                category: "training"
            - name: notify-chief-pilot
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "chief-pilot-{{fleet_type}}"
                message: "{{get-expiring.count}} pilots on {{fleet_type}} have certifications expiring in 30 days. Training request: {{create-requests.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: certifications
          path: "/alaska/workers?certExpiring={{days_ahead}}&fleetType={{fleet_type}}"
          inputParameters:
            - name: fleet_type
              in: query
            - name: days_ahead
              in: query
          operations:
            - name: get-expiring-certs
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://alaskaair.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_pass"
      resources:
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Checks the refresh status of the crew utilization Power BI dataset, returning last refresh time and status.

naftiko: "0.5"
info:
  label: "Power BI Crew Utilization Dashboard Status"
  description: "Checks the refresh status of the crew utilization Power BI dataset, returning last refresh time and status."
  tags:
    - crew-management
    - power-bi
    - analytics
capability:
  exposes:
    - type: mcp
      namespace: analytics
      port: 8080
      tools:
        - name: get-crew-dashboard-refresh
          description: "Retrieve the Power BI crew utilization dataset refresh status."
          inputParameters:
            - name: dataset_id
              in: body
              type: string
              description: "The Power BI dataset ID."
          call: "powerbi.get-refresh"
          with:
            dataset_id: "{{dataset_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.value[0].status"
  consumes:
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: refreshes
          path: "/datasets/{{dataset_id}}/refreshes?$top=1"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: get-refresh
              method: GET

Triggers a Power BI dataset refresh for the on-time performance (OTP) executive dashboard and notifies the operations leadership team in Microsoft Teams. Ensures Alaska Airlines leadership has current OTP data for daily operations reviews.

naftiko: "0.5"
info:
  label: "Power BI On-Time Performance Executive Report Refresh"
  description: "Triggers a Power BI dataset refresh for the on-time performance (OTP) executive dashboard and notifies the operations leadership team in Microsoft Teams. Ensures Alaska Airlines leadership has current OTP data for daily operations reviews."
  tags:
    - reporting
    - power-bi
    - microsoft-teams
    - flight-operations
capability:
  exposes:
    - type: mcp
      namespace: otp-reporting
      port: 8080
      tools:
        - name: refresh-otp-dashboard
          description: "Given a Power BI dataset ID, trigger a refresh of the on-time performance dashboard and notify the operations leadership Teams channel. Use at the start of each business day for daily OTP review."
          inputParameters:
            - name: dataset_id
              in: body
              type: string
              description: "The Power BI dataset ID for the OTP executive dashboard."
            - name: report_date
              in: body
              type: string
              description: "The reporting date in YYYY-MM-DD format."
          steps:
            - name: trigger-powerbi-refresh
              type: call
              call: "powerbi-otp.trigger-refresh"
              with:
                dataset_id: "{{dataset_id}}"
            - name: notify-ops-leadership
              type: call
              call: "msteams-otp.send-message"
              with:
                channel_id: "operations-leadership"
                message: "OTP dashboard refreshed for {{report_date}}. Dataset: {{dataset_id}}"
  consumes:
    - type: http
      namespace: powerbi-otp
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: refresh
          path: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: trigger-refresh
              method: POST
    - type: http
      namespace: msteams-otp
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: message
          path: "/teams/{{channel_id}}/channels/messages"
          inputParameters:
            - name: channel_id
              in: path
            - name: message
              in: body
          operations:
            - name: send-message
              method: POST

Compiles quarterly DOT reporting data from Snowflake flight operations metrics, validates against Oracle ERP financial data, and archives the report to SharePoint.

naftiko: "0.5"
info:
  label: "Quarterly DOT Reporting Pipeline"
  description: "Compiles quarterly DOT reporting data from Snowflake flight operations metrics, validates against Oracle ERP financial data, and archives the report to SharePoint."
  tags:
    - compliance
    - snowflake
    - oracle-erp
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: compliance
      port: 8080
      tools:
        - name: compile_dot_report
          description: "Given a quarter, compile DOT reporting data and archive it."
          inputParameters:
            - name: quarter
              in: body
              type: string
              description: "The reporting quarter (e.g., 2026-Q1)."
          steps:
            - name: get-ops-data
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT total_flights, on_time_count, cancel_count, pax_total FROM dot_metrics WHERE quarter = '{{quarter}}'"
            - name: get-financials
              type: call
              call: "oracle-erp.get-quarterly-revenue"
              with:
                quarter: "{{quarter}}"
            - name: archive-report
              type: call
              call: "sharepoint.upload-file"
              with:
                folder: "Compliance/DOT/{{quarter}}"
                filename: "dot_report_{{quarter}}.json"
                content: "Flights: {{get-ops-data.data[0].TOTAL_FLIGHTS}}. Revenue: {{get-financials.total_revenue}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://alaska.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: oracle-erp
      baseUri: "https://alaska-erp.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: basic
        username: "$secrets.oracle_erp_user"
        password: "$secrets.oracle_erp_pass"
      resources:
        - name: revenue
          path: "/financials/revenue?quarter={{quarter}}"
          inputParameters:
            - name: quarter
              in: query
          operations:
            - name: get-quarterly-revenue
              method: GET
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites/alaskaair.sharepoint.com"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: files
          path: "/drive/root:/{{folder}}/{{filename}}:/content"
          inputParameters:
            - name: folder
              in: path
            - name: filename
              in: path
          operations:
            - name: upload-file
              method: PUT

Pulls daily revenue data from Snowflake, refreshes Power BI revenue dashboard, and posts a revenue management digest to the commercial Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Revenue Management Daily Digest"
  description: "Pulls daily revenue data from Snowflake, refreshes Power BI revenue dashboard, and posts a revenue management digest to the commercial Microsoft Teams channel."
  tags:
    - revenue-management
    - analytics
    - snowflake
    - power-bi
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: revenue
      port: 8080
      tools:
        - name: generate-revenue-digest
          description: "Pull daily revenue data from Snowflake, refresh Power BI dashboard, and post digest to commercial Teams."
          inputParameters:
            - name: date
              in: body
              type: string
              description: "The reporting date."
          steps:
            - name: query-revenue
              type: call
              call: snowflake.query-daily-revenue
              with:
                date: "{{date}}"
            - name: refresh-dashboard
              type: call
              call: powerbi.trigger-refresh
              with:
                dataset_id: "$secrets.powerbi_revenue_dataset_id"
            - name: post-digest
              type: call
              call: msteams.send-message
              with:
                channel_id: "$secrets.teams_commercial_channel_id"
                text: "REVENUE DIGEST ({{date}}): Total: ${{query-revenue.total_revenue}}, Load Factor: {{query-revenue.load_factor}}%, RASM: ${{query-revenue.rasm}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://alaska-airlines.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: query-daily-revenue
              method: POST
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: refreshes
          path: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: trigger-refresh
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves a Salesforce support case by case number and returns status, priority, owner, and last modified date for customer service tracking.

naftiko: "0.5"
info:
  label: "Salesforce Case Status Lookup"
  description: "Retrieves a Salesforce support case by case number and returns status, priority, owner, and last modified date for customer service tracking."
  tags:
    - customer-service
    - support
    - salesforce
    - crm
capability:
  exposes:
    - type: mcp
      namespace: crm
      port: 8080
      tools:
        - name: get-case-status
          description: "Look up an Alaska Airlines Salesforce support case. Returns status, priority, owner, and last modified date."
          inputParameters:
            - name: case_number
              in: body
              type: string
              description: "The Salesforce case number."
          call: salesforce.get-case
          with:
            case_number: "{{case_number}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.Status"
            - name: priority
              type: string
              mapping: "$.Priority"
            - name: owner
              type: string
              mapping: "$.Owner.Name"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://alaska-airlines.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: cases
          path: "/sobjects/Case/{{case_number}}"
          inputParameters:
            - name: case_number
              in: path
          operations:
            - name: get-case
              method: GET

Retrieves a Mileage Plan member's account details from Salesforce Service Cloud, including tier status, miles balance, and recent activity. Used by customer service agents to resolve loyalty inquiries at the counter or via chat.

naftiko: "0.5"
info:
  label: "Salesforce Customer Loyalty Account Lookup"
  description: "Retrieves a Mileage Plan member's account details from Salesforce Service Cloud, including tier status, miles balance, and recent activity. Used by customer service agents to resolve loyalty inquiries at the counter or via chat."
  tags:
    - crm
    - loyalty
    - salesforce
    - customer-service
capability:
  exposes:
    - type: mcp
      namespace: loyalty-crm
      port: 8080
      tools:
        - name: get-mileage-plan-account
          description: "Given a Mileage Plan member number or email, retrieve account details from Salesforce including elite tier, miles balance, and recent transactions. Use when a customer service agent needs to access a member account."
          inputParameters:
            - name: member_number
              in: body
              type: string
              description: "The Alaska Airlines Mileage Plan member number."
            - name: email
              in: body
              type: string
              description: "The member's email address (alternative lookup key)."
          call: "salesforce-loyalty.search-contacts"
          with:
            q: "SELECT Id, Name, AS_Mileage_Plan__c, AS_Elite_Tier__c, AS_Miles_Balance__c FROM Contact WHERE AS_Mileage_Plan__c = '{{member_number}}'"
          outputParameters:
            - name: member_name
              type: string
              mapping: "$.records[0].Name"
            - name: elite_tier
              type: string
              mapping: "$.records[0].AS_Elite_Tier__c"
            - name: miles_balance
              type: string
              mapping: "$.records[0].AS_Miles_Balance__c"
  consumes:
    - type: http
      namespace: salesforce-loyalty
      baseUri: "https://alaska-airlines.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: contacts
          path: "/query"
          inputParameters:
            - name: q
              in: query
          operations:
            - name: search-contacts
              method: GET

Retrieves recent Net Promoter Score survey responses from Salesforce for Alaska Airlines guests, calculates NPS by route and service class, and writes the results to Snowflake for the customer experience analytics team.

naftiko: "0.5"
info:
  label: "Salesforce Customer NPS Survey Sync"
  description: "Retrieves recent Net Promoter Score survey responses from Salesforce for Alaska Airlines guests, calculates NPS by route and service class, and writes the results to Snowflake for the customer experience analytics team."
  tags:
    - crm
    - customer-experience
    - salesforce
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: cx-analytics
      port: 8080
      tools:
        - name: sync-nps-survey-results
          description: "Given a date range and route filter, retrieve NPS survey responses from Salesforce, compute aggregate scores, and write results to Snowflake. Use for weekly CX analytics reporting."
          inputParameters:
            - name: date_from
              in: body
              type: string
              description: "Start date for NPS survey retrieval in YYYY-MM-DD format."
            - name: date_to
              in: body
              type: string
              description: "End date for NPS survey retrieval in YYYY-MM-DD format."
            - name: route_filter
              in: body
              type: string
              description: "Optional route filter (e.g., SEA-LAX) or 'ALL' for all routes."
          steps:
            - name: get-nps-responses
              type: call
              call: "salesforce-nps.query-surveys"
              with:
                q: "SELECT Id, AS_NPS_Score__c, AS_Route__c, AS_Service_Class__c, CreatedDate FROM AS_Survey__c WHERE CreatedDate >= {{date_from}} AND CreatedDate <= {{date_to}}"
            - name: write-snowflake-nps
              type: call
              call: "snowflake-nps.insert-rows"
              with:
                table: "CX.NPS_SURVEY_RESPONSES"
                data: "{{get-nps-responses.records}}"
  consumes:
    - type: http
      namespace: salesforce-nps
      baseUri: "https://alaska-airlines.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: surveys
          path: "/query"
          inputParameters:
            - name: q
              in: query
          operations:
            - name: query-surveys
              method: GET
    - type: http
      namespace: snowflake-nps
      baseUri: "https://alaska-airlines.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: rows
          path: "/statements"
          inputParameters:
            - name: table
              in: body
            - name: data
              in: body
          operations:
            - name: insert-rows
              method: POST

Retrieves Mileage Plan loyalty member details from Salesforce by member number, returning tier, miles balance, and status.

naftiko: "0.5"
info:
  label: "Salesforce Loyalty Member Lookup"
  description: "Retrieves Mileage Plan loyalty member details from Salesforce by member number, returning tier, miles balance, and status."
  tags:
    - loyalty
    - crm
    - salesforce
    - mileage-plan
capability:
  exposes:
    - type: mcp
      namespace: crm
      port: 8080
      tools:
        - name: get-loyalty-member
          description: "Look up Mileage Plan member details in Salesforce. Returns tier, miles balance, and status."
          inputParameters:
            - name: member_number
              in: body
              type: string
              description: "The Mileage Plan member number."
          call: salesforce.get-member
          with:
            member_number: "{{member_number}}"
          outputParameters:
            - name: tier
              type: string
              mapping: "$.Tier__c"
            - name: miles_balance
              type: string
              mapping: "$.Miles_Balance__c"
            - name: status
              type: string
              mapping: "$.Status__c"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://alaska-airlines.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: loyalty-members
          path: "/sobjects/LoyaltyMember__c/{{member_number}}"
          inputParameters:
            - name: member_number
              in: path
          operations:
            - name: get-member
              method: GET

Retrieves Salesforce opportunity pipeline data for Alaska's corporate travel accounts, computes revenue forecast vs. actuals, and publishes the digest to Snowflake and a Power BI sales dashboard. Supports the corporate sales team's weekly pipeline review.

naftiko: "0.5"
info:
  label: "Salesforce Passenger Revenue Intelligence Digest"
  description: "Retrieves Salesforce opportunity pipeline data for Alaska's corporate travel accounts, computes revenue forecast vs. actuals, and publishes the digest to Snowflake and a Power BI sales dashboard. Supports the corporate sales team's weekly pipeline review."
  tags:
    - crm
    - sales
    - salesforce
    - snowflake
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: sales-reporting
      port: 8080
      tools:
        - name: digest-sales-pipeline
          description: "Given a fiscal quarter and region, retrieve Salesforce opportunity pipeline for corporate travel accounts, write to Snowflake, and refresh the Power BI sales dashboard. Use for weekly corporate sales pipeline reviews."
          inputParameters:
            - name: fiscal_quarter
              in: body
              type: string
              description: "The fiscal quarter to report on (e.g., 2025-Q2)."
            - name: region
              in: body
              type: string
              description: "The sales region filter (e.g., West, National, International)."
          steps:
            - name: get-pipeline
              type: call
              call: "salesforce-sales.query-opportunities"
              with:
                q: "SELECT Id, Name, Amount, StageName, CloseDate, Account.Name FROM Opportunity WHERE FiscalQuarter = '{{fiscal_quarter}}' AND Region__c = '{{region}}'"
            - name: write-snowflake
              type: call
              call: "snowflake-sales.insert-rows"
              with:
                table: "SALES.OPPORTUNITY_PIPELINE"
                data: "{{get-pipeline.records}}"
            - name: refresh-powerbi
              type: call
              call: "powerbi-sales.trigger-refresh"
              with:
                dataset_id: "$secrets.powerbi_sales_dataset_id"
  consumes:
    - type: http
      namespace: salesforce-sales
      baseUri: "https://alaska-airlines.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/query"
          inputParameters:
            - name: q
              in: query
          operations:
            - name: query-opportunities
              method: GET
    - type: http
      namespace: snowflake-sales
      baseUri: "https://alaska-airlines.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: rows
          path: "/statements"
          inputParameters:
            - name: table
              in: body
            - name: data
              in: body
          operations:
            - name: insert-rows
              method: POST
    - type: http
      namespace: powerbi-sales
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: refresh
          path: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: trigger-refresh
              method: POST

Communicates seasonal schedule changes by pulling the new schedule from Snowflake, creating customer notifications in Salesforce, and posting internal updates to the commercial Teams channel.

naftiko: "0.5"
info:
  label: "Seasonal Schedule Change Communication"
  description: "Communicates seasonal schedule changes by pulling the new schedule from Snowflake, creating customer notifications in Salesforce, and posting internal updates to the commercial Teams channel."
  tags:
    - commercial
    - snowflake
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: commercial
      port: 8080
      tools:
        - name: communicate_schedule_change
          description: "Given a season identifier, distribute schedule change communications."
          inputParameters:
            - name: season
              in: body
              type: string
              description: "The season identifier (e.g., S26, W26)."
          steps:
            - name: get-changes
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT route, change_type, effective_date FROM schedule_changes WHERE season = '{{season}}'"
            - name: create-notifications
              type: call
              call: "salesforce.create-campaign"
              with:
                name: "Schedule change: {{season}}"
                type: "notification"
            - name: post-internal
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "commercial-ops"
                message: "{{season}} schedule changes published. {{get-changes.row_count}} route changes. Campaign: {{create-notifications.id}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://alaska.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://alaskaair.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: campaigns
          path: "/sobjects/Campaign"
          operations:
            - name: create-campaign
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/commercial-ops/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Audits badge access by pulling entry logs from Snowflake, comparing against Okta active employee roster, and flagging anomalies in a ServiceNow security ticket.

naftiko: "0.5"
info:
  label: "Security Badge Access Audit"
  description: "Audits badge access by pulling entry logs from Snowflake, comparing against Okta active employee roster, and flagging anomalies in a ServiceNow security ticket."
  tags:
    - security
    - snowflake
    - okta
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: security
      port: 8080
      tools:
        - name: audit_badge_access
          description: "Given a facility and date range, audit badge access against employee roster."
          inputParameters:
            - name: facility
              in: body
              type: string
              description: "The facility code."
            - name: date
              in: body
              type: string
              description: "Audit date in YYYY-MM-DD."
          steps:
            - name: get-access-logs
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT badge_id, employee_id, access_time FROM badge_access WHERE facility = '{{facility}}' AND access_date = '{{date}}'"
            - name: get-active-employees
              type: call
              call: "okta.get-active-users"
              with:
                facility: "{{facility}}"
            - name: flag-anomalies
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Badge access audit: {{facility}} on {{date}}"
                description: "Access entries: {{get-access-logs.row_count}}. Active employees: {{get-active-employees.count}}"
                category: "security"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://alaska.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: okta
      baseUri: "https://alaskaair.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: users
          path: "/users?filter=status eq 'ACTIVE'&facility={{facility}}"
          inputParameters:
            - name: facility
              in: query
          operations:
            - name: get-active-users
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://alaskaair.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_pass"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST

When a critical CVE is identified, queries Datadog security signals, creates a ServiceNow security incident, and notifies the CISO team in Microsoft Teams. Ensures rapid vulnerability response for Alaska Airlines digital systems.

naftiko: "0.5"
info:
  label: "Security CVE Vulnerability Triage"
  description: "When a critical CVE is identified, queries Datadog security signals, creates a ServiceNow security incident, and notifies the CISO team in Microsoft Teams. Ensures rapid vulnerability response for Alaska Airlines digital systems."
  tags:
    - security
    - cve
    - datadog
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: security-ops
      port: 8080
      tools:
        - name: triage-cve
          description: "Given a CVE identifier, affected system, and severity level, retrieve Datadog security signals, create a ServiceNow security incident, and notify the security team in Teams. Use for critical or high CVE triage."
          inputParameters:
            - name: cve_id
              in: body
              type: string
              description: "The CVE identifier (e.g., CVE-2024-12345)."
            - name: affected_system
              in: body
              type: string
              description: "The name or identifier of the affected system."
            - name: severity
              in: body
              type: string
              description: "The CVE severity level (critical, high, medium, low)."
          steps:
            - name: get-security-signals
              type: call
              call: "datadog-sec.list-signals"
              with:
                query: "cve:{{cve_id}}"
            - name: create-security-incident
              type: call
              call: "servicenow-sec.create-incident"
              with:
                short_description: "CVE {{cve_id}} ({{severity}}) on {{affected_system}}"
                category: "Security"
                priority: "1"
            - name: notify-security-team
              type: call
              call: "msteams-sec.send-message"
              with:
                channel_id: "security-alerts"
                message: "CVE {{cve_id}} ({{severity}}) detected on {{affected_system}}. Incident: {{create-security-incident.number}}"
  consumes:
    - type: http
      namespace: datadog-sec
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: signals
          path: "/security_analytics/signals/search"
          inputParameters:
            - name: query
              in: body
          operations:
            - name: list-signals
              method: POST
    - type: http
      namespace: servicenow-sec
      baseUri: "https://alaska-airlines.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_pass"
      resources:
        - name: incident
          path: "/table/incident"
          inputParameters:
            - name: short_description
              in: body
            - name: category
              in: body
            - name: priority
              in: body
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams-sec
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: message
          path: "/teams/{{channel_id}}/channels/messages"
          inputParameters:
            - name: channel_id
              in: path
            - name: message
              in: body
          operations:
            - name: send-message
              method: POST

Submits a change request in ServiceNow for planned infrastructure or software changes, and notifies the change advisory board approvers in Microsoft Teams. Supports Alaska Airlines ITIL-compliant change governance.

naftiko: "0.5"
info:
  label: "ServiceNow Change Management Approval"
  description: "Submits a change request in ServiceNow for planned infrastructure or software changes, and notifies the change advisory board approvers in Microsoft Teams. Supports Alaska Airlines ITIL-compliant change governance."
  tags:
    - itsm
    - change-management
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: change-mgmt
      port: 8080
      tools:
        - name: submit-change-request
          description: "Given a change title, risk level, and planned start date, create a ServiceNow change request and notify the CAB approval team in Teams. Use when a planned change to production systems requires formal approval."
          inputParameters:
            - name: change_title
              in: body
              type: string
              description: "The title of the change request (e.g., Sabre reservation system maintenance window)."
            - name: risk_level
              in: body
              type: string
              description: "The change risk level (low, medium, high)."
            - name: planned_start
              in: body
              type: string
              description: "Planned start date and time in ISO 8601 format."
            - name: assigned_group
              in: body
              type: string
              description: "The ServiceNow assignment group responsible for the change."
          steps:
            - name: create-change-request
              type: call
              call: "servicenow-change.create-change"
              with:
                short_description: "{{change_title}}"
                risk: "{{risk_level}}"
                start_date: "{{planned_start}}"
                assignment_group: "{{assigned_group}}"
            - name: notify-cab
              type: call
              call: "msteams-change.send-message"
              with:
                channel_id: "cab-approvals"
                message: "New change request: {{change_title}} ({{risk_level}} risk). CHG: {{create-change-request.number}}. Planned: {{planned_start}}"
  consumes:
    - type: http
      namespace: servicenow-change
      baseUri: "https://alaska-airlines.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_pass"
      resources:
        - name: change
          path: "/table/change_request"
          inputParameters:
            - name: short_description
              in: body
            - name: risk
              in: body
            - name: start_date
              in: body
            - name: assignment_group
              in: body
          operations:
            - name: create-change
              method: POST
    - type: http
      namespace: msteams-change
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: message
          path: "/teams/{{channel_id}}/channels/messages"
          inputParameters:
            - name: channel_id
              in: path
            - name: message
              in: body
          operations:
            - name: send-message
              method: POST

Retrieves an IT incident from ServiceNow by incident number and returns state, priority, assigned group, and short description.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Status Lookup"
  description: "Retrieves an IT incident from ServiceNow by incident number and returns state, priority, assigned group, and short description."
  tags:
    - itsm
    - support
    - servicenow
    - incident-management
capability:
  exposes:
    - type: mcp
      namespace: itsm
      port: 8080
      tools:
        - name: get-incident-status
          description: "Look up an Alaska Airlines ServiceNow incident. Returns state, priority, assigned group, and 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: "$.result.state"
            - name: priority
              type: string
              mapping: "$.result.priority"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://alaskaairlines.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident?sysparm_query=number={{incident_number}}"
          inputParameters:
            - name: incident_number
              in: query
          operations:
            - name: get-incident
              method: GET

Retrieves an IT asset configuration item from the ServiceNow CMDB by asset tag, returning asset type, status, and assigned user.

naftiko: "0.5"
info:
  label: "ServiceNow IT Asset Lookup"
  description: "Retrieves an IT asset configuration item from the ServiceNow CMDB by asset tag, returning asset type, status, and assigned user."
  tags:
    - it-operations
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: it-ops
      port: 8080
      tools:
        - name: get-it-asset
          description: "Given an asset tag, retrieve the CMDB configuration item details."
          inputParameters:
            - name: asset_tag
              in: body
              type: string
              description: "The IT asset tag."
          call: "servicenow.get-ci"
          with:
            asset_tag: "{{asset_tag}}"
          outputParameters:
            - name: asset_type
              type: string
              mapping: "$.result.sys_class_name"
            - name: status
              type: string
              mapping: "$.result.install_status"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://alaskaair.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_pass"
      resources:
        - name: cmdb
          path: "/table/cmdb_ci?sysparm_query=asset_tag={{asset_tag}}"
          inputParameters:
            - name: asset_tag
              in: query
          operations:
            - name: get-ci
              method: GET

Searches the Alaska Airlines operations manual library on SharePoint for documents matching a query, returning titles and URLs.

naftiko: "0.5"
info:
  label: "SharePoint Ops Manual Search"
  description: "Searches the Alaska Airlines operations manual library on SharePoint for documents matching a query, returning titles and URLs."
  tags:
    - flight-operations
    - sharepoint
    - knowledge-management
capability:
  exposes:
    - type: mcp
      namespace: knowledge
      port: 8080
      tools:
        - name: search-ops-manuals
          description: "Search the operations manual SharePoint library by keyword."
          inputParameters:
            - name: query
              in: body
              type: string
              description: "The search keyword or phrase."
          call: "sharepoint.search-documents"
          with:
            query: "{{query}}"
          outputParameters:
            - name: results
              type: array
              mapping: "$.value"
  consumes:
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites/alaskaair.sharepoint.com"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: search
          path: "/drive/root/search(q='{{query}}')"
          inputParameters:
            - name: query
              in: query
          operations:
            - name: search-documents
              method: GET

Retrieves recent messages from the crew scheduling Slack channel, returning messages with timestamps and senders.

naftiko: "0.5"
info:
  label: "Slack Crew Scheduling Channel Lookup"
  description: "Retrieves recent messages from the crew scheduling Slack channel, returning messages with timestamps and senders."
  tags:
    - crew-management
    - slack
capability:
  exposes:
    - type: mcp
      namespace: crew
      port: 8080
      tools:
        - name: get-crew-messages
          description: "Given a Slack channel ID, retrieve the latest crew scheduling messages."
          inputParameters:
            - name: channel_id
              in: body
              type: string
              description: "The Slack channel ID."
          call: "slack.get-history"
          with:
            channel: "{{channel_id}}"
          outputParameters:
            - name: messages
              type: array
              mapping: "$.messages"
  consumes:
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: conversations
          path: "/conversations.history?channel={{channel}}&limit=20"
          inputParameters:
            - name: channel
              in: query
          operations:
            - name: get-history
              method: GET

Queries Snowflake for baggage claim metrics by station, returning mishandled bag count, resolution time, and top causes.

naftiko: "0.5"
info:
  label: "Snowflake Baggage Claim Analytics"
  description: "Queries Snowflake for baggage claim metrics by station, returning mishandled bag count, resolution time, and top causes."
  tags:
    - customer-service
    - snowflake
    - analytics
capability:
  exposes:
    - type: mcp
      namespace: customer-service
      port: 8080
      tools:
        - name: get-baggage-metrics
          description: "Given a station code and period, retrieve baggage claim analytics."
          inputParameters:
            - name: station
              in: body
              type: string
              description: "The IATA station code."
            - name: period
              in: body
              type: string
              description: "The reporting period (e.g., 2026-03)."
          call: "snowflake.run-query"
          with:
            query: "SELECT mishandled_count, avg_resolution_hours, top_cause FROM baggage_metrics WHERE station = '{{station}}' AND period = '{{period}}'"
          outputParameters:
            - name: mishandled_count
              type: string
              mapping: "$.data[0].MISHANDLED_COUNT"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://alaska.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST

Queries Snowflake for the execution status of flight data ingestion pipelines, identifies stalled or failed tasks, and creates Jira tickets for data engineering remediation. Ensures timely availability of on-time performance and revenue analytics.

naftiko: "0.5"
info:
  label: "Snowflake Flight Data Pipeline Health Check"
  description: "Queries Snowflake for the execution status of flight data ingestion pipelines, identifies stalled or failed tasks, and creates Jira tickets for data engineering remediation. Ensures timely availability of on-time performance and revenue analytics."
  tags:
    - data
    - analytics
    - snowflake
    - jira
    - flight-operations
capability:
  exposes:
    - type: mcp
      namespace: data-ops
      port: 8080
      tools:
        - name: check-flight-pipeline-health
          description: "Given a pipeline prefix and lookback window in hours, query Snowflake task history for failures and open Jira data engineering tickets for each. Use for daily flight data pipeline health reviews."
          inputParameters:
            - name: pipeline_prefix
              in: body
              type: string
              description: "The Snowflake task name prefix to filter (e.g., FLIGHT_, REVENUE_, LOYALTY_)."
            - name: lookback_hours
              in: body
              type: integer
              description: "Number of hours to look back for failed pipeline tasks."
          steps:
            - name: query-pipeline-tasks
              type: call
              call: "snowflake-data.query-tasks"
              with:
                prefix: "{{pipeline_prefix}}"
                hours: "{{lookback_hours}}"
            - name: create-jira-task
              type: call
              call: "jira-data.create-issue"
              with:
                project_key: "DATA"
                summary: "Flight pipeline failures: {{pipeline_prefix}}"
                description: "{{query-pipeline-tasks.failed_count}} tasks failed in the last {{lookback_hours}} hours."
                issue_type: "Task"
  consumes:
    - type: http
      namespace: snowflake-data
      baseUri: "https://alaska-airlines.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: tasks
          path: "/statements"
          inputParameters:
            - name: prefix
              in: body
            - name: hours
              in: body
          operations:
            - name: query-tasks
              method: POST
    - type: http
      namespace: jira-data
      baseUri: "https://alaska-airlines.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issue
          path: "/issue"
          inputParameters:
            - name: project_key
              in: body
            - name: summary
              in: body
            - name: description
              in: body
            - name: issue_type
              in: body
          operations:
            - name: create-issue
              method: POST

Queries Snowflake for flight delay statistics by route and date range for operations analysis, returning average delay, on-time percentage, and top delay causes.

naftiko: "0.5"
info:
  label: "Snowflake Flight Delay Query"
  description: "Queries Snowflake for flight delay statistics by route and date range for operations analysis, returning average delay, on-time percentage, and top delay causes."
  tags:
    - data
    - analytics
    - snowflake
    - flight-operations
capability:
  exposes:
    - type: mcp
      namespace: data-ops
      port: 8080
      tools:
        - name: query-flight-delays
          description: "Query Snowflake for flight delay statistics by route and date range."
          inputParameters:
            - name: route
              in: body
              type: string
              description: "The flight route, e.g. SEA-LAX."
            - name: date_range
              in: body
              type: string
              description: "Date range for analysis."
          call: snowflake.query-delays
          with:
            route: "{{route}}"
            date_range: "{{date_range}}"
          outputParameters:
            - name: avg_delay_minutes
              type: string
              mapping: "$.data[0].avg_delay"
            - name: on_time_pct
              type: string
              mapping: "$.data[0].on_time_pct"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://alaska-airlines.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: query-delays
              method: POST

Queries the Snowflake data warehouse for route-level profitability metrics, returning revenue, cost, and margin for a specific origin-destination pair.

naftiko: "0.5"
info:
  label: "Snowflake Route Profitability Query"
  description: "Queries the Snowflake data warehouse for route-level profitability metrics, returning revenue, cost, and margin for a specific origin-destination pair."
  tags:
    - finance
    - snowflake
    - revenue-management
capability:
  exposes:
    - type: mcp
      namespace: revenue
      port: 8080
      tools:
        - name: get-route-profitability
          description: "Given an origin and destination airport code, retrieve route profitability metrics."
          inputParameters:
            - name: origin
              in: body
              type: string
              description: "Origin IATA airport code."
            - name: destination
              in: body
              type: string
              description: "Destination IATA airport code."
          call: "snowflake.run-query"
          with:
            query: "SELECT revenue, cost, margin_pct, pax_count FROM route_profitability WHERE origin = '{{origin}}' AND destination = '{{destination}}' AND period = CURRENT_MONTH()"
          outputParameters:
            - name: revenue
              type: string
              mapping: "$.data[0].REVENUE"
            - name: margin_pct
              type: string
              mapping: "$.data[0].MARGIN_PCT"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://alaska.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST

Retrieves completed story points from Jira for the last sprint, publishes the velocity report to Confluence, and posts a digest to the engineering Teams channel. Supports Alaska Airlines agile delivery tracking for digital products.

naftiko: "0.5"
info:
  label: "Sprint Velocity Digest"
  description: "Retrieves completed story points from Jira for the last sprint, publishes the velocity report to Confluence, and posts a digest to the engineering Teams channel. Supports Alaska Airlines agile delivery tracking for digital products."
  tags:
    - devops
    - reporting
    - jira
    - confluence
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: agile-reporting
      port: 8080
      tools:
        - name: digest-sprint-velocity
          description: "Given a Jira project key and sprint ID, retrieve completed story points, publish a Confluence velocity page, and post a summary to the engineering Teams channel. Use at the end of each sprint."
          inputParameters:
            - name: project_key
              in: body
              type: string
              description: "The Jira project key (e.g., MOBILE, RESERVATIONS, LOYALTY)."
            - name: sprint_id
              in: body
              type: string
              description: "The Jira sprint ID to report on."
          steps:
            - name: get-sprint-data
              type: call
              call: "jira-agile.get-sprint-issues"
              with:
                project_key: "{{project_key}}"
                sprint_id: "{{sprint_id}}"
            - name: publish-confluence
              type: call
              call: "confluence-agile.create-page"
              with:
                space_key: "ENG"
                title: "Sprint Velocity — {{project_key}} Sprint {{sprint_id}}"
                body: "Completed: {{get-sprint-data.completed_points}} story points. Total issues: {{get-sprint-data.completed_issues}}"
            - name: notify-teams
              type: call
              call: "msteams-agile.send-message"
              with:
                channel_id: "engineering-metrics"
                message: "Sprint {{sprint_id}} closed: {{get-sprint-data.completed_points}} story points for {{project_key}}. Report: {{publish-confluence.url}}"
  consumes:
    - type: http
      namespace: jira-agile
      baseUri: "https://alaska-airlines.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: sprint-issues
          path: "/search"
          inputParameters:
            - name: project_key
              in: query
            - name: sprint_id
              in: query
          operations:
            - name: get-sprint-issues
              method: GET
    - type: http
      namespace: confluence-agile
      baseUri: "https://alaska-airlines.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: page
          path: "/content"
          inputParameters:
            - name: space_key
              in: body
            - name: title
              in: body
            - name: body
              in: body
          operations:
            - name: create-page
              method: POST
    - type: http
      namespace: msteams-agile
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: message
          path: "/teams/{{channel_id}}/channels/messages"
          inputParameters:
            - name: channel_id
              in: path
            - name: message
              in: body
          operations:
            - name: send-message
              method: POST

Compiles carbon offset data by querying emissions from Snowflake, mapping to offset purchases in Oracle ERP, and distributing the report to the sustainability team via email.

naftiko: "0.5"
info:
  label: "Sustainability Carbon Offset Reporting"
  description: "Compiles carbon offset data by querying emissions from Snowflake, mapping to offset purchases in Oracle ERP, and distributing the report to the sustainability team via email."
  tags:
    - sustainability
    - snowflake
    - oracle-erp
    - microsoft-graph
capability:
  exposes:
    - type: mcp
      namespace: sustainability
      port: 8080
      tools:
        - name: compile_offset_report
          description: "Given a period, compile the carbon offset report."
          inputParameters:
            - name: period
              in: body
              type: string
              description: "Reporting period."
          steps:
            - name: get-emissions
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT total_co2_tonnes, domestic_co2, international_co2 FROM emissions WHERE period = '{{period}}'"
            - name: get-offsets
              type: call
              call: "oracle-erp.get-offset-purchases"
              with:
                period: "{{period}}"
            - name: send-report
              type: call
              call: "msgraph.send-mail"
              with:
                to: "sustainability@alaskaair.com"
                subject: "Carbon Offset Report: {{period}}"
                body: "Emissions: {{get-emissions.data[0].TOTAL_CO2_TONNES}} tonnes. Offsets purchased: {{get-offsets.offset_tonnes}} tonnes."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://alaska.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: oracle-erp
      baseUri: "https://alaska-erp.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: basic
        username: "$secrets.oracle_erp_user"
        password: "$secrets.oracle_erp_pass"
      resources:
        - name: offsets
          path: "/carbonOffsets?period={{period}}"
          inputParameters:
            - name: period
              in: query
          operations:
            - name: get-offset-purchases
              method: GET
    - type: http
      namespace: msgraph
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/me/sendMail"
          operations:
            - name: send-mail
              method: POST

Applies a Terraform Cloud workspace run to provision or update Alaska Airlines AWS infrastructure, logs the outcome to Datadog, and notifies the platform engineering team. Automates infrastructure-as-code deployments across Alaska's cloud environments.

naftiko: "0.5"
info:
  label: "Terraform Cloud Infrastructure Provisioning"
  description: "Applies a Terraform Cloud workspace run to provision or update Alaska Airlines AWS infrastructure, logs the outcome to Datadog, and notifies the platform engineering team. Automates infrastructure-as-code deployments across Alaska's cloud environments."
  tags:
    - cloud
    - infrastructure
    - terraform
    - datadog
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: infra-provisioning
      port: 8080
      tools:
        - name: trigger-terraform-run
          description: "Given a Terraform Cloud workspace ID and target environment, trigger a plan-and-apply run, log the outcome to Datadog, and notify the platform team in Teams. Use when infrastructure changes need to be applied."
          inputParameters:
            - name: workspace_id
              in: body
              type: string
              description: "The Terraform Cloud workspace ID (e.g., ws-abc123)."
            - name: environment
              in: body
              type: string
              description: "The target environment (prod, staging, dev)."
          steps:
            - name: create-terraform-run
              type: call
              call: "terraform-cloud.create-run"
              with:
                workspace_id: "{{workspace_id}}"
                auto_apply: true
            - name: log-datadog
              type: call
              call: "datadog-infra.create-event"
              with:
                title: "Terraform run triggered: {{workspace_id}}"
                text: "Run {{create-terraform-run.run_id}} started for {{environment}}"
                tags: "env:{{environment}},workspace:{{workspace_id}}"
            - name: notify-platform-team
              type: call
              call: "msteams-infra.send-message"
              with:
                channel_id: "platform-engineering"
                message: "Terraform run started for workspace {{workspace_id}} ({{environment}}). Run ID: {{create-terraform-run.run_id}}"
  consumes:
    - type: http
      namespace: terraform-cloud
      baseUri: "https://app.terraform.io/api/v2"
      authentication:
        type: bearer
        token: "$secrets.terraform_token"
      resources:
        - name: run
          path: "/runs"
          inputParameters:
            - name: workspace_id
              in: body
            - name: auto_apply
              in: body
          operations:
            - name: create-run
              method: POST
    - type: http
      namespace: datadog-infra
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: event
          path: "/events"
          inputParameters:
            - name: title
              in: body
            - name: text
              in: body
            - name: tags
              in: body
          operations:
            - name: create-event
              method: POST
    - type: http
      namespace: msteams-infra
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: message
          path: "/teams/{{channel_id}}/channels/messages"
          inputParameters:
            - name: channel_id
              in: path
            - name: message
              in: body
          operations:
            - name: send-message
              method: POST

Performs three-way matching by retrieving the PO from Oracle ERP, goods receipt from Snowflake, and creating a ServiceNow exception ticket for mismatches.

naftiko: "0.5"
info:
  label: "Vendor Invoice Three-Way Match"
  description: "Performs three-way matching by retrieving the PO from Oracle ERP, goods receipt from Snowflake, and creating a ServiceNow exception ticket for mismatches."
  tags:
    - finance
    - oracle-erp
    - snowflake
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: finance
      port: 8080
      tools:
        - name: three_way_match
          description: "Given an invoice number, perform PO-receipt-invoice matching."
          inputParameters:
            - name: invoice_number
              in: body
              type: string
              description: "The vendor invoice number."
          steps:
            - name: get-po
              type: call
              call: "oracle-erp.get-purchase-order"
              with:
                invoice: "{{invoice_number}}"
            - name: get-receipt
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT receipt_qty, receipt_date FROM goods_receipts WHERE po_number = '{{get-po.po_number}}'"
            - name: flag-exception
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "3-way match exception: Invoice {{invoice_number}}"
                description: "PO: {{get-po.po_number}} | PO amount: {{get-po.amount}} | Receipt qty: {{get-receipt.data[0].RECEIPT_QTY}}"
  consumes:
    - type: http
      namespace: oracle-erp
      baseUri: "https://alaska-erp.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: basic
        username: "$secrets.oracle_erp_user"
        password: "$secrets.oracle_erp_pass"
      resources:
        - name: purchase-orders
          path: "/purchaseOrders?invoice={{invoice}}"
          inputParameters:
            - name: invoice
              in: query
          operations:
            - name: get-purchase-order
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://alaska.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://alaskaair.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_pass"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST

When severe weather is forecast, queries affected flights from Snowflake, creates a Salesforce case for rebooking, and notifies the operations center via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Weather Delay Proactive Notification"
  description: "When severe weather is forecast, queries affected flights from Snowflake, creates a Salesforce case for rebooking, and notifies the operations center via Microsoft Teams."
  tags:
    - flight-operations
    - snowflake
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: flight-ops
      port: 8080
      tools:
        - name: handle-weather-delay
          description: "Given a station and weather severity, identify affected flights and initiate passenger communication."
          inputParameters:
            - name: station
              in: body
              type: string
              description: "The affected station IATA code."
            - name: severity
              in: body
              type: string
              description: "Weather severity level."
          steps:
            - name: get-affected-flights
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT flight_number, scheduled_time, pax_count FROM flight_schedule WHERE origin = '{{station}}' AND status = 'SCHEDULED'"
            - name: create-case
              type: call
              call: "salesforce.create-case"
              with:
                subject: "Weather delay rebooking: {{station}} - {{severity}}"
                description: "{{get-affected-flights.row_count}} flights affected"
            - name: notify-ops
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "operations-center"
                message: "WEATHER: {{severity}} at {{station}}. {{get-affected-flights.row_count}} flights affected. Case: {{create-case.id}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://alaska.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://alaskaair.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: cases
          path: "/sobjects/Case"
          operations:
            - name: create-case
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/operations-center/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Initiates the annual performance review by pulling the active roster from Workday, creating review forms, and notifying department managers via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Workday Annual Review Cycle Kickoff"
  description: "Initiates the annual performance review by pulling the active roster from Workday, creating review forms, and notifying department managers via Microsoft Teams."
  tags:
    - hr
    - workday
    - microsoft-teams
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: kickoff_annual_reviews
          description: "Given a review cycle ID, initiate the performance review process."
          inputParameters:
            - name: cycle_id
              in: body
              type: string
              description: "The review cycle identifier."
          steps:
            - name: get-roster
              type: call
              call: "workday.get-active-workers"
              with:
                status: "ACTIVE"
            - name: log-kickoff
              type: call
              call: "servicenow.create-record"
              with:
                table: "u_review_cycles"
                cycle_id: "{{cycle_id}}"
                employee_count: "{{get-roster.count}}"
            - name: notify-managers
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "people-leaders"
                message: "Performance review cycle {{cycle_id}} initiated. {{get-roster.count}} employees enrolled. Please begin evaluations."
  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: "/alaska/workers?status={{status}}"
          inputParameters:
            - name: status
              in: query
          operations:
            - name: get-active-workers
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://alaskaair.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_pass"
      resources:
        - name: records
          path: "/table/{{table}}"
          inputParameters:
            - name: table
              in: path
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/people-leaders/channels/general/messages"
          operations:
            - name: send-message
              method: POST

Retrieves the benefits enrollment status for an employee from Workday, returning elected plans and coverage levels.

naftiko: "0.5"
info:
  label: "Workday Benefits Enrollment Status"
  description: "Retrieves the benefits enrollment status for an employee from Workday, returning elected plans and coverage levels."
  tags:
    - hr
    - workday
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: get-benefits-status
          description: "Given a worker ID, retrieve the current benefits enrollment details."
          inputParameters:
            - name: worker_id
              in: body
              type: string
              description: "The Workday worker ID."
          call: "workday.get-benefits"
          with:
            worker_id: "{{worker_id}}"
          outputParameters:
            - name: plans
              type: array
              mapping: "$.Benefits.ElectedPlans"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: benefits
          path: "/alaska/workers/{{worker_id}}/benefits"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-benefits
              method: GET

Retrieves the compensation summary for an employee from Workday by worker ID, returning base salary, bonus target, and total compensation.

naftiko: "0.5"
info:
  label: "Workday Compensation Summary Lookup"
  description: "Retrieves the compensation summary for an employee from Workday by worker ID, returning base salary, bonus target, and total compensation."
  tags:
    - hr
    - workday
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: get-compensation
          description: "Given a Workday worker ID, retrieve the compensation summary."
          inputParameters:
            - name: worker_id
              in: body
              type: string
              description: "The Workday worker ID."
          call: "workday.get-compensation"
          with:
            worker_id: "{{worker_id}}"
          outputParameters:
            - name: base_salary
              type: string
              mapping: "$.Compensation.BaseSalary"
            - name: bonus_target
              type: string
              mapping: "$.Compensation.BonusTarget"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: compensation
          path: "/alaska/workers/{{worker_id}}/compensation"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-compensation
              method: GET

Retrieves pilot and crew member certification status from Workday, returning certification type, expiration date, and renewal status.

naftiko: "0.5"
info:
  label: "Workday Crew Certification Check"
  description: "Retrieves pilot and crew member certification status from Workday, returning certification type, expiration date, and renewal status."
  tags:
    - hr
    - compliance
    - workday
    - crew-operations
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: check-crew-certifications
          description: "Look up crew member certification status in Workday. Returns certification types and expiration dates."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The crew member Workday employee ID."
          call: workday.get-certifications
          with:
            employee_id: "{{employee_id}}"
          outputParameters:
            - name: certifications
              type: array
              mapping: "$.Worker.Certifications"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.workday.com/ccx/api/v1/alaska-airlines"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: certifications
          path: "/workers/{{employee_id}}/certifications"
          inputParameters:
            - name: employee_id
              in: path
          operations:
            - name: get-certifications
              method: GET

Queries Workday for crew members approaching FAA rest requirement limits, computes compliance status, and creates ServiceNow tasks for the scheduling team to address any potential violations. Ensures Alaska Airlines remains FAA Part 117 compliant.

naftiko: "0.5"
info:
  label: "Workday Crew Scheduling Compliance Check"
  description: "Queries Workday for crew members approaching FAA rest requirement limits, computes compliance status, and creates ServiceNow tasks for the scheduling team to address any potential violations. Ensures Alaska Airlines remains FAA Part 117 compliant."
  tags:
    - hr
    - compliance
    - workday
    - servicenow
    - flight-operations
capability:
  exposes:
    - type: mcp
      namespace: crew-compliance
      port: 8080
      tools:
        - name: check-crew-rest-compliance
          description: "Given a crew base and check window in hours, retrieve crew scheduling records from Workday, identify members near FAA rest limits, and create ServiceNow compliance tasks for the scheduling team. Use for daily crew rest compliance monitoring."
          inputParameters:
            - name: crew_base
              in: body
              type: string
              description: "The crew base airport code (e.g., SEA, PDX, SFO, LAX)."
            - name: check_window_hours
              in: body
              type: integer
              description: "The number of hours ahead to check for rest compliance issues."
          steps:
            - name: get-crew-schedules
              type: call
              call: "workday-crew.get-crew-schedule"
              with:
                base: "{{crew_base}}"
                window: "{{check_window_hours}}"
            - name: create-compliance-task
              type: call
              call: "servicenow-crew.create-incident"
              with:
                short_description: "FAA rest compliance review: {{crew_base}} — {{get-crew-schedules.at_risk_count}} crew members at risk"
                category: "Compliance"
                assignment_group: "Crew Scheduling"
  consumes:
    - type: http
      namespace: workday-crew
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: crew-schedule
          path: "/alaska-airlines/workers"
          inputParameters:
            - name: base
              in: query
            - name: window
              in: query
          operations:
            - name: get-crew-schedule
              method: GET
    - type: http
      namespace: servicenow-crew
      baseUri: "https://alaska-airlines.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_pass"
      resources:
        - name: incident
          path: "/table/incident"
          inputParameters:
            - name: short_description
              in: body
            - name: category
              in: body
            - name: assignment_group
              in: body
          operations:
            - name: create-incident
              method: POST

Retrieves an employee profile from Workday by employee ID, returning name, title, department, manager, and hire date for HR inquiries.

naftiko: "0.5"
info:
  label: "Workday Employee Profile Lookup"
  description: "Retrieves an employee profile from Workday by employee ID, returning name, title, department, manager, and hire date for HR inquiries."
  tags:
    - hr
    - people
    - workday
    - hcm
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: get-employee-profile
          description: "Look up an Alaska Airlines employee profile in Workday by employee ID. Returns name, title, department, manager, and hire date."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday employee ID."
          call: workday.get-worker
          with:
            employee_id: "{{employee_id}}"
          outputParameters:
            - name: full_name
              type: string
              mapping: "$.Worker.Worker_Data.Personal_Data.Name_Data.Legal_Name"
            - name: title
              type: string
              mapping: "$.Worker.Worker_Data.Employment_Data.Job_Data.Position_Data.Business_Title"
            - name: department
              type: string
              mapping: "$.Worker.Worker_Data.Employment_Data.Job_Data.Position_Data.Business_Unit"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.workday.com/ccx/api/v1/alaska-airlines"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{employee_id}}"
          inputParameters:
            - name: employee_id
              in: path
          operations:
            - name: get-worker
              method: GET

Pulls headcount totals from Workday by department and publishes the snapshot to Snowflake and Power BI for HR and finance leadership. Used for monthly workforce planning and budget reconciliation across Alaska Airlines business units.

naftiko: "0.5"
info:
  label: "Workday Headcount Snapshot Report"
  description: "Pulls headcount totals from Workday by department and publishes the snapshot to Snowflake and Power BI for HR and finance leadership. Used for monthly workforce planning and budget reconciliation across Alaska Airlines business units."
  tags:
    - hr
    - reporting
    - workday
    - snowflake
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: hr-reporting
      port: 8080
      tools:
        - name: publish-headcount-snapshot
          description: "Given a cost center and reporting period, retrieve headcount from Workday, write the snapshot to Snowflake, and trigger a Power BI refresh. Use for monthly HR headcount reporting."
          inputParameters:
            - name: cost_center
              in: body
              type: string
              description: "The Workday cost center ID (e.g., CC-FLIGHT-OPS, CC-CORPORATE)."
            - name: reporting_period
              in: body
              type: string
              description: "The reporting period in YYYY-MM format."
          steps:
            - name: get-headcount
              type: call
              call: "workday-hr.get-workers"
              with:
                cost_center: "{{cost_center}}"
            - name: write-snowflake
              type: call
              call: "snowflake-hr.insert-rows"
              with:
                table: "HR.HEADCOUNT_SNAPSHOTS"
                data: "{{get-headcount.workers}}"
            - name: refresh-powerbi
              type: call
              call: "powerbi-hr.trigger-refresh"
              with:
                dataset_id: "$secrets.powerbi_headcount_dataset_id"
  consumes:
    - type: http
      namespace: workday-hr
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/alaska-airlines/workers"
          inputParameters:
            - name: cost_center
              in: query
          operations:
            - name: get-workers
              method: GET
    - type: http
      namespace: snowflake-hr
      baseUri: "https://alaska-airlines.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: rows
          path: "/statements"
          inputParameters:
            - name: table
              in: body
            - name: data
              in: body
          operations:
            - name: insert-rows
              method: POST
    - type: http
      namespace: powerbi-hr
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: refresh
          path: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: trigger-refresh
              method: POST

Retrieves payroll processing results from Workday for a pay cycle, compares totals against the prior period in Snowflake, and creates a Jira variance review task if the delta exceeds threshold. Supports Alaska Airlines payroll integrity for 22,000+ employees.

naftiko: "0.5"
info:
  label: "Workday Payroll Reconciliation"
  description: "Retrieves payroll processing results from Workday for a pay cycle, compares totals against the prior period in Snowflake, and creates a Jira variance review task if the delta exceeds threshold. Supports Alaska Airlines payroll integrity for 22,000+ employees."
  tags:
    - hr
    - payroll
    - workday
    - snowflake
    - jira
capability:
  exposes:
    - type: mcp
      namespace: payroll-ops
      port: 8080
      tools:
        - name: reconcile-payroll
          description: "Given a Workday pay group ID and variance threshold percentage, retrieve payroll totals, compare against prior period from Snowflake, and create a Jira task if the variance exceeds the threshold. Use for bi-weekly payroll reconciliation."
          inputParameters:
            - name: pay_group_id
              in: body
              type: string
              description: "The Workday pay group ID (e.g., BIWEEKLY-CREW, MONTHLY-MGMT)."
            - name: variance_threshold_pct
              in: body
              type: number
              description: "The percentage variance above which a Jira review task is created."
          steps:
            - name: get-payroll-results
              type: call
              call: "workday-payroll.get-pay-run"
              with:
                pay_group_id: "{{pay_group_id}}"
            - name: query-prior-period
              type: call
              call: "snowflake-payroll.query-prior"
              with:
                pay_group_id: "{{pay_group_id}}"
            - name: create-variance-task
              type: call
              call: "jira-payroll.create-issue"
              with:
                project_key: "PAY"
                summary: "Payroll variance: {{pay_group_id}}"
                description: "Variance above {{variance_threshold_pct}}% detected. Finance review required."
                issue_type: "Task"
  consumes:
    - type: http
      namespace: workday-payroll
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: pay-run
          path: "/alaska-airlines/payrollResults"
          inputParameters:
            - name: pay_group_id
              in: query
          operations:
            - name: get-pay-run
              method: GET
    - type: http
      namespace: snowflake-payroll
      baseUri: "https://alaska-airlines.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: prior
          path: "/statements"
          inputParameters:
            - name: pay_group_id
              in: body
          operations:
            - name: query-prior
              method: POST
    - type: http
      namespace: jira-payroll
      baseUri: "https://alaska-airlines.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issue
          path: "/issue"
          inputParameters:
            - name: project_key
              in: body
            - name: summary
              in: body
            - name: description
              in: body
            - name: issue_type
              in: body
          operations:
            - name: create-issue
              method: POST