United Airlines Capabilities

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

Sort
Expand

Creates a lavatory service request in the ground operations system for turnaround servicing of aircraft lavatories.

naftiko: "0.5"
info:
  label: "Aircraft Lavatory Service Request"
  description: "Creates a lavatory service request in the ground operations system for turnaround servicing of aircraft lavatories."
  tags:
    - ground-ops
    - maintenance
capability:
  exposes:
    - type: mcp
      namespace: lav-service
      port: 8080
      tools:
        - name: request-lav-service
          description: "Submit a lavatory service request for an aircraft."
          inputParameters:
            - name: tail_number
              in: body
              type: string
              description: "Aircraft tail number."
            - name: gate
              in: body
              type: string
              description: "Gate number."
            - name: station
              in: body
              type: string
              description: "Airport station."
          call: "ground-ops.create-lav-request"
          with:
            tail: "{{tail_number}}"
            gate: "{{gate}}"
            station: "{{station}}"
          outputParameters:
            - name: request_id
              type: string
              mapping: "$.requestId"
            - name: estimated_completion
              type: string
              mapping: "$.estimatedCompletion"
  consumes:
    - type: http
      namespace: ground-ops
      baseUri: "https://groundops.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ground_ops_token"
      resources:
        - name: lav-service
          path: "/services/lavatory"
          operations:
            - name: create-lav-request
              method: POST

Retrieves the current maintenance status, open MEL items, and next scheduled check for a specific aircraft tail number.

naftiko: "0.5"
info:
  label: "Aircraft Maintenance Status Lookup"
  description: "Retrieves the current maintenance status, open MEL items, and next scheduled check for a specific aircraft tail number."
  tags:
    - maintenance
    - flight-operations
    - safety
capability:
  exposes:
    - type: mcp
      namespace: mx-status
      port: 8080
      tools:
        - name: get-aircraft-mx-status
          description: "Look up maintenance status and open items for an aircraft by tail number."
          inputParameters:
            - name: tail_number
              in: body
              type: string
              description: "Aircraft tail number (e.g., N12345)."
          call: "mx-api.get-status"
          with:
            tail: "{{tail_number}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.maintenanceStatus"
            - name: open_mel_items
              type: array
              mapping: "$.openMELItems"
            - name: next_check
              type: string
              mapping: "$.nextScheduledCheck"
            - name: flight_hours_remaining
              type: number
              mapping: "$.flightHoursRemaining"
  consumes:
    - type: http
      namespace: mx-api
      baseUri: "https://maintenance.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.mx_api_token"
      resources:
        - name: aircraft
          path: "/aircraft/{{tail}}/status"
          inputParameters:
            - name: tail
              in: path
          operations:
            - name: get-status
              method: GET

When an aircraft maintenance defect is logged, creates a SAP Plant Maintenance work order, assigns it to the maintenance team, and notifies the maintenance director via Teams.

naftiko: "0.5"
info:
  label: "Aircraft Maintenance Work Order Creation"
  description: "When an aircraft maintenance defect is logged, creates a SAP Plant Maintenance work order, assigns it to the maintenance team, and notifies the maintenance director via Teams."
  tags:
    - maintenance
    - sap
    - microsoft-teams
    - aviation
capability:
  exposes:
    - type: mcp
      namespace: aircraft-maintenance
      port: 8080
      tools:
        - name: create-maintenance-work-order
          description: "Given an aircraft tail number, defect code, and description, create a SAP PM work order for the MRO team and notify the maintenance director via Teams."
          inputParameters:
            - name: tail_number
              in: body
              type: string
              description: "Aircraft tail number (registration) with the defect."
            - name: defect_code
              in: body
              type: string
              description: "ATA chapter defect code for the maintenance issue."
            - name: defect_description
              in: body
              type: string
              description: "Description of the aircraft defect or squawk."
            - name: maintenance_director_upn
              in: body
              type: string
              description: "UPN of the maintenance director to notify."
          steps:
            - name: create-sap-work-order
              type: call
              call: "sap-mro.create-work-order"
              with:
                equipment: "{{tail_number}}"
                short_text: "{{defect_code}}: {{defect_description}}"
                order_type: "PM01"
            - name: notify-maintenance-director
              type: call
              call: "msteams-mro.send-message"
              with:
                recipient_upn: "{{maintenance_director_upn}}"
                text: "Maintenance work order created: Aircraft {{tail_number}} | Defect: {{defect_code}} | {{defect_description}} | SAP WO: {{create-sap-work-order.work_order_number}}"
  consumes:
    - type: http
      namespace: sap-mro
      baseUri: "https://united-s4.sap.com/sap/opu/odata/sap/API_MAINTENANCEORDER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: work-orders
          path: "/MaintenanceOrder"
          operations:
            - name: create-work-order
              method: POST
    - type: http
      namespace: msteams-mro
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Orchestrates an aircraft swap by identifying a replacement aircraft, updating the flight record, recalculating weight and balance, notifying dispatch and crew, and adjusting gate assignments.

naftiko: "0.5"
info:
  label: "Aircraft Swap Orchestrator"
  description: "Orchestrates an aircraft swap by identifying a replacement aircraft, updating the flight record, recalculating weight and balance, notifying dispatch and crew, and adjusting gate assignments."
  tags:
    - flight-operations
    - dispatch
    - fleet-management
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: aircraft-swap
      port: 8080
      tools:
        - name: execute-aircraft-swap
          description: "Execute an aircraft swap for a flight due to maintenance or operational needs."
          inputParameters:
            - name: flight_number
              in: body
              type: string
              description: "Flight number requiring swap."
            - name: original_tail
              in: body
              type: string
              description: "Original aircraft tail number."
            - name: station
              in: body
              type: string
              description: "Station where swap occurs."
          steps:
            - name: find-replacement
              type: call
              call: "fleet-api.find-available-aircraft"
              with:
                station: "{{station}}"
                original_tail: "{{original_tail}}"
            - name: update-flight-record
              type: call
              call: "pss.update-aircraft"
              with:
                flight_number: "{{flight_number}}"
                new_tail: "{{find-replacement.tail_number}}"
            - name: recalc-wb
              type: call
              call: "dispatch-api.recalculate-wb"
              with:
                flight_number: "{{flight_number}}"
                tail: "{{find-replacement.tail_number}}"
            - name: notify-teams
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "{{ops_channel_id}}"
                text: "Aircraft swap for {{flight_number}}: {{original_tail}} -> {{find-replacement.tail_number}} at {{station}}"
  consumes:
    - type: http
      namespace: fleet-api
      baseUri: "https://fleet.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fleet_api_token"
      resources:
        - name: available
          path: "/aircraft/available"
          operations:
            - name: find-available-aircraft
              method: POST
    - type: http
      namespace: pss
      baseUri: "https://pss.united.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.pss_token"
      resources:
        - name: flights
          path: "/flights/{{flight_number}}/aircraft"
          inputParameters:
            - name: flight_number
              in: path
          operations:
            - name: update-aircraft
              method: PUT
    - type: http
      namespace: dispatch-api
      baseUri: "https://dispatch.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.dispatch_token"
      resources:
        - name: weight-balance
          path: "/weight-balance/recalculate"
          operations:
            - name: recalculate-wb
              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/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Orchestrates the aircraft turnaround process by coordinating gate assignment, ground crew dispatch, fueling request, catering order, and cleaning crew notification for an arriving flight.

naftiko: "0.5"
info:
  label: "Aircraft Turnaround Coordination Orchestrator"
  description: "Orchestrates the aircraft turnaround process by coordinating gate assignment, ground crew dispatch, fueling request, catering order, and cleaning crew notification for an arriving flight."
  tags:
    - flight-operations
    - ground-ops
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: turnaround-ops
      port: 8080
      tools:
        - name: coordinate-turnaround
          description: "Initiate and coordinate all turnaround activities for an arriving aircraft."
          inputParameters:
            - name: flight_number
              in: body
              type: string
              description: "Arriving flight number."
            - name: gate
              in: body
              type: string
              description: "Assigned gate number."
            - name: station
              in: body
              type: string
              description: "Airport station code."
            - name: aircraft_type
              in: body
              type: string
              description: "Aircraft type (e.g., B737-900, B787-10)."
          steps:
            - name: request-fueling
              type: call
              call: "ground-ops.create-fuel-request"
              with:
                flight_number: "{{flight_number}}"
                gate: "{{gate}}"
                aircraft_type: "{{aircraft_type}}"
                station: "{{station}}"
            - name: dispatch-ground-crew
              type: call
              call: "ground-ops.dispatch-crew"
              with:
                gate: "{{gate}}"
                station: "{{station}}"
                task_type: "turnaround"
            - name: order-catering
              type: call
              call: "catering-api.create-order"
              with:
                flight_number: "{{flight_number}}"
                gate: "{{gate}}"
                station: "{{station}}"
            - name: notify-cleaning
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "{{cleaning_channel_id}}"
                text: "Cleaning required at gate {{gate}} for {{flight_number}} ({{aircraft_type}}) at {{station}}. Fuel: {{request-fueling.status}}, Ground crew: {{dispatch-ground-crew.status}}"
  consumes:
    - type: http
      namespace: ground-ops
      baseUri: "https://groundops.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ground_ops_token"
      resources:
        - name: fuel-requests
          path: "/fueling/request"
          operations:
            - name: create-fuel-request
              method: POST
        - name: crew-dispatch
          path: "/crew/dispatch"
          operations:
            - name: dispatch-crew
              method: POST
    - type: http
      namespace: catering-api
      baseUri: "https://catering.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.catering_token"
      resources:
        - name: orders
          path: "/orders"
          operations:
            - name: create-order
              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/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Creates an ADA accommodation request for a passenger with disabilities, coordinating specialized equipment, seating, and assistance services at the airport.

naftiko: "0.5"
info:
  label: "Airport ADA Accommodation Request"
  description: "Creates an ADA accommodation request for a passenger with disabilities, coordinating specialized equipment, seating, and assistance services at the airport."
  tags:
    - customer-service
    - accessibility
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: ada-services
      port: 8080
      tools:
        - name: request-ada-accommodation
          description: "Submit an ADA accommodation request for a passenger."
          inputParameters:
            - name: pnr
              in: body
              type: string
              description: "Passenger name record."
            - name: accommodation_type
              in: body
              type: string
              description: "Type of accommodation needed."
            - name: station
              in: body
              type: string
              description: "Airport station."
            - name: flight_number
              in: body
              type: string
              description: "Associated flight."
          call: "ground-ops.create-ada-request"
          with:
            pnr: "{{pnr}}"
            type: "{{accommodation_type}}"
            station: "{{station}}"
            flight: "{{flight_number}}"
          outputParameters:
            - name: request_id
              type: string
              mapping: "$.requestId"
            - name: assigned_agent
              type: string
              mapping: "$.assignedAgent"
  consumes:
    - type: http
      namespace: ground-ops
      baseUri: "https://groundops.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ground_ops_token"
      resources:
        - name: ada
          path: "/ada/request"
          operations:
            - name: create-ada-request
              method: POST

Retrieves the operational status and location of ground support equipment (tugs, belt loaders, GPUs) at an airport station.

naftiko: "0.5"
info:
  label: "Airport Ground Equipment Status"
  description: "Retrieves the operational status and location of ground support equipment (tugs, belt loaders, GPUs) at an airport station."
  tags:
    - ground-ops
    - equipment
    - tracking
capability:
  exposes:
    - type: mcp
      namespace: gse-ops
      port: 8080
      tools:
        - name: get-gse-status
          description: "Check status of ground support equipment at a station."
          inputParameters:
            - name: station
              in: body
              type: string
              description: "Airport station code."
            - name: equipment_type
              in: body
              type: string
              description: "Equipment type (tug, belt_loader, gpu, deice_truck)."
          call: "ground-ops.get-equipment-status"
          with:
            station: "{{station}}"
            type: "{{equipment_type}}"
          outputParameters:
            - name: available_units
              type: number
              mapping: "$.availableUnits"
            - name: in_use_units
              type: number
              mapping: "$.inUseUnits"
            - name: out_of_service
              type: number
              mapping: "$.outOfService"
  consumes:
    - type: http
      namespace: ground-ops
      baseUri: "https://groundops.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ground_ops_token"
      resources:
        - name: equipment
          path: "/equipment/status"
          operations:
            - name: get-equipment-status
              method: POST

Verifies that a scheduled flight operation complies with airport noise curfew restrictions, checking departure and arrival times against local noise abatement rules.

naftiko: "0.5"
info:
  label: "Airport Noise Curfew Compliance Check"
  description: "Verifies that a scheduled flight operation complies with airport noise curfew restrictions, checking departure and arrival times against local noise abatement rules."
  tags:
    - compliance
    - flight-operations
    - scheduling
capability:
  exposes:
    - type: mcp
      namespace: noise-compliance
      port: 8080
      tools:
        - name: check-noise-curfew
          description: "Verify noise curfew compliance for a flight."
          inputParameters:
            - name: airport
              in: body
              type: string
              description: "Airport IATA code."
            - name: operation_time
              in: body
              type: string
              description: "Scheduled operation time in local time."
            - name: aircraft_type
              in: body
              type: string
              description: "Aircraft type."
          call: "compliance-api.check-noise-curfew"
          with:
            airport: "{{airport}}"
            time: "{{operation_time}}"
            aircraft: "{{aircraft_type}}"
          outputParameters:
            - name: compliant
              type: boolean
              mapping: "$.isCompliant"
            - name: curfew_start
              type: string
              mapping: "$.curfewStart"
            - name: curfew_end
              type: string
              mapping: "$.curfewEnd"
  consumes:
    - type: http
      namespace: compliance-api
      baseUri: "https://compliance.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.compliance_token"
      resources:
        - name: noise-curfew
          path: "/noise/curfew-check"
          operations:
            - name: check-noise-curfew
              method: POST

Pulls current shift staffing levels from the workforce management system for a given airport station, comparing against required minimums.

naftiko: "0.5"
info:
  label: "Airport Operations Staffing Report"
  description: "Pulls current shift staffing levels from the workforce management system for a given airport station, comparing against required minimums."
  tags:
    - ground-ops
    - workforce-management
    - workday
capability:
  exposes:
    - type: mcp
      namespace: staffing
      port: 8080
      tools:
        - name: get-staffing-report
          description: "Retrieve staffing levels and coverage gaps for an airport station."
          inputParameters:
            - name: station
              in: body
              type: string
              description: "Airport station IATA code."
            - name: shift
              in: body
              type: string
              description: "Shift period (e.g., AM, PM, overnight)."
          call: "workforce-api.get-staffing"
          with:
            station: "{{station}}"
            shift: "{{shift}}"
          outputParameters:
            - name: current_staff
              type: number
              mapping: "$.currentStaff"
            - name: required_minimum
              type: number
              mapping: "$.requiredMinimum"
            - name: coverage_gaps
              type: array
              mapping: "$.coverageGaps"
  consumes:
    - type: http
      namespace: workforce-api
      baseUri: "https://workforce.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workforce_token"
      resources:
        - name: staffing
          path: "/stations/{{station}}/staffing"
          inputParameters:
            - name: station
              in: path
          operations:
            - name: get-staffing
              method: GET

Checks real-time parking availability at United-operated airport parking facilities for customer service and traveler information.

naftiko: "0.5"
info:
  label: "Airport Parking Availability Check"
  description: "Checks real-time parking availability at United-operated airport parking facilities for customer service and traveler information."
  tags:
    - customer-service
    - airport
    - ground-ops
capability:
  exposes:
    - type: mcp
      namespace: parking
      port: 8080
      tools:
        - name: check-parking
          description: "Check parking availability at an airport."
          inputParameters:
            - name: station
              in: body
              type: string
              description: "Airport IATA code."
          call: "airport-api.get-parking"
          with:
            station: "{{station}}"
          outputParameters:
            - name: lots
              type: array
              mapping: "$.parkingLots"
            - name: economy_available
              type: number
              mapping: "$.economyAvailable"
            - name: premium_available
              type: number
              mapping: "$.premiumAvailable"
  consumes:
    - type: http
      namespace: airport-api
      baseUri: "https://api.united.com/v1/airports"
      authentication:
        type: bearer
        token: "$secrets.united_api_token"
      resources:
        - name: parking
          path: "/{{station}}/parking"
          inputParameters:
            - name: station
              in: path
          operations:
            - name: get-parking
              method: GET

Retrieves estimated security checkpoint wait times at a given airport terminal for customer service and rebooking decision support.

naftiko: "0.5"
info:
  label: "Airport Security Checkpoint Wait Times"
  description: "Retrieves estimated security checkpoint wait times at a given airport terminal for customer service and rebooking decision support."
  tags:
    - customer-service
    - ground-ops
    - airport
capability:
  exposes:
    - type: mcp
      namespace: security-wait
      port: 8080
      tools:
        - name: get-checkpoint-wait
          description: "Get current security checkpoint wait time estimates."
          inputParameters:
            - name: station
              in: body
              type: string
              description: "Airport IATA code."
            - name: terminal
              in: body
              type: string
              description: "Terminal number."
          call: "airport-api.get-wait-times"
          with:
            station: "{{station}}"
            terminal: "{{terminal}}"
          outputParameters:
            - name: standard_wait_minutes
              type: number
              mapping: "$.standardWait"
            - name: precheck_wait_minutes
              type: number
              mapping: "$.precheckWait"
            - name: clear_wait_minutes
              type: number
              mapping: "$.clearWait"
  consumes:
    - type: http
      namespace: airport-api
      baseUri: "https://api.united.com/v1/airports"
      authentication:
        type: bearer
        token: "$secrets.united_api_token"
      resources:
        - name: wait-times
          path: "/{{station}}/security/wait-times"
          inputParameters:
            - name: station
              in: path
          operations:
            - name: get-wait-times
              method: GET

Creates a wheelchair assistance request in the ground operations system for a passenger needing mobility support at a given airport station.

naftiko: "0.5"
info:
  label: "Airport Wheelchair Service Request"
  description: "Creates a wheelchair assistance request in the ground operations system for a passenger needing mobility support at a given airport station."
  tags:
    - customer-service
    - ground-ops
    - accessibility
capability:
  exposes:
    - type: mcp
      namespace: wheelchair-svc
      port: 8080
      tools:
        - name: request-wheelchair
          description: "Submit a wheelchair service request for a passenger."
          inputParameters:
            - name: pnr
              in: body
              type: string
              description: "Passenger name record."
            - name: station
              in: body
              type: string
              description: "Airport station code."
            - name: service_type
              in: body
              type: string
              description: "Service type (WCHR, WCHS, WCHC)."
            - name: flight_number
              in: body
              type: string
              description: "Associated flight number."
          call: "ground-ops.create-wheelchair-request"
          with:
            pnr: "{{pnr}}"
            station: "{{station}}"
            type: "{{service_type}}"
            flight: "{{flight_number}}"
          outputParameters:
            - name: request_id
              type: string
              mapping: "$.requestId"
            - name: estimated_time
              type: string
              mapping: "$.estimatedServiceTime"
  consumes:
    - type: http
      namespace: ground-ops
      baseUri: "https://groundops.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ground_ops_token"
      resources:
        - name: wheelchair
          path: "/wheelchair/request"
          operations:
            - name: create-wheelchair-request
              method: POST

Retrieves ancillary revenue details for a booking including seat upgrades, bag fees, inflight purchases, and travel insurance.

naftiko: "0.5"
info:
  label: "Ancillary Revenue Booking Lookup"
  description: "Retrieves ancillary revenue details for a booking including seat upgrades, bag fees, inflight purchases, and travel insurance."
  tags:
    - revenue-management
    - customer-service
capability:
  exposes:
    - type: mcp
      namespace: ancillary-revenue
      port: 8080
      tools:
        - name: get-ancillary-revenue
          description: "Look up ancillary revenue items associated with a booking."
          inputParameters:
            - name: pnr
              in: body
              type: string
              description: "Passenger name record."
          call: "revenue-api.get-ancillaries"
          with:
            pnr: "{{pnr}}"
          outputParameters:
            - name: total_ancillary_revenue
              type: number
              mapping: "$.totalAncillaryRevenue"
            - name: items
              type: array
              mapping: "$.ancillaryItems"
  consumes:
    - type: http
      namespace: revenue-api
      baseUri: "https://analytics.united.com/api/v1/revenue"
      authentication:
        type: bearer
        token: "$secrets.revenue_analytics_token"
      resources:
        - name: ancillaries
          path: "/bookings/{{pnr}}/ancillaries"
          inputParameters:
            - name: pnr
              in: path
          operations:
            - name: get-ancillaries
              method: GET

Initiates the annual budget planning cycle by creating budget submission tasks in ServiceNow for all department heads and notifying them via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Annual Budget Planning Kickoff"
  description: "Initiates the annual budget planning cycle by creating budget submission tasks in ServiceNow for all department heads and notifying them via Microsoft Teams."
  tags:
    - finance
    - budgeting
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: budget-planning
      port: 8080
      tools:
        - name: kickoff-budget-cycle
          description: "Given a fiscal year and submission deadline, create ServiceNow budget submission tasks for all department heads and post a kickoff notification to the finance leadership Teams channel."
          inputParameters:
            - name: fiscal_year
              in: body
              type: string
              description: "The fiscal year being budgeted (e.g., FY2027)."
            - name: submission_deadline
              in: body
              type: string
              description: "Budget submission deadline in YYYY-MM-DD format."
            - name: finance_channel_id
              in: body
              type: string
              description: "Teams channel ID for finance leadership."
          steps:
            - name: create-budget-task
              type: call
              call: "servicenow-budget.create-task"
              with:
                short_description: "{{fiscal_year}} Budget Planning — submission due {{submission_deadline}}"
                category: "finance_planning"
                assignment_group: "FP_And_A"
                due_date: "{{submission_deadline}}"
            - name: notify-finance-leadership
              type: call
              call: "msteams-budget.post-channel-message"
              with:
                channel_id: "{{finance_channel_id}}"
                text: "{{fiscal_year}} budget planning cycle is open. Submit all department budgets by {{submission_deadline}}. Planning task: {{create-budget-task.number}}."
  consumes:
    - type: http
      namespace: servicenow-budget
      baseUri: "https://united.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/sc_task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: msteams-budget
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

When an aircraft is grounded (AOG), searches parts inventory across stations, arranges expedited shipping of the needed part, creates a SAP purchase order if needed, and notifies maintenance control.

naftiko: "0.5"
info:
  label: "AOG Parts Expedite Orchestrator"
  description: "When an aircraft is grounded (AOG), searches parts inventory across stations, arranges expedited shipping of the needed part, creates a SAP purchase order if needed, and notifies maintenance control."
  tags:
    - maintenance
    - logistics
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: aog-parts
      port: 8080
      tools:
        - name: expedite-aog-part
          description: "Find and expedite delivery of a critical part for an AOG aircraft."
          inputParameters:
            - name: part_number
              in: body
              type: string
              description: "Required part number."
            - name: tail_number
              in: body
              type: string
              description: "AOG aircraft tail number."
            - name: station
              in: body
              type: string
              description: "Station where aircraft is grounded."
          steps:
            - name: search-inventory
              type: call
              call: "parts-api.search-network"
              with:
                part_number: "{{part_number}}"
            - name: arrange-shipping
              type: call
              call: "logistics-api.expedite-shipment"
              with:
                part_number: "{{part_number}}"
                from_station: "{{search-inventory.closest_station}}"
                to_station: "{{station}}"
            - name: create-po
              type: call
              call: "sap.create-purchase-order"
              with:
                material: "{{part_number}}"
                plant: "{{station}}"
                priority: "AOG"
            - name: notify-mx-control
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "{{mx_control_channel}}"
                text: "AOG Part expedite: {{part_number}} for {{tail_number}} at {{station}} | Source: {{search-inventory.closest_station}} | ETA: {{arrange-shipping.eta}} | PO: {{create-po.po_number}}"
  consumes:
    - type: http
      namespace: parts-api
      baseUri: "https://maintenance.united.com/api/v1/parts"
      authentication:
        type: bearer
        token: "$secrets.mx_api_token"
      resources:
        - name: network-search
          path: "/search/network"
          operations:
            - name: search-network
              method: POST
    - type: http
      namespace: logistics-api
      baseUri: "https://logistics.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.logistics_token"
      resources:
        - name: expedite
          path: "/shipments/expedite"
          operations:
            - name: expedite-shipment
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://united-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: purchase-orders
          path: "/A_PurchaseOrder"
          operations:
            - name: create-purchase-order
              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/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Retrieves baggage claim carousel assignment and status for a given flight arrival, enabling customer service agents to quickly resolve baggage inquiries.

naftiko: "0.5"
info:
  label: "Baggage Claim Status Lookup"
  description: "Retrieves baggage claim carousel assignment and status for a given flight arrival, enabling customer service agents to quickly resolve baggage inquiries."
  tags:
    - customer-service
    - baggage
capability:
  exposes:
    - type: mcp
      namespace: baggage-ops
      port: 8080
      tools:
        - name: get-baggage-claim
          description: "Look up baggage claim carousel and status for a specific flight arrival."
          inputParameters:
            - name: flight_number
              in: body
              type: string
              description: "United flight number."
            - name: arrival_station
              in: body
              type: string
              description: "Arrival airport IATA code (e.g., ORD, EWR)."
          call: "baggage-api.get-claim"
          with:
            flight_number: "{{flight_number}}"
            station: "{{arrival_station}}"
          outputParameters:
            - name: carousel
              type: string
              mapping: "$.carouselNumber"
            - name: status
              type: string
              mapping: "$.claimStatus"
  consumes:
    - type: http
      namespace: baggage-api
      baseUri: "https://api.united.com/v1/baggage"
      authentication:
        type: bearer
        token: "$secrets.united_api_token"
      resources:
        - name: claims
          path: "/claim/{{flight_number}}"
          inputParameters:
            - name: flight_number
              in: path
          operations:
            - name: get-claim
              method: GET

Tracks the boarding progress for a flight, showing scanned vs expected passengers, boarding group progress, and estimated completion time.

naftiko: "0.5"
info:
  label: "Boarding Process Status Tracker"
  description: "Tracks the boarding progress for a flight, showing scanned vs expected passengers, boarding group progress, and estimated completion time."
  tags:
    - ground-ops
    - flight-operations
    - tracking
capability:
  exposes:
    - type: mcp
      namespace: boarding-ops
      port: 8080
      tools:
        - name: get-boarding-status
          description: "Get real-time boarding progress for a flight."
          inputParameters:
            - name: flight_number
              in: body
              type: string
              description: "Flight number."
            - name: gate
              in: body
              type: string
              description: "Departure gate."
          call: "gate-api.get-boarding-status"
          with:
            flight: "{{flight_number}}"
            gate: "{{gate}}"
          outputParameters:
            - name: passengers_boarded
              type: number
              mapping: "$.passengersBoarded"
            - name: total_expected
              type: number
              mapping: "$.totalExpected"
            - name: current_group
              type: string
              mapping: "$.currentBoardingGroup"
            - name: est_completion
              type: string
              mapping: "$.estimatedCompletion"
  consumes:
    - type: http
      namespace: gate-api
      baseUri: "https://groundops.united.com/api/v1/gates"
      authentication:
        type: bearer
        token: "$secrets.ground_ops_token"
      resources:
        - name: boarding
          path: "/{{gate}}/boarding-status"
          inputParameters:
            - name: gate
              in: path
          operations:
            - name: get-boarding-status
              method: GET

Queries crew language qualifications to find flight attendants with required language skills for international route assignments.

naftiko: "0.5"
info:
  label: "Cabin Crew Language Qualification Lookup"
  description: "Queries crew language qualifications to find flight attendants with required language skills for international route assignments."
  tags:
    - crew-scheduling
    - compliance
    - international
capability:
  exposes:
    - type: mcp
      namespace: crew-languages
      port: 8080
      tools:
        - name: search-language-qualified-crew
          description: "Find crew members qualified in a specific language for international routes."
          inputParameters:
            - name: language
              in: body
              type: string
              description: "Required language (e.g., Japanese, Mandarin, Portuguese)."
            - name: base
              in: body
              type: string
              description: "Crew base."
            - name: date
              in: body
              type: string
              description: "Date for availability check."
          call: "crew-mgmt.search-language-crew"
          with:
            language: "{{language}}"
            base: "{{base}}"
            date: "{{date}}"
          outputParameters:
            - name: qualified_crew
              type: array
              mapping: "$.qualifiedCrew"
            - name: total_available
              type: number
              mapping: "$.totalAvailable"
  consumes:
    - type: http
      namespace: crew-mgmt
      baseUri: "https://crew.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.crew_mgmt_token"
      resources:
        - name: language-search
          path: "/crew/language-search"
          operations:
            - name: search-language-crew
              method: POST

Retrieves real-time cabin pressurization system telemetry data from the aircraft health monitoring system for maintenance and safety analysis.

naftiko: "0.5"
info:
  label: "Cabin Pressure System Monitoring"
  description: "Retrieves real-time cabin pressurization system telemetry data from the aircraft health monitoring system for maintenance and safety analysis."
  tags:
    - maintenance
    - safety
    - monitoring
capability:
  exposes:
    - type: mcp
      namespace: aircraft-health
      port: 8080
      tools:
        - name: get-cabin-pressure-data
          description: "Pull cabin pressurization telemetry for an aircraft."
          inputParameters:
            - name: tail_number
              in: body
              type: string
              description: "Aircraft tail number."
            - name: flight_number
              in: body
              type: string
              description: "Flight number."
          call: "ahm-api.get-pressure-data"
          with:
            tail: "{{tail_number}}"
            flight: "{{flight_number}}"
          outputParameters:
            - name: cabin_altitude
              type: number
              mapping: "$.cabinAltitude"
            - name: differential_pressure
              type: number
              mapping: "$.differentialPressure"
            - name: status
              type: string
              mapping: "$.systemStatus"
  consumes:
    - type: http
      namespace: ahm-api
      baseUri: "https://ahm.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ahm_token"
      resources:
        - name: pressure
          path: "/aircraft/{{tail}}/cabin-pressure"
          inputParameters:
            - name: tail
              in: path
          operations:
            - name: get-pressure-data
              method: GET

Creates a new cargo booking in the United Cargo system with shipper details, commodity type, weight, and requested routing.

naftiko: "0.5"
info:
  label: "Cargo Booking Creation"
  description: "Creates a new cargo booking in the United Cargo system with shipper details, commodity type, weight, and requested routing."
  tags:
    - cargo
    - logistics
capability:
  exposes:
    - type: mcp
      namespace: cargo-booking
      port: 8080
      tools:
        - name: create-cargo-booking
          description: "Create a new air cargo booking with routing and commodity details."
          inputParameters:
            - name: shipper_name
              in: body
              type: string
              description: "Shipper company name."
            - name: origin
              in: body
              type: string
              description: "Origin airport IATA code."
            - name: destination
              in: body
              type: string
              description: "Destination airport IATA code."
            - name: weight_kg
              in: body
              type: number
              description: "Shipment weight in kilograms."
            - name: commodity_type
              in: body
              type: string
              description: "Commodity type code."
          call: "cargo-api.create-booking"
          with:
            shipper: "{{shipper_name}}"
            origin: "{{origin}}"
            destination: "{{destination}}"
            weight: "{{weight_kg}}"
            commodity: "{{commodity_type}}"
          outputParameters:
            - name: booking_id
              type: string
              mapping: "$.bookingId"
            - name: awb_number
              type: string
              mapping: "$.awbNumber"
  consumes:
    - type: http
      namespace: cargo-api
      baseUri: "https://cargo.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.united_cargo_token"
      resources:
        - name: bookings
          path: "/bookings"
          operations:
            - name: create-booking
              method: POST

Generates a daily cargo revenue summary report including total shipments, revenue by commodity type, and capacity utilization across the network.

naftiko: "0.5"
info:
  label: "Cargo Revenue Daily Summary"
  description: "Generates a daily cargo revenue summary report including total shipments, revenue by commodity type, and capacity utilization across the network."
  tags:
    - cargo
    - revenue-management
    - analytics
capability:
  exposes:
    - type: mcp
      namespace: cargo-analytics
      port: 8080
      tools:
        - name: get-cargo-daily-summary
          description: "Generate a daily cargo revenue summary."
          inputParameters:
            - name: report_date
              in: body
              type: string
              description: "Report date in YYYY-MM-DD."
          call: "cargo-api.get-daily-summary"
          with:
            date: "{{report_date}}"
          outputParameters:
            - name: total_revenue
              type: number
              mapping: "$.totalRevenue"
            - name: total_shipments
              type: number
              mapping: "$.totalShipments"
            - name: capacity_utilization
              type: number
              mapping: "$.capacityUtilization"
            - name: revenue_by_commodity
              type: object
              mapping: "$.revenueByCommodity"
  consumes:
    - type: http
      namespace: cargo-api
      baseUri: "https://cargo.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.united_cargo_token"
      resources:
        - name: daily-summary
          path: "/analytics/daily-summary"
          operations:
            - name: get-daily-summary
              method: POST

Retrieves current tracking status, origin, destination, and estimated arrival for a United Cargo air waybill number.

naftiko: "0.5"
info:
  label: "Cargo Shipment Tracking Lookup"
  description: "Retrieves current tracking status, origin, destination, and estimated arrival for a United Cargo air waybill number."
  tags:
    - cargo
    - logistics
    - tracking
capability:
  exposes:
    - type: mcp
      namespace: cargo-tracking
      port: 8080
      tools:
        - name: track-cargo-shipment
          description: "Look up a United Cargo shipment by air waybill number and return current status and location."
          inputParameters:
            - name: awb_number
              in: body
              type: string
              description: "Air waybill number (e.g., 016-12345678)."
          call: "cargo-api.get-tracking"
          with:
            awb: "{{awb_number}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.shipmentStatus"
            - name: current_location
              type: string
              mapping: "$.currentLocation"
            - name: origin
              type: string
              mapping: "$.origin"
            - name: destination
              type: string
              mapping: "$.destination"
            - name: eta
              type: string
              mapping: "$.estimatedArrival"
  consumes:
    - type: http
      namespace: cargo-api
      baseUri: "https://cargo.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.united_cargo_token"
      resources:
        - name: tracking
          path: "/tracking/{{awb}}"
          inputParameters:
            - name: awb
              in: path
          operations:
            - name: get-tracking
              method: GET

Creates or updates a catering order for a specific flight, specifying meal counts by cabin class and special meal requirements.

naftiko: "0.5"
info:
  label: "Catering Order Management"
  description: "Creates or updates a catering order for a specific flight, specifying meal counts by cabin class and special meal requirements."
  tags:
    - catering
    - flight-operations
capability:
  exposes:
    - type: mcp
      namespace: catering
      port: 8080
      tools:
        - name: manage-catering-order
          description: "Create or update a catering order for a flight departure."
          inputParameters:
            - name: flight_number
              in: body
              type: string
              description: "Flight number."
            - name: flight_date
              in: body
              type: string
              description: "Flight date."
            - name: station
              in: body
              type: string
              description: "Departure station code."
            - name: meal_counts
              in: body
              type: string
              description: "JSON object of cabin class to meal count."
          call: "catering-api.upsert-order"
          with:
            flight_number: "{{flight_number}}"
            date: "{{flight_date}}"
            station: "{{station}}"
            meals: "{{meal_counts}}"
          outputParameters:
            - name: order_id
              type: string
              mapping: "$.orderId"
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: catering-api
      baseUri: "https://catering.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.catering_token"
      resources:
        - name: orders
          path: "/orders"
          operations:
            - name: upsert-order
              method: PUT

When AWS Cost Anomaly Detection fires an alert, creates a Datadog event, opens a Jira FinOps investigation ticket, and notifies the cloud cost team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Cloud Cost Anomaly Responder"
  description: "When AWS Cost Anomaly Detection fires an alert, creates a Datadog event, opens a Jira FinOps investigation ticket, and notifies the cloud cost team via Microsoft Teams."
  tags:
    - finops
    - cloud-cost
    - datadog
    - jira
    - microsoft-teams
    - aws
capability:
  exposes:
    - type: mcp
      namespace: finops
      port: 8080
      tools:
        - name: handle-cost-anomaly
          description: "Given an AWS cost anomaly with service name and estimated overage, create a Datadog event, open a Jira FinOps task, and notify the cloud cost team via Teams."
          inputParameters:
            - name: anomaly_id
              in: body
              type: string
              description: "The AWS Cost Anomaly Detection anomaly ID."
            - name: service_name
              in: body
              type: string
              description: "The AWS service exhibiting unexpected cost."
            - name: estimated_overage_usd
              in: body
              type: number
              description: "Estimated cost overage in USD."
            - name: finops_channel_id
              in: body
              type: string
              description: "Teams channel ID for the FinOps team."
          steps:
            - name: create-datadog-event
              type: call
              call: "datadog.create-event"
              with:
                title: "AWS Cost Anomaly: {{service_name}}"
                text: "Anomaly {{anomaly_id}} — ${{estimated_overage_usd}} overage"
                alert_type: "warning"
            - name: create-jira-task
              type: call
              call: "jira.create-issue"
              with:
                project_key: "FINOPS"
                issuetype: "Task"
                summary: "Cost anomaly: {{service_name}} — ${{estimated_overage_usd}} overage"
                description: "Anomaly: {{anomaly_id}}\nDatadog: {{create-datadog-event.url}}"
            - name: notify-finops-team
              type: call
              call: "msteams-finops.post-channel-message"
              with:
                channel_id: "{{finops_channel_id}}"
                text: "Cost Anomaly: {{service_name}} | Overage: ${{estimated_overage_usd}} | Jira: {{create-jira-task.key}} | Datadog: {{create-datadog-event.url}}"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: events
          path: "/events"
          operations:
            - name: create-event
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://united.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-finops
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Synchronizes seat inventory between United and codeshare partner airlines, ensuring availability is accurately reflected across all distribution channels.

naftiko: "0.5"
info:
  label: "Codeshare Flight Inventory Sync"
  description: "Synchronizes seat inventory between United and codeshare partner airlines, ensuring availability is accurately reflected across all distribution channels."
  tags:
    - flight-operations
    - partnerships
    - revenue-management
capability:
  exposes:
    - type: mcp
      namespace: codeshare-sync
      port: 8080
      tools:
        - name: sync-codeshare-inventory
          description: "Sync seat inventory with a codeshare partner for a given route."
          inputParameters:
            - name: partner_code
              in: body
              type: string
              description: "Partner airline code (e.g., LH, NH, AC)."
            - name: flight_number
              in: body
              type: string
              description: "United marketing flight number."
            - name: flight_date
              in: body
              type: string
              description: "Flight date."
          call: "inventory-api.sync-partner"
          with:
            partner: "{{partner_code}}"
            flight: "{{flight_number}}"
            date: "{{flight_date}}"
          outputParameters:
            - name: sync_status
              type: string
              mapping: "$.syncStatus"
            - name: seats_synced
              type: number
              mapping: "$.seatsSynced"
  consumes:
    - type: http
      namespace: inventory-api
      baseUri: "https://inventory.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.inventory_token"
      resources:
        - name: codeshare
          path: "/codeshare/sync"
          operations:
            - name: sync-partner
              method: POST

Generates monthly crew bid packages from the scheduling system, compiling trip pairings, credit values, and base assignments for pilot and flight attendant bidding.

naftiko: "0.5"
info:
  label: "Crew Bid Package Generation"
  description: "Generates monthly crew bid packages from the scheduling system, compiling trip pairings, credit values, and base assignments for pilot and flight attendant bidding."
  tags:
    - crew-scheduling
    - operations
capability:
  exposes:
    - type: mcp
      namespace: crew-bidding
      port: 8080
      tools:
        - name: generate-bid-package
          description: "Generate a crew bid package for a given base and bid period."
          inputParameters:
            - name: base
              in: body
              type: string
              description: "Crew base code."
            - name: position
              in: body
              type: string
              description: "Position type (captain, first_officer, flight_attendant)."
            - name: bid_month
              in: body
              type: string
              description: "Bid month in YYYY-MM format."
          call: "crew-mgmt.generate-bids"
          with:
            base: "{{base}}"
            position: "{{position}}"
            month: "{{bid_month}}"
          outputParameters:
            - name: package_id
              type: string
              mapping: "$.packageId"
            - name: total_pairings
              type: number
              mapping: "$.totalPairings"
            - name: publish_date
              type: string
              mapping: "$.publishDate"
  consumes:
    - type: http
      namespace: crew-mgmt
      baseUri: "https://crew.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.crew_mgmt_token"
      resources:
        - name: bids
          path: "/bidding/generate"
          operations:
            - name: generate-bids
              method: POST

Queries the crew management system to verify FAA duty time compliance for a specific crew member, returning remaining legal hours and rest requirements.

naftiko: "0.5"
info:
  label: "Crew Duty Time Compliance Check"
  description: "Queries the crew management system to verify FAA duty time compliance for a specific crew member, returning remaining legal hours and rest requirements."
  tags:
    - crew-scheduling
    - compliance
    - safety
capability:
  exposes:
    - type: mcp
      namespace: crew-compliance
      port: 8080
      tools:
        - name: check-duty-time
          description: "Check a crew member's current duty time status against FAA Part 117 limits."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "Crew member employee ID."
            - name: check_date
              in: body
              type: string
              description: "Date to check compliance for."
          call: "crew-mgmt.get-duty-status"
          with:
            employee_id: "{{employee_id}}"
            date: "{{check_date}}"
          outputParameters:
            - name: hours_flown_period
              type: number
              mapping: "$.hoursFlownPeriod"
            - name: remaining_legal_hours
              type: number
              mapping: "$.remainingLegalHours"
            - name: rest_required
              type: string
              mapping: "$.restRequired"
            - name: compliant
              type: boolean
              mapping: "$.isCompliant"
  consumes:
    - type: http
      namespace: crew-mgmt
      baseUri: "https://crew.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.crew_mgmt_token"
      resources:
        - name: duty-status
          path: "/crew/{{employee_id}}/duty-status"
          inputParameters:
            - name: employee_id
              in: path
          operations:
            - name: get-duty-status
              method: GET

When crew layover hotel bookings are needed, checks contracted hotel availability, books rooms, arranges ground transport, and notifies crew members of their accommodation details.

naftiko: "0.5"
info:
  label: "Crew Hotel Accommodation Booking Orchestrator"
  description: "When crew layover hotel bookings are needed, checks contracted hotel availability, books rooms, arranges ground transport, and notifies crew members of their accommodation details."
  tags:
    - crew-scheduling
    - operations
    - logistics
capability:
  exposes:
    - type: mcp
      namespace: crew-hotels
      port: 8080
      tools:
        - name: book-crew-hotel
          description: "Book layover hotel accommodations for crew members."
          inputParameters:
            - name: crew_count
              in: body
              type: number
              description: "Number of crew members."
            - name: station
              in: body
              type: string
              description: "Layover station."
            - name: check_in
              in: body
              type: string
              description: "Check-in date and time."
            - name: check_out
              in: body
              type: string
              description: "Check-out date and time."
            - name: trip_id
              in: body
              type: string
              description: "Trip pairing ID."
          steps:
            - name: check-hotel-availability
              type: call
              call: "hotel-api.check-availability"
              with:
                station: "{{station}}"
                rooms: "{{crew_count}}"
                check_in: "{{check_in}}"
                check_out: "{{check_out}}"
            - name: book-rooms
              type: call
              call: "hotel-api.book-rooms"
              with:
                hotel_id: "{{check-hotel-availability.hotel_id}}"
                rooms: "{{crew_count}}"
                check_in: "{{check_in}}"
                check_out: "{{check_out}}"
            - name: arrange-transport
              type: call
              call: "transport-api.book-crew-van"
              with:
                station: "{{station}}"
                hotel_id: "{{check-hotel-availability.hotel_id}}"
                pickup_time: "{{check_in}}"
            - name: notify-crew
              type: call
              call: "crew-comms.send-trip-update"
              with:
                trip_id: "{{trip_id}}"
                message: "Hotel: {{check-hotel-availability.hotel_name}} | Confirmation: {{book-rooms.confirmation}} | Van pickup: {{arrange-transport.pickup_time}}"
  consumes:
    - type: http
      namespace: hotel-api
      baseUri: "https://crew-services.united.com/api/v1/hotels"
      authentication:
        type: bearer
        token: "$secrets.crew_services_token"
      resources:
        - name: availability
          path: "/availability"
          operations:
            - name: check-availability
              method: POST
        - name: bookings
          path: "/bookings"
          operations:
            - name: book-rooms
              method: POST
    - type: http
      namespace: transport-api
      baseUri: "https://crew-services.united.com/api/v1/transport"
      authentication:
        type: bearer
        token: "$secrets.crew_services_token"
      resources:
        - name: crew-vans
          path: "/crew-van/book"
          operations:
            - name: book-crew-van
              method: POST
    - type: http
      namespace: crew-comms
      baseUri: "https://crew.united.com/api/v1/comms"
      authentication:
        type: bearer
        token: "$secrets.crew_mgmt_token"
      resources:
        - name: trip-updates
          path: "/trips/{{trip_id}}/notify"
          inputParameters:
            - name: trip_id
              in: path
          operations:
            - name: send-trip-update
              method: POST

Checks crew member passport and visa expiration dates against upcoming international trip assignments, flagging any that expire within the required validity window.

naftiko: "0.5"
info:
  label: "Crew Passport and Visa Expiry Alert"
  description: "Checks crew member passport and visa expiration dates against upcoming international trip assignments, flagging any that expire within the required validity window."
  tags:
    - crew-scheduling
    - compliance
    - international
capability:
  exposes:
    - type: mcp
      namespace: crew-docs
      port: 8080
      tools:
        - name: check-crew-document-expiry
          description: "Check crew passport and visa validity for upcoming international trips."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "Crew member employee ID."
            - name: destination_country
              in: body
              type: string
              description: "Destination country ISO code."
          call: "crew-mgmt.check-documents"
          with:
            employee_id: "{{employee_id}}"
            country: "{{destination_country}}"
          outputParameters:
            - name: passport_valid
              type: boolean
              mapping: "$.passportValid"
            - name: passport_expiry
              type: string
              mapping: "$.passportExpiry"
            - name: visa_valid
              type: boolean
              mapping: "$.visaValid"
            - name: visa_expiry
              type: string
              mapping: "$.visaExpiry"
  consumes:
    - type: http
      namespace: crew-mgmt
      baseUri: "https://crew.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.crew_mgmt_token"
      resources:
        - name: documents
          path: "/crew/{{employee_id}}/documents/check"
          inputParameters:
            - name: employee_id
              in: path
          operations:
            - name: check-documents
              method: POST

When a crew member calls in sick, identifies qualified reserve crew at the base, checks duty time compliance, assigns the reserve to the trip, and notifies both the crew member and scheduling team.

naftiko: "0.5"
info:
  label: "Crew Reserve Callout Orchestrator"
  description: "When a crew member calls in sick, identifies qualified reserve crew at the base, checks duty time compliance, assigns the reserve to the trip, and notifies both the crew member and scheduling team."
  tags:
    - crew-scheduling
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: crew-reserve
      port: 8080
      tools:
        - name: callout-reserve-crew
          description: "Find and assign a qualified reserve crew member for an open trip."
          inputParameters:
            - name: trip_id
              in: body
              type: string
              description: "Trip pairing ID needing coverage."
            - name: base
              in: body
              type: string
              description: "Crew base (e.g., ORD, EWR, IAH, SFO)."
            - name: position
              in: body
              type: string
              description: "Position needed (captain, first_officer, flight_attendant)."
            - name: aircraft_type
              in: body
              type: string
              description: "Aircraft type qualification required."
          steps:
            - name: find-available-reserves
              type: call
              call: "crew-mgmt.search-reserves"
              with:
                base: "{{base}}"
                position: "{{position}}"
                type_rating: "{{aircraft_type}}"
            - name: check-duty-compliance
              type: call
              call: "crew-mgmt.verify-duty-time"
              with:
                employee_id: "{{find-available-reserves.top_candidate}}"
                trip_id: "{{trip_id}}"
            - name: assign-reserve
              type: call
              call: "crew-mgmt.assign-trip"
              with:
                employee_id: "{{find-available-reserves.top_candidate}}"
                trip_id: "{{trip_id}}"
            - name: notify-scheduling
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "{{scheduling_channel_id}}"
                text: "Reserve assigned: {{find-available-reserves.top_candidate_name}} to trip {{trip_id}} at {{base}}. Position: {{position}}."
  consumes:
    - type: http
      namespace: crew-mgmt
      baseUri: "https://crew.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.crew_mgmt_token"
      resources:
        - name: reserves
          path: "/reserves/search"
          operations:
            - name: search-reserves
              method: POST
        - name: duty-verification
          path: "/crew/{{employee_id}}/duty-verify"
          inputParameters:
            - name: employee_id
              in: path
          operations:
            - name: verify-duty-time
              method: POST
        - name: assignments
          path: "/trips/assign"
          operations:
            - name: assign-trip
              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/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

When a weather or operational event causes a crew scheduling disruption, creates a ServiceNow operations incident and notifies the crew resources team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Crew Scheduling Disruption Alert"
  description: "When a weather or operational event causes a crew scheduling disruption, creates a ServiceNow operations incident and notifies the crew resources team via Microsoft Teams."
  tags:
    - operations
    - crew-scheduling
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: crew-ops
      port: 8080
      tools:
        - name: handle-crew-disruption
          description: "Given a disruption event type and affected flight numbers, create a ServiceNow incident for crew scheduling coordination and notify the crew resources team via Teams."
          inputParameters:
            - name: disruption_type
              in: body
              type: string
              description: "Type of disruption (e.g., weather delay, mechanical, irregular ops)."
            - name: affected_flights
              in: body
              type: string
              description: "Comma-separated list of affected flight numbers."
            - name: hub_station
              in: body
              type: string
              description: "Airport hub station code affected (e.g., ORD, IAH, EWR, DEN)."
            - name: crew_channel_id
              in: body
              type: string
              description: "Teams channel ID for the crew resources team."
          steps:
            - name: create-crew-incident
              type: call
              call: "servicenow-crew.create-incident"
              with:
                short_description: "Crew disruption at {{hub_station}}: {{disruption_type}} — Flights: {{affected_flights}}"
                category: "crew_scheduling"
                priority: "2"
                assignment_group: "Crew_Resources"
            - name: notify-crew-resources
              type: call
              call: "msteams-crew.post-channel-message"
              with:
                channel_id: "{{crew_channel_id}}"
                text: "Crew disruption alert at {{hub_station}}: {{disruption_type}} | Affected flights: {{affected_flights}} | ServiceNow: {{create-crew-incident.number}}"
  consumes:
    - type: http
      namespace: servicenow-crew
      baseUri: "https://united.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams-crew
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Processes a customer complaint by creating a Salesforce case, determining compensation eligibility based on loyalty tier, issuing travel credits, and sending a resolution email.

naftiko: "0.5"
info:
  label: "Customer Complaint Resolution Orchestrator"
  description: "Processes a customer complaint by creating a Salesforce case, determining compensation eligibility based on loyalty tier, issuing travel credits, and sending a resolution email."
  tags:
    - customer-service
    - salesforce
    - loyalty
    - notifications
capability:
  exposes:
    - type: mcp
      namespace: complaint-resolution
      port: 8080
      tools:
        - name: resolve-complaint
          description: "Process a customer complaint through investigation to resolution."
          inputParameters:
            - name: mileageplus_number
              in: body
              type: string
              description: "MileagePlus member number."
            - name: complaint_type
              in: body
              type: string
              description: "Complaint category."
            - name: flight_number
              in: body
              type: string
              description: "Related flight number."
            - name: description
              in: body
              type: string
              description: "Complaint description."
          steps:
            - name: create-case
              type: call
              call: "salesforce.create-case"
              with:
                subject: "Customer complaint: {{complaint_type}} — {{flight_number}}"
                description: "{{description}}"
                priority: "High"
            - name: check-loyalty-tier
              type: call
              call: "loyalty-api.get-member"
              with:
                member_id: "{{mileageplus_number}}"
            - name: issue-compensation
              type: call
              call: "loyalty-api.issue-credit"
              with:
                member_id: "{{mileageplus_number}}"
                complaint_type: "{{complaint_type}}"
                tier: "{{check-loyalty-tier.currentTier}}"
            - name: send-resolution
              type: call
              call: "notification-api.send-email"
              with:
                member_id: "{{mileageplus_number}}"
                template: "complaint_resolution"
                credit_amount: "{{issue-compensation.creditAmount}}"
                case_id: "{{create-case.id}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://united.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: loyalty-api
      baseUri: "https://loyalty.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.loyalty_api_token"
      resources:
        - name: members
          path: "/members/{{member_id}}"
          inputParameters:
            - name: member_id
              in: path
          operations:
            - name: get-member
              method: GET
        - name: credits
          path: "/members/{{member_id}}/credits"
          inputParameters:
            - name: member_id
              in: path
          operations:
            - name: issue-credit
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://notifications.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.notification_token"
      resources:
        - name: emails
          path: "/email/send"
          operations:
            - name: send-email
              method: POST

When a Salesforce customer service case is escalated to critical priority, creates a ServiceNow incident, triggers a PagerDuty alert, and notifies the customer relations manager via Teams.

naftiko: "0.5"
info:
  label: "Customer Service Escalation Handler"
  description: "When a Salesforce customer service case is escalated to critical priority, creates a ServiceNow incident, triggers a PagerDuty alert, and notifies the customer relations manager via Teams."
  tags:
    - customer-service
    - escalation
    - salesforce
    - servicenow
    - pagerduty
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: customer-service
      port: 8080
      tools:
        - name: handle-cs-escalation
          description: "Given a Salesforce case ID escalated to critical, create a ServiceNow high-priority incident, trigger PagerDuty, and notify the customer relations manager via Teams."
          inputParameters:
            - name: salesforce_case_id
              in: body
              type: string
              description: "The Salesforce case ID that has been escalated."
            - name: customer_name
              in: body
              type: string
              description: "Name of the affected customer or MileagePlus member."
            - name: issue_summary
              in: body
              type: string
              description: "Brief summary of the escalated customer issue."
            - name: cr_manager_upn
              in: body
              type: string
              description: "UPN of the customer relations manager."
          steps:
            - name: get-case
              type: call
              call: "salesforce-cs.get-case"
              with:
                case_id: "{{salesforce_case_id}}"
            - name: create-servicenow-incident
              type: call
              call: "servicenow-cs.create-incident"
              with:
                short_description: "Customer escalation: {{customer_name}} — {{issue_summary}}"
                category: "customer_relations"
                priority: "2"
            - name: trigger-pagerduty
              type: call
              call: "pagerduty-cs.create-incident"
              with:
                title: "Customer escalation: {{customer_name}}"
                service_id: "$secrets.pagerduty_cs_service_id"
                urgency: "high"
            - name: notify-cr-manager
              type: call
              call: "msteams-cs.send-message"
              with:
                recipient_upn: "{{cr_manager_upn}}"
                text: "Customer escalation: {{customer_name}} | Issue: {{issue_summary}} | Salesforce: {{salesforce_case_id}} | ServiceNow: {{create-servicenow-incident.number}}"
  consumes:
    - type: http
      namespace: salesforce-cs
      baseUri: "https://united.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-cs
      baseUri: "https://united.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: pagerduty-cs
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.pagerduty_token"
        placement: header
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams-cs
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves the current status of Datadog monitors for United Airlines' core flight operations systems and posts a daily infrastructure health digest to the IT ops Teams channel.

naftiko: "0.5"
info:
  label: "Datadog Infrastructure Health Monitoring"
  description: "Retrieves the current status of Datadog monitors for United Airlines' core flight operations systems and posts a daily infrastructure health digest to the IT ops Teams channel."
  tags:
    - observability
    - monitoring
    - datadog
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: infra-health
      port: 8080
      tools:
        - name: get-infra-health-digest
          description: "Given a Datadog monitor ID for a core system and a Teams channel, retrieve the monitor's current state and post a health status digest to the IT ops channel."
          inputParameters:
            - name: monitor_id
              in: body
              type: string
              description: "The Datadog monitor ID for the core system."
            - name: system_name
              in: body
              type: string
              description: "Human-readable name of the monitored system."
            - name: it_ops_channel_id
              in: body
              type: string
              description: "Teams channel ID for IT operations."
          steps:
            - name: get-monitor-status
              type: call
              call: "datadog-health.get-monitor"
              with:
                monitor_id: "{{monitor_id}}"
            - name: post-health-digest
              type: call
              call: "msteams-health.post-channel-message"
              with:
                channel_id: "{{it_ops_channel_id}}"
                text: "Infra Health: {{system_name}} | Status: {{get-monitor-status.overall_state}} | Last triggered: {{get-monitor-status.last_triggered}} | Monitor: {{monitor_id}}"
  consumes:
    - type: http
      namespace: datadog-health
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: monitors
          path: "/monitor/{{monitor_id}}"
          inputParameters:
            - name: monitor_id
              in: path
          operations:
            - name: get-monitor
              method: GET
    - type: http
      namespace: msteams-health
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Coordinates winter deicing operations by checking weather conditions, queuing aircraft for deicing, dispatching deicing trucks, and notifying the flight crew of holdover time via the ground operations system.

naftiko: "0.5"
info:
  label: "Deicing Coordination Orchestrator"
  description: "Coordinates winter deicing operations by checking weather conditions, queuing aircraft for deicing, dispatching deicing trucks, and notifying the flight crew of holdover time via the ground operations system."
  tags:
    - ground-ops
    - flight-operations
    - weather
    - safety
capability:
  exposes:
    - type: mcp
      namespace: deicing-ops
      port: 8080
      tools:
        - name: coordinate-deicing
          description: "Initiate and coordinate deicing for a departing aircraft."
          inputParameters:
            - name: flight_number
              in: body
              type: string
              description: "Departing flight number."
            - name: tail_number
              in: body
              type: string
              description: "Aircraft tail number."
            - name: gate
              in: body
              type: string
              description: "Current gate."
            - name: station
              in: body
              type: string
              description: "Airport station."
          steps:
            - name: check-deice-conditions
              type: call
              call: "weather-api.get-deice-conditions"
              with:
                station: "{{station}}"
            - name: queue-aircraft
              type: call
              call: "ground-ops.queue-deicing"
              with:
                tail_number: "{{tail_number}}"
                gate: "{{gate}}"
                fluid_type: "{{check-deice-conditions.recommended_fluid}}"
            - name: dispatch-truck
              type: call
              call: "ground-ops.dispatch-deice-truck"
              with:
                gate: "{{gate}}"
                station: "{{station}}"
            - name: notify-crew
              type: call
              call: "crew-comms.send-message"
              with:
                flight_number: "{{flight_number}}"
                message: "Deicing queued. Fluid: {{check-deice-conditions.recommended_fluid}} | Est wait: {{queue-aircraft.estimated_wait}} min | Holdover: {{check-deice-conditions.holdover_time}} min"
  consumes:
    - type: http
      namespace: weather-api
      baseUri: "https://dispatch.united.com/api/v1/weather"
      authentication:
        type: bearer
        token: "$secrets.dispatch_token"
      resources:
        - name: deice-conditions
          path: "/deicing/{{station}}"
          inputParameters:
            - name: station
              in: path
          operations:
            - name: get-deice-conditions
              method: GET
    - type: http
      namespace: ground-ops
      baseUri: "https://groundops.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ground_ops_token"
      resources:
        - name: deicing-queue
          path: "/deicing/queue"
          operations:
            - name: queue-deicing
              method: POST
        - name: deice-trucks
          path: "/deicing/dispatch"
          operations:
            - name: dispatch-deice-truck
              method: POST
    - type: http
      namespace: crew-comms
      baseUri: "https://crew.united.com/api/v1/comms"
      authentication:
        type: bearer
        token: "$secrets.crew_mgmt_token"
      resources:
        - name: messages
          path: "/flights/{{flight_number}}/message"
          inputParameters:
            - name: flight_number
              in: path
          operations:
            - name: send-message
              method: POST

When a flight diverts to an alternate airport, orchestrates recovery by arranging ground handling, passenger accommodations, crew rest compliance, and rebooking connections.

naftiko: "0.5"
info:
  label: "Diversion Recovery Orchestrator"
  description: "When a flight diverts to an alternate airport, orchestrates recovery by arranging ground handling, passenger accommodations, crew rest compliance, and rebooking connections."
  tags:
    - flight-operations
    - customer-service
    - ground-ops
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: diversion-recovery
      port: 8080
      tools:
        - name: handle-diversion
          description: "Coordinate recovery operations for a diverted flight."
          inputParameters:
            - name: flight_number
              in: body
              type: string
              description: "Diverted flight number."
            - name: diversion_airport
              in: body
              type: string
              description: "Diversion airport code."
            - name: reason
              in: body
              type: string
              description: "Diversion reason."
          steps:
            - name: arrange-ground-handling
              type: call
              call: "ground-ops.request-handling"
              with:
                station: "{{diversion_airport}}"
                flight_number: "{{flight_number}}"
                service_type: "diversion"
            - name: check-crew-rest
              type: call
              call: "crew-mgmt.check-rest-requirements"
              with:
                flight_number: "{{flight_number}}"
                station: "{{diversion_airport}}"
            - name: arrange-passenger-accommodations
              type: call
              call: "hotel-api.book-passenger-hotels"
              with:
                flight_number: "{{flight_number}}"
                station: "{{diversion_airport}}"
            - name: create-recovery-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Flight diversion: {{flight_number}} to {{diversion_airport}} — {{reason}}"
                category: "flight_operations"
                priority: "1"
  consumes:
    - type: http
      namespace: ground-ops
      baseUri: "https://groundops.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ground_ops_token"
      resources:
        - name: handling
          path: "/handling/request"
          operations:
            - name: request-handling
              method: POST
    - type: http
      namespace: crew-mgmt
      baseUri: "https://crew.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.crew_mgmt_token"
      resources:
        - name: rest
          path: "/crew/rest-check"
          operations:
            - name: check-rest-requirements
              method: POST
    - type: http
      namespace: hotel-api
      baseUri: "https://crew-services.united.com/api/v1/hotels"
      authentication:
        type: bearer
        token: "$secrets.crew_services_token"
      resources:
        - name: passenger-hotels
          path: "/passenger-accommodations"
          operations:
            - name: book-passenger-hotels
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://united.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

When an employee receives a role change in Workday (promotion, transfer), updates their access profile via ServiceNow and notifies the new manager via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Employee Role Change Notification"
  description: "When an employee receives a role change in Workday (promotion, transfer), updates their access profile via ServiceNow and notifies the new manager via Microsoft Teams."
  tags:
    - hr
    - role-change
    - workday
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-role-change
      port: 8080
      tools:
        - name: process-role-change
          description: "Given an employee ID, new role, and effective date, update access permissions in ServiceNow and notify the new manager via Teams."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday employee ID receiving the role change."
            - name: new_role
              in: body
              type: string
              description: "The new job title or role."
            - name: effective_date
              in: body
              type: string
              description: "Effective date in YYYY-MM-DD format."
          steps:
            - name: get-employee
              type: call
              call: "workday-role.get-worker"
              with:
                worker_id: "{{employee_id}}"
            - name: update-access
              type: call
              call: "servicenow-role.create-request"
              with:
                short_description: "Access update: {{get-employee.full_name}} → {{new_role}} effective {{effective_date}}"
                category: "access_management"
                assignment_group: "IT_Security"
            - name: notify-manager
              type: call
              call: "msteams-role.send-message"
              with:
                recipient_upn: "{{get-employee.manager_email}}"
                text: "Role change: {{get-employee.full_name}} transitions to {{new_role}} on {{effective_date}}. Access request: {{update-access.number}}"
  consumes:
    - type: http
      namespace: workday-role
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: servicenow-role
      baseUri: "https://united.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST
    - type: http
      namespace: msteams-role
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Monitors the health and status of critical ETL data pipelines in Azure Data Factory, returning run status, duration, and error details.

naftiko: "0.5"
info:
  label: "ETL Data Pipeline Health Check"
  description: "Monitors the health and status of critical ETL data pipelines in Azure Data Factory, returning run status, duration, and error details."
  tags:
    - data-engineering
    - azure-databricks
    - monitoring
capability:
  exposes:
    - type: mcp
      namespace: pipeline-health
      port: 8080
      tools:
        - name: check-pipeline-health
          description: "Check the status of ETL pipelines in Azure Data Factory."
          inputParameters:
            - name: pipeline_name
              in: body
              type: string
              description: "Pipeline name."
            - name: hours_back
              in: body
              type: number
              description: "Hours to look back for recent runs."
          call: "adf.get-pipeline-runs"
          with:
            pipeline: "{{pipeline_name}}"
            hours: "{{hours_back}}"
          outputParameters:
            - name: last_run_status
              type: string
              mapping: "$.value[0].status"
            - name: duration_seconds
              type: number
              mapping: "$.value[0].durationInMs"
            - name: error_message
              type: string
              mapping: "$.value[0].message"
  consumes:
    - type: http
      namespace: adf
      baseUri: "https://management.azure.com/subscriptions/{{subscription_id}}/resourceGroups/{{rg}}/providers/Microsoft.DataFactory/factories/{{factory}}"
      authentication:
        type: bearer
        token: "$secrets.azure_mgmt_token"
      resources:
        - name: pipeline-runs
          path: "/queryPipelineRuns?api-version=2018-06-01"
          operations:
            - name: get-pipeline-runs
              method: POST

Generates a fleet utilization summary showing block hours, cycles, and aircraft availability for a specified fleet type and date range.

naftiko: "0.5"
info:
  label: "Fleet Utilization Report"
  description: "Generates a fleet utilization summary showing block hours, cycles, and aircraft availability for a specified fleet type and date range."
  tags:
    - fleet-management
    - analytics
    - operations
capability:
  exposes:
    - type: mcp
      namespace: fleet-analytics
      port: 8080
      tools:
        - name: get-fleet-utilization
          description: "Retrieve fleet utilization metrics for a given fleet type."
          inputParameters:
            - name: fleet_type
              in: body
              type: string
              description: "Fleet type (e.g., B737, B787, A320)."
            - name: start_date
              in: body
              type: string
              description: "Start date."
            - name: end_date
              in: body
              type: string
              description: "End date."
          call: "fleet-api.get-utilization"
          with:
            fleet: "{{fleet_type}}"
            start: "{{start_date}}"
            end: "{{end_date}}"
          outputParameters:
            - name: total_block_hours
              type: number
              mapping: "$.totalBlockHours"
            - name: total_cycles
              type: number
              mapping: "$.totalCycles"
            - name: avg_daily_utilization
              type: number
              mapping: "$.avgDailyUtilization"
            - name: aircraft_available
              type: number
              mapping: "$.aircraftAvailable"
  consumes:
    - type: http
      namespace: fleet-api
      baseUri: "https://fleet.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fleet_api_token"
      resources:
        - name: utilization
          path: "/utilization/report"
          operations:
            - name: get-utilization
              method: POST

Assigns cabin crew positions (lead, galley, aisle) for a flight based on seniority, qualifications, and aircraft configuration.

naftiko: "0.5"
info:
  label: "Flight Attendant Position Assignment"
  description: "Assigns cabin crew positions (lead, galley, aisle) for a flight based on seniority, qualifications, and aircraft configuration."
  tags:
    - crew-scheduling
    - flight-operations
capability:
  exposes:
    - type: mcp
      namespace: fa-positions
      port: 8080
      tools:
        - name: assign-fa-positions
          description: "Generate flight attendant position assignments for a flight."
          inputParameters:
            - name: flight_number
              in: body
              type: string
              description: "Flight number."
            - name: flight_date
              in: body
              type: string
              description: "Flight date."
          call: "crew-mgmt.assign-positions"
          with:
            flight: "{{flight_number}}"
            date: "{{flight_date}}"
          outputParameters:
            - name: assignments
              type: array
              mapping: "$.positionAssignments"
            - name: lead_fa
              type: string
              mapping: "$.leadFlightAttendant"
  consumes:
    - type: http
      namespace: crew-mgmt
      baseUri: "https://crew.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.crew_mgmt_token"
      resources:
        - name: positions
          path: "/flights/{{flight}}/fa-positions"
          inputParameters:
            - name: flight
              in: path
          operations:
            - name: assign-positions
              method: POST

When a flight is cancelled, retrieves passenger manifest, generates personalized rebooking options, and sends SMS and email notifications to all affected passengers with their new itineraries.

naftiko: "0.5"
info:
  label: "Flight Cancellation Customer Notification Orchestrator"
  description: "When a flight is cancelled, retrieves passenger manifest, generates personalized rebooking options, and sends SMS and email notifications to all affected passengers with their new itineraries."
  tags:
    - customer-service
    - flight-operations
    - notifications
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: cancel-notify
      port: 8080
      tools:
        - name: notify-cancellation
          description: "Send cancellation notifications with rebooking options to all passengers on a cancelled flight."
          inputParameters:
            - name: flight_number
              in: body
              type: string
              description: "Cancelled flight number."
            - name: flight_date
              in: body
              type: string
              description: "Date of cancelled flight."
            - name: reason
              in: body
              type: string
              description: "Cancellation reason."
          steps:
            - name: get-manifest
              type: call
              call: "pss.get-passengers"
              with:
                flight_number: "{{flight_number}}"
                date: "{{flight_date}}"
            - name: generate-options
              type: call
              call: "pss.search-alternatives"
              with:
                origin: "{{get-manifest.origin}}"
                destination: "{{get-manifest.destination}}"
                date: "{{flight_date}}"
            - name: send-notifications
              type: call
              call: "notification-api.batch-notify"
              with:
                passengers: "{{get-manifest.passengers}}"
                template: "flight_cancellation"
                reason: "{{reason}}"
                alternatives: "{{generate-options.options}}"
            - name: log-case
              type: call
              call: "salesforce.create-case"
              with:
                subject: "Flight cancellation {{flight_number}} on {{flight_date}}"
                description: "{{reason}} — {{get-manifest.passenger_count}} passengers notified"
                priority: "High"
  consumes:
    - type: http
      namespace: pss
      baseUri: "https://pss.united.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.pss_token"
      resources:
        - name: passengers
          path: "/flights/{{flight_number}}/passengers"
          inputParameters:
            - name: flight_number
              in: path
          operations:
            - name: get-passengers
              method: GET
        - name: alternatives
          path: "/availability/search"
          operations:
            - name: search-alternatives
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://notifications.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.notification_token"
      resources:
        - name: batch
          path: "/batch/notify"
          operations:
            - name: batch-notify
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://united.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

Retrieves the assigned crew roster for a specific flight, including captain, first officer, and cabin crew names and employee IDs.

naftiko: "0.5"
info:
  label: "Flight Crew Assignment Lookup"
  description: "Retrieves the assigned crew roster for a specific flight, including captain, first officer, and cabin crew names and employee IDs."
  tags:
    - crew-scheduling
    - flight-operations
capability:
  exposes:
    - type: mcp
      namespace: crew-roster
      port: 8080
      tools:
        - name: get-crew-assignment
          description: "Look up the crew assigned to a flight."
          inputParameters:
            - name: flight_number
              in: body
              type: string
              description: "Flight number."
            - name: flight_date
              in: body
              type: string
              description: "Flight date."
          call: "crew-mgmt.get-assignment"
          with:
            flight: "{{flight_number}}"
            date: "{{flight_date}}"
          outputParameters:
            - name: captain
              type: string
              mapping: "$.captain.name"
            - name: first_officer
              type: string
              mapping: "$.firstOfficer.name"
            - name: cabin_crew
              type: array
              mapping: "$.cabinCrew"
  consumes:
    - type: http
      namespace: crew-mgmt
      baseUri: "https://crew.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.crew_mgmt_token"
      resources:
        - name: assignments
          path: "/flights/{{flight}}/crew"
          inputParameters:
            - name: flight
              in: path
          operations:
            - name: get-assignment
              method: GET

When a flight is significantly delayed, determines passenger compensation eligibility based on delay duration and EU261/DOT regulations, calculates amounts, issues vouchers, and notifies passengers.

naftiko: "0.5"
info:
  label: "Flight Delay Compensation Orchestrator"
  description: "When a flight is significantly delayed, determines passenger compensation eligibility based on delay duration and EU261/DOT regulations, calculates amounts, issues vouchers, and notifies passengers."
  tags:
    - customer-service
    - compliance
    - loyalty
    - notifications
capability:
  exposes:
    - type: mcp
      namespace: delay-compensation
      port: 8080
      tools:
        - name: process-delay-compensation
          description: "Determine and issue compensation for passengers on a delayed flight."
          inputParameters:
            - name: flight_number
              in: body
              type: string
              description: "Delayed flight number."
            - name: delay_minutes
              in: body
              type: number
              description: "Actual delay in minutes."
            - name: route_type
              in: body
              type: string
              description: "Route type (domestic, transatlantic, transpacific)."
          steps:
            - name: get-passengers
              type: call
              call: "pss.get-passengers"
              with:
                flight_number: "{{flight_number}}"
            - name: calculate-compensation
              type: call
              call: "compensation-api.calculate"
              with:
                delay_minutes: "{{delay_minutes}}"
                route_type: "{{route_type}}"
                passenger_count: "{{get-passengers.passenger_count}}"
            - name: issue-vouchers
              type: call
              call: "compensation-api.issue-batch-vouchers"
              with:
                passengers: "{{get-passengers.passengers}}"
                amount: "{{calculate-compensation.per_passenger_amount}}"
            - name: notify-passengers
              type: call
              call: "notification-api.batch-notify"
              with:
                passengers: "{{get-passengers.passengers}}"
                template: "delay_compensation"
                amount: "{{calculate-compensation.per_passenger_amount}}"
  consumes:
    - type: http
      namespace: pss
      baseUri: "https://pss.united.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.pss_token"
      resources:
        - name: passengers
          path: "/flights/{{flight_number}}/passengers"
          inputParameters:
            - name: flight_number
              in: path
          operations:
            - name: get-passengers
              method: GET
    - type: http
      namespace: compensation-api
      baseUri: "https://compensation.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.compensation_token"
      resources:
        - name: calculations
          path: "/calculate"
          operations:
            - name: calculate
              method: POST
        - name: vouchers
          path: "/vouchers/batch"
          operations:
            - name: issue-batch-vouchers
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://notifications.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.notification_token"
      resources:
        - name: batch
          path: "/batch/notify"
          operations:
            - name: batch-notify
              method: POST

Orchestrates the flight dispatch release process by verifying weather conditions, crew legality, aircraft maintenance status, fuel load, and weight/balance before generating a dispatch release.

naftiko: "0.5"
info:
  label: "Flight Dispatch Release Orchestrator"
  description: "Orchestrates the flight dispatch release process by verifying weather conditions, crew legality, aircraft maintenance status, fuel load, and weight/balance before generating a dispatch release."
  tags:
    - flight-operations
    - dispatch
    - safety
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: dispatch
      port: 8080
      tools:
        - name: process-dispatch-release
          description: "Run all pre-departure checks and generate a dispatch release for a flight."
          inputParameters:
            - name: flight_number
              in: body
              type: string
              description: "Flight number."
            - name: tail_number
              in: body
              type: string
              description: "Aircraft tail number."
            - name: captain_id
              in: body
              type: string
              description: "Captain employee ID."
          steps:
            - name: check-weather
              type: call
              call: "weather-api.get-route-weather"
              with:
                flight_number: "{{flight_number}}"
            - name: verify-crew-legal
              type: call
              call: "crew-mgmt.get-duty-status"
              with:
                employee_id: "{{captain_id}}"
            - name: check-aircraft-mx
              type: call
              call: "mx-api.get-status"
              with:
                tail: "{{tail_number}}"
            - name: generate-release
              type: call
              call: "dispatch-api.create-release"
              with:
                flight_number: "{{flight_number}}"
                weather_ok: "{{check-weather.safe}}"
                crew_legal: "{{verify-crew-legal.isCompliant}}"
                aircraft_ok: "{{check-aircraft-mx.maintenanceStatus}}"
  consumes:
    - type: http
      namespace: weather-api
      baseUri: "https://dispatch.united.com/api/v1/weather"
      authentication:
        type: bearer
        token: "$secrets.dispatch_token"
      resources:
        - name: route-weather
          path: "/route/{{flight_number}}"
          inputParameters:
            - name: flight_number
              in: path
          operations:
            - name: get-route-weather
              method: GET
    - type: http
      namespace: crew-mgmt
      baseUri: "https://crew.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.crew_mgmt_token"
      resources:
        - name: duty-status
          path: "/crew/{{employee_id}}/duty-status"
          inputParameters:
            - name: employee_id
              in: path
          operations:
            - name: get-duty-status
              method: GET
    - type: http
      namespace: mx-api
      baseUri: "https://maintenance.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.mx_api_token"
      resources:
        - name: aircraft
          path: "/aircraft/{{tail}}/status"
          inputParameters:
            - name: tail
              in: path
          operations:
            - name: get-status
              method: GET
    - type: http
      namespace: dispatch-api
      baseUri: "https://dispatch.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.dispatch_token"
      resources:
        - name: releases
          path: "/releases"
          operations:
            - name: create-release
              method: POST

Retrieves the load factor and booking curve data for a specific flight, showing current bookings vs capacity across cabin classes.

naftiko: "0.5"
info:
  label: "Flight Load Factor Report"
  description: "Retrieves the load factor and booking curve data for a specific flight, showing current bookings vs capacity across cabin classes."
  tags:
    - revenue-management
    - analytics
capability:
  exposes:
    - type: mcp
      namespace: load-factor
      port: 8080
      tools:
        - name: get-load-factor
          description: "Get load factor and booking data for a flight."
          inputParameters:
            - name: flight_number
              in: body
              type: string
              description: "Flight number."
            - name: flight_date
              in: body
              type: string
              description: "Flight date."
          call: "revenue-api.get-load-factor"
          with:
            flight: "{{flight_number}}"
            date: "{{flight_date}}"
          outputParameters:
            - name: overall_load_factor
              type: number
              mapping: "$.overallLoadFactor"
            - name: economy_load
              type: number
              mapping: "$.economyLoad"
            - name: premium_load
              type: number
              mapping: "$.premiumLoad"
            - name: total_booked
              type: number
              mapping: "$.totalBooked"
  consumes:
    - type: http
      namespace: revenue-api
      baseUri: "https://analytics.united.com/api/v1/revenue"
      authentication:
        type: bearer
        token: "$secrets.revenue_analytics_token"
      resources:
        - name: load-factor
          path: "/flights/{{flight}}/load-factor"
          inputParameters:
            - name: flight
              in: path
          operations:
            - name: get-load-factor
              method: GET

Retrieves actual fuel burn data for a completed flight from the aircraft performance monitoring system, including planned vs actual comparisons.

naftiko: "0.5"
info:
  label: "Flight Operational Fuel Burn Lookup"
  description: "Retrieves actual fuel burn data for a completed flight from the aircraft performance monitoring system, including planned vs actual comparisons."
  tags:
    - fuel-management
    - analytics
    - flight-operations
capability:
  exposes:
    - type: mcp
      namespace: fuel-burn
      port: 8080
      tools:
        - name: get-fuel-burn
          description: "Look up actual fuel burn for a completed flight."
          inputParameters:
            - name: flight_number
              in: body
              type: string
              description: "Flight number."
            - name: flight_date
              in: body
              type: string
              description: "Flight date."
          call: "fuel-api.get-burn-data"
          with:
            flight: "{{flight_number}}"
            date: "{{flight_date}}"
          outputParameters:
            - name: planned_burn
              type: number
              mapping: "$.plannedBurn"
            - name: actual_burn
              type: number
              mapping: "$.actualBurn"
            - name: variance_pct
              type: number
              mapping: "$.variancePercent"
  consumes:
    - type: http
      namespace: fuel-api
      baseUri: "https://analytics.united.com/api/v1/fuel"
      authentication:
        type: bearer
        token: "$secrets.fuel_analytics_token"
      resources:
        - name: burn-data
          path: "/flights/{{flight}}/burn"
          inputParameters:
            - name: flight
              in: path
          operations:
            - name: get-burn-data
              method: GET

When a critical flight operations IT incident is reported, creates a P1 ServiceNow incident, triggers a PagerDuty page for the on-call operations engineer, and notifies the ops center via Teams.

naftiko: "0.5"
info:
  label: "Flight Operations Incident Response"
  description: "When a critical flight operations IT incident is reported, creates a P1 ServiceNow incident, triggers a PagerDuty page for the on-call operations engineer, and notifies the ops center via Teams."
  tags:
    - operations
    - incident-response
    - servicenow
    - pagerduty
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: ops-incident
      port: 8080
      tools:
        - name: handle-ops-incident
          description: "Given an operations incident description and affected system, create a P1 ServiceNow incident, trigger a PagerDuty page, and notify the operations center via Teams."
          inputParameters:
            - name: affected_system
              in: body
              type: string
              description: "The flight operations system affected (e.g., Departure Control, Crew Scheduling, Weight and Balance)."
            - name: incident_description
              in: body
              type: string
              description: "Description of the operational incident."
            - name: ops_center_channel_id
              in: body
              type: string
              description: "Teams channel ID for the operations center."
          steps:
            - name: create-p1-incident
              type: call
              call: "servicenow-ops.create-incident"
              with:
                short_description: "P1 Ops Incident: {{affected_system}} — {{incident_description}}"
                priority: "1"
                category: "flight_operations"
                assignment_group: "Flight_Ops_IT"
            - name: trigger-pagerduty
              type: call
              call: "pagerduty.create-incident"
              with:
                title: "P1 Flight Ops: {{affected_system}}"
                service_id: "$secrets.pagerduty_ops_service_id"
                urgency: "high"
            - name: notify-ops-center
              type: call
              call: "msteams-ops.post-channel-message"
              with:
                channel_id: "{{ops_center_channel_id}}"
                text: "P1 OPS INCIDENT: {{affected_system}} | {{incident_description}} | ServiceNow: {{create-p1-incident.number}} | PD: {{trigger-pagerduty.incident_url}}"
  consumes:
    - type: http
      namespace: servicenow-ops
      baseUri: "https://united.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.pagerduty_token"
        placement: header
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams-ops
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Checks the filing status of a flight plan with ATC, returning acceptance status, filed route, and any amendments.

naftiko: "0.5"
info:
  label: "Flight Plan Filing Status"
  description: "Checks the filing status of a flight plan with ATC, returning acceptance status, filed route, and any amendments."
  tags:
    - dispatch
    - flight-operations
capability:
  exposes:
    - type: mcp
      namespace: flight-plan
      port: 8080
      tools:
        - name: get-flight-plan-status
          description: "Check the current filing status of a flight plan."
          inputParameters:
            - name: flight_number
              in: body
              type: string
              description: "Flight number."
            - name: flight_date
              in: body
              type: string
              description: "Flight date."
          call: "dispatch-api.get-plan-status"
          with:
            flight: "{{flight_number}}"
            date: "{{flight_date}}"
          outputParameters:
            - name: filing_status
              type: string
              mapping: "$.filingStatus"
            - name: filed_route
              type: string
              mapping: "$.filedRoute"
            - name: amendments
              type: array
              mapping: "$.amendments"
  consumes:
    - type: http
      namespace: dispatch-api
      baseUri: "https://dispatch.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.dispatch_token"
      resources:
        - name: flight-plans
          path: "/flight-plans/{{flight}}/status"
          inputParameters:
            - name: flight
              in: path
          operations:
            - name: get-plan-status
              method: GET

Retrieves real-time flight status including departure, arrival, gate, and delay information for a given United flight number and date.

naftiko: "0.5"
info:
  label: "Flight Status Lookup"
  description: "Retrieves real-time flight status including departure, arrival, gate, and delay information for a given United flight number and date."
  tags:
    - flight-operations
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: flight-ops
      port: 8080
      tools:
        - name: get-flight-status
          description: "Look up the current status of a United flight by flight number and date. Returns departure time, arrival time, gate, and delay reason if any."
          inputParameters:
            - name: flight_number
              in: body
              type: string
              description: "United flight number (e.g., UA1234)."
            - name: flight_date
              in: body
              type: string
              description: "Date of flight in YYYY-MM-DD format."
          call: "flight-api.get-status"
          with:
            flight_number: "{{flight_number}}"
            flight_date: "{{flight_date}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.flightStatus"
            - name: departure_time
              type: string
              mapping: "$.departureTime"
            - name: arrival_time
              type: string
              mapping: "$.arrivalTime"
            - name: gate
              type: string
              mapping: "$.gate"
  consumes:
    - type: http
      namespace: flight-api
      baseUri: "https://api.united.com/v1/flights"
      authentication:
        type: bearer
        token: "$secrets.united_api_token"
      resources:
        - name: flight-status
          path: "/status/{{flight_number}}/{{flight_date}}"
          inputParameters:
            - name: flight_number
              in: path
            - name: flight_date
              in: path
          operations:
            - name: get-status
              method: GET

Generates a fuel cost analysis report for a fleet segment, pulling fuel uplift data and price benchmarks to identify tankering and hedging opportunities.

naftiko: "0.5"
info:
  label: "Fuel Cost Optimization Report"
  description: "Generates a fuel cost analysis report for a fleet segment, pulling fuel uplift data and price benchmarks to identify tankering and hedging opportunities."
  tags:
    - fuel-management
    - analytics
    - cost-optimization
capability:
  exposes:
    - type: mcp
      namespace: fuel-analytics
      port: 8080
      tools:
        - name: generate-fuel-report
          description: "Generate a fuel cost optimization report for a given fleet type and date range."
          inputParameters:
            - name: fleet_type
              in: body
              type: string
              description: "Fleet type (e.g., B737, B787, A320)."
            - name: start_date
              in: body
              type: string
              description: "Start date for analysis."
            - name: end_date
              in: body
              type: string
              description: "End date for analysis."
          call: "fuel-db.query-costs"
          with:
            fleet: "{{fleet_type}}"
            start: "{{start_date}}"
            end: "{{end_date}}"
          outputParameters:
            - name: total_fuel_cost
              type: number
              mapping: "$.totalCost"
            - name: avg_price_per_gallon
              type: number
              mapping: "$.avgPricePerGallon"
            - name: tankering_savings
              type: number
              mapping: "$.tankeringSavings"
  consumes:
    - type: http
      namespace: fuel-db
      baseUri: "https://analytics.united.com/api/v1/fuel"
      authentication:
        type: bearer
        token: "$secrets.fuel_analytics_token"
      resources:
        - name: cost-analysis
          path: "/cost-analysis"
          operations:
            - name: query-costs
              method: POST

Queries current gate utilization and upcoming arrivals to recommend optimal gate assignments, minimizing passenger connection times and ground equipment repositioning.

naftiko: "0.5"
info:
  label: "Gate Assignment Optimizer"
  description: "Queries current gate utilization and upcoming arrivals to recommend optimal gate assignments, minimizing passenger connection times and ground equipment repositioning."
  tags:
    - ground-ops
    - flight-operations
    - optimization
capability:
  exposes:
    - type: mcp
      namespace: gate-mgmt
      port: 8080
      tools:
        - name: optimize-gate-assignment
          description: "Get an optimized gate assignment recommendation for an arriving flight."
          inputParameters:
            - name: flight_number
              in: body
              type: string
              description: "Arriving flight number."
            - name: station
              in: body
              type: string
              description: "Airport station code."
            - name: arrival_time
              in: body
              type: string
              description: "Expected arrival time in ISO 8601."
          call: "gate-api.get-recommendation"
          with:
            flight_number: "{{flight_number}}"
            station: "{{station}}"
            arrival_time: "{{arrival_time}}"
          outputParameters:
            - name: recommended_gate
              type: string
              mapping: "$.recommendedGate"
            - name: connection_score
              type: number
              mapping: "$.connectionScore"
            - name: alternatives
              type: array
              mapping: "$.alternativeGates"
  consumes:
    - type: http
      namespace: gate-api
      baseUri: "https://groundops.united.com/api/v1/gates"
      authentication:
        type: bearer
        token: "$secrets.ground_ops_token"
      resources:
        - name: recommendations
          path: "/optimize"
          operations:
            - name: get-recommendation
              method: POST

When a flight departure delay exceeds threshold, creates a ServiceNow operations record, logs it in Salesforce for customer recovery tracking, and notifies the station manager via Teams.

naftiko: "0.5"
info:
  label: "Gate Operations Delay Reporting"
  description: "When a flight departure delay exceeds threshold, creates a ServiceNow operations record, logs it in Salesforce for customer recovery tracking, and notifies the station manager via Teams."
  tags:
    - operations
    - flight-delay
    - servicenow
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: gate-ops
      port: 8080
      tools:
        - name: log-flight-delay
          description: "Given a flight number, station, delay minutes, and delay reason code, create a ServiceNow operational record, log in Salesforce for recovery, and notify the station manager via Teams."
          inputParameters:
            - name: flight_number
              in: body
              type: string
              description: "The United flight number being delayed (e.g., UA123)."
            - name: station_code
              in: body
              type: string
              description: "Departure airport station code (e.g., ORD, IAH)."
            - name: delay_minutes
              in: body
              type: integer
              description: "Number of minutes the flight is delayed."
            - name: delay_code
              in: body
              type: string
              description: "IATA delay reason code (e.g., 93 for weather, 41 for late aircraft)."
            - name: station_manager_upn
              in: body
              type: string
              description: "UPN of the station manager to notify."
          steps:
            - name: create-ops-record
              type: call
              call: "servicenow-delay.create-incident"
              with:
                short_description: "Flight delay: {{flight_number}} at {{station_code}} — {{delay_minutes}} min — Code {{delay_code}}"
                category: "flight_operations"
                priority: "3"
            - name: log-salesforce-case
              type: call
              call: "salesforce-delay.create-case"
              with:
                subject: "Delay recovery: {{flight_number}} at {{station_code}} — {{delay_minutes}} min"
                description: "Delay code: {{delay_code}}. ServiceNow: {{create-ops-record.number}}"
                priority: "Medium"
            - name: notify-station-manager
              type: call
              call: "msteams-delay.send-message"
              with:
                recipient_upn: "{{station_manager_upn}}"
                text: "Delay logged: {{flight_number}} at {{station_code}} — {{delay_minutes}} min — Code {{delay_code}} | ServiceNow: {{create-ops-record.number}} | Salesforce: {{log-salesforce-case.case_number}}"
  consumes:
    - type: http
      namespace: servicenow-delay
      baseUri: "https://united.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-delay
      baseUri: "https://united.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-delay
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Initiates month-end GL period close in SAP, creates a ServiceNow finance close checklist, and notifies the finance controller via Microsoft Teams.

naftiko: "0.5"
info:
  label: "General Ledger Period Close"
  description: "Initiates month-end GL period close in SAP, creates a ServiceNow finance close checklist, and notifies the finance controller via Microsoft Teams."
  tags:
    - finance
    - period-close
    - sap
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: finance-close
      port: 8080
      tools:
        - name: initiate-period-close
          description: "Given a fiscal period and year, open the period close in SAP, create a ServiceNow checklist, and notify the finance controller via Teams."
          inputParameters:
            - name: fiscal_period
              in: body
              type: string
              description: "Fiscal period number (01-12)."
            - name: fiscal_year
              in: body
              type: string
              description: "Fiscal year (e.g., 2026)."
            - name: controller_upn
              in: body
              type: string
              description: "UPN of the finance controller to notify."
          steps:
            - name: open-period
              type: call
              call: "sap-close.open-period"
              with:
                period: "{{fiscal_period}}"
                year: "{{fiscal_year}}"
            - name: create-close-checklist
              type: call
              call: "servicenow-close.create-task"
              with:
                short_description: "Finance close checklist FY{{fiscal_year}}-P{{fiscal_period}}"
                category: "finance_close"
                assignment_group: "Finance_Accounting"
            - name: notify-controller
              type: call
              call: "msteams-close.send-message"
              with:
                recipient_upn: "{{controller_upn}}"
                text: "Period close initiated: FY{{fiscal_year}}-P{{fiscal_period}}. Checklist: {{create-close-checklist.number}}. Approve all journal entries by the close deadline."
  consumes:
    - type: http
      namespace: sap-close
      baseUri: "https://united-s4.sap.com/sap/opu/odata/sap/API_FISCALPERIOD_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: fiscal-periods
          path: "/A_FiscalPeriod"
          operations:
            - name: open-period
              method: POST
    - type: http
      namespace: servicenow-close
      baseUri: "https://united.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/sc_task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: msteams-close
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves available ground transportation options at an airport including rental cars, rideshare, and hotel shuttles for customer service referrals.

naftiko: "0.5"
info:
  label: "Ground Transportation Partner Lookup"
  description: "Retrieves available ground transportation options at an airport including rental cars, rideshare, and hotel shuttles for customer service referrals."
  tags:
    - customer-service
    - ground-ops
    - partnerships
capability:
  exposes:
    - type: mcp
      namespace: ground-transport
      port: 8080
      tools:
        - name: get-ground-transport
          description: "Look up ground transportation options at an airport."
          inputParameters:
            - name: station
              in: body
              type: string
              description: "Airport IATA code."
          call: "transport-api.get-options"
          with:
            station: "{{station}}"
          outputParameters:
            - name: rental_cars
              type: array
              mapping: "$.rentalCars"
            - name: rideshare
              type: array
              mapping: "$.rideshare"
            - name: hotel_shuttles
              type: array
              mapping: "$.hotelShuttles"
  consumes:
    - type: http
      namespace: transport-api
      baseUri: "https://partnerships.united.com/api/v1/transport"
      authentication:
        type: bearer
        token: "$secrets.partnerships_token"
      resources:
        - name: options
          path: "/airports/{{station}}/options"
          inputParameters:
            - name: station
              in: path
          operations:
            - name: get-options
              method: GET

Validates a hazardous materials cargo shipment against IATA dangerous goods regulations, checking classification, packaging, and documentation compliance.

naftiko: "0.5"
info:
  label: "Hazmat Cargo Compliance Check"
  description: "Validates a hazardous materials cargo shipment against IATA dangerous goods regulations, checking classification, packaging, and documentation compliance."
  tags:
    - cargo
    - compliance
    - safety
capability:
  exposes:
    - type: mcp
      namespace: hazmat-compliance
      port: 8080
      tools:
        - name: check-hazmat-compliance
          description: "Verify compliance of a hazmat cargo shipment with IATA DGR."
          inputParameters:
            - name: awb_number
              in: body
              type: string
              description: "Air waybill number."
            - name: un_number
              in: body
              type: string
              description: "UN hazmat classification number."
            - name: packaging_group
              in: body
              type: string
              description: "Packaging group (I, II, III)."
          call: "cargo-api.validate-hazmat"
          with:
            awb: "{{awb_number}}"
            un_number: "{{un_number}}"
            packaging: "{{packaging_group}}"
          outputParameters:
            - name: compliant
              type: boolean
              mapping: "$.isCompliant"
            - name: violations
              type: array
              mapping: "$.violations"
            - name: dg_class
              type: string
              mapping: "$.dangerousGoodsClass"
  consumes:
    - type: http
      namespace: cargo-api
      baseUri: "https://cargo.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.united_cargo_token"
      resources:
        - name: hazmat
          path: "/hazmat/validate"
          operations:
            - name: validate-hazmat
              method: POST

Retrieves inflight WiFi performance metrics for a specific aircraft including uptime, bandwidth utilization, and passenger connection counts.

naftiko: "0.5"
info:
  label: "Inflight WiFi Connectivity Report"
  description: "Retrieves inflight WiFi performance metrics for a specific aircraft including uptime, bandwidth utilization, and passenger connection counts."
  tags:
    - inflight-services
    - technology
    - analytics
capability:
  exposes:
    - type: mcp
      namespace: wifi-ops
      port: 8080
      tools:
        - name: get-wifi-report
          description: "Pull WiFi connectivity metrics for an aircraft."
          inputParameters:
            - name: tail_number
              in: body
              type: string
              description: "Aircraft tail number."
            - name: flight_date
              in: body
              type: string
              description: "Flight date."
          call: "connectivity-api.get-metrics"
          with:
            tail: "{{tail_number}}"
            date: "{{flight_date}}"
          outputParameters:
            - name: uptime_pct
              type: number
              mapping: "$.uptimePercent"
            - name: avg_bandwidth_mbps
              type: number
              mapping: "$.avgBandwidthMbps"
            - name: total_connections
              type: number
              mapping: "$.totalConnections"
  consumes:
    - type: http
      namespace: connectivity-api
      baseUri: "https://connectivity.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.connectivity_token"
      resources:
        - name: metrics
          path: "/aircraft/{{tail}}/wifi-metrics"
          inputParameters:
            - name: tail
              in: path
          operations:
            - name: get-metrics
              method: GET

Looks up the interline baggage agreement between United and a partner airline to determine baggage allowance and through-check eligibility.

naftiko: "0.5"
info:
  label: "Interline Baggage Agreement Lookup"
  description: "Looks up the interline baggage agreement between United and a partner airline to determine baggage allowance and through-check eligibility."
  tags:
    - customer-service
    - baggage
    - partnerships
capability:
  exposes:
    - type: mcp
      namespace: interline-baggage
      port: 8080
      tools:
        - name: get-interline-baggage-rules
          description: "Look up interline baggage agreement with a partner airline."
          inputParameters:
            - name: partner_airline
              in: body
              type: string
              description: "Partner airline IATA code."
            - name: route_type
              in: body
              type: string
              description: "Route type (domestic, international)."
          call: "partnership-api.get-baggage-agreement"
          with:
            partner: "{{partner_airline}}"
            route: "{{route_type}}"
          outputParameters:
            - name: through_check_eligible
              type: boolean
              mapping: "$.throughCheckEligible"
            - name: free_bags
              type: number
              mapping: "$.freeBaggageAllowance"
            - name: weight_limit_kg
              type: number
              mapping: "$.weightLimitKg"
  consumes:
    - type: http
      namespace: partnership-api
      baseUri: "https://partnerships.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.partnerships_token"
      resources:
        - name: baggage-agreements
          path: "/interline/baggage/{{partner}}"
          inputParameters:
            - name: partner
              in: path
          operations:
            - name: get-baggage-agreement
              method: GET

Orchestrates international cargo customs documentation by generating the commercial invoice, packing list, and customs declaration, then submitting to the customs broker and notifying the shipper.

naftiko: "0.5"
info:
  label: "International Customs Documentation Orchestrator"
  description: "Orchestrates international cargo customs documentation by generating the commercial invoice, packing list, and customs declaration, then submitting to the customs broker and notifying the shipper."
  tags:
    - cargo
    - compliance
    - logistics
    - customs
capability:
  exposes:
    - type: mcp
      namespace: customs-docs
      port: 8080
      tools:
        - name: process-customs-docs
          description: "Generate and submit customs documentation for an international cargo shipment."
          inputParameters:
            - name: awb_number
              in: body
              type: string
              description: "Air waybill number."
            - name: destination_country
              in: body
              type: string
              description: "Destination country ISO code."
            - name: commodity_code
              in: body
              type: string
              description: "HS commodity code."
          steps:
            - name: generate-invoice
              type: call
              call: "cargo-api.generate-commercial-invoice"
              with:
                awb: "{{awb_number}}"
                country: "{{destination_country}}"
            - name: generate-declaration
              type: call
              call: "cargo-api.generate-customs-declaration"
              with:
                awb: "{{awb_number}}"
                hs_code: "{{commodity_code}}"
                country: "{{destination_country}}"
            - name: submit-to-broker
              type: call
              call: "customs-api.submit-declaration"
              with:
                awb: "{{awb_number}}"
                invoice_ref: "{{generate-invoice.invoice_id}}"
                declaration_ref: "{{generate-declaration.declaration_id}}"
            - name: notify-shipper
              type: call
              call: "notification-api.send-email"
              with:
                template: "customs_submitted"
                awb: "{{awb_number}}"
                broker_ref: "{{submit-to-broker.broker_reference}}"
  consumes:
    - type: http
      namespace: cargo-api
      baseUri: "https://cargo.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.united_cargo_token"
      resources:
        - name: invoices
          path: "/documentation/invoice"
          operations:
            - name: generate-commercial-invoice
              method: POST
        - name: declarations
          path: "/documentation/customs-declaration"
          operations:
            - name: generate-customs-declaration
              method: POST
    - type: http
      namespace: customs-api
      baseUri: "https://customs-broker.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.customs_broker_token"
      resources:
        - name: submissions
          path: "/declarations/submit"
          operations:
            - name: submit-declaration
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://notifications.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.notification_token"
      resources:
        - name: emails
          path: "/email/send"
          operations:
            - name: send-email
              method: POST

When a flight is cancelled due to irregular operations, identifies affected passengers, finds available rebooking options, rebooks customers, and sends notification via email and SMS.

naftiko: "0.5"
info:
  label: "Irregular Operations Rebooking Orchestrator"
  description: "When a flight is cancelled due to irregular operations, identifies affected passengers, finds available rebooking options, rebooks customers, and sends notification via email and SMS."
  tags:
    - flight-operations
    - customer-service
    - rebooking
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: irrops
      port: 8080
      tools:
        - name: handle-irrops-rebooking
          description: "Given a cancelled flight, retrieve affected passengers, find alternatives, rebook, and notify customers."
          inputParameters:
            - name: cancelled_flight
              in: body
              type: string
              description: "Cancelled flight number."
            - name: flight_date
              in: body
              type: string
              description: "Date of the cancelled flight."
            - name: reason
              in: body
              type: string
              description: "Cancellation reason (weather, mechanical, ATC)."
          steps:
            - name: get-affected-passengers
              type: call
              call: "pss.get-passengers"
              with:
                flight_number: "{{cancelled_flight}}"
                date: "{{flight_date}}"
            - name: find-rebooking-options
              type: call
              call: "pss.search-alternatives"
              with:
                origin: "{{get-affected-passengers.origin}}"
                destination: "{{get-affected-passengers.destination}}"
                date: "{{flight_date}}"
            - name: execute-rebookings
              type: call
              call: "pss.batch-rebook"
              with:
                passenger_list: "{{get-affected-passengers.pnrs}}"
                alternatives: "{{find-rebooking-options.options}}"
            - name: notify-operations
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "{{ops_channel_id}}"
                text: "IRROPS rebooking complete for {{cancelled_flight}} on {{flight_date}} — {{reason}}. {{execute-rebookings.rebooked_count}} passengers rebooked."
  consumes:
    - type: http
      namespace: pss
      baseUri: "https://pss.united.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.pss_token"
      resources:
        - name: passengers
          path: "/flights/{{flight_number}}/passengers"
          inputParameters:
            - name: flight_number
              in: path
          operations:
            - name: get-passengers
              method: GET
        - name: alternatives
          path: "/availability/search"
          operations:
            - name: search-alternatives
              method: POST
        - name: rebooking
          path: "/rebooking/batch"
          operations:
            - name: batch-rebook
              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/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Submits an IT change request in ServiceNow for system changes affecting United Airlines operations, routes for CAB approval, and notifies impacted stakeholders via Teams.

naftiko: "0.5"
info:
  label: "IT Change Management Request"
  description: "Submits an IT change request in ServiceNow for system changes affecting United Airlines operations, routes for CAB approval, and notifies impacted stakeholders via Teams."
  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 description, risk level, and implementation date, create a ServiceNow change request, assign to the CAB, and notify IT stakeholders via Teams."
          inputParameters:
            - name: change_description
              in: body
              type: string
              description: "Description of the proposed IT change."
            - name: risk_level
              in: body
              type: string
              description: "Risk level: low, medium, high, critical."
            - name: implementation_date
              in: body
              type: string
              description: "Planned implementation date in YYYY-MM-DD format."
            - name: it_channel_id
              in: body
              type: string
              description: "Teams channel ID for IT stakeholder notifications."
          steps:
            - name: create-change
              type: call
              call: "servicenow-change.create-change"
              with:
                short_description: "{{change_description}}"
                risk: "{{risk_level}}"
                start_date: "{{implementation_date}}"
                assignment_group: "CAB"
            - name: notify-stakeholders
              type: call
              call: "msteams-change.post-channel-message"
              with:
                channel_id: "{{it_channel_id}}"
                text: "Change request {{create-change.number}}: {{change_description}} | Risk: {{risk_level}} | Implementation: {{implementation_date}} | CAB review in progress."
  consumes:
    - type: http
      namespace: servicenow-change
      baseUri: "https://united.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: changes
          path: "/table/change_request"
          operations:
            - name: create-change
              method: POST
    - type: http
      namespace: msteams-change
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

When a Datadog security signal fires for a critical system, creates a ServiceNow security incident, escalates via PagerDuty, and posts an alert to the security operations Teams channel.

naftiko: "0.5"
info:
  label: "IT Security Vulnerability Alert"
  description: "When a Datadog security signal fires for a critical system, creates a ServiceNow security incident, escalates via PagerDuty, and posts an alert to the security operations Teams channel."
  tags:
    - security
    - vulnerability
    - datadog
    - servicenow
    - pagerduty
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: security-ops
      port: 8080
      tools:
        - name: handle-security-alert
          description: "Given a Datadog security signal for a critical system, create a ServiceNow security incident, trigger a PagerDuty page, and alert the security operations team via Teams."
          inputParameters:
            - name: signal_id
              in: body
              type: string
              description: "The Datadog security signal ID."
            - name: affected_system
              in: body
              type: string
              description: "Name of the affected system or service."
            - name: severity
              in: body
              type: string
              description: "Signal severity: critical, high, medium, low."
            - name: soc_channel_id
              in: body
              type: string
              description: "Teams channel ID for the security operations center."
          steps:
            - name: create-security-incident
              type: call
              call: "servicenow-sec.create-incident"
              with:
                short_description: "Security alert: {{affected_system}} — {{severity}} — Signal {{signal_id}}"
                category: "security"
                priority: "1"
                assignment_group: "Security_Operations"
            - name: page-security-oncall
              type: call
              call: "pagerduty-sec.create-incident"
              with:
                title: "Security alert: {{affected_system}} — {{severity}}"
                service_id: "$secrets.pagerduty_security_service_id"
                urgency: "high"
            - name: alert-soc
              type: call
              call: "msteams-sec.post-channel-message"
              with:
                channel_id: "{{soc_channel_id}}"
                text: "SECURITY ALERT: {{affected_system}} | Severity: {{severity}} | Signal: {{signal_id}} | ServiceNow: {{create-security-incident.number}} | PD: {{page-security-oncall.incident_url}}"
  consumes:
    - type: http
      namespace: servicenow-sec
      baseUri: "https://united.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: pagerduty-sec
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.pagerduty_token"
        placement: header
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams-sec
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Retrieves LinkedIn Company Page engagement metrics for United Airlines and posts a weekly employer brand performance digest to the talent acquisition Teams channel.

naftiko: "0.5"
info:
  label: "LinkedIn Employer Brand Campaign Report"
  description: "Retrieves LinkedIn Company Page engagement metrics for United Airlines and posts a weekly employer brand performance digest to the talent acquisition Teams channel."
  tags:
    - marketing
    - employer-brand
    - linkedin
    - microsoft-teams
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: employer-brand
      port: 8080
      tools:
        - name: digest-linkedin-brand-metrics
          description: "Given a LinkedIn organization ID, retrieve follower count, engagement, and job post metrics and post a weekly employer brand report to the talent acquisition Teams channel."
          inputParameters:
            - name: linkedin_org_id
              in: body
              type: string
              description: "United Airlines' LinkedIn organization ID."
            - name: talent_channel_id
              in: body
              type: string
              description: "Teams channel ID for the talent acquisition team."
          steps:
            - name: get-linkedin-stats
              type: call
              call: "linkedin.get-organization-statistics"
              with:
                organizationId: "{{linkedin_org_id}}"
            - name: post-brand-digest
              type: call
              call: "msteams-brand.post-channel-message"
              with:
                channel_id: "{{talent_channel_id}}"
                text: "LinkedIn Brand Report: United Airlines | Followers: {{get-linkedin-stats.follower_count}} | New (7d): {{get-linkedin-stats.new_followers}} | Engagement rate: {{get-linkedin-stats.engagement_rate}}%"
  consumes:
    - type: http
      namespace: linkedin
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: organization-statistics
          path: "/organizationPageStatistics"
          inputParameters:
            - name: organizationId
              in: query
          operations:
            - name: get-organization-statistics
              method: GET
    - type: http
      namespace: msteams-brand
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Processes a lost baggage claim by creating a WorldTracer record, logging a Salesforce case, initiating a baggage search, and sending the passenger an SMS tracking link.

naftiko: "0.5"
info:
  label: "Lost Baggage Claim Orchestrator"
  description: "Processes a lost baggage claim by creating a WorldTracer record, logging a Salesforce case, initiating a baggage search, and sending the passenger an SMS tracking link."
  tags:
    - customer-service
    - baggage
    - salesforce
    - notifications
capability:
  exposes:
    - type: mcp
      namespace: lost-baggage
      port: 8080
      tools:
        - name: process-lost-baggage
          description: "File a lost baggage claim and initiate tracking across systems."
          inputParameters:
            - name: pnr
              in: body
              type: string
              description: "Passenger name record."
            - name: bag_tag
              in: body
              type: string
              description: "Bag tag number."
            - name: flight_number
              in: body
              type: string
              description: "Flight number."
            - name: passenger_phone
              in: body
              type: string
              description: "Passenger contact phone."
          steps:
            - name: create-worldtracer-record
              type: call
              call: "baggage-api.create-tracer"
              with:
                pnr: "{{pnr}}"
                bag_tag: "{{bag_tag}}"
                flight: "{{flight_number}}"
            - name: create-salesforce-case
              type: call
              call: "salesforce.create-case"
              with:
                subject: "Lost baggage — {{bag_tag}} on {{flight_number}}"
                description: "PNR: {{pnr}} | Tracer: {{create-worldtracer-record.tracer_id}}"
                priority: "High"
            - name: send-tracking-sms
              type: call
              call: "notification-api.send-sms"
              with:
                phone: "{{passenger_phone}}"
                message: "Your lost baggage claim has been filed. Track at: https://www.united.com/baggage/track/{{create-worldtracer-record.tracer_id}}"
  consumes:
    - type: http
      namespace: baggage-api
      baseUri: "https://baggage.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.baggage_api_token"
      resources:
        - name: tracers
          path: "/worldtracer/create"
          operations:
            - name: create-tracer
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://united.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: notification-api
      baseUri: "https://notifications.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.notification_token"
      resources:
        - name: sms
          path: "/sms/send"
          operations:
            - name: send-sms
              method: POST

Processes a miles transfer between MileagePlus and a Star Alliance partner loyalty program, validating both accounts and executing the credit.

naftiko: "0.5"
info:
  label: "Loyalty Partner Miles Transfer"
  description: "Processes a miles transfer between MileagePlus and a Star Alliance partner loyalty program, validating both accounts and executing the credit."
  tags:
    - loyalty
    - mileageplus
    - partnerships
capability:
  exposes:
    - type: mcp
      namespace: miles-transfer
      port: 8080
      tools:
        - name: transfer-partner-miles
          description: "Transfer miles between MileagePlus and a partner program."
          inputParameters:
            - name: mileageplus_number
              in: body
              type: string
              description: "MileagePlus member number."
            - name: partner_program
              in: body
              type: string
              description: "Partner loyalty program code."
            - name: partner_number
              in: body
              type: string
              description: "Partner program member number."
            - name: miles_amount
              in: body
              type: number
              description: "Miles to transfer."
          call: "loyalty-api.transfer-miles"
          with:
            member_id: "{{mileageplus_number}}"
            partner: "{{partner_program}}"
            partner_id: "{{partner_number}}"
            amount: "{{miles_amount}}"
          outputParameters:
            - name: transfer_id
              type: string
              mapping: "$.transferId"
            - name: status
              type: string
              mapping: "$.status"
            - name: new_balance
              type: number
              mapping: "$.newBalance"
  consumes:
    - type: http
      namespace: loyalty-api
      baseUri: "https://loyalty.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.loyalty_api_token"
      resources:
        - name: transfers
          path: "/miles/transfer"
          operations:
            - name: transfer-miles
              method: POST

Queries the SAP materials management system for aircraft spare parts availability at a maintenance station, returning stock levels and lead times.

naftiko: "0.5"
info:
  label: "Maintenance Parts Inventory Lookup"
  description: "Queries the SAP materials management system for aircraft spare parts availability at a maintenance station, returning stock levels and lead times."
  tags:
    - maintenance
    - sap
    - inventory
capability:
  exposes:
    - type: mcp
      namespace: parts-inventory
      port: 8080
      tools:
        - name: check-parts-inventory
          description: "Check spare parts availability for aircraft maintenance."
          inputParameters:
            - name: part_number
              in: body
              type: string
              description: "Part number."
            - name: station
              in: body
              type: string
              description: "Maintenance station code."
          call: "sap.get-material-stock"
          with:
            material: "{{part_number}}"
            plant: "{{station}}"
          outputParameters:
            - name: quantity_on_hand
              type: number
              mapping: "$.d.UnrestrictedStock"
            - name: reorder_point
              type: number
              mapping: "$.d.ReorderPoint"
            - name: lead_time_days
              type: number
              mapping: "$.d.PlannedDeliveryDays"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://united-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: material-stock
          path: "/A_MatlStkInAcctMod(Material='{{material}}',Plant='{{plant}}')"
          inputParameters:
            - name: material
              in: path
            - name: plant
              in: path
          operations:
            - name: get-material-stock
              method: GET

When an inflight medical emergency is reported, contacts MedLink ground physicians, identifies nearest diversion airports, notifies station operations, and creates an incident report.

naftiko: "0.5"
info:
  label: "Medical Emergency Response Orchestrator"
  description: "When an inflight medical emergency is reported, contacts MedLink ground physicians, identifies nearest diversion airports, notifies station operations, and creates an incident report."
  tags:
    - safety
    - flight-operations
    - emergency
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: medical-emergency
      port: 8080
      tools:
        - name: handle-medical-emergency
          description: "Coordinate response to an inflight medical emergency."
          inputParameters:
            - name: flight_number
              in: body
              type: string
              description: "Flight number."
            - name: emergency_type
              in: body
              type: string
              description: "Type of medical emergency."
            - name: current_position
              in: body
              type: string
              description: "Current aircraft position (lat/lon)."
          steps:
            - name: contact-medlink
              type: call
              call: "medlink-api.initiate-consult"
              with:
                flight_number: "{{flight_number}}"
                emergency_type: "{{emergency_type}}"
            - name: find-diversion-airports
              type: call
              call: "dispatch-api.find-diversions"
              with:
                position: "{{current_position}}"
                emergency: true
            - name: notify-station
              type: call
              call: "ground-ops.alert-station"
              with:
                station: "{{find-diversion-airports.nearest_airport}}"
                flight_number: "{{flight_number}}"
                reason: "Medical emergency: {{emergency_type}}"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Medical emergency on {{flight_number}}: {{emergency_type}}"
                category: "safety"
                priority: "1"
  consumes:
    - type: http
      namespace: medlink-api
      baseUri: "https://medlink.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.medlink_token"
      resources:
        - name: consults
          path: "/consults/initiate"
          operations:
            - name: initiate-consult
              method: POST
    - type: http
      namespace: dispatch-api
      baseUri: "https://dispatch.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.dispatch_token"
      resources:
        - name: diversions
          path: "/diversions/search"
          operations:
            - name: find-diversions
              method: POST
    - type: http
      namespace: ground-ops
      baseUri: "https://groundops.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ground_ops_token"
      resources:
        - name: alerts
          path: "/stations/alert"
          operations:
            - name: alert-station
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://united.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST

Retrieves a MileagePlus member's loyalty tier, PQP balance, and upgrade status from the loyalty platform for customer service interactions.

naftiko: "0.5"
info:
  label: "MileagePlus Loyalty Tier Lookup"
  description: "Retrieves a MileagePlus member's loyalty tier, PQP balance, and upgrade status from the loyalty platform for customer service interactions."
  tags:
    - customer-service
    - loyalty
    - mileageplus
capability:
  exposes:
    - type: mcp
      namespace: loyalty
      port: 8080
      tools:
        - name: get-member-tier
          description: "Look up a MileagePlus member's current tier and qualification status."
          inputParameters:
            - name: mileageplus_number
              in: body
              type: string
              description: "MileagePlus member number."
          call: "loyalty-api.get-member"
          with:
            member_id: "{{mileageplus_number}}"
          outputParameters:
            - name: tier
              type: string
              mapping: "$.currentTier"
            - name: pqp_balance
              type: number
              mapping: "$.pqpBalance"
            - name: pqf_balance
              type: number
              mapping: "$.pqfBalance"
            - name: upgrade_status
              type: string
              mapping: "$.upgradeStatus"
  consumes:
    - type: http
      namespace: loyalty-api
      baseUri: "https://loyalty.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.loyalty_api_token"
      resources:
        - name: members
          path: "/members/{{member_id}}"
          inputParameters:
            - name: member_id
              in: path
          operations:
            - name: get-member
              method: GET

When a schedule change is proposed, analyzes the impact on connecting itineraries, crew pairings, and gate utilization, then generates an impact report and notifies affected departments via Teams.

naftiko: "0.5"
info:
  label: "Network Schedule Change Impact Orchestrator"
  description: "When a schedule change is proposed, analyzes the impact on connecting itineraries, crew pairings, and gate utilization, then generates an impact report and notifies affected departments via Teams."
  tags:
    - scheduling
    - flight-operations
    - analytics
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: schedule-change
      port: 8080
      tools:
        - name: assess-schedule-change
          description: "Analyze the impact of a proposed schedule change across operations."
          inputParameters:
            - name: flight_number
              in: body
              type: string
              description: "Flight number being changed."
            - name: new_departure_time
              in: body
              type: string
              description: "Proposed new departure time."
            - name: effective_date
              in: body
              type: string
              description: "Date change takes effect."
          steps:
            - name: analyze-connections
              type: call
              call: "scheduling-api.analyze-connections"
              with:
                flight: "{{flight_number}}"
                new_time: "{{new_departure_time}}"
            - name: analyze-crew-impact
              type: call
              call: "crew-mgmt.assess-pairing-impact"
              with:
                flight: "{{flight_number}}"
                new_time: "{{new_departure_time}}"
            - name: analyze-gate-impact
              type: call
              call: "gate-api.assess-utilization-impact"
              with:
                flight: "{{flight_number}}"
                new_time: "{{new_departure_time}}"
            - name: notify-departments
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "{{planning_channel_id}}"
                text: "Schedule change impact for {{flight_number}} to {{new_departure_time}}: Connections affected: {{analyze-connections.affected_count}} | Crew pairings: {{analyze-crew-impact.pairings_affected}} | Gate conflicts: {{analyze-gate-impact.conflicts}}"
  consumes:
    - type: http
      namespace: scheduling-api
      baseUri: "https://scheduling.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.scheduling_token"
      resources:
        - name: connections
          path: "/analysis/connections"
          operations:
            - name: analyze-connections
              method: POST
    - type: http
      namespace: crew-mgmt
      baseUri: "https://crew.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.crew_mgmt_token"
      resources:
        - name: pairing-impact
          path: "/pairings/impact-analysis"
          operations:
            - name: assess-pairing-impact
              method: POST
    - type: http
      namespace: gate-api
      baseUri: "https://groundops.united.com/api/v1/gates"
      authentication:
        type: bearer
        token: "$secrets.ground_ops_token"
      resources:
        - name: utilization
          path: "/utilization/impact"
          operations:
            - name: assess-utilization-impact
              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/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

When a new employee joins United Airlines, opens a ServiceNow onboarding ticket, provisions their Workday profile, and sends a Microsoft Teams welcome message to their department channel.

naftiko: "0.5"
info:
  label: "New Employee Onboarding Orchestrator"
  description: "When a new employee joins United Airlines, opens a ServiceNow onboarding ticket, provisions their Workday profile, and sends a Microsoft Teams welcome message to their department channel."
  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, department, and start date, orchestrate the onboarding sequence across ServiceNow and Microsoft Teams."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday employee ID for the new hire."
            - name: department
              in: body
              type: string
              description: "The department the employee is joining (e.g., Flight Operations, Inflight, Airport Operations, IT)."
            - name: start_date
              in: body
              type: string
              description: "Start date in YYYY-MM-DD format."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{employee_id}}"
            - name: open-onboarding-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "New hire onboarding: {{get-employee.full_name}} — {{department}} — {{start_date}}"
                category: "hr_onboarding"
                assignment_group: "IT_Onboarding"
            - name: notify-department
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-employee.manager_email}}"
                text: "New hire {{get-employee.first_name}} {{get-employee.last_name}} joins {{department}} on {{start_date}}. Onboarding ticket: {{open-onboarding-ticket.number}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://united.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Triggers a refresh of the on-time performance Power BI dataset, pulling latest arrival and departure metrics for the operations dashboard.

naftiko: "0.5"
info:
  label: "On-Time Performance Dashboard Refresh"
  description: "Triggers a refresh of the on-time performance Power BI dataset, pulling latest arrival and departure metrics for the operations dashboard."
  tags:
    - analytics
    - power-bi
    - flight-operations
capability:
  exposes:
    - type: mcp
      namespace: otp-analytics
      port: 8080
      tools:
        - name: refresh-otp-dashboard
          description: "Trigger a Power BI dataset refresh for on-time performance metrics."
          inputParameters:
            - name: dataset_id
              in: body
              type: string
              description: "Power BI dataset ID for OTP dashboard."
          call: "powerbi.refresh-dataset"
          with:
            dataset_id: "{{dataset_id}}"
          outputParameters:
            - name: refresh_id
              type: string
              mapping: "$.id"
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: refresh-dataset
              method: POST

Compiles the daily operations control briefing by pulling weather forecasts, maintenance status, crew coverage, and known disruptions, then posting a formatted summary to the ops Teams channel.

naftiko: "0.5"
info:
  label: "Ops Control Daily Briefing Orchestrator"
  description: "Compiles the daily operations control briefing by pulling weather forecasts, maintenance status, crew coverage, and known disruptions, then posting a formatted summary to the ops Teams channel."
  tags:
    - operations
    - flight-operations
    - microsoft-teams
    - analytics
capability:
  exposes:
    - type: mcp
      namespace: ops-briefing
      port: 8080
      tools:
        - name: generate-daily-briefing
          description: "Generate and distribute the daily operations control briefing."
          inputParameters:
            - name: briefing_date
              in: body
              type: string
              description: "Briefing date."
          steps:
            - name: get-weather-outlook
              type: call
              call: "weather-api.get-network-outlook"
              with:
                date: "{{briefing_date}}"
            - name: get-mx-summary
              type: call
              call: "mx-api.get-fleet-summary"
              with:
                date: "{{briefing_date}}"
            - name: get-crew-coverage
              type: call
              call: "crew-mgmt.get-coverage-summary"
              with:
                date: "{{briefing_date}}"
            - name: post-briefing
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "{{occ_channel_id}}"
                text: "DAILY OPS BRIEFING — {{briefing_date}}\nWeather: {{get-weather-outlook.summary}}\nFleet: {{get-mx-summary.available_aircraft}}/{{get-mx-summary.total_aircraft}} available\nCrew coverage: {{get-crew-coverage.coverage_pct}}%\nKnown disruptions: {{get-weather-outlook.disruption_count}}"
  consumes:
    - type: http
      namespace: weather-api
      baseUri: "https://dispatch.united.com/api/v1/weather"
      authentication:
        type: bearer
        token: "$secrets.dispatch_token"
      resources:
        - name: network-outlook
          path: "/network/outlook"
          operations:
            - name: get-network-outlook
              method: POST
    - type: http
      namespace: mx-api
      baseUri: "https://maintenance.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.mx_api_token"
      resources:
        - name: fleet-summary
          path: "/fleet/summary"
          operations:
            - name: get-fleet-summary
              method: POST
    - type: http
      namespace: crew-mgmt
      baseUri: "https://crew.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.crew_mgmt_token"
      resources:
        - name: coverage
          path: "/coverage/summary"
          operations:
            - name: get-coverage-summary
              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/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Manages overbooked flights by identifying volunteer candidates based on itinerary flexibility, offering compensation tiers, processing voluntary denied boardings, and rebooking on alternative flights.

naftiko: "0.5"
info:
  label: "Overbooking Management Orchestrator"
  description: "Manages overbooked flights by identifying volunteer candidates based on itinerary flexibility, offering compensation tiers, processing voluntary denied boardings, and rebooking on alternative flights."
  tags:
    - revenue-management
    - customer-service
    - flight-operations
capability:
  exposes:
    - type: mcp
      namespace: overbooking-mgmt
      port: 8080
      tools:
        - name: manage-overbooking
          description: "Handle overbooking situation for a flight."
          inputParameters:
            - name: flight_number
              in: body
              type: string
              description: "Overbooked flight number."
            - name: flight_date
              in: body
              type: string
              description: "Flight date."
            - name: overbook_count
              in: body
              type: number
              description: "Number of seats overbooked."
          steps:
            - name: identify-volunteers
              type: call
              call: "pss.find-volunteer-candidates"
              with:
                flight: "{{flight_number}}"
                date: "{{flight_date}}"
                count: "{{overbook_count}}"
            - name: calculate-compensation
              type: call
              call: "compensation-api.get-vdb-rates"
              with:
                flight: "{{flight_number}}"
                date: "{{flight_date}}"
            - name: find-alternatives
              type: call
              call: "pss.search-alternatives"
              with:
                origin: "{{identify-volunteers.origin}}"
                destination: "{{identify-volunteers.destination}}"
                date: "{{flight_date}}"
            - name: send-volunteer-offers
              type: call
              call: "notification-api.batch-notify"
              with:
                passengers: "{{identify-volunteers.candidates}}"
                template: "volunteer_offer"
                compensation: "{{calculate-compensation.offer_amount}}"
                alternatives: "{{find-alternatives.options}}"
  consumes:
    - type: http
      namespace: pss
      baseUri: "https://pss.united.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.pss_token"
      resources:
        - name: volunteers
          path: "/flights/{{flight}}/volunteer-candidates"
          inputParameters:
            - name: flight
              in: path
          operations:
            - name: find-volunteer-candidates
              method: POST
        - name: alternatives
          path: "/availability/search"
          operations:
            - name: search-alternatives
              method: POST
    - type: http
      namespace: compensation-api
      baseUri: "https://compensation.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.compensation_token"
      resources:
        - name: vdb-rates
          path: "/rates/voluntary-denied-boarding"
          operations:
            - name: get-vdb-rates
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://notifications.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.notification_token"
      resources:
        - name: batch
          path: "/batch/notify"
          operations:
            - name: batch-notify
              method: POST

Monitors tight passenger connections at hub stations and returns at-risk connecting passengers with their current and onward flight details.

naftiko: "0.5"
info:
  label: "Passenger Connection Monitor"
  description: "Monitors tight passenger connections at hub stations and returns at-risk connecting passengers with their current and onward flight details."
  tags:
    - customer-service
    - flight-operations
    - connections
capability:
  exposes:
    - type: mcp
      namespace: connection-monitor
      port: 8080
      tools:
        - name: check-connections
          description: "Identify passengers with tight or missed connections at a hub."
          inputParameters:
            - name: hub_station
              in: body
              type: string
              description: "Hub airport code."
            - name: threshold_minutes
              in: body
              type: number
              description: "Connection time threshold in minutes."
          call: "pss.get-tight-connections"
          with:
            station: "{{hub_station}}"
            threshold: "{{threshold_minutes}}"
          outputParameters:
            - name: at_risk_passengers
              type: array
              mapping: "$.atRiskPassengers"
            - name: total_at_risk
              type: number
              mapping: "$.totalAtRisk"
  consumes:
    - type: http
      namespace: pss
      baseUri: "https://pss.united.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.pss_token"
      resources:
        - name: connections
          path: "/connections/at-risk"
          operations:
            - name: get-tight-connections
              method: POST

Identifies no-show passengers after gate closure, updates their reservation status, and releases their seats for potential standby passengers.

naftiko: "0.5"
info:
  label: "Passenger No-Show Processing"
  description: "Identifies no-show passengers after gate closure, updates their reservation status, and releases their seats for potential standby passengers."
  tags:
    - flight-operations
    - revenue-management
    - customer-service
capability:
  exposes:
    - type: mcp
      namespace: no-show-processing
      port: 8080
      tools:
        - name: process-no-shows
          description: "Process passenger no-shows for a departing flight."
          inputParameters:
            - name: flight_number
              in: body
              type: string
              description: "Flight number."
            - name: flight_date
              in: body
              type: string
              description: "Flight date."
          call: "pss.process-no-shows"
          with:
            flight: "{{flight_number}}"
            date: "{{flight_date}}"
          outputParameters:
            - name: no_show_count
              type: number
              mapping: "$.noShowCount"
            - name: seats_released
              type: number
              mapping: "$.seatsReleased"
            - name: standby_cleared
              type: number
              mapping: "$.standbyCleared"
  consumes:
    - type: http
      namespace: pss
      baseUri: "https://pss.united.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.pss_token"
      resources:
        - name: no-shows
          path: "/flights/{{flight}}/no-shows"
          inputParameters:
            - name: flight
              in: path
          operations:
            - name: process-no-shows
              method: POST

Processes passenger upgrade requests by checking availability in the premium cabin, verifying MileagePlus status, executing the upgrade in the reservation system, and sending a confirmation notification.

naftiko: "0.5"
info:
  label: "Passenger Upgrade Processing Orchestrator"
  description: "Processes passenger upgrade requests by checking availability in the premium cabin, verifying MileagePlus status, executing the upgrade in the reservation system, and sending a confirmation notification."
  tags:
    - customer-service
    - loyalty
    - mileageplus
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: upgrade-processing
      port: 8080
      tools:
        - name: process-upgrade
          description: "Process a passenger upgrade request end-to-end."
          inputParameters:
            - name: pnr
              in: body
              type: string
              description: "Passenger name record."
            - name: flight_number
              in: body
              type: string
              description: "Flight number for upgrade."
            - name: mileageplus_number
              in: body
              type: string
              description: "MileagePlus member number."
            - name: target_cabin
              in: body
              type: string
              description: "Target cabin class (e.g., Polaris, First)."
          steps:
            - name: check-availability
              type: call
              call: "pss.check-cabin-availability"
              with:
                flight_number: "{{flight_number}}"
                cabin: "{{target_cabin}}"
            - name: verify-eligibility
              type: call
              call: "loyalty-api.get-upgrade-eligibility"
              with:
                member_id: "{{mileageplus_number}}"
                cabin: "{{target_cabin}}"
            - name: execute-upgrade
              type: call
              call: "pss.process-upgrade"
              with:
                pnr: "{{pnr}}"
                flight_number: "{{flight_number}}"
                cabin: "{{target_cabin}}"
            - name: send-confirmation
              type: call
              call: "notification-api.send-email"
              with:
                member_id: "{{mileageplus_number}}"
                template: "upgrade_confirmation"
                flight_number: "{{flight_number}}"
                cabin: "{{target_cabin}}"
  consumes:
    - type: http
      namespace: pss
      baseUri: "https://pss.united.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.pss_token"
      resources:
        - name: cabin-availability
          path: "/availability/cabin"
          operations:
            - name: check-cabin-availability
              method: POST
        - name: upgrades
          path: "/upgrades/process"
          operations:
            - name: process-upgrade
              method: POST
    - type: http
      namespace: loyalty-api
      baseUri: "https://loyalty.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.loyalty_api_token"
      resources:
        - name: upgrade-eligibility
          path: "/members/{{member_id}}/upgrade-eligibility"
          inputParameters:
            - name: member_id
              in: path
          operations:
            - name: get-upgrade-eligibility
              method: GET
    - type: http
      namespace: notification-api
      baseUri: "https://notifications.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.notification_token"
      resources:
        - name: emails
          path: "/email/send"
          operations:
            - name: send-email
              method: POST

Retrieves current headcount by department and employment classification from Workday for payroll planning and labor cost reporting.

naftiko: "0.5"
info:
  label: "Payroll Headcount Snapshot"
  description: "Retrieves current headcount by department and employment classification from Workday for payroll planning and labor cost reporting."
  tags:
    - hr
    - payroll
    - workday
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: hr-reporting
      port: 8080
      tools:
        - name: get-headcount-snapshot
          description: "Returns current active headcount grouped by department (Flight Operations, Inflight, Airport Ops, IT) and employment type. Use for payroll planning and union contract compliance."
          inputParameters:
            - name: department
              in: body
              type: string
              description: "Department to filter by. Leave blank for all departments."
          call: "workday-payroll.get-workers"
          with:
            department: "{{department}}"
          outputParameters:
            - name: total_count
              type: number
              mapping: "$.totalCount"
            - name: unionized_count
              type: number
              mapping: "$.unionizedCount"
            - name: management_count
              type: number
              mapping: "$.managementCount"
  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: workers
          path: "/workers"
          inputParameters:
            - name: department
              in: query
          operations:
            - name: get-workers
              method: GET

Validates a pet-in-cabin booking request against aircraft type restrictions, cabin pet limits, and route regulations.

naftiko: "0.5"
info:
  label: "Pet in Cabin Booking Validation"
  description: "Validates a pet-in-cabin booking request against aircraft type restrictions, cabin pet limits, and route regulations."
  tags:
    - customer-service
    - compliance
    - booking
capability:
  exposes:
    - type: mcp
      namespace: pet-booking
      port: 8080
      tools:
        - name: validate-pet-booking
          description: "Validate whether a pet-in-cabin booking is allowed on a specific flight."
          inputParameters:
            - name: flight_number
              in: body
              type: string
              description: "Flight number."
            - name: flight_date
              in: body
              type: string
              description: "Flight date."
            - name: pet_type
              in: body
              type: string
              description: "Pet type (dog, cat)."
            - name: carrier_dimensions
              in: body
              type: string
              description: "Carrier dimensions in inches (LxWxH)."
          call: "booking-api.validate-pet"
          with:
            flight: "{{flight_number}}"
            date: "{{flight_date}}"
            pet: "{{pet_type}}"
            carrier: "{{carrier_dimensions}}"
          outputParameters:
            - name: allowed
              type: boolean
              mapping: "$.isAllowed"
            - name: remaining_slots
              type: number
              mapping: "$.remainingPetSlots"
            - name: restrictions
              type: array
              mapping: "$.restrictions"
  consumes:
    - type: http
      namespace: booking-api
      baseUri: "https://pss.united.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.pss_token"
      resources:
        - name: pet-validation
          path: "/bookings/pet-validation"
          operations:
            - name: validate-pet
              method: POST

Calculates a fatigue risk score for a pilot based on recent duty periods, time zone crossings, and rest periods using the fatigue risk management system.

naftiko: "0.5"
info:
  label: "Pilot Fatigue Risk Assessment"
  description: "Calculates a fatigue risk score for a pilot based on recent duty periods, time zone crossings, and rest periods using the fatigue risk management system."
  tags:
    - crew-scheduling
    - safety
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: fatigue-risk
      port: 8080
      tools:
        - name: assess-fatigue-risk
          description: "Calculate fatigue risk score for a pilot."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "Pilot employee ID."
            - name: proposed_trip_id
              in: body
              type: string
              description: "Proposed trip pairing ID."
          call: "frms-api.calculate-risk"
          with:
            employee_id: "{{employee_id}}"
            trip_id: "{{proposed_trip_id}}"
          outputParameters:
            - name: risk_score
              type: number
              mapping: "$.riskScore"
            - name: risk_level
              type: string
              mapping: "$.riskLevel"
            - name: recommendations
              type: array
              mapping: "$.recommendations"
  consumes:
    - type: http
      namespace: frms-api
      baseUri: "https://safety.united.com/api/v1/frms"
      authentication:
        type: bearer
        token: "$secrets.safety_api_token"
      resources:
        - name: risk-assessment
          path: "/assess"
          operations:
            - name: calculate-risk
              method: POST

Retrieves a pilot's training and certification records from the crew training management system, including type ratings, recency checks, and upcoming recurrent training dates.

naftiko: "0.5"
info:
  label: "Pilot Training Record Lookup"
  description: "Retrieves a pilot's training and certification records from the crew training management system, including type ratings, recency checks, and upcoming recurrent training dates."
  tags:
    - crew-scheduling
    - training
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: crew-training
      port: 8080
      tools:
        - name: get-pilot-training
          description: "Look up a pilot's training records and certification status."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "Pilot employee ID."
          call: "training-api.get-records"
          with:
            employee_id: "{{employee_id}}"
          outputParameters:
            - name: type_ratings
              type: array
              mapping: "$.typeRatings"
            - name: last_check_date
              type: string
              mapping: "$.lastCheckDate"
            - name: next_recurrent
              type: string
              mapping: "$.nextRecurrentDate"
  consumes:
    - type: http
      namespace: training-api
      baseUri: "https://crew.united.com/api/v1/training"
      authentication:
        type: bearer
        token: "$secrets.crew_mgmt_token"
      resources:
        - name: records
          path: "/pilots/{{employee_id}}/records"
          inputParameters:
            - name: employee_id
              in: path
          operations:
            - name: get-records
              method: GET

Submits a meal preorder for a premium cabin passenger including special dietary requirements and wine pairing preferences.

naftiko: "0.5"
info:
  label: "Premium Cabin Meal Preorder"
  description: "Submits a meal preorder for a premium cabin passenger including special dietary requirements and wine pairing preferences."
  tags:
    - inflight-services
    - catering
    - customer-service
capability:
  exposes:
    - type: mcp
      namespace: meal-preorder
      port: 8080
      tools:
        - name: submit-meal-preorder
          description: "Submit a premium cabin meal preorder for a passenger."
          inputParameters:
            - name: pnr
              in: body
              type: string
              description: "Passenger name record."
            - name: flight_number
              in: body
              type: string
              description: "Flight number."
            - name: meal_selection
              in: body
              type: string
              description: "Selected meal option."
            - name: dietary_restrictions
              in: body
              type: string
              description: "Dietary restrictions if any."
          call: "catering-api.submit-preorder"
          with:
            pnr: "{{pnr}}"
            flight: "{{flight_number}}"
            meal: "{{meal_selection}}"
            dietary: "{{dietary_restrictions}}"
          outputParameters:
            - name: order_id
              type: string
              mapping: "$.orderId"
            - name: confirmation
              type: string
              mapping: "$.confirmation"
  consumes:
    - type: http
      namespace: catering-api
      baseUri: "https://catering.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.catering_token"
      resources:
        - name: preorders
          path: "/preorders/submit"
          operations:
            - name: submit-preorder
              method: POST

When a ramp safety incident occurs, creates a ServiceNow safety report, notifies the station safety manager via Teams, triggers a Workday incident record for the involved employee, and logs an entry in the safety analytics system.

naftiko: "0.5"
info:
  label: "Ramp Safety Incident Reporting Orchestrator"
  description: "When a ramp safety incident occurs, creates a ServiceNow safety report, notifies the station safety manager via Teams, triggers a Workday incident record for the involved employee, and logs an entry in the safety analytics system."
  tags:
    - safety
    - ground-ops
    - servicenow
    - workday
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: ramp-safety
      port: 8080
      tools:
        - name: report-ramp-incident
          description: "Report and process a ramp safety incident through all required systems."
          inputParameters:
            - name: station
              in: body
              type: string
              description: "Airport station code."
            - name: incident_type
              in: body
              type: string
              description: "Type of incident (e.g., FOD, ground damage, injury)."
            - name: employee_id
              in: body
              type: string
              description: "Involved employee ID."
            - name: description
              in: body
              type: string
              description: "Incident description."
          steps:
            - name: create-safety-report
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Ramp safety incident at {{station}}: {{incident_type}}"
                category: "safety"
                priority: "1"
                description: "{{description}}"
            - name: notify-safety-manager
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "{{safety_channel_id}}"
                text: "SAFETY ALERT at {{station}}: {{incident_type}} — {{description}} | ServiceNow: {{create-safety-report.number}}"
            - name: log-employee-incident
              type: call
              call: "workday.create-safety-event"
              with:
                employee_id: "{{employee_id}}"
                event_type: "{{incident_type}}"
                reference: "{{create-safety-report.number}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://united.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST
    - type: http
      namespace: workday
      baseUri: "https://wd5-services.united.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: safety-events
          path: "/safety/events"
          operations:
            - name: create-safety-event
              method: POST

When a DOT or FAA regulatory audit is announced, creates a ServiceNow compliance project with evidence collection tasks and notifies the legal and compliance teams via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Regulatory Compliance Audit Initiation"
  description: "When a DOT or FAA regulatory audit is announced, creates a ServiceNow compliance project with evidence collection tasks and notifies the legal and compliance teams via Microsoft Teams."
  tags:
    - compliance
    - regulatory
    - servicenow
    - microsoft-teams
    - aviation
capability:
  exposes:
    - type: mcp
      namespace: regulatory-compliance
      port: 8080
      tools:
        - name: initiate-regulatory-audit
          description: "Given an audit type, regulatory body, and submission deadline, create a ServiceNow compliance project and notify the legal and compliance teams via Teams."
          inputParameters:
            - name: audit_type
              in: body
              type: string
              description: "Type of audit (e.g., FAA Safety Audit, DOT Consumer Protection, TSA Security)."
            - name: regulatory_body
              in: body
              type: string
              description: "Regulatory body conducting the audit (e.g., FAA, DOT, TSA)."
            - name: submission_deadline
              in: body
              type: string
              description: "Evidence submission deadline in YYYY-MM-DD format."
            - name: compliance_channel_id
              in: body
              type: string
              description: "Teams channel ID for the legal and compliance team."
          steps:
            - name: create-compliance-project
              type: call
              call: "servicenow-regulatory.create-task"
              with:
                short_description: "{{audit_type}} — {{regulatory_body}} — due {{submission_deadline}}"
                category: "regulatory_compliance"
                assignment_group: "Legal_Compliance"
                due_date: "{{submission_deadline}}"
            - name: notify-compliance-team
              type: call
              call: "msteams-regulatory.post-channel-message"
              with:
                channel_id: "{{compliance_channel_id}}"
                text: "Regulatory audit initiated: {{audit_type}} | Authority: {{regulatory_body}} | Deadline: {{submission_deadline}} | Compliance task: {{create-compliance-project.number}}"
  consumes:
    - type: http
      namespace: servicenow-regulatory
      baseUri: "https://united.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/sc_task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: msteams-regulatory
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Runs a revenue integrity check on a flight by comparing booked inventory against actual revenue, identifying discrepancies, and creating a Salesforce case for review and a Jira ticket for the revenue management team.

naftiko: "0.5"
info:
  label: "Revenue Integrity Audit Orchestrator"
  description: "Runs a revenue integrity check on a flight by comparing booked inventory against actual revenue, identifying discrepancies, and creating a Salesforce case for review and a Jira ticket for the revenue management team."
  tags:
    - revenue-management
    - salesforce
    - jira
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: revenue-integrity
      port: 8080
      tools:
        - name: audit-revenue-integrity
          description: "Run a revenue integrity audit for a flight and escalate discrepancies."
          inputParameters:
            - name: flight_number
              in: body
              type: string
              description: "Flight number to audit."
            - name: flight_date
              in: body
              type: string
              description: "Flight date."
          steps:
            - name: pull-booking-data
              type: call
              call: "revenue-api.get-flight-revenue"
              with:
                flight_number: "{{flight_number}}"
                date: "{{flight_date}}"
            - name: run-integrity-check
              type: call
              call: "revenue-api.check-integrity"
              with:
                flight_number: "{{flight_number}}"
                date: "{{flight_date}}"
                bookings: "{{pull-booking-data.bookings}}"
            - name: create-case
              type: call
              call: "salesforce.create-case"
              with:
                subject: "Revenue integrity discrepancy — {{flight_number}} on {{flight_date}}"
                description: "Discrepancy amount: {{run-integrity-check.discrepancy_amount}}"
                priority: "Medium"
            - name: create-jira-ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "REVMGMT"
                summary: "Revenue integrity review: {{flight_number}} {{flight_date}}"
                description: "SF Case: {{create-case.id}} | Discrepancy: {{run-integrity-check.discrepancy_amount}}"
  consumes:
    - type: http
      namespace: revenue-api
      baseUri: "https://analytics.united.com/api/v1/revenue"
      authentication:
        type: bearer
        token: "$secrets.revenue_analytics_token"
      resources:
        - name: flight-revenue
          path: "/flights/{{flight_number}}/revenue"
          inputParameters:
            - name: flight_number
              in: path
          operations:
            - name: get-flight-revenue
              method: GET
        - name: integrity
          path: "/integrity/check"
          operations:
            - name: check-integrity
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://united.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: jira
      baseUri: "https://united.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

Generates a revenue passenger miles (RPM) report for a specified period, broken down by domestic, international, and regional operations.

naftiko: "0.5"
info:
  label: "Revenue Passenger Miles Report"
  description: "Generates a revenue passenger miles (RPM) report for a specified period, broken down by domestic, international, and regional operations."
  tags:
    - revenue-management
    - analytics
    - operations
capability:
  exposes:
    - type: mcp
      namespace: rpm-analytics
      port: 8080
      tools:
        - name: get-rpm-report
          description: "Generate an RPM report for a given period."
          inputParameters:
            - name: start_date
              in: body
              type: string
              description: "Start date."
            - name: end_date
              in: body
              type: string
              description: "End date."
          call: "revenue-api.get-rpm"
          with:
            start: "{{start_date}}"
            end: "{{end_date}}"
          outputParameters:
            - name: total_rpm
              type: number
              mapping: "$.totalRPM"
            - name: domestic_rpm
              type: number
              mapping: "$.domesticRPM"
            - name: international_rpm
              type: number
              mapping: "$.internationalRPM"
  consumes:
    - type: http
      namespace: revenue-api
      baseUri: "https://analytics.united.com/api/v1/revenue"
      authentication:
        type: bearer
        token: "$secrets.revenue_analytics_token"
      resources:
        - name: rpm
          path: "/metrics/rpm"
          operations:
            - name: get-rpm
              method: POST

Pulls route-level revenue and cost data from the revenue management system to generate a profitability summary for a given origin-destination pair.

naftiko: "0.5"
info:
  label: "Route Profitability Report"
  description: "Pulls route-level revenue and cost data from the revenue management system to generate a profitability summary for a given origin-destination pair."
  tags:
    - revenue-management
    - analytics
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: revenue-analytics
      port: 8080
      tools:
        - name: get-route-profitability
          description: "Retrieve profitability metrics for a specific route including load factor, revenue per ASM, and operating margin."
          inputParameters:
            - name: origin
              in: body
              type: string
              description: "Origin airport IATA code."
            - name: destination
              in: body
              type: string
              description: "Destination airport IATA code."
            - name: period
              in: body
              type: string
              description: "Reporting period (e.g., 2025-Q4)."
          call: "revenue-db.query-route"
          with:
            origin: "{{origin}}"
            destination: "{{destination}}"
            period: "{{period}}"
          outputParameters:
            - name: load_factor
              type: number
              mapping: "$.loadFactor"
            - name: revenue_per_asm
              type: number
              mapping: "$.revenuePerASM"
            - name: operating_margin
              type: number
              mapping: "$.operatingMargin"
  consumes:
    - type: http
      namespace: revenue-db
      baseUri: "https://analytics.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.revenue_analytics_token"
      resources:
        - name: route-metrics
          path: "/routes/profitability"
          operations:
            - name: query-route
              method: POST

Submits a runway slot request for a flight at slot-controlled airports, checking availability and filing the request with the airport coordination authority.

naftiko: "0.5"
info:
  label: "Runway Slot Request"
  description: "Submits a runway slot request for a flight at slot-controlled airports, checking availability and filing the request with the airport coordination authority."
  tags:
    - flight-operations
    - dispatch
    - scheduling
capability:
  exposes:
    - type: mcp
      namespace: slot-mgmt
      port: 8080
      tools:
        - name: request-runway-slot
          description: "Request a runway slot at a slot-controlled airport."
          inputParameters:
            - name: airport
              in: body
              type: string
              description: "Airport IATA code."
            - name: flight_number
              in: body
              type: string
              description: "Flight number."
            - name: requested_time
              in: body
              type: string
              description: "Requested slot time in UTC."
            - name: operation_type
              in: body
              type: string
              description: "Operation type (arrival, departure)."
          call: "slot-api.request-slot"
          with:
            airport: "{{airport}}"
            flight: "{{flight_number}}"
            time: "{{requested_time}}"
            type: "{{operation_type}}"
          outputParameters:
            - name: slot_id
              type: string
              mapping: "$.slotId"
            - name: granted_time
              type: string
              mapping: "$.grantedTime"
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: slot-api
      baseUri: "https://scheduling.united.com/api/v1/slots"
      authentication:
        type: bearer
        token: "$secrets.scheduling_token"
      resources:
        - name: slots
          path: "/request"
          operations:
            - name: request-slot
              method: POST

Enriches a Salesforce MileagePlus member record with flight history and tier status from the loyalty system, and notifies the account manager via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Salesforce Customer Loyalty Enrichment"
  description: "Enriches a Salesforce MileagePlus member record with flight history and tier status from the loyalty system, and notifies the account manager via Microsoft Teams."
  tags:
    - sales
    - crm
    - salesforce
    - loyalty
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: loyalty-enrichment
      port: 8080
      tools:
        - name: enrich-mileageplus-member
          description: "Given a Salesforce contact ID and MileagePlus number, retrieve loyalty tier and flight history and update the Salesforce record with the enriched data."
          inputParameters:
            - name: salesforce_contact_id
              in: body
              type: string
              description: "The Salesforce contact ID for the MileagePlus member."
            - name: mileageplus_number
              in: body
              type: string
              description: "The MileagePlus loyalty number."
            - name: account_manager_upn
              in: body
              type: string
              description: "UPN of the account manager to notify of enrichment."
          steps:
            - name: get-loyalty-data
              type: call
              call: "salesforce-loyalty.get-contact"
              with:
                contact_id: "{{salesforce_contact_id}}"
            - name: update-contact
              type: call
              call: "salesforce-loyalty.update-contact"
              with:
                contact_id: "{{salesforce_contact_id}}"
                loyalty_tier: "{{get-loyalty-data.tier}}"
                lifetime_miles: "{{get-loyalty-data.lifetime_miles}}"
            - name: notify-account-manager
              type: call
              call: "msteams-loyalty.send-message"
              with:
                recipient_upn: "{{account_manager_upn}}"
                text: "MileagePlus enrichment complete: {{mileageplus_number}} | Tier: {{get-loyalty-data.tier}} | Lifetime miles: {{get-loyalty-data.lifetime_miles}} | Salesforce updated."
  consumes:
    - type: http
      namespace: salesforce-loyalty
      baseUri: "https://united.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: contacts
          path: "/sobjects/Contact/{{contact_id}}"
          inputParameters:
            - name: contact_id
              in: path
          operations:
            - name: get-contact
              method: GET
            - name: update-contact
              method: PATCH
    - type: http
      namespace: msteams-loyalty
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Processes pilot and crew mileage reimbursement claims submitted in SAP Concur, validates against union contract rates, and routes for payroll processing.

naftiko: "0.5"
info:
  label: "SAP Concur Mileage Reimbursement Processing"
  description: "Processes pilot and crew mileage reimbursement claims submitted in SAP Concur, validates against union contract rates, and routes for payroll processing."
  tags:
    - hr
    - payroll
    - sap-concur
    - workday
capability:
  exposes:
    - type: mcp
      namespace: crew-payroll
      port: 8080
      tools:
        - name: process-mileage-reimbursement
          description: "Given a Concur mileage expense report ID, retrieve the claim details, validate the mileage rate against union contract tables in Workday, and approve for payroll processing."
          inputParameters:
            - name: report_id
              in: body
              type: string
              description: "The SAP Concur mileage expense report ID."
            - name: employee_id
              in: body
              type: string
              description: "The Workday employee ID of the crew member submitting the claim."
          steps:
            - name: get-mileage-report
              type: call
              call: "concur-mileage.get-expense-report"
              with:
                reportId: "{{report_id}}"
            - name: get-union-rates
              type: call
              call: "workday-union.get-compensation-data"
              with:
                worker_id: "{{employee_id}}"
            - name: approve-for-payroll
              type: call
              call: "concur-mileage.update-expense-report"
              with:
                reportId: "{{report_id}}"
                status: "APPROVED"
  consumes:
    - type: http
      namespace: concur-mileage
      baseUri: "https://www.concursolutions.com/api/v3.0"
      authentication:
        type: bearer
        token: "$secrets.concur_token"
      resources:
        - name: expense-reports
          path: "/expense/reports/{{reportId}}"
          inputParameters:
            - name: reportId
              in: path
          operations:
            - name: get-expense-report
              method: GET
            - name: update-expense-report
              method: PUT
    - type: http
      namespace: workday-union
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: compensation
          path: "/workers/{{worker_id}}/compensation"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-compensation-data
              method: GET

Retrieves a SAP S/4HANA purchase order by PO number and returns vendor, status, and line item details for procurement and finance verification.

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

Retrieves the seat map and availability for a given flight, showing available, occupied, and blocked seats by cabin class.

naftiko: "0.5"
info:
  label: "Seat Map Availability Lookup"
  description: "Retrieves the seat map and availability for a given flight, showing available, occupied, and blocked seats by cabin class."
  tags:
    - customer-service
    - flight-operations
    - revenue-management
capability:
  exposes:
    - type: mcp
      namespace: seat-map
      port: 8080
      tools:
        - name: get-seat-map
          description: "Get seat map availability for a flight."
          inputParameters:
            - name: flight_number
              in: body
              type: string
              description: "Flight number."
            - name: flight_date
              in: body
              type: string
              description: "Flight date."
          call: "pss.get-seat-map"
          with:
            flight: "{{flight_number}}"
            date: "{{flight_date}}"
          outputParameters:
            - name: available_seats
              type: number
              mapping: "$.availableSeats"
            - name: cabin_breakdown
              type: object
              mapping: "$.cabinBreakdown"
            - name: exit_row_available
              type: boolean
              mapping: "$.exitRowAvailable"
  consumes:
    - type: http
      namespace: pss
      baseUri: "https://pss.united.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.pss_token"
      resources:
        - name: seat-maps
          path: "/flights/{{flight}}/seat-map"
          inputParameters:
            - name: flight
              in: path
          operations:
            - name: get-seat-map
              method: GET

Retrieves IT asset details from ServiceNow CMDB by asset tag or serial number, returning assignment, location, and warranty status.

naftiko: "0.5"
info:
  label: "ServiceNow IT Asset Lookup"
  description: "Retrieves IT asset details from ServiceNow CMDB by asset tag or serial number, returning assignment, location, and warranty status."
  tags:
    - it-operations
    - servicenow
    - asset-management
capability:
  exposes:
    - type: mcp
      namespace: it-assets
      port: 8080
      tools:
        - name: get-it-asset
          description: "Look up an IT asset in ServiceNow CMDB."
          inputParameters:
            - name: asset_tag
              in: body
              type: string
              description: "Asset tag or serial number."
          call: "servicenow.get-asset"
          with:
            asset_tag: "{{asset_tag}}"
          outputParameters:
            - name: asset_name
              type: string
              mapping: "$.result.name"
            - name: assigned_to
              type: string
              mapping: "$.result.assigned_to.display_value"
            - name: location
              type: string
              mapping: "$.result.location.display_value"
            - name: warranty_expiration
              type: string
              mapping: "$.result.warranty_expiration"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://united.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: cmdb
          path: "/table/alm_hardware"
          operations:
            - name: get-asset
              method: GET

When a travel expense report is submitted in SAP Concur, validates it against travel policy and routes for manager approval via ServiceNow if thresholds are exceeded.

naftiko: "0.5"
info:
  label: "Travel Expense Report Processing"
  description: "When a travel expense report is submitted in SAP Concur, validates it against travel policy and routes for manager approval via ServiceNow if thresholds are exceeded."
  tags:
    - finance
    - travel-expense
    - sap-concur
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: expense-mgmt
      port: 8080
      tools:
        - name: process-expense-report
          description: "Given a Concur expense report ID, retrieve report details, check against United Airlines travel policy, and create a ServiceNow approval task for policy exceptions."
          inputParameters:
            - name: report_id
              in: body
              type: string
              description: "The SAP Concur expense report ID."
            - name: manager_email
              in: body
              type: string
              description: "Email of the approving manager."
          steps:
            - name: get-report
              type: call
              call: "concur.get-expense-report"
              with:
                reportId: "{{report_id}}"
            - name: create-approval-task
              type: call
              call: "servicenow-expense.create-task"
              with:
                short_description: "Expense approval: Report {{report_id}} — ${{get-report.total_amount}}"
                category: "expense_management"
                assignment_group: "Finance_Approvals"
                assigned_to: "{{manager_email}}"
  consumes:
    - type: http
      namespace: concur
      baseUri: "https://www.concursolutions.com/api/v3.0"
      authentication:
        type: bearer
        token: "$secrets.concur_token"
      resources:
        - name: expense-reports
          path: "/expense/reports/{{reportId}}"
          inputParameters:
            - name: reportId
              in: path
          operations:
            - name: get-expense-report
              method: GET
    - type: http
      namespace: servicenow-expense
      baseUri: "https://united.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/sc_task"
          operations:
            - name: create-task
              method: POST

Checks a passenger's TSA PreCheck eligibility status and Known Traveler Number validation for boarding pass issuance.

naftiko: "0.5"
info:
  label: "TSA PreCheck Eligibility Lookup"
  description: "Checks a passenger's TSA PreCheck eligibility status and Known Traveler Number validation for boarding pass issuance."
  tags:
    - customer-service
    - security
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: tsa-check
      port: 8080
      tools:
        - name: check-precheck-eligibility
          description: "Verify TSA PreCheck eligibility for a passenger."
          inputParameters:
            - name: pnr
              in: body
              type: string
              description: "Passenger name record."
            - name: known_traveler_number
              in: body
              type: string
              description: "Known Traveler Number."
          call: "security-api.verify-precheck"
          with:
            pnr: "{{pnr}}"
            ktn: "{{known_traveler_number}}"
          outputParameters:
            - name: eligible
              type: boolean
              mapping: "$.precheckEligible"
            - name: status
              type: string
              mapping: "$.verificationStatus"
  consumes:
    - type: http
      namespace: security-api
      baseUri: "https://security.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.security_api_token"
      resources:
        - name: precheck
          path: "/tsa/precheck/verify"
          operations:
            - name: verify-precheck
              method: POST

Retrieves the current status and location checkpoints for an unaccompanied minor passenger, including handoff confirmations and guardian contact details.

naftiko: "0.5"
info:
  label: "Unaccompanied Minor Tracking Lookup"
  description: "Retrieves the current status and location checkpoints for an unaccompanied minor passenger, including handoff confirmations and guardian contact details."
  tags:
    - customer-service
    - safety
    - tracking
capability:
  exposes:
    - type: mcp
      namespace: umnr-tracking
      port: 8080
      tools:
        - name: track-unaccompanied-minor
          description: "Look up the tracking status of an unaccompanied minor by PNR."
          inputParameters:
            - name: pnr
              in: body
              type: string
              description: "Passenger name record for the unaccompanied minor."
          call: "umnr-api.get-status"
          with:
            pnr: "{{pnr}}"
          outputParameters:
            - name: current_checkpoint
              type: string
              mapping: "$.currentCheckpoint"
            - name: handoff_status
              type: string
              mapping: "$.handoffStatus"
            - name: guardian_contact
              type: string
              mapping: "$.guardianPhone"
            - name: flight_number
              type: string
              mapping: "$.flightNumber"
  consumes:
    - type: http
      namespace: umnr-api
      baseUri: "https://pss.united.com/api/v2/umnr"
      authentication:
        type: bearer
        token: "$secrets.pss_token"
      resources:
        - name: tracking
          path: "/tracking/{{pnr}}"
          inputParameters:
            - name: pnr
              in: path
          operations:
            - name: get-status
              method: GET

Checks the current occupancy and capacity of a United Club lounge at a specific airport for customer service and access management.

naftiko: "0.5"
info:
  label: "United Club Lounge Capacity Check"
  description: "Checks the current occupancy and capacity of a United Club lounge at a specific airport for customer service and access management."
  tags:
    - customer-service
    - lounge
    - ground-ops
capability:
  exposes:
    - type: mcp
      namespace: lounge-ops
      port: 8080
      tools:
        - name: check-lounge-capacity
          description: "Check current United Club lounge occupancy and availability."
          inputParameters:
            - name: station
              in: body
              type: string
              description: "Airport IATA code."
            - name: terminal
              in: body
              type: string
              description: "Terminal identifier."
          call: "lounge-api.get-capacity"
          with:
            station: "{{station}}"
            terminal: "{{terminal}}"
          outputParameters:
            - name: current_occupancy
              type: number
              mapping: "$.currentOccupancy"
            - name: max_capacity
              type: number
              mapping: "$.maxCapacity"
            - name: available_seats
              type: number
              mapping: "$.availableSeats"
  consumes:
    - type: http
      namespace: lounge-api
      baseUri: "https://lounges.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.lounge_api_token"
      resources:
        - name: capacity
          path: "/clubs/{{station}}/{{terminal}}/capacity"
          inputParameters:
            - name: station
              in: path
            - name: terminal
              in: path
          operations:
            - name: get-capacity
              method: GET

When a vendor invoice arrives in SAP, validates it against the purchase order, routes for approval in ServiceNow, and notifies the accounts payable team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Vendor Invoice Processing"
  description: "When a vendor invoice arrives in SAP, validates it against the purchase order, routes for approval in ServiceNow, and notifies the accounts payable team via Microsoft Teams."
  tags:
    - finance
    - accounts-payable
    - sap
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: finance-ap
      port: 8080
      tools:
        - name: process-vendor-invoice
          description: "Given a SAP invoice number and PO number, validate for three-way match, create a ServiceNow approval task, and notify the AP team via Teams."
          inputParameters:
            - name: invoice_number
              in: body
              type: string
              description: "The SAP vendor invoice number."
            - name: po_number
              in: body
              type: string
              description: "The associated purchase order number for three-way match validation."
            - name: invoice_amount
              in: body
              type: number
              description: "Invoice amount in USD."
          steps:
            - name: get-invoice
              type: call
              call: "sap-invoice.get-invoice"
              with:
                invoice_number: "{{invoice_number}}"
            - name: create-approval-task
              type: call
              call: "servicenow-ap.create-task"
              with:
                short_description: "Invoice approval: {{invoice_number}} vs PO {{po_number}} — ${{invoice_amount}}"
                category: "accounts_payable"
                assignment_group: "AP_Team"
            - name: notify-ap-team
              type: call
              call: "msteams-ap.send-message"
              with:
                recipient_upn: "ap-team@united.com"
                text: "Invoice {{invoice_number}} pending approval. PO: {{po_number}}, Amount: ${{invoice_amount}}. Approval task: {{create-approval-task.number}}"
  consumes:
    - type: http
      namespace: sap-invoice
      baseUri: "https://united-s4.sap.com/sap/opu/odata/sap/API_SUPPLIERINVOICE_PROCESS_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: invoices
          path: "/A_SupplierInvoice('{{invoice_number}}')"
          inputParameters:
            - name: invoice_number
              in: path
          operations:
            - name: get-invoice
              method: GET
    - type: http
      namespace: servicenow-ap
      baseUri: "https://united.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/sc_task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: msteams-ap
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Orchestrates special handling for VIP passengers by flagging the reservation, arranging meet-and-greet, coordinating lounge access, and notifying the station manager and crew.

naftiko: "0.5"
info:
  label: "VIP Passenger Handling Orchestrator"
  description: "Orchestrates special handling for VIP passengers by flagging the reservation, arranging meet-and-greet, coordinating lounge access, and notifying the station manager and crew."
  tags:
    - customer-service
    - ground-ops
    - loyalty
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: vip-handling
      port: 8080
      tools:
        - name: arrange-vip-handling
          description: "Set up special handling for a VIP passenger."
          inputParameters:
            - name: pnr
              in: body
              type: string
              description: "Passenger name record."
            - name: flight_number
              in: body
              type: string
              description: "Flight number."
            - name: station
              in: body
              type: string
              description: "Departure station."
            - name: vip_level
              in: body
              type: string
              description: "VIP level (corporate, celebrity, government)."
          steps:
            - name: flag-reservation
              type: call
              call: "pss.add-ssr"
              with:
                pnr: "{{pnr}}"
                ssr_code: "VIP"
                text: "{{vip_level}} VIP handling requested"
            - name: arrange-meet-greet
              type: call
              call: "ground-ops.create-meet-greet"
              with:
                station: "{{station}}"
                flight_number: "{{flight_number}}"
                pnr: "{{pnr}}"
            - name: notify-station
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "{{station_mgr_channel}}"
                text: "VIP handling ({{vip_level}}) for {{flight_number}} at {{station}} — Meet & greet: {{arrange-meet-greet.agent_name}} | PNR: {{pnr}}"
  consumes:
    - type: http
      namespace: pss
      baseUri: "https://pss.united.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.pss_token"
      resources:
        - name: ssr
          path: "/bookings/{{pnr}}/ssr"
          inputParameters:
            - name: pnr
              in: path
          operations:
            - name: add-ssr
              method: POST
    - type: http
      namespace: ground-ops
      baseUri: "https://groundops.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ground_ops_token"
      resources:
        - name: meet-greet
          path: "/meet-greet/create"
          operations:
            - name: create-meet-greet
              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/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

When severe weather is forecast at a hub, queries the weather API, identifies affected flights, estimates delay impact, creates a ServiceNow incident, and notifies the operations control center via Teams.

naftiko: "0.5"
info:
  label: "Weather Delay Impact Assessment Orchestrator"
  description: "When severe weather is forecast at a hub, queries the weather API, identifies affected flights, estimates delay impact, creates a ServiceNow incident, and notifies the operations control center via Teams."
  tags:
    - flight-operations
    - weather
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: weather-ops
      port: 8080
      tools:
        - name: assess-weather-impact
          description: "Assess the operational impact of severe weather at a hub station."
          inputParameters:
            - name: hub_station
              in: body
              type: string
              description: "Hub airport IATA code."
            - name: forecast_window
              in: body
              type: string
              description: "Hours ahead to assess (e.g., 6, 12, 24)."
          steps:
            - name: get-weather-forecast
              type: call
              call: "weather-api.get-forecast"
              with:
                station: "{{hub_station}}"
                hours: "{{forecast_window}}"
            - name: get-affected-flights
              type: call
              call: "flight-api.search-departures"
              with:
                station: "{{hub_station}}"
                window_hours: "{{forecast_window}}"
            - name: create-weather-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Weather impact at {{hub_station}}: {{get-weather-forecast.severity}} — {{get-affected-flights.count}} flights affected"
                category: "flight_operations"
                priority: "2"
            - name: notify-occ
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "{{occ_channel_id}}"
                text: "Weather alert at {{hub_station}}: {{get-weather-forecast.summary}} | {{get-affected-flights.count}} departures impacted | ServiceNow: {{create-weather-incident.number}}"
  consumes:
    - type: http
      namespace: weather-api
      baseUri: "https://api.weather.gov"
      authentication:
        type: none
      resources:
        - name: forecasts
          path: "/zones/forecast/{{station}}"
          inputParameters:
            - name: station
              in: path
          operations:
            - name: get-forecast
              method: GET
    - type: http
      namespace: flight-api
      baseUri: "https://api.united.com/v1/flights"
      authentication:
        type: bearer
        token: "$secrets.united_api_token"
      resources:
        - name: departures
          path: "/departures/search"
          operations:
            - name: search-departures
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://united.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Calculates aircraft weight and balance for a flight given passenger count, cargo load, and fuel uplift, returning center of gravity and trim settings.

naftiko: "0.5"
info:
  label: "Weight and Balance Calculation"
  description: "Calculates aircraft weight and balance for a flight given passenger count, cargo load, and fuel uplift, returning center of gravity and trim settings."
  tags:
    - dispatch
    - flight-operations
    - safety
capability:
  exposes:
    - type: mcp
      namespace: wb-calc
      port: 8080
      tools:
        - name: calculate-weight-balance
          description: "Calculate weight and balance for pre-departure dispatch."
          inputParameters:
            - name: tail_number
              in: body
              type: string
              description: "Aircraft tail number."
            - name: passenger_count
              in: body
              type: number
              description: "Total passenger count."
            - name: cargo_weight_kg
              in: body
              type: number
              description: "Total cargo and baggage weight in kg."
            - name: fuel_load_kg
              in: body
              type: number
              description: "Planned fuel load in kg."
          call: "dispatch-api.calc-wb"
          with:
            tail: "{{tail_number}}"
            pax: "{{passenger_count}}"
            cargo: "{{cargo_weight_kg}}"
            fuel: "{{fuel_load_kg}}"
          outputParameters:
            - name: takeoff_weight
              type: number
              mapping: "$.takeoffWeight"
            - name: center_of_gravity
              type: number
              mapping: "$.centerOfGravity"
            - name: within_limits
              type: boolean
              mapping: "$.withinLimits"
  consumes:
    - type: http
      namespace: dispatch-api
      baseUri: "https://dispatch.united.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.dispatch_token"
      resources:
        - name: weight-balance
          path: "/weight-balance/calculate"
          operations:
            - name: calc-wb
              method: POST

Retrieves scheduled versus actual labor hours from Workday for a given hub station and pay period, checks for union contract and FAA duty time compliance, and flags violations via Teams.

naftiko: "0.5"
info:
  label: "Workforce Scheduling Labor Compliance Check"
  description: "Retrieves scheduled versus actual labor hours from Workday for a given hub station and pay period, checks for union contract and FAA duty time compliance, and flags violations via Teams."
  tags:
    - hr
    - labor-compliance
    - workday
    - microsoft-teams
    - aviation
capability:
  exposes:
    - type: mcp
      namespace: labor-compliance
      port: 8080
      tools:
        - name: check-labor-compliance
          description: "Given a hub station code and pay period, retrieve actual hours from Workday, check against union contract and FAA duty time limits, and post a compliance digest to the HR Teams channel."
          inputParameters:
            - name: hub_station
              in: body
              type: string
              description: "Airport hub station code (e.g., ORD, IAH, EWR, DEN, SFO)."
            - name: period_start
              in: body
              type: string
              description: "Pay period start date in YYYY-MM-DD format."
            - name: period_end
              in: body
              type: string
              description: "Pay period end date in YYYY-MM-DD format."
            - name: hr_channel_id
              in: body
              type: string
              description: "Teams channel ID for the HR compliance team."
          steps:
            - name: get-hours-data
              type: call
              call: "workday-labor.get-time-details"
              with:
                location: "{{hub_station}}"
                startDate: "{{period_start}}"
                endDate: "{{period_end}}"
            - name: post-compliance-digest
              type: call
              call: "msteams-labor.post-channel-message"
              with:
                channel_id: "{{hr_channel_id}}"
                text: "Labor Compliance — {{hub_station}} ({{period_start}} to {{period_end}}): Scheduled hours: {{get-hours-data.scheduled_hours}} | Actual hours: {{get-hours-data.actual_hours}} | Overtime: {{get-hours-data.overtime_hours}} | FAA violations: {{get-hours-data.faa_violations}}"
  consumes:
    - type: http
      namespace: workday-labor
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: time-details
          path: "/workers/time-details"
          inputParameters:
            - name: location
              in: query
            - name: startDate
              in: query
            - name: endDate
              in: query
          operations:
            - name: get-time-details
              method: GET
    - type: http
      namespace: msteams-labor
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST