American Airlines Capabilities
Naftiko 0.5 capability definitions for American Airlines - 100 capabilities showing integration workflows and service orchestrations.
Retrieves an AAdvantage member's loyalty tier, LP balance, and qualification status.
naftiko: "0.5"
info:
label: "AAdvantage Member Tier Lookup"
description: "Retrieves an AAdvantage member's loyalty tier, LP balance, and qualification status."
tags:
- customer-service
- loyalty
- aadvantage
capability:
exposes:
- type: mcp
namespace: loyalty
port: 8080
tools:
- name: get-member-tier
description: "Look up AAdvantage member status."
inputParameters:
- name: aadvantage_number
in: body
type: string
description: "AAdvantage number."
call: "loyalty-api.get-member"
with:
member_id: "{{aadvantage_number}}"
outputParameters:
- name: tier
type: string
mapping: "$.currentTier"
- name: lp_balance
type: number
mapping: "$.lpBalance"
consumes:
- type: http
namespace: loyalty-api
baseUri: "https://loyalty.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_loyalty_token"
resources:
- name: members
path: "/members/{{member_id}}"
inputParameters:
- name: member_id
in: path
operations:
- name: get-member
method: GET
Creates ADA accommodation request for passengers with disabilities.
naftiko: "0.5"
info:
label: "ADA Accommodation Request"
description: "Creates ADA accommodation request for passengers with disabilities."
tags:
- customer-service
- accessibility
- compliance
capability:
exposes:
- type: mcp
namespace: ada
port: 8080
tools:
- name: request-ada
description: "Submit ADA request."
inputParameters:
- name: pnr
in: body
type: string
- name: type
in: body
type: string
- name: station
in: body
type: string
call: "ground-ops.create-ada"
with:
pnr: "{{pnr}}"
type: "{{type}}"
station: "{{station}}"
outputParameters:
- name: request_id
type: string
mapping: "$.requestId"
consumes:
- type: http
namespace: ground-ops
baseUri: "https://groundops.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_ground_ops_token"
resources:
- name: ada
path: "/ada/request"
operations:
- name: create-ada
method: POST
Checks current Admirals Club lounge occupancy and availability.
naftiko: "0.5"
info:
label: "Admirals Club Capacity Check"
description: "Checks current Admirals Club lounge occupancy and availability."
tags:
- customer-service
- lounge
- ground-ops
capability:
exposes:
- type: mcp
namespace: lounge
port: 8080
tools:
- name: check-capacity
description: "Check Admirals Club capacity."
inputParameters:
- name: station
in: body
type: string
- name: terminal
in: body
type: string
call: "lounge-api.get-capacity"
with:
station: "{{station}}"
terminal: "{{terminal}}"
outputParameters:
- name: occupancy
type: number
mapping: "$.currentOccupancy"
- name: capacity
type: number
mapping: "$.maxCapacity"
consumes:
- type: http
namespace: lounge-api
baseUri: "https://lounges.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_lounge_token"
resources:
- name: capacity
path: "/clubs/{{station}}/{{terminal}}"
inputParameters:
- name: station
in: path
- name: terminal
in: path
operations:
- name: get-capacity
method: GET
Queries Adobe Analytics for a significant traffic spike or drop on a key page, and publishes a structured digest to the digital analytics team in Microsoft Teams.
naftiko: "0.5"
info:
label: "Adobe Analytics Traffic Anomaly Digest"
description: "Queries Adobe Analytics for a significant traffic spike or drop on a key page, and publishes a structured digest to the digital analytics team in Microsoft Teams."
tags:
- analytics
- adobe-analytics
- microsoft-teams
- reporting
- traffic-monitoring
capability:
exposes:
- type: mcp
namespace: digital-analytics
port: 8080
tools:
- name: digest-traffic-anomaly
description: "Given an Adobe Analytics report suite ID, a date range, and a page segment, retrieve page-level traffic metrics and post an anomaly digest to Microsoft Teams."
inputParameters:
- name: report_suite_id
in: body
type: string
description: "Adobe Analytics report suite ID, e.g. aaairlinesprod."
- name: page_name
in: body
type: string
description: "Page name or segment to evaluate for the traffic anomaly."
- name: date_range
in: body
type: string
description: "Date range in ISO-8601 format, e.g. 2025-03-01/2025-03-07."
- name: teams_channel_id
in: body
type: string
description: "Microsoft Teams channel ID to post the digest to."
steps:
- name: run-report
type: call
call: "adobe-analytics.run-ranked-report"
with:
rsid: "{{report_suite_id}}"
dimension: "page"
filter: "{{page_name}}"
dateRange: "{{date_range}}"
- name: post-digest
type: call
call: "msteams.send-message"
with:
channel_id: "{{teams_channel_id}}"
message: "TRAFFIC ANOMALY DIGEST: {{report_suite_id}} | Page: {{page_name}} | Range: {{date_range}} | Visits: {{run-report.totalVisits}} | Bounce Rate: {{run-report.bounceRate}}% | Revenue Impact: {{run-report.revenue}}"
consumes:
- namespace: adobe-analytics
type: http
baseUri: "https://analytics.adobe.io/api/americanairlines/reports"
authentication:
type: bearer
token: "$secrets.adobe_analytics_token"
resources:
- name: ranked-report
path: "/ranked"
operations:
- name: run-ranked-report
method: POST
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.ms_graph_token"
resources:
- name: channel-message
path: "/teams/{team_id}/channels/{channel_id}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves the delivery status for an Adobe Campaign email broadcast and posts a performance summary to the marketing team channel in Microsoft Teams.
naftiko: "0.5"
info:
label: "Adobe Campaign Email Delivery Status Check"
description: "Retrieves the delivery status for an Adobe Campaign email broadcast and posts a performance summary to the marketing team channel in Microsoft Teams."
tags:
- marketing
- adobe-campaign
- microsoft-teams
- email-delivery
- reporting
capability:
exposes:
- type: mcp
namespace: email-marketing
port: 8080
tools:
- name: get-delivery-status
description: "Given an Adobe Campaign delivery ID, retrieve delivery statistics and post a formatted status report to Microsoft Teams. Use to monitor in-flight or completed email campaigns."
inputParameters:
- name: delivery_id
in: body
type: string
description: "Adobe Campaign delivery ID, e.g. DM1234."
- name: teams_channel_id
in: body
type: string
description: "Microsoft Teams channel ID to post the delivery status summary."
steps:
- name: get-delivery
type: call
call: "adobe-campaign.get-delivery"
with:
delivery_id: "{{delivery_id}}"
- name: post-status
type: call
call: "msteams.send-message"
with:
channel_id: "{{teams_channel_id}}"
message: "DELIVERY STATUS: {{get-delivery.label}} | Status: {{get-delivery.status}} | Sent: {{get-delivery.successCount}} | Failed: {{get-delivery.failureCount}} | Opens: {{get-delivery.trackingUrlCount}} | ID: {{delivery_id}}"
consumes:
- namespace: adobe-campaign
type: http
baseUri: "https://mc.adobe.io/americanairlines/campaign/datapackage"
authentication:
type: bearer
token: "$secrets.adobe_campaign_token"
resources:
- name: delivery
path: "/nms:delivery/{delivery_id}"
inputParameters:
- name: delivery_id
in: path
operations:
- name: get-delivery
method: GET
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.ms_graph_token"
resources:
- name: channel-message
path: "/teams/{team_id}/channels/{channel_id}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Queries an ML training job status from the Kubeflow Pipelines API and posts a structured digest to the data science team in Microsoft Teams.
naftiko: "0.5"
info:
label: "AI Model Training Run Status Digest"
description: "Queries an ML training job status from the Kubeflow Pipelines API and posts a structured digest to the data science team in Microsoft Teams."
tags:
- ai
- ml
- kubeflow
- microsoft-teams
- model-training
capability:
exposes:
- type: mcp
namespace: ml-ops
port: 8080
tools:
- name: digest-training-run
description: "Given a Kubeflow pipeline run ID, retrieve run status, duration, and step results, then post a model training digest to the data science Teams channel."
inputParameters:
- name: run_id
in: body
type: string
description: "Kubeflow Pipelines run ID (UUID)."
- name: teams_channel_id
in: body
type: string
description: "Microsoft Teams channel ID for the ML digest."
steps:
- name: get-run
type: call
call: "kubeflow.get-run"
with:
run_id: "{{run_id}}"
- name: post-digest
type: call
call: "msteams.send-message"
with:
channel_id: "{{teams_channel_id}}"
message: "ML TRAINING DIGEST: Run {{run_id}} | Pipeline: {{get-run.pipeline_spec.name}} | Status: {{get-run.run.status}} | Duration: {{get-run.run.duration}} | Finished: {{get-run.run.finished_at}}"
consumes:
- namespace: kubeflow
type: http
baseUri: "https://kubeflow.aa.com/pipeline/apis/v1beta1"
authentication:
type: bearer
token: "$secrets.kubeflow_token"
resources:
- name: run
path: "/runs/{run_id}"
inputParameters:
- name: run_id
in: path
operations:
- name: get-run
method: GET
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.ms_graph_token"
resources:
- name: channel-message
path: "/teams/{team_id}/channels/{channel_id}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves maintenance status, open MEL items, and next check for an AA aircraft.
naftiko: "0.5"
info:
label: "Aircraft Maintenance Status"
description: "Retrieves maintenance status, open MEL items, and next check for an AA aircraft."
tags:
- maintenance
- flight-operations
- safety
capability:
exposes:
- type: mcp
namespace: mx
port: 8080
tools:
- name: get-mx-status
description: "Check aircraft maintenance status."
inputParameters:
- name: tail_number
in: body
type: string
description: "Tail number."
call: "mx-api.get-status"
with:
tail: "{{tail_number}}"
outputParameters:
- name: status
type: string
mapping: "$.maintenanceStatus"
- name: open_items
type: array
mapping: "$.openMELItems"
- name: next_check
type: string
mapping: "$.nextCheck"
consumes:
- type: http
namespace: mx-api
baseUri: "https://maintenance.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_mx_token"
resources:
- name: aircraft
path: "/aircraft/{{tail}}/status"
inputParameters:
- name: tail
in: path
operations:
- name: get-status
method: GET
Executes aircraft swap by finding replacement, updating records, recalculating W&B, and notifying ops.
naftiko: "0.5"
info:
label: "Aircraft Swap Orchestrator"
description: "Executes aircraft swap by finding replacement, updating records, recalculating W&B, and notifying ops."
tags:
- flight-operations
- dispatch
- fleet-management
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: swap
port: 8080
tools:
- name: execute-swap
description: "Execute aircraft swap."
inputParameters:
- name: flight_number
in: body
type: string
- name: original_tail
in: body
type: string
- name: station
in: body
type: string
steps:
- name: find
type: call
call: "fleet-api.find-available"
with:
station: "{{station}}"
- name: update
type: call
call: "pss.update-aircraft"
with:
flight: "{{flight_number}}"
tail: "{{find.tail_number}}"
- name: recalc
type: call
call: "dispatch-api.recalc-wb"
with:
flight: "{{flight_number}}"
tail: "{{find.tail_number}}"
- name: notify
type: call
call: "msteams.post-channel-message"
with:
channel_id: "{{ops_channel}}"
text: "Swap: {{flight_number}} {{original_tail}} -> {{find.tail_number}}"
consumes:
- type: http
namespace: fleet-api
baseUri: "https://fleet.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_fleet_token"
resources:
- name: available
path: "/aircraft/available"
operations:
- name: find-available
method: POST
- type: http
namespace: pss
baseUri: "https://pss.aa.com/api/v2"
authentication:
type: bearer
token: "$secrets.aa_pss_token"
resources:
- name: aircraft
path: "/flights/{{flight}}/aircraft"
inputParameters:
- name: flight
in: path
operations:
- name: update-aircraft
method: PUT
- type: http
namespace: dispatch-api
baseUri: "https://dispatch.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_dispatch_token"
resources:
- name: wb
path: "/weight-balance/recalc"
operations:
- name: recalc-wb
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Coordinates turnaround including fueling, ground crew, catering, and cleaning at AA hubs.
naftiko: "0.5"
info:
label: "Aircraft Turnaround Orchestrator"
description: "Coordinates turnaround including fueling, ground crew, catering, and cleaning at AA hubs."
tags:
- ground-ops
- flight-operations
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: turnaround
port: 8080
tools:
- name: coordinate-turnaround
description: "Initiate turnaround activities."
inputParameters:
- name: flight_number
in: body
type: string
description: "Flight."
- name: gate
in: body
type: string
description: "Gate."
- name: station
in: body
type: string
description: "Station (DFW, CLT, MIA, ORD, PHX, PHL, LAX)."
steps:
- name: request-fuel
type: call
call: "ground-ops.create-fuel-request"
with:
flight: "{{flight_number}}"
gate: "{{gate}}"
- name: dispatch-crew
type: call
call: "ground-ops.dispatch-crew"
with:
gate: "{{gate}}"
station: "{{station}}"
- name: order-catering
type: call
call: "catering-api.create-order"
with:
flight: "{{flight_number}}"
station: "{{station}}"
- name: notify
type: call
call: "msteams.post-channel-message"
with:
channel_id: "{{ops_channel}}"
text: "Turnaround initiated: {{flight_number}} at gate {{gate}} ({{station}})"
consumes:
- type: http
namespace: ground-ops
baseUri: "https://groundops.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_ground_ops_token"
resources:
- name: fuel
path: "/fueling/request"
operations:
- name: create-fuel-request
method: POST
- name: crew
path: "/crew/dispatch"
operations:
- name: dispatch-crew
method: POST
- type: http
namespace: catering-api
baseUri: "https://catering.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_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: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves ancillary revenue for a booking.
naftiko: "0.5"
info:
label: "Ancillary Revenue Lookup"
description: "Retrieves ancillary revenue for a booking."
tags:
- revenue-management
- customer-service
capability:
exposes:
- type: mcp
namespace: ancillary
port: 8080
tools:
- name: get-ancillary
description: "Get ancillary revenue."
inputParameters:
- name: pnr
in: body
type: string
call: "analytics-api.get-ancillaries"
with:
pnr: "{{pnr}}"
outputParameters:
- name: total
type: number
mapping: "$.total"
- name: items
type: array
mapping: "$.items"
consumes:
- type: http
namespace: analytics-api
baseUri: "https://analytics.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_analytics_token"
resources:
- name: ancillaries
path: "/bookings/{{pnr}}/ancillaries"
inputParameters:
- name: pnr
in: path
operations:
- name: get-ancillaries
method: GET
When aircraft is grounded, searches parts network, arranges shipping, and notifies maintenance.
naftiko: "0.5"
info:
label: "AOG Parts Expedite Orchestrator"
description: "When aircraft is grounded, searches parts network, arranges shipping, and notifies maintenance."
tags:
- maintenance
- logistics
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: aog
port: 8080
tools:
- name: expedite-part
description: "Expedite AOG part."
inputParameters:
- name: part_number
in: body
type: string
- name: tail_number
in: body
type: string
- name: station
in: body
type: string
steps:
- name: search
type: call
call: "parts-api.search-network"
with:
part: "{{part_number}}"
- name: ship
type: call
call: "logistics-api.expedite"
with:
part: "{{part_number}}"
from: "{{search.closest}}"
to: "{{station}}"
- name: notify
type: call
call: "msteams.post-channel-message"
with:
channel_id: "{{mx_channel}}"
text: "AOG: {{part_number}} for {{tail_number}} at {{station}} | ETA: {{ship.eta}}"
consumes:
- type: http
namespace: parts-api
baseUri: "https://maintenance.aa.com/api/v1/parts"
authentication:
type: bearer
token: "$secrets.aa_mx_token"
resources:
- name: search
path: "/search/network"
operations:
- name: search-network
method: POST
- type: http
namespace: logistics-api
baseUri: "https://logistics.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_logistics_token"
resources:
- name: expedite
path: "/shipments/expedite"
operations:
- name: expedite
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Executes a parameterized KQL query against Azure Log Analytics and returns structured results for use in incident triage or anomaly detection workflows.
naftiko: "0.5"
info:
label: "Azure Log Analytics Observability Query"
description: "Executes a parameterized KQL query against Azure Log Analytics and returns structured results for use in incident triage or anomaly detection workflows."
tags:
- observability
- azure-log-analytics
- cloud
- monitoring
capability:
exposes:
- type: mcp
namespace: log-analytics
port: 8080
tools:
- name: run-log-query
description: "Given a KQL query string and time range, execute it against the American Airlines Azure Log Analytics workspace and return structured rows. Use when investigating service anomalies or building observability reports."
inputParameters:
- name: kql_query
in: body
type: string
description: "KQL query to execute against Azure Log Analytics."
- name: timespan
in: body
type: string
description: "ISO-8601 timespan, e.g. PT1H for last hour or P7D for last 7 days."
call: "azurelogs.run-query"
with:
query: "{{kql_query}}"
timespan: "{{timespan}}"
outputParameters:
- name: rows
type: array
mapping: "$.tables[0].rows"
- name: columns
type: array
mapping: "$.tables[0].columns"
consumes:
- namespace: azurelogs
type: http
baseUri: "https://api.loganalytics.io/v1"
authentication:
type: bearer
token: "$secrets.azure_log_analytics_token"
resources:
- name: query
path: "/workspaces/{workspace_id}/query"
inputParameters:
- name: workspace_id
in: path
operations:
- name: run-query
method: POST
Retrieves baggage claim carousel and delivery status for a flight arrival.
naftiko: "0.5"
info:
label: "Baggage Claim Lookup"
description: "Retrieves baggage claim carousel and delivery status for a flight arrival."
tags:
- customer-service
- baggage
- ground-ops
capability:
exposes:
- type: mcp
namespace: baggage
port: 8080
tools:
- name: get-claim
description: "Look up baggage claim for a flight."
inputParameters:
- name: flight_number
in: body
type: string
description: "Flight."
- name: station
in: body
type: string
description: "Arrival airport."
call: "baggage-api.get-claim"
with:
flight: "{{flight_number}}"
station: "{{station}}"
outputParameters:
- name: carousel
type: string
mapping: "$.carousel"
- name: status
type: string
mapping: "$.deliveryStatus"
consumes:
- type: http
namespace: baggage-api
baseUri: "https://baggage.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_baggage_token"
resources:
- name: claims
path: "/claim/{{flight}}"
inputParameters:
- name: flight
in: path
operations:
- name: get-claim
method: GET
Tracks boarding progress for a flight showing scanned passengers and boarding group status.
naftiko: "0.5"
info:
label: "Boarding Process Tracker"
description: "Tracks boarding progress for a flight showing scanned passengers and boarding group status."
tags:
- ground-ops
- flight-operations
- tracking
capability:
exposes:
- type: mcp
namespace: boarding
port: 8080
tools:
- name: get-boarding
description: "Get boarding progress."
inputParameters:
- name: flight_number
in: body
type: string
description: "Flight."
- name: gate
in: body
type: string
description: "Gate."
call: "gate-api.get-boarding"
with:
flight: "{{flight_number}}"
gate: "{{gate}}"
outputParameters:
- name: boarded
type: number
mapping: "$.boarded"
- name: expected
type: number
mapping: "$.expected"
- name: group
type: string
mapping: "$.currentGroup"
consumes:
- type: http
namespace: gate-api
baseUri: "https://groundops.aa.com/api/v1/gates"
authentication:
type: bearer
token: "$secrets.aa_ground_ops_token"
resources:
- name: boarding
path: "/{{gate}}/boarding"
inputParameters:
- name: gate
in: path
operations:
- name: get-boarding
method: GET
Creates a new AA Cargo booking with routing and commodity details.
naftiko: "0.5"
info:
label: "Cargo Booking Creation"
description: "Creates a new AA Cargo booking with routing and commodity details."
tags:
- cargo
- logistics
capability:
exposes:
- type: mcp
namespace: cargo-booking
port: 8080
tools:
- name: create-booking
description: "Create cargo booking."
inputParameters:
- name: shipper
in: body
type: string
description: "Shipper."
- name: origin
in: body
type: string
description: "Origin."
- name: destination
in: body
type: string
description: "Destination."
- name: weight_kg
in: body
type: number
description: "Weight."
call: "cargo-api.create-booking"
with:
shipper: "{{shipper}}"
origin: "{{origin}}"
destination: "{{destination}}"
weight: "{{weight_kg}}"
outputParameters:
- name: booking_id
type: string
mapping: "$.bookingId"
- name: awb
type: string
mapping: "$.awbNumber"
consumes:
- type: http
namespace: cargo-api
baseUri: "https://cargo.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_cargo_token"
resources:
- name: bookings
path: "/bookings"
operations:
- name: create-booking
method: POST
Generates daily AA Cargo revenue summary.
naftiko: "0.5"
info:
label: "Cargo Revenue Daily Summary"
description: "Generates daily AA Cargo revenue summary."
tags:
- cargo
- revenue-management
- analytics
capability:
exposes:
- type: mcp
namespace: cargo-rev
port: 8080
tools:
- name: get-summary
description: "Get daily cargo revenue."
inputParameters:
- name: date
in: body
type: string
call: "cargo-api.get-daily"
with:
date: "{{date}}"
outputParameters:
- name: revenue
type: number
mapping: "$.totalRevenue"
- name: shipments
type: number
mapping: "$.totalShipments"
consumes:
- type: http
namespace: cargo-api
baseUri: "https://cargo.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_cargo_token"
resources:
- name: daily
path: "/analytics/daily"
operations:
- name: get-daily
method: POST
Retrieves tracking status for an AA Cargo shipment by air waybill number.
naftiko: "0.5"
info:
label: "Cargo Shipment Tracking"
description: "Retrieves tracking status for an AA Cargo shipment by air waybill number."
tags:
- cargo
- logistics
- tracking
capability:
exposes:
- type: mcp
namespace: cargo
port: 8080
tools:
- name: track-cargo
description: "Track AA Cargo shipment."
inputParameters:
- name: awb_number
in: body
type: string
description: "Air waybill."
call: "cargo-api.get-tracking"
with:
awb: "{{awb_number}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: location
type: string
mapping: "$.currentLocation"
- name: eta
type: string
mapping: "$.eta"
consumes:
- type: http
namespace: cargo-api
baseUri: "https://cargo.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_cargo_token"
resources:
- name: tracking
path: "/tracking/{{awb}}"
inputParameters:
- name: awb
in: path
operations:
- name: get-tracking
method: GET
Creates or updates catering orders for flight departures.
naftiko: "0.5"
info:
label: "Catering Order Management"
description: "Creates or updates catering orders for flight departures."
tags:
- catering
- flight-operations
capability:
exposes:
- type: mcp
namespace: catering
port: 8080
tools:
- name: manage-catering
description: "Manage catering order."
inputParameters:
- name: flight_number
in: body
type: string
- name: station
in: body
type: string
- name: meal_counts
in: body
type: string
call: "catering-api.upsert"
with:
flight: "{{flight_number}}"
station: "{{station}}"
meals: "{{meal_counts}}"
outputParameters:
- name: order_id
type: string
mapping: "$.orderId"
consumes:
- type: http
namespace: catering-api
baseUri: "https://catering.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_catering_token"
resources:
- name: orders
path: "/orders"
operations:
- name: upsert
method: PUT
When a TeamCity or GitHub Actions build fails on a protected branch, creates a Datadog deployment marker, opens a GitHub issue, and alerts the engineering channel in Microsoft Teams.
naftiko: "0.5"
info:
label: "CI/CD Pipeline Failure Triage"
description: "When a TeamCity or GitHub Actions build fails on a protected branch, creates a Datadog deployment marker, opens a GitHub issue, and alerts the engineering channel in Microsoft Teams."
tags:
- devops
- cicd
- incident-response
- datadog
- github
- teamcity
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: devops-ops
port: 8080
tools:
- name: handle-pipeline-failure
description: "Given a failed pipeline's project key, branch, commit SHA, and job name, annotate Datadog, open a GitHub issue, and post a Teams alert to the engineering channel."
inputParameters:
- name: project_key
in: body
type: string
description: "The repository or project identifier, e.g. aa-reservations."
- name: branch
in: body
type: string
description: "Git branch that failed, e.g. main."
- name: commit_sha
in: body
type: string
description: "Full commit SHA of the failing build."
- name: job_name
in: body
type: string
description: "Name of the specific build job that failed."
- name: log_url
in: body
type: string
description: "URL to the full build log."
steps:
- name: create-marker
type: call
call: "datadog.create-event"
with:
title: "Build Failure: {{project_key}} / {{branch}}"
text: "Job {{job_name}} failed at commit {{commit_sha}}. Log: {{log_url}}"
alert_type: "error"
tags: "project:{{project_key}},branch:{{branch}}"
- name: open-issue
type: call
call: "github.create-issue"
with:
owner: "AmericanAirlines"
repo: "{{project_key}}"
title: "[CI FAILURE] {{branch}} — {{job_name}}"
body: "Commit: {{commit_sha}}\nBranch: {{branch}}\nJob: {{job_name}}\nLog: {{log_url}}\nDatadog event: {{create-marker.url}}"
labels: "ci-failure,needs-triage"
- name: notify-teams
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.engineering_teams_channel_id"
message: "BUILD FAILURE: {{project_key}} | Branch: {{branch}} | Job: {{job_name}} | Commit: {{commit_sha}} | Issue: {{open-issue.html_url}}"
consumes:
- namespace: datadog
type: http
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
- namespace: github
type: http
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: issues
path: "/repos/{owner}/{repo}/issues"
inputParameters:
- name: owner
in: path
- name: repo
in: path
operations:
- name: create-issue
method: POST
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.ms_graph_token"
resources:
- name: channel-message
path: "/teams/{team_id}/channels/{channel_id}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Processes complaints via Salesforce, checks AAdvantage tier, determines compensation, and sends resolution.
naftiko: "0.5"
info:
label: "Customer Complaint Resolution Orchestrator"
description: "Processes complaints via Salesforce, checks AAdvantage tier, determines compensation, and sends resolution."
tags:
- customer-service
- salesforce
- loyalty
- notifications
capability:
exposes:
- type: mcp
namespace: complaints
port: 8080
tools:
- name: resolve-complaint
description: "Process customer complaint."
inputParameters:
- name: aadvantage_number
in: body
type: string
description: "AAdvantage number."
- name: complaint_type
in: body
type: string
description: "Type."
- name: flight_number
in: body
type: string
description: "Flight."
- name: description
in: body
type: string
description: "Description."
steps:
- name: create-case
type: call
call: "salesforce.create-case"
with:
subject: "{{complaint_type}} — {{flight_number}}"
description: "{{description}}"
- name: check-tier
type: call
call: "loyalty-api.get-member"
with:
member_id: "{{aadvantage_number}}"
- name: compensate
type: call
call: "loyalty-api.issue-credit"
with:
member: "{{aadvantage_number}}"
type: "{{complaint_type}}"
- name: notify
type: call
call: "notification-api.send-email"
with:
member: "{{aadvantage_number}}"
template: "complaint_resolution"
consumes:
- type: http
namespace: salesforce
baseUri: "https://aa.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.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_loyalty_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}}/credits"
inputParameters:
- name: member
in: path
operations:
- name: issue-credit
method: POST
- type: http
namespace: notification-api
baseUri: "https://notifications.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_notification_token"
resources:
- name: email
path: "/email/send"
operations:
- name: send-email
method: POST
Monitors tight connections at AA hubs and identifies at-risk passengers.
naftiko: "0.5"
info:
label: "Passenger Connection Monitor"
description: "Monitors tight connections at AA hubs and identifies at-risk passengers."
tags:
- customer-service
- flight-operations
- connections
capability:
exposes:
- type: mcp
namespace: connections
port: 8080
tools:
- name: check-connections
description: "Identify tight connections."
inputParameters:
- name: hub
in: body
type: string
description: "Hub."
- name: threshold
in: body
type: number
description: "Minutes threshold."
call: "pss.get-tight-connections"
with:
station: "{{hub}}"
threshold: "{{threshold}}"
outputParameters:
- name: at_risk
type: array
mapping: "$.atRiskPassengers"
- name: total
type: number
mapping: "$.totalAtRisk"
consumes:
- type: http
namespace: pss
baseUri: "https://pss.aa.com/api/v2"
authentication:
type: bearer
token: "$secrets.aa_pss_token"
resources:
- name: connections
path: "/connections/at-risk"
operations:
- name: get-tight-connections
method: POST
Retrieves assigned crew for a specific AA flight.
naftiko: "0.5"
info:
label: "Flight Crew Assignment Lookup"
description: "Retrieves assigned crew for a specific AA flight."
tags:
- crew-scheduling
- flight-operations
capability:
exposes:
- type: mcp
namespace: crew-roster
port: 8080
tools:
- name: get-crew
description: "Get crew assignment."
inputParameters:
- name: flight_number
in: body
type: string
- name: flight_date
in: body
type: string
call: "crew-api.get-assignment"
with:
flight: "{{flight_number}}"
date: "{{flight_date}}"
outputParameters:
- name: captain
type: string
mapping: "$.captain.name"
- name: cabin_crew
type: array
mapping: "$.cabinCrew"
consumes:
- type: http
namespace: crew-api
baseUri: "https://crew.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_crew_token"
resources:
- name: assignments
path: "/flights/{{flight}}/crew"
inputParameters:
- name: flight
in: path
operations:
- name: get-assignment
method: GET
Generates monthly crew bid packages with pairings and credit values.
naftiko: "0.5"
info:
label: "Crew Bid Package Generation"
description: "Generates monthly crew bid packages with pairings and credit values."
tags:
- crew-scheduling
- operations
capability:
exposes:
- type: mcp
namespace: bidding
port: 8080
tools:
- name: generate-bids
description: "Generate bid package."
inputParameters:
- name: base
in: body
type: string
- name: position
in: body
type: string
- name: month
in: body
type: string
call: "crew-api.generate-bids"
with:
base: "{{base}}"
position: "{{position}}"
month: "{{month}}"
outputParameters:
- name: package_id
type: string
mapping: "$.packageId"
- name: pairings
type: number
mapping: "$.totalPairings"
consumes:
- type: http
namespace: crew-api
baseUri: "https://crew.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_crew_token"
resources:
- name: bids
path: "/bidding/generate"
operations:
- name: generate-bids
method: POST
Verifies crew member FAA duty time compliance against Part 117 limits.
naftiko: "0.5"
info:
label: "Crew Duty Time Compliance Check"
description: "Verifies crew member FAA duty time compliance against Part 117 limits."
tags:
- crew-scheduling
- compliance
- safety
capability:
exposes:
- type: mcp
namespace: crew-compliance
port: 8080
tools:
- name: check-duty-time
description: "Check crew duty time compliance."
inputParameters:
- name: employee_id
in: body
type: string
description: "Employee ID."
call: "crew-api.get-duty-status"
with:
employee_id: "{{employee_id}}"
outputParameters:
- name: remaining_hours
type: number
mapping: "$.remainingLegalHours"
- name: compliant
type: boolean
mapping: "$.isCompliant"
consumes:
- type: http
namespace: crew-api
baseUri: "https://crew.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_crew_token"
resources:
- name: duty
path: "/crew/{{employee_id}}/duty-status"
inputParameters:
- name: employee_id
in: path
operations:
- name: get-duty-status
method: GET
Books crew layover hotels, arranges transport, and notifies crew.
naftiko: "0.5"
info:
label: "Crew Hotel Booking Orchestrator"
description: "Books crew layover hotels, arranges transport, and notifies crew."
tags:
- crew-scheduling
- logistics
- operations
capability:
exposes:
- type: mcp
namespace: crew-hotels
port: 8080
tools:
- name: book-hotel
description: "Book crew hotel."
inputParameters:
- name: crew_count
in: body
type: number
- name: station
in: body
type: string
- name: trip_id
in: body
type: string
steps:
- name: check
type: call
call: "hotel-api.check-availability"
with:
station: "{{station}}"
rooms: "{{crew_count}}"
- name: book
type: call
call: "hotel-api.book-rooms"
with:
hotel: "{{check.hotel_id}}"
rooms: "{{crew_count}}"
- name: van
type: call
call: "transport-api.book-van"
with:
station: "{{station}}"
hotel: "{{check.hotel_id}}"
- name: notify
type: call
call: "crew-comms.send-update"
with:
trip_id: "{{trip_id}}"
message: "Hotel: {{check.hotel_name}} | Conf: {{book.confirmation}}"
consumes:
- type: http
namespace: hotel-api
baseUri: "https://crew-services.aa.com/api/v1/hotels"
authentication:
type: bearer
token: "$secrets.aa_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.aa.com/api/v1/transport"
authentication:
type: bearer
token: "$secrets.aa_crew_services_token"
resources:
- name: vans
path: "/crew-van/book"
operations:
- name: book-van
method: POST
- type: http
namespace: crew-comms
baseUri: "https://crew.aa.com/api/v1/comms"
authentication:
type: bearer
token: "$secrets.aa_crew_token"
resources:
- name: updates
path: "/trips/{{trip_id}}/notify"
inputParameters:
- name: trip_id
in: path
operations:
- name: send-update
method: POST
Checks crew travel document validity for international assignments.
naftiko: "0.5"
info:
label: "Crew Passport and Visa Check"
description: "Checks crew travel document validity for international assignments."
tags:
- crew-scheduling
- compliance
- international
capability:
exposes:
- type: mcp
namespace: crew-docs
port: 8080
tools:
- name: check-docs
description: "Verify crew documents."
inputParameters:
- name: employee_id
in: body
type: string
- name: country
in: body
type: string
call: "crew-api.check-docs"
with:
employee: "{{employee_id}}"
country: "{{country}}"
outputParameters:
- name: passport_valid
type: boolean
mapping: "$.passportValid"
- name: visa_valid
type: boolean
mapping: "$.visaValid"
consumes:
- type: http
namespace: crew-api
baseUri: "https://crew.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_crew_token"
resources:
- name: docs
path: "/crew/{{employee}}/documents/check"
inputParameters:
- name: employee
in: path
operations:
- name: check-docs
method: POST
Finds and assigns qualified reserve crew, checks duty compliance, and notifies scheduling.
naftiko: "0.5"
info:
label: "Crew Reserve Callout Orchestrator"
description: "Finds and assigns qualified reserve crew, checks duty compliance, and notifies scheduling."
tags:
- crew-scheduling
- operations
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: crew-reserve
port: 8080
tools:
- name: callout-reserve
description: "Assign a reserve crew member."
inputParameters:
- name: trip_id
in: body
type: string
description: "Trip ID."
- name: base
in: body
type: string
description: "Crew base."
- name: position
in: body
type: string
description: "Position."
steps:
- name: find-reserves
type: call
call: "crew-api.search-reserves"
with:
base: "{{base}}"
position: "{{position}}"
- name: verify-duty
type: call
call: "crew-api.verify-duty"
with:
employee_id: "{{find-reserves.top_candidate}}"
trip_id: "{{trip_id}}"
- name: assign
type: call
call: "crew-api.assign-trip"
with:
employee_id: "{{find-reserves.top_candidate}}"
trip_id: "{{trip_id}}"
- name: notify
type: call
call: "msteams.post-channel-message"
with:
channel_id: "{{scheduling_channel}}"
text: "Reserve assigned: {{find-reserves.top_candidate_name}} to trip {{trip_id}}"
consumes:
- type: http
namespace: crew-api
baseUri: "https://crew.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_crew_token"
resources:
- name: reserves
path: "/reserves/search"
operations:
- name: search-reserves
method: POST
- name: duty
path: "/crew/{{employee_id}}/duty-verify"
inputParameters:
- name: employee_id
in: path
operations:
- name: verify-duty
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: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves a named Crystal Reports report instance and publishes the key metrics to a SharePoint document library and alerts stakeholders in Microsoft Teams.
naftiko: "0.5"
info:
label: "Crystal Reports Business Metrics Snapshot"
description: "Retrieves a named Crystal Reports report instance and publishes the key metrics to a SharePoint document library and alerts stakeholders in Microsoft Teams."
tags:
- reporting
- crystal-reports
- sharepoint
- microsoft-teams
- business-metrics
capability:
exposes:
- type: mcp
namespace: business-reporting
port: 8080
tools:
- name: publish-crystal-report
description: "Given a Crystal Reports report ID and a SharePoint destination, retrieve the report export, upload it to SharePoint, and notify the stakeholder channel in Microsoft Teams."
inputParameters:
- name: report_id
in: body
type: string
description: "Crystal Reports report identifier."
- name: report_name
in: body
type: string
description: "Human-readable report name for the Teams notification."
- name: sharepoint_site_id
in: body
type: string
description: "SharePoint site ID where the report should be uploaded."
- name: sharepoint_folder_path
in: body
type: string
description: "SharePoint folder path within the site, e.g. Reports/Finance/Monthly."
- name: teams_channel_id
in: body
type: string
description: "Microsoft Teams channel ID for the publication notification."
steps:
- name: get-report-export
type: call
call: "crystal-reports.export-report"
with:
report_id: "{{report_id}}"
format: "PDF"
- name: upload-to-sharepoint
type: call
call: "sharepoint.upload-file"
with:
site_id: "{{sharepoint_site_id}}"
folder_path: "{{sharepoint_folder_path}}"
file_name: "{{report_name}}.pdf"
content: "{{get-report-export.content}}"
- name: notify-stakeholders
type: call
call: "msteams.send-message"
with:
channel_id: "{{teams_channel_id}}"
message: "REPORT PUBLISHED: {{report_name}} | SharePoint: {{upload-to-sharepoint.webUrl}} | Format: PDF"
consumes:
- namespace: crystal-reports
type: http
baseUri: "https://boe.aa.com/biprws/raylight/v1"
authentication:
type: bearer
token: "$secrets.crystal_reports_token"
resources:
- name: report-export
path: "/documents/{report_id}/schedules"
inputParameters:
- name: report_id
in: path
operations:
- name: export-report
method: POST
- namespace: sharepoint
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.ms_graph_token"
resources:
- name: file-upload
path: "/sites/{site_id}/drive/root:/{folder_path}/{file_name}:/content"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
- name: file_name
in: path
operations:
- name: upload-file
method: PUT
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.ms_graph_token"
resources:
- name: channel-message
path: "/teams/{team_id}/channels/{channel_id}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Generates and submits customs docs for international cargo.
naftiko: "0.5"
info:
label: "Customs Documentation Orchestrator"
description: "Generates and submits customs docs for international cargo."
tags:
- cargo
- compliance
- customs
capability:
exposes:
- type: mcp
namespace: customs
port: 8080
tools:
- name: process-customs
description: "Process customs documentation."
inputParameters:
- name: awb
in: body
type: string
- name: country
in: body
type: string
- name: hs_code
in: body
type: string
steps:
- name: invoice
type: call
call: "cargo-api.generate-invoice"
with:
awb: "{{awb}}"
country: "{{country}}"
- name: declaration
type: call
call: "cargo-api.generate-declaration"
with:
awb: "{{awb}}"
hs_code: "{{hs_code}}"
- name: submit
type: call
call: "customs-api.submit"
with:
awb: "{{awb}}"
invoice: "{{invoice.id}}"
declaration: "{{declaration.id}}"
consumes:
- type: http
namespace: cargo-api
baseUri: "https://cargo.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_cargo_token"
resources:
- name: invoices
path: "/docs/invoice"
operations:
- name: generate-invoice
method: POST
- name: declarations
path: "/docs/declaration"
operations:
- name: generate-declaration
method: POST
- type: http
namespace: customs-api
baseUri: "https://customs.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_customs_token"
resources:
- name: submit
path: "/submit"
operations:
- name: submit
method: POST
When a GitHub release is published, creates a corresponding Datadog deployment marker on the affected service so that performance anomalies can be correlated to the deployment.
naftiko: "0.5"
info:
label: "Datadog Deployment Marker on GitHub Release"
description: "When a GitHub release is published, creates a corresponding Datadog deployment marker on the affected service so that performance anomalies can be correlated to the deployment."
tags:
- devops
- observability
- github
- datadog
- deployment
capability:
exposes:
- type: mcp
namespace: deployment-tracking
port: 8080
tools:
- name: mark-deployment
description: "Given a GitHub release tag, repository, and Datadog service name, create a Datadog deployment event marker and post a confirmation to Microsoft Teams. Use immediately after a production release is published."
inputParameters:
- name: owner
in: body
type: string
description: "GitHub organization, e.g. AmericanAirlines."
- name: repo
in: body
type: string
description: "GitHub repository name."
- name: release_tag
in: body
type: string
description: "Git tag of the release, e.g. v2.4.1."
- name: datadog_service
in: body
type: string
description: "Datadog service name to annotate, e.g. aa-checkin-api."
- name: teams_channel_id
in: body
type: string
description: "Microsoft Teams channel ID for the deployment confirmation."
steps:
- name: get-release
type: call
call: "github.get-release-by-tag"
with:
owner: "{{owner}}"
repo: "{{repo}}"
tag: "{{release_tag}}"
- name: create-dd-event
type: call
call: "datadog.create-event"
with:
title: "Deployment: {{datadog_service}} {{release_tag}}"
text: "{{get-release.body}}"
alert_type: "info"
tags: "service:{{datadog_service}},version:{{release_tag}},env:production"
- name: notify-teams
type: call
call: "msteams.send-message"
with:
channel_id: "{{teams_channel_id}}"
message: "DEPLOYED: {{datadog_service}} {{release_tag}} | GitHub: {{get-release.html_url}} | Datadog marker: {{create-dd-event.url}}"
consumes:
- namespace: github
type: http
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: release-by-tag
path: "/repos/{owner}/{repo}/releases/tags/{tag}"
inputParameters:
- name: owner
in: path
- name: repo
in: path
- name: tag
in: path
operations:
- name: get-release-by-tag
method: GET
- namespace: datadog
type: http
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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.ms_graph_token"
resources:
- name: channel-message
path: "/teams/{team_id}/channels/{channel_id}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Fetches the current health status of a named service from Datadog and returns monitor states and SLO compliance for agent-driven triage.
naftiko: "0.5"
info:
label: "Datadog Service Health Dashboard Snapshot"
description: "Fetches the current health status of a named service from Datadog and returns monitor states and SLO compliance for agent-driven triage."
tags:
- observability
- datadog
- monitoring
- slo
capability:
exposes:
- type: mcp
namespace: observability
port: 8080
tools:
- name: get-service-health
description: "Given an AA service name, retrieve active Datadog monitors and their states. Use this tool to assess service health before making routing or deployment decisions."
inputParameters:
- name: service_name
in: body
type: string
description: "The Datadog service name tag value, e.g. aa-checkin-api."
call: "datadog.list-monitors"
with:
tags: "service:{{service_name}}"
outputParameters:
- name: monitors
type: array
mapping: "$.monitors"
consumes:
- namespace: datadog
type: http
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"
inputParameters:
- name: tags
in: query
operations:
- name: list-monitors
method: GET
Retrieves SLO compliance status for all flight-operations SLOs from Datadog and publishes a weekly digest to the engineering leadership channel in Microsoft Teams.
naftiko: "0.5"
info:
label: "Datadog SLO Compliance Weekly Digest"
description: "Retrieves SLO compliance status for all flight-operations SLOs from Datadog and publishes a weekly digest to the engineering leadership channel in Microsoft Teams."
tags:
- observability
- datadog
- slo
- microsoft-teams
- reporting
capability:
exposes:
- type: mcp
namespace: slo-reporting
port: 8080
tools:
- name: digest-slo-compliance
description: "Given a Datadog SLO query tag and a Teams channel ID, retrieve all matching SLOs with their compliance percentages and post a structured weekly digest. Use every Monday for engineering leadership reporting."
inputParameters:
- name: slo_tag
in: body
type: string
description: "Datadog SLO tag filter, e.g. team:flight-ops."
- name: timeframe
in: body
type: string
description: "SLO timeframe to report: 7d, 30d, or 90d."
- name: teams_channel_id
in: body
type: string
description: "Microsoft Teams channel ID for the weekly SLO digest."
steps:
- name: get-slos
type: call
call: "datadog.list-slos"
with:
tags_query: "{{slo_tag}}"
- name: post-digest
type: call
call: "msteams.send-message"
with:
channel_id: "{{teams_channel_id}}"
message: "SLO WEEKLY DIGEST ({{timeframe}}): Tag={{slo_tag}} | Total SLOs: {{get-slos.count}} | At risk: {{get-slos.atRiskCount}} | Breached: {{get-slos.breachedCount}} | Full report: https://app.datadoghq.com/slo"
consumes:
- namespace: datadog
type: http
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: slos
path: "/slo"
inputParameters:
- name: tags_query
in: query
operations:
- name: list-slos
method: GET
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.ms_graph_token"
resources:
- name: channel-message
path: "/teams/{team_id}/channels/{channel_id}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Coordinates deicing by checking conditions, queuing aircraft, dispatching trucks, and notifying crew.
naftiko: "0.5"
info:
label: "Deicing Coordination Orchestrator"
description: "Coordinates deicing by checking conditions, queuing aircraft, dispatching trucks, and notifying crew."
tags:
- ground-ops
- flight-operations
- weather
- safety
capability:
exposes:
- type: mcp
namespace: deicing
port: 8080
tools:
- name: coordinate-deicing
description: "Coordinate deicing for departing aircraft."
inputParameters:
- name: flight_number
in: body
type: string
description: "Flight."
- name: tail_number
in: body
type: string
description: "Tail."
- name: gate
in: body
type: string
description: "Gate."
- name: station
in: body
type: string
description: "Station."
steps:
- name: check-conditions
type: call
call: "weather-api.get-deice"
with:
station: "{{station}}"
- name: queue
type: call
call: "ground-ops.queue-deicing"
with:
tail: "{{tail_number}}"
gate: "{{gate}}"
fluid: "{{check-conditions.recommended_fluid}}"
- name: dispatch
type: call
call: "ground-ops.dispatch-truck"
with:
gate: "{{gate}}"
- name: notify-crew
type: call
call: "crew-comms.send-message"
with:
flight: "{{flight_number}}"
message: "Deicing queued. Holdover: {{check-conditions.holdover_time}} min"
consumes:
- type: http
namespace: weather-api
baseUri: "https://dispatch.aa.com/api/v1/weather"
authentication:
type: bearer
token: "$secrets.aa_dispatch_token"
resources:
- name: deice
path: "/deicing/{{station}}"
inputParameters:
- name: station
in: path
operations:
- name: get-deice
method: GET
- type: http
namespace: ground-ops
baseUri: "https://groundops.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_ground_ops_token"
resources:
- name: queue
path: "/deicing/queue"
operations:
- name: queue-deicing
method: POST
- name: trucks
path: "/deicing/dispatch"
operations:
- name: dispatch-truck
method: POST
- type: http
namespace: crew-comms
baseUri: "https://crew.aa.com/api/v1/comms"
authentication:
type: bearer
token: "$secrets.aa_crew_token"
resources:
- name: messages
path: "/flights/{{flight}}/message"
inputParameters:
- name: flight
in: path
operations:
- name: send-message
method: POST
Determines and issues compensation for delayed flight passengers.
naftiko: "0.5"
info:
label: "Flight Delay Compensation Orchestrator"
description: "Determines and issues compensation for delayed flight passengers."
tags:
- customer-service
- compliance
- notifications
capability:
exposes:
- type: mcp
namespace: delay-comp
port: 8080
tools:
- name: process-compensation
description: "Process delay compensation."
inputParameters:
- name: flight_number
in: body
type: string
- name: delay_minutes
in: body
type: number
- name: route_type
in: body
type: string
steps:
- name: get-pax
type: call
call: "pss.get-passengers"
with:
flight: "{{flight_number}}"
- name: calc
type: call
call: "compensation-api.calculate"
with:
delay: "{{delay_minutes}}"
route: "{{route_type}}"
- name: issue
type: call
call: "compensation-api.issue-vouchers"
with:
passengers: "{{get-pax.passengers}}"
amount: "{{calc.amount}}"
- name: notify
type: call
call: "notification-api.batch-notify"
with:
passengers: "{{get-pax.passengers}}"
template: "delay_compensation"
consumes:
- type: http
namespace: pss
baseUri: "https://pss.aa.com/api/v2"
authentication:
type: bearer
token: "$secrets.aa_pss_token"
resources:
- name: passengers
path: "/flights/{{flight}}/passengers"
inputParameters:
- name: flight
in: path
operations:
- name: get-passengers
method: GET
- type: http
namespace: compensation-api
baseUri: "https://compensation.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_compensation_token"
resources:
- name: calc
path: "/calculate"
operations:
- name: calculate
method: POST
- name: vouchers
path: "/vouchers/batch"
operations:
- name: issue-vouchers
method: POST
- type: http
namespace: notification-api
baseUri: "https://notifications.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_notification_token"
resources:
- name: batch
path: "/batch/notify"
operations:
- name: batch-notify
method: POST
Orchestrates pre-departure checks for weather, crew, aircraft, and generates dispatch release.
naftiko: "0.5"
info:
label: "Flight Dispatch Release Orchestrator"
description: "Orchestrates pre-departure checks for weather, crew, aircraft, and generates dispatch release."
tags:
- dispatch
- flight-operations
- safety
- compliance
capability:
exposes:
- type: mcp
namespace: dispatch
port: 8080
tools:
- name: process-release
description: "Run pre-departure checks and generate release."
inputParameters:
- name: flight_number
in: body
type: string
description: "Flight."
- name: tail_number
in: body
type: string
description: "Tail."
- name: captain_id
in: body
type: string
description: "Captain ID."
steps:
- name: weather
type: call
call: "dispatch-api.get-weather"
with:
flight: "{{flight_number}}"
- name: crew
type: call
call: "crew-api.get-duty-status"
with:
employee_id: "{{captain_id}}"
- name: mx
type: call
call: "mx-api.get-status"
with:
tail: "{{tail_number}}"
- name: release
type: call
call: "dispatch-api.create-release"
with:
flight: "{{flight_number}}"
weather_ok: "{{weather.safe}}"
crew_legal: "{{crew.isCompliant}}"
consumes:
- type: http
namespace: dispatch-api
baseUri: "https://dispatch.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_dispatch_token"
resources:
- name: weather
path: "/weather/route/{{flight}}"
inputParameters:
- name: flight
in: path
operations:
- name: get-weather
method: GET
- name: releases
path: "/releases"
operations:
- name: create-release
method: POST
- type: http
namespace: crew-api
baseUri: "https://crew.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_crew_token"
resources:
- name: duty
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.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_mx_token"
resources:
- name: aircraft
path: "/aircraft/{{tail}}/status"
inputParameters:
- name: tail
in: path
operations:
- name: get-status
method: GET
Coordinates recovery after flight diversion including ground handling, hotels, crew rest, and incident logging.
naftiko: "0.5"
info:
label: "Diversion Recovery Orchestrator"
description: "Coordinates recovery after flight diversion including ground handling, hotels, crew rest, and incident logging."
tags:
- flight-operations
- customer-service
- ground-ops
- servicenow
capability:
exposes:
- type: mcp
namespace: diversion
port: 8080
tools:
- name: handle-diversion
description: "Coordinate diversion recovery."
inputParameters:
- name: flight_number
in: body
type: string
description: "Flight."
- name: diversion_airport
in: body
type: string
description: "Diversion airport."
- name: reason
in: body
type: string
description: "Reason."
steps:
- name: arrange-handling
type: call
call: "ground-ops.request-handling"
with:
station: "{{diversion_airport}}"
flight: "{{flight_number}}"
- name: book-hotels
type: call
call: "hotel-api.book"
with:
flight: "{{flight_number}}"
station: "{{diversion_airport}}"
- name: check-crew
type: call
call: "crew-api.check-rest"
with:
flight: "{{flight_number}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Diversion: {{flight_number}} to {{diversion_airport}} — {{reason}}"
priority: "1"
consumes:
- type: http
namespace: ground-ops
baseUri: "https://groundops.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_ground_ops_token"
resources:
- name: handling
path: "/handling/request"
operations:
- name: request-handling
method: POST
- type: http
namespace: hotel-api
baseUri: "https://crew-services.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_crew_services_token"
resources:
- name: accommodations
path: "/accommodations/book"
operations:
- name: book
method: POST
- type: http
namespace: crew-api
baseUri: "https://crew.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_crew_token"
resources:
- name: rest
path: "/crew/rest-check"
operations:
- name: check-rest
method: POST
- type: http
namespace: servicenow
baseUri: "https://aa.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 departure is confirmed in PeopleSoft, opens a GitHub offboarding issue, archives the SharePoint folder, and alerts the IT and HR teams via Microsoft Teams.
naftiko: "0.5"
info:
label: "Employee Offboarding Checklist Initiator"
description: "When an employee departure is confirmed in PeopleSoft, opens a GitHub offboarding issue, archives the SharePoint folder, and alerts the IT and HR teams via Microsoft Teams."
tags:
- hr
- offboarding
- peoplesoft
- sharepoint
- microsoft-teams
- github
capability:
exposes:
- type: mcp
namespace: hr-offboarding
port: 8080
tools:
- name: trigger-offboarding
description: "Given a departing employee's ID, name, last day, and department, open a GitHub offboarding issue, lock the SharePoint folder, and notify IT and HR in Microsoft Teams."
inputParameters:
- name: employee_id
in: body
type: string
description: "PeopleSoft employee ID (EMPLID) of the departing employee."
- name: full_name
in: body
type: string
description: "Full name of the departing employee."
- name: last_day
in: body
type: string
description: "Last working day in YYYY-MM-DD format."
- name: department
in: body
type: string
description: "Employee's department, used to route the Teams notification."
steps:
- name: open-offboarding-issue
type: call
call: "github.create-issue"
with:
owner: "AmericanAirlines"
repo: "it-access-provisioning"
title: "IT Offboarding: {{full_name}} (last day {{last_day}})"
body: "Employee ID: {{employee_id}}\nFull Name: {{full_name}}\nLast Day: {{last_day}}\nDepartment: {{department}}\nAction: Revoke all system access by EOD {{last_day}}"
labels: "offboarding,{{department}}"
- name: notify-hr-it
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.hr_it_teams_channel_id"
message: "OFFBOARDING INITIATED: {{full_name}} (ID: {{employee_id}}) | Last Day: {{last_day}} | Dept: {{department}} | Issue: {{open-offboarding-issue.html_url}}"
consumes:
- namespace: github
type: http
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: issues
path: "/repos/{owner}/{repo}/issues"
inputParameters:
- name: owner
in: path
- name: repo
in: path
operations:
- name: create-issue
method: POST
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.ms_graph_token"
resources:
- name: channel-message
path: "/teams/{team_id}/channels/{channel_id}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Assigns cabin crew positions based on seniority and qualifications.
naftiko: "0.5"
info:
label: "Flight Attendant Position Assignment"
description: "Assigns cabin crew positions based on seniority and qualifications."
tags:
- crew-scheduling
- flight-operations
capability:
exposes:
- type: mcp
namespace: fa
port: 8080
tools:
- name: assign-positions
description: "Assign FA positions."
inputParameters:
- name: flight_number
in: body
type: string
- name: date
in: body
type: string
call: "crew-api.assign-fa"
with:
flight: "{{flight_number}}"
date: "{{date}}"
outputParameters:
- name: assignments
type: array
mapping: "$.assignments"
- name: lead
type: string
mapping: "$.leadFA"
consumes:
- type: http
namespace: crew-api
baseUri: "https://crew.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_crew_token"
resources:
- name: fa
path: "/flights/{{flight}}/fa-positions"
inputParameters:
- name: flight
in: path
operations:
- name: assign-fa
method: POST
Calculates fatigue risk score for a pilot based on duty periods.
naftiko: "0.5"
info:
label: "Pilot Fatigue Risk Assessment"
description: "Calculates fatigue risk score for a pilot based on duty periods."
tags:
- crew-scheduling
- safety
- compliance
capability:
exposes:
- type: mcp
namespace: fatigue
port: 8080
tools:
- name: assess-fatigue
description: "Calculate fatigue risk."
inputParameters:
- name: employee_id
in: body
type: string
- name: trip_id
in: body
type: string
call: "frms-api.assess"
with:
employee: "{{employee_id}}"
trip: "{{trip_id}}"
outputParameters:
- name: score
type: number
mapping: "$.riskScore"
- name: level
type: string
mapping: "$.riskLevel"
consumes:
- type: http
namespace: frms-api
baseUri: "https://safety.aa.com/api/v1/frms"
authentication:
type: bearer
token: "$secrets.aa_safety_token"
resources:
- name: assess
path: "/assess"
operations:
- name: assess
method: POST
Generates fleet utilization summary with block hours and aircraft availability.
naftiko: "0.5"
info:
label: "Fleet Utilization Report"
description: "Generates fleet utilization summary with block hours and aircraft availability."
tags:
- fleet-management
- analytics
capability:
exposes:
- type: mcp
namespace: fleet
port: 8080
tools:
- name: get-utilization
description: "Get fleet utilization."
inputParameters:
- name: fleet_type
in: body
type: string
description: "Fleet type."
- name: period
in: body
type: string
description: "Period."
call: "fleet-api.get-util"
with:
fleet: "{{fleet_type}}"
period: "{{period}}"
outputParameters:
- name: block_hours
type: number
mapping: "$.totalBlockHours"
- name: utilization
type: number
mapping: "$.avgDailyUtilization"
consumes:
- type: http
namespace: fleet-api
baseUri: "https://fleet.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_fleet_token"
resources:
- name: util
path: "/utilization/report"
operations:
- name: get-util
method: POST
When a Datadog monitor fires on a flight-operations service, creates an Azure Log Analytics query for root-cause context, opens a GitHub issue, and posts an alert to Microsoft Teams.
naftiko: "0.5"
info:
label: "Flight Operations Incident Response"
description: "When a Datadog monitor fires on a flight-operations service, creates an Azure Log Analytics query for root-cause context, opens a GitHub issue, and posts an alert to Microsoft Teams."
tags:
- operations
- incident-response
- datadog
- azure-log-analytics
- github
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: flight-ops
port: 8080
tools:
- name: handle-ops-incident
description: "Given a Datadog monitor alert ID and service name, query Azure Log Analytics for supporting telemetry, open a GitHub issue with full context, and notify the operations channel in Microsoft Teams."
inputParameters:
- name: monitor_id
in: body
type: string
description: "The Datadog monitor ID that triggered the alert."
- name: service_name
in: body
type: string
description: "Name of the flight-operations service affected, e.g. check-in-api."
- name: severity
in: body
type: string
description: "Alert severity level: P1, P2, or P3."
- name: teams_channel_id
in: body
type: string
description: "Microsoft Teams channel ID to post the alert notification to."
steps:
- name: get-monitor
type: call
call: "datadog.get-monitor"
with:
monitor_id: "{{monitor_id}}"
- name: query-logs
type: call
call: "azurelogs.run-query"
with:
query: "AzureDiagnostics | where ResourceType == '{{service_name}}' | order by TimeGenerated desc | take 50"
timespan: "PT1H"
- name: open-issue
type: call
call: "github.create-issue"
with:
owner: "AmericanAirlines"
repo: "flight-ops-platform"
title: "[{{severity}}] Ops Incident: {{service_name}} — {{get-monitor.name}}"
body: "Monitor: {{get-monitor.name}}\nService: {{service_name}}\nSeverity: {{severity}}\nLog excerpt: {{query-logs.rows}}"
labels: "incident,{{severity}}"
- name: notify-teams
type: call
call: "msteams.send-message"
with:
channel_id: "{{teams_channel_id}}"
message: "INCIDENT {{severity}}: {{service_name}} | Monitor: {{get-monitor.name}} | GitHub: {{open-issue.html_url}}"
consumes:
- namespace: datadog
type: http
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: monitor
path: "/monitor/{monitor_id}"
inputParameters:
- name: monitor_id
in: path
operations:
- name: get-monitor
method: GET
- namespace: azurelogs
type: http
baseUri: "https://api.loganalytics.io/v1"
authentication:
type: bearer
token: "$secrets.azure_log_analytics_token"
resources:
- name: query
path: "/workspaces/{workspace_id}/query"
inputParameters:
- name: workspace_id
in: path
operations:
- name: run-query
method: POST
- namespace: github
type: http
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: issues
path: "/repos/{owner}/{repo}/issues"
inputParameters:
- name: owner
in: path
- name: repo
in: path
operations:
- name: create-issue
method: POST
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.ms_graph_token"
resources:
- name: channel-message
path: "/teams/{team_id}/channels/{channel_id}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Checks flight plan filing status with ATC.
naftiko: "0.5"
info:
label: "Flight Plan Filing Status"
description: "Checks flight plan filing status with ATC."
tags:
- dispatch
- flight-operations
capability:
exposes:
- type: mcp
namespace: flight-plan
port: 8080
tools:
- name: get-plan
description: "Check flight plan status."
inputParameters:
- name: flight_number
in: body
type: string
- name: date
in: body
type: string
call: "dispatch-api.get-plan"
with:
flight: "{{flight_number}}"
date: "{{date}}"
outputParameters:
- name: status
type: string
mapping: "$.filingStatus"
- name: route
type: string
mapping: "$.filedRoute"
consumes:
- type: http
namespace: dispatch-api
baseUri: "https://dispatch.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_dispatch_token"
resources:
- name: plans
path: "/flight-plans/{{flight}}/status"
inputParameters:
- name: flight
in: path
operations:
- name: get-plan
method: GET
Retrieves real-time flight status for an American Airlines flight including departure, arrival, gate, and delay information.
naftiko: "0.5"
info:
label: "Flight Status Lookup"
description: "Retrieves real-time flight status for an American Airlines flight including departure, arrival, gate, and delay information."
tags:
- flight-operations
- customer-service
capability:
exposes:
- type: mcp
namespace: flight-ops
port: 8080
tools:
- name: get-flight-status
description: "Look up current AA flight status."
inputParameters:
- name: flight_number
in: body
type: string
description: "AA flight number."
- name: flight_date
in: body
type: string
description: "Flight date."
call: "aa-api.get-status"
with:
flight: "{{flight_number}}"
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: aa-api
baseUri: "https://api.aa.com/v1/flights"
authentication:
type: bearer
token: "$secrets.aa_api_token"
resources:
- name: status
path: "/status/{{flight}}/{{date}}"
inputParameters:
- name: flight
in: path
- name: date
in: path
operations:
- name: get-status
method: GET
Retrieves actual fuel burn for a completed flight.
naftiko: "0.5"
info:
label: "Flight Fuel Burn Lookup"
description: "Retrieves actual fuel burn for a completed flight."
tags:
- fuel-management
- analytics
capability:
exposes:
- type: mcp
namespace: fuel-burn
port: 8080
tools:
- name: get-burn
description: "Get fuel burn data."
inputParameters:
- name: flight_number
in: body
type: string
- name: date
in: body
type: string
call: "fuel-api.get-burn"
with:
flight: "{{flight_number}}"
date: "{{date}}"
outputParameters:
- name: planned
type: number
mapping: "$.planned"
- name: actual
type: number
mapping: "$.actual"
consumes:
- type: http
namespace: fuel-api
baseUri: "https://analytics.aa.com/api/v1/fuel"
authentication:
type: bearer
token: "$secrets.aa_analytics_token"
resources:
- name: burn
path: "/flights/{{flight}}/burn"
inputParameters:
- name: flight
in: path
operations:
- name: get-burn
method: GET
Generates fuel cost analysis for a fleet segment with tankering and hedging insights.
naftiko: "0.5"
info:
label: "Fuel Cost Analysis Report"
description: "Generates fuel cost analysis for a fleet segment with tankering and hedging insights."
tags:
- fuel-management
- analytics
capability:
exposes:
- type: mcp
namespace: fuel
port: 8080
tools:
- name: get-fuel-report
description: "Generate fuel cost analysis."
inputParameters:
- name: fleet_type
in: body
type: string
description: "Fleet type."
- name: period
in: body
type: string
description: "Period."
call: "fuel-api.query-costs"
with:
fleet: "{{fleet_type}}"
period: "{{period}}"
outputParameters:
- name: total_cost
type: number
mapping: "$.totalCost"
- name: avg_price
type: number
mapping: "$.avgPricePerGallon"
consumes:
- type: http
namespace: fuel-api
baseUri: "https://analytics.aa.com/api/v1/fuel"
authentication:
type: bearer
token: "$secrets.aa_analytics_token"
resources:
- name: costs
path: "/cost-analysis"
operations:
- name: query-costs
method: POST
Recommends optimal gate assignments minimizing connection times.
naftiko: "0.5"
info:
label: "Gate Assignment Optimizer"
description: "Recommends optimal gate assignments minimizing connection times."
tags:
- ground-ops
- flight-operations
- optimization
capability:
exposes:
- type: mcp
namespace: gates
port: 8080
tools:
- name: optimize-gate
description: "Get gate recommendation."
inputParameters:
- name: flight_number
in: body
type: string
description: "Flight."
- name: station
in: body
type: string
description: "Station."
call: "gate-api.optimize"
with:
flight: "{{flight_number}}"
station: "{{station}}"
outputParameters:
- name: gate
type: string
mapping: "$.recommendedGate"
- name: score
type: number
mapping: "$.connectionScore"
consumes:
- type: http
namespace: gate-api
baseUri: "https://groundops.aa.com/api/v1/gates"
authentication:
type: bearer
token: "$secrets.aa_ground_ops_token"
resources:
- name: optimize
path: "/optimize"
operations:
- name: optimize
method: POST
Retrieves GitHub Actions workflow run statistics for a repository and posts a CI usage digest to the DevOps engineering channel in Microsoft Teams.
naftiko: "0.5"
info:
label: "GitHub Actions Workflow Usage Digest"
description: "Retrieves GitHub Actions workflow run statistics for a repository and posts a CI usage digest to the DevOps engineering channel in Microsoft Teams."
tags:
- devops
- github
- cicd
- microsoft-teams
- reporting
capability:
exposes:
- type: mcp
namespace: devops-reporting
port: 8080
tools:
- name: digest-workflow-usage
description: "Given a GitHub owner, repository, and branch, retrieve recent workflow run statistics and post a CI usage digest to Microsoft Teams. Use weekly to track build health and frequency."
inputParameters:
- name: owner
in: body
type: string
description: "GitHub organization or owner, e.g. AmericanAirlines."
- name: repo
in: body
type: string
description: "GitHub repository name."
- name: branch
in: body
type: string
description: "Branch to scope the workflow runs to, e.g. main."
- name: teams_channel_id
in: body
type: string
description: "Microsoft Teams channel ID for the CI usage digest."
steps:
- name: get-workflow-runs
type: call
call: "github.list-workflow-runs"
with:
owner: "{{owner}}"
repo: "{{repo}}"
branch: "{{branch}}"
per_page: 100
- name: post-digest
type: call
call: "msteams.send-message"
with:
channel_id: "{{teams_channel_id}}"
message: "CI USAGE DIGEST: {{owner}}/{{repo}} | Branch: {{branch}} | Total Runs: {{get-workflow-runs.total_count}} | Success: {{get-workflow-runs.successCount}} | Failure: {{get-workflow-runs.failureCount}} | Details: https://github.com/{{owner}}/{{repo}}/actions"
consumes:
- namespace: github
type: http
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: workflow-runs
path: "/repos/{owner}/{repo}/actions/runs"
inputParameters:
- name: owner
in: path
- name: repo
in: path
- name: branch
in: query
- name: per_page
in: query
operations:
- name: list-workflow-runs
method: GET
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.ms_graph_token"
resources:
- name: channel-message
path: "/teams/{team_id}/channels/{channel_id}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When a pull request is opened on a critical repository, posts a structured review request to the owning team's Microsoft Teams channel with PR metadata and a link.
naftiko: "0.5"
info:
label: "GitHub Pull Request to Teams Review Request"
description: "When a pull request is opened on a critical repository, posts a structured review request to the owning team's Microsoft Teams channel with PR metadata and a link."
tags:
- devops
- github
- microsoft-teams
- code-review
capability:
exposes:
- type: mcp
namespace: devops-collab
port: 8080
tools:
- name: notify-pr-review
description: "Given a GitHub PR number, repository, and Teams channel ID, fetch PR details from GitHub and post a formatted review request card to Microsoft Teams."
inputParameters:
- name: owner
in: body
type: string
description: "GitHub organization or owner name, e.g. AmericanAirlines."
- name: repo
in: body
type: string
description: "GitHub repository name."
- name: pr_number
in: body
type: integer
description: "Pull request number."
- name: teams_channel_id
in: body
type: string
description: "Microsoft Teams channel ID to post the review request to."
steps:
- name: get-pr
type: call
call: "github.get-pull-request"
with:
owner: "{{owner}}"
repo: "{{repo}}"
pull_number: "{{pr_number}}"
- name: post-review-request
type: call
call: "msteams.send-message"
with:
channel_id: "{{teams_channel_id}}"
message: "PR REVIEW REQUESTED: {{get-pr.title}} | Repo: {{owner}}/{{repo}} | Author: {{get-pr.user.login}} | Branch: {{get-pr.head.ref}} → {{get-pr.base.ref}} | URL: {{get-pr.html_url}}"
consumes:
- namespace: github
type: http
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: pull-request
path: "/repos/{owner}/{repo}/pulls/{pull_number}"
inputParameters:
- name: owner
in: path
- name: repo
in: path
- name: pull_number
in: path
operations:
- name: get-pull-request
method: GET
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.ms_graph_token"
resources:
- name: channel-message
path: "/teams/{team_id}/channels/{channel_id}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves open Dependabot security alerts across American Airlines GitHub repositories and posts a prioritized advisory digest to the security team in Microsoft Teams.
naftiko: "0.5"
info:
label: "GitHub Repository Security Advisory Digest"
description: "Retrieves open Dependabot security alerts across American Airlines GitHub repositories and posts a prioritized advisory digest to the security team in Microsoft Teams."
tags:
- security
- github
- dependabot
- microsoft-teams
- vulnerability-management
capability:
exposes:
- type: mcp
namespace: security-reporting
port: 8080
tools:
- name: digest-security-advisories
description: "Given a GitHub organization and severity filter, retrieve open Dependabot alerts and post a prioritized digest to the security Teams channel. Use weekly or when a critical CVE is published."
inputParameters:
- name: org
in: body
type: string
description: "GitHub organization name, e.g. AmericanAirlines."
- name: severity
in: body
type: string
description: "Minimum severity to include: critical, high, medium, or low."
- name: teams_channel_id
in: body
type: string
description: "Microsoft Teams channel ID for the security advisory digest."
steps:
- name: get-alerts
type: call
call: "github.list-org-dependabot-alerts"
with:
org: "{{org}}"
severity: "{{severity}}"
state: "open"
- name: post-digest
type: call
call: "msteams.send-message"
with:
channel_id: "{{teams_channel_id}}"
message: "SECURITY ADVISORY DIGEST: Org={{org}} | Severity >= {{severity}} | Open Alerts: {{get-alerts.total_count}} | Critical: {{get-alerts.criticalCount}} | High: {{get-alerts.highCount}} | Review: https://github.com/orgs/{{org}}/security/risk"
consumes:
- namespace: github
type: http
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: org-dependabot-alerts
path: "/orgs/{org}/dependabot/alerts"
inputParameters:
- name: org
in: path
- name: severity
in: query
- name: state
in: query
operations:
- name: list-org-dependabot-alerts
method: GET
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.ms_graph_token"
resources:
- name: channel-message
path: "/teams/{team_id}/channels/{channel_id}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When a GitLab merge request is merged to main, creates a Datadog deployment event to correlate post-merge service behaviour with the code change.
naftiko: "0.5"
info:
label: "GitLab Merge Request to Datadog Annotation"
description: "When a GitLab merge request is merged to main, creates a Datadog deployment event to correlate post-merge service behaviour with the code change."
tags:
- devops
- gitlab
- datadog
- deployment
- observability
capability:
exposes:
- type: mcp
namespace: gitlab-tracking
port: 8080
tools:
- name: annotate-merge-to-datadog
description: "Given a GitLab project ID, MR IID, and Datadog service name, fetch MR details and create a Datadog deployment event. Use immediately after a merge to main to correlate deployments with observability data."
inputParameters:
- name: project_id
in: body
type: integer
description: "GitLab project ID."
- name: mr_iid
in: body
type: integer
description: "GitLab merge request internal ID (IID)."
- name: datadog_service
in: body
type: string
description: "Datadog service name to annotate."
steps:
- name: get-mr
type: call
call: "gitlab.get-merge-request"
with:
project_id: "{{project_id}}"
mr_iid: "{{mr_iid}}"
- name: create-dd-event
type: call
call: "datadog.create-event"
with:
title: "MR Merged: {{get-mr.title}}"
text: "{{get-mr.description}}\nAuthor: {{get-mr.author.name}}\nTarget: {{get-mr.target_branch}}"
alert_type: "info"
tags: "service:{{datadog_service}},gitlab-mr:{{mr_iid}},branch:{{get-mr.target_branch}}"
consumes:
- namespace: gitlab
type: http
baseUri: "https://gitlab.com/api/v4"
authentication:
type: bearer
token: "$secrets.gitlab_token"
resources:
- name: merge-request
path: "/projects/{project_id}/merge_requests/{mr_iid}"
inputParameters:
- name: project_id
in: path
- name: mr_iid
in: path
operations:
- name: get-merge-request
method: GET
- namespace: datadog
type: http
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
Retrieves key Google Analytics metrics for aa.com and publishes a structured weekly web performance digest to the Digital Experience team channel in Microsoft Teams.
naftiko: "0.5"
info:
label: "Google Analytics Web Performance Digest"
description: "Retrieves key Google Analytics metrics for aa.com and publishes a structured weekly web performance digest to the Digital Experience team channel in Microsoft Teams."
tags:
- analytics
- google-analytics
- microsoft-teams
- reporting
- digital-experience
capability:
exposes:
- type: mcp
namespace: web-analytics
port: 8080
tools:
- name: digest-web-performance
description: "Given a Google Analytics 4 property ID and date range, retrieve sessions, bounce rate, and conversion metrics for aa.com and post a web performance digest to Microsoft Teams."
inputParameters:
- name: property_id
in: body
type: string
description: "Google Analytics 4 property ID, e.g. 123456789."
- name: start_date
in: body
type: string
description: "Report start date in YYYY-MM-DD format."
- name: end_date
in: body
type: string
description: "Report end date in YYYY-MM-DD format."
- name: teams_channel_id
in: body
type: string
description: "Microsoft Teams channel ID for the web performance digest."
steps:
- name: run-report
type: call
call: "google-analytics.run-report"
with:
property_id: "{{property_id}}"
startDate: "{{start_date}}"
endDate: "{{end_date}}"
- name: post-digest
type: call
call: "msteams.send-message"
with:
channel_id: "{{teams_channel_id}}"
message: "WEB PERFORMANCE ({{start_date}} to {{end_date}}): Sessions: {{run-report.sessions}} | Users: {{run-report.totalUsers}} | Bounce Rate: {{run-report.bounceRate}}% | Avg Session Duration: {{run-report.averageSessionDuration}}s | Conversions: {{run-report.conversions}}"
consumes:
- namespace: google-analytics
type: http
baseUri: "https://analyticsdata.googleapis.com/v1beta"
authentication:
type: bearer
token: "$secrets.google_analytics_token"
resources:
- name: report
path: "/properties/{property_id}:runReport"
inputParameters:
- name: property_id
in: path
operations:
- name: run-report
method: POST
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.ms_graph_token"
resources:
- name: channel-message
path: "/teams/{team_id}/channels/{channel_id}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves ground support equipment status at an AA station.
naftiko: "0.5"
info:
label: "Ground Equipment Status"
description: "Retrieves ground support equipment status at an AA station."
tags:
- ground-ops
- equipment
- tracking
capability:
exposes:
- type: mcp
namespace: gse
port: 8080
tools:
- name: get-gse
description: "Check ground equipment."
inputParameters:
- name: station
in: body
type: string
- name: type
in: body
type: string
call: "ground-ops.get-equipment"
with:
station: "{{station}}"
type: "{{type}}"
outputParameters:
- name: available
type: number
mapping: "$.available"
- name: in_use
type: number
mapping: "$.inUse"
consumes:
- type: http
namespace: ground-ops
baseUri: "https://groundops.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_ground_ops_token"
resources:
- name: equipment
path: "/equipment/status"
operations:
- name: get-equipment
method: POST
Validates hazmat cargo against IATA dangerous goods regulations.
naftiko: "0.5"
info:
label: "Hazmat Cargo Compliance Check"
description: "Validates hazmat cargo against IATA dangerous goods regulations."
tags:
- cargo
- compliance
- safety
capability:
exposes:
- type: mcp
namespace: hazmat
port: 8080
tools:
- name: check-hazmat
description: "Validate hazmat compliance."
inputParameters:
- name: awb
in: body
type: string
- name: un_number
in: body
type: string
call: "cargo-api.validate-hazmat"
with:
awb: "{{awb}}"
un: "{{un_number}}"
outputParameters:
- name: compliant
type: boolean
mapping: "$.isCompliant"
- name: violations
type: array
mapping: "$.violations"
consumes:
- type: http
namespace: cargo-api
baseUri: "https://cargo.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_cargo_token"
resources:
- name: hazmat
path: "/hazmat/validate"
operations:
- name: validate-hazmat
method: POST
Retrieves HubSpot campaign engagement metrics and publishes a digest summary to the marketing team's Microsoft Teams channel.
naftiko: "0.5"
info:
label: "HubSpot Marketing Campaign Performance Digest"
description: "Retrieves HubSpot campaign engagement metrics and publishes a digest summary to the marketing team's Microsoft Teams channel."
tags:
- marketing
- hubspot
- microsoft-teams
- reporting
- campaign-performance
capability:
exposes:
- type: mcp
namespace: marketing-reporting
port: 8080
tools:
- name: digest-campaign-performance
description: "Given a HubSpot campaign ID, fetch email performance metrics and post a formatted digest to the marketing Teams channel. Use to surface open rates, click rates, and unsubscribes for a campaign."
inputParameters:
- name: campaign_id
in: body
type: string
description: "HubSpot campaign ID to retrieve performance metrics for."
- name: teams_channel_id
in: body
type: string
description: "Microsoft Teams channel ID for the marketing digest post."
steps:
- name: get-campaign
type: call
call: "hubspot.get-campaign"
with:
campaign_id: "{{campaign_id}}"
- name: get-stats
type: call
call: "hubspot.get-campaign-stats"
with:
campaign_id: "{{campaign_id}}"
- name: post-digest
type: call
call: "msteams.send-message"
with:
channel_id: "{{teams_channel_id}}"
message: "CAMPAIGN DIGEST: {{get-campaign.name}} | Sent: {{get-stats.numSent}} | Opens: {{get-stats.numOpens}} | Clicks: {{get-stats.numClicks}} | Unsubscribes: {{get-stats.numUnsubscribed}} | Open Rate: {{get-stats.openRate}}%"
consumes:
- namespace: hubspot
type: http
baseUri: "https://api.hubapi.com/marketing/v3"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: campaign
path: "/emails/{campaign_id}"
inputParameters:
- name: campaign_id
in: path
operations:
- name: get-campaign
method: GET
- name: campaign-stats
path: "/emails/{campaign_id}/statistics/list"
inputParameters:
- name: campaign_id
in: path
operations:
- name: get-campaign-stats
method: GET
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.ms_graph_token"
resources:
- name: channel-message
path: "/teams/{team_id}/channels/{channel_id}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Performs a periodic IAM access review by querying Microsoft Graph for users with privileged roles, cross-referencing active employees in PeopleSoft, and flagging or revoking stale access via Teams notification.
naftiko: "0.5"
info:
label: "IAM Access Review and Revocation Orchestrator"
description: "Performs a periodic IAM access review by querying Microsoft Graph for users with privileged roles, cross-referencing active employees in PeopleSoft, and flagging or revoking stale access via Teams notification."
tags:
- security
- iam
- microsoft-teams
- access-review
- governance
capability:
exposes:
- type: mcp
namespace: iam-governance
port: 8080
tools:
- name: review-privileged-access
description: "Given a Microsoft Graph directory role ID, list all members of that role, check each against PeopleSoft to identify terminated employees, and post a stale-access report to the security Teams channel."
inputParameters:
- name: role_id
in: body
type: string
description: "Microsoft Entra directory role ID (GUID) to review, e.g. Global Administrator."
- name: role_name
in: body
type: string
description: "Human-readable name of the role, e.g. Global Administrator."
- name: teams_channel_id
in: body
type: string
description: "Microsoft Teams channel ID for the access review report."
steps:
- name: get-role-members
type: call
call: "msgraph.get-role-members"
with:
role_id: "{{role_id}}"
- name: post-review
type: call
call: "msteams.send-message"
with:
channel_id: "{{teams_channel_id}}"
message: "IAM ACCESS REVIEW: Role={{role_name}} | Members: {{get-role-members.count}} | Action required: Review at https://entra.microsoft.com/roles/{{role_id}}/members"
consumes:
- namespace: msgraph
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.ms_graph_token"
resources:
- name: role-members
path: "/directoryRoles/{role_id}/members"
inputParameters:
- name: role_id
in: path
operations:
- name: get-role-members
method: GET
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.ms_graph_token"
resources:
- name: channel-message
path: "/teams/{team_id}/channels/{channel_id}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When AWS cost anomaly detection fires, annotates the event in Datadog, opens a GitHub issue for the owning team, and posts a cost alert to Microsoft Teams.
naftiko: "0.5"
info:
label: "Infrastructure Cost Anomaly Responder"
description: "When AWS cost anomaly detection fires, annotates the event in Datadog, opens a GitHub issue for the owning team, and posts a cost alert to Microsoft Teams."
tags:
- finops
- cloud
- aws
- datadog
- github
- microsoft-teams
- cost-management
capability:
exposes:
- type: mcp
namespace: cloud-finops
port: 8080
tools:
- name: handle-cost-anomaly
description: "Given an AWS cost anomaly ID, service, and estimated USD overage, annotate Datadog, open a GitHub issue for the owning team, and alert the FinOps channel in Microsoft Teams."
inputParameters:
- name: anomaly_id
in: body
type: string
description: "The AWS Cost Anomaly Detection anomaly identifier."
- name: aws_service
in: body
type: string
description: "AWS service or linked account driving the anomaly, e.g. Amazon EC2."
- name: estimated_overage_usd
in: body
type: number
description: "Estimated cost overage in USD."
- name: owning_team
in: body
type: string
description: "Engineering team responsible for the AWS resources, used to route the GitHub issue."
steps:
- name: annotate-datadog
type: call
call: "datadog.create-event"
with:
title: "AWS Cost Anomaly: {{aws_service}}"
text: "Anomaly {{anomaly_id}} — estimated overage ${{estimated_overage_usd}}"
alert_type: "warning"
tags: "service:{{aws_service}},team:{{owning_team}}"
- name: open-issue
type: call
call: "github.create-issue"
with:
owner: "AmericanAirlines"
repo: "cloud-cost-governance"
title: "AWS Cost Anomaly: {{aws_service}} — ${{estimated_overage_usd}} overage"
body: "Anomaly ID: {{anomaly_id}}\nService: {{aws_service}}\nEstimated overage: ${{estimated_overage_usd}}\nDatadog event: {{annotate-datadog.url}}\nOwning team: {{owning_team}}"
labels: "cost-anomaly,{{owning_team}}"
- name: notify-teams
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.finops_teams_channel_id"
message: "AWS COST ANOMALY: {{aws_service}} | Est. overage: ${{estimated_overage_usd}} | Team: {{owning_team}} | Issue: {{open-issue.html_url}} | Datadog: {{annotate-datadog.url}}"
consumes:
- namespace: datadog
type: http
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
- namespace: github
type: http
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: issues
path: "/repos/{owner}/{repo}/issues"
inputParameters:
- name: owner
in: path
- name: repo
in: path
operations:
- name: create-issue
method: POST
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.ms_graph_token"
resources:
- name: channel-message
path: "/teams/{team_id}/channels/{channel_id}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Looks up interline baggage rules with partner airlines.
naftiko: "0.5"
info:
label: "Interline Baggage Agreement Lookup"
description: "Looks up interline baggage rules with partner airlines."
tags:
- customer-service
- baggage
- partnerships
capability:
exposes:
- type: mcp
namespace: interline
port: 8080
tools:
- name: get-rules
description: "Get interline baggage rules."
inputParameters:
- name: partner
in: body
type: string
call: "partnership-api.get-baggage"
with:
partner: "{{partner}}"
outputParameters:
- name: through_check
type: boolean
mapping: "$.throughCheck"
- name: free_bags
type: number
mapping: "$.freeBags"
consumes:
- type: http
namespace: partnership-api
baseUri: "https://partnerships.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_partnerships_token"
resources:
- name: baggage
path: "/interline/baggage/{{partner}}"
inputParameters:
- name: partner
in: path
operations:
- name: get-baggage
method: GET
When a flight is cancelled, retrieves affected passengers, finds rebooking options, executes rebookings, and sends notifications.
naftiko: "0.5"
info:
label: "Irregular Ops Rebooking Orchestrator"
description: "When a flight is cancelled, retrieves affected passengers, finds rebooking options, executes rebookings, and sends notifications."
tags:
- flight-operations
- customer-service
- rebooking
- notifications
capability:
exposes:
- type: mcp
namespace: irrops
port: 8080
tools:
- name: handle-irrops
description: "Rebook passengers from a cancelled flight."
inputParameters:
- name: cancelled_flight
in: body
type: string
description: "Cancelled flight."
- name: flight_date
in: body
type: string
description: "Flight date."
- name: reason
in: body
type: string
description: "Cancellation reason."
steps:
- name: get-passengers
type: call
call: "pss.get-passengers"
with:
flight: "{{cancelled_flight}}"
date: "{{flight_date}}"
- name: find-alternatives
type: call
call: "pss.search-alternatives"
with:
origin: "{{get-passengers.origin}}"
destination: "{{get-passengers.destination}}"
- name: rebook
type: call
call: "pss.batch-rebook"
with:
passengers: "{{get-passengers.pnrs}}"
alternatives: "{{find-alternatives.options}}"
- name: notify
type: call
call: "notification-api.batch-notify"
with:
passengers: "{{get-passengers.passengers}}"
template: "irrops_rebooking"
reason: "{{reason}}"
consumes:
- type: http
namespace: pss
baseUri: "https://pss.aa.com/api/v2"
authentication:
type: bearer
token: "$secrets.aa_pss_token"
resources:
- name: passengers
path: "/flights/{{flight}}/passengers"
inputParameters:
- name: flight
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: notification-api
baseUri: "https://notifications.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_notification_token"
resources:
- name: batch
path: "/batch/notify"
operations:
- name: batch-notify
method: POST
Finds crew with language skills for international routes.
naftiko: "0.5"
info:
label: "Cabin Crew Language Search"
description: "Finds crew with language skills for international routes."
tags:
- crew-scheduling
- international
capability:
exposes:
- type: mcp
namespace: lang-crew
port: 8080
tools:
- name: search-language
description: "Find language crew."
inputParameters:
- name: language
in: body
type: string
- name: base
in: body
type: string
call: "crew-api.search-lang"
with:
language: "{{language}}"
base: "{{base}}"
outputParameters:
- name: crew
type: array
mapping: "$.qualified"
- name: count
type: number
mapping: "$.total"
consumes:
- type: http
namespace: crew-api
baseUri: "https://crew.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_crew_token"
resources:
- name: lang
path: "/crew/language-search"
operations:
- name: search-lang
method: POST
Retrieves LinkedIn organization page engagement metrics and publishes a weekly social performance digest to the Marketing team channel in Microsoft Teams.
naftiko: "0.5"
info:
label: "LinkedIn Social Engagement Digest"
description: "Retrieves LinkedIn organization page engagement metrics and publishes a weekly social performance digest to the Marketing team channel in Microsoft Teams."
tags:
- marketing
- social
- linkedin
- microsoft-teams
- reporting
capability:
exposes:
- type: mcp
namespace: social-reporting
port: 8080
tools:
- name: digest-linkedin-engagement
description: "Given a LinkedIn organization URN and a date range, retrieve page follower and engagement statistics and post a social performance digest to Microsoft Teams."
inputParameters:
- name: org_urn
in: body
type: string
description: "LinkedIn organization URN, e.g. urn:li:organization:123456."
- name: start_date
in: body
type: string
description: "Report start date in YYYY-MM-DD format."
- name: end_date
in: body
type: string
description: "Report end date in YYYY-MM-DD format."
- name: teams_channel_id
in: body
type: string
description: "Microsoft Teams channel ID for the social digest."
steps:
- name: get-follower-stats
type: call
call: "linkedin.get-follower-stats"
with:
org_urn: "{{org_urn}}"
start: "{{start_date}}"
end: "{{end_date}}"
- name: get-share-stats
type: call
call: "linkedin.get-share-stats"
with:
org_urn: "{{org_urn}}"
start: "{{start_date}}"
end: "{{end_date}}"
- name: post-digest
type: call
call: "msteams.send-message"
with:
channel_id: "{{teams_channel_id}}"
message: "LINKEDIN DIGEST ({{start_date}} to {{end_date}}): Followers: {{get-follower-stats.followerCount}} | New: {{get-follower-stats.organicFollowerGain}} | Impressions: {{get-share-stats.impressionCount}} | Engagements: {{get-share-stats.engagementCount}} | Shares: {{get-share-stats.shareCount}}"
consumes:
- namespace: linkedin
type: http
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: follower-stats
path: "/organizationFollowerStatistics"
inputParameters:
- name: org_urn
in: query
- name: start
in: query
- name: end
in: query
operations:
- name: get-follower-stats
method: GET
- name: share-stats
path: "/organizationalEntityShareStatistics"
inputParameters:
- name: org_urn
in: query
- name: start
in: query
- name: end
in: query
operations:
- name: get-share-stats
method: GET
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.ms_graph_token"
resources:
- name: channel-message
path: "/teams/{team_id}/channels/{channel_id}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves recent LinkedIn job posting performance and syncs applicant pipeline metrics into a SharePoint tracking sheet, then posts a weekly digest to the Talent Acquisition Teams channel.
naftiko: "0.5"
info:
label: "LinkedIn Talent Pipeline Sync"
description: "Retrieves recent LinkedIn job posting performance and syncs applicant pipeline metrics into a SharePoint tracking sheet, then posts a weekly digest to the Talent Acquisition Teams channel."
tags:
- hr
- recruiting
- linkedin
- sharepoint
- microsoft-teams
- talent-acquisition
capability:
exposes:
- type: mcp
namespace: talent-acquisition
port: 8080
tools:
- name: sync-linkedin-pipeline
description: "Given a LinkedIn job posting URN, retrieve applicant and impression metrics, update a SharePoint list row, and post a pipeline digest to the Talent Acquisition Teams channel."
inputParameters:
- name: job_urn
in: body
type: string
description: "LinkedIn job posting URN, e.g. urn:li:jobPosting:1234567."
- name: sharepoint_site_id
in: body
type: string
description: "SharePoint site ID where the talent pipeline tracking list lives."
- name: list_id
in: body
type: string
description: "SharePoint list ID for the pipeline tracker."
- name: teams_channel_id
in: body
type: string
description: "Microsoft Teams channel ID for the TA weekly digest."
steps:
- name: get-job-analytics
type: call
call: "linkedin.get-job-analytics"
with:
job_urn: "{{job_urn}}"
- name: update-tracker
type: call
call: "sharepoint.create-list-item"
with:
site_id: "{{sharepoint_site_id}}"
list_id: "{{list_id}}"
fields: "{\"JobUrn\":\"{{job_urn}}\",\"Impressions\":\"{{get-job-analytics.impressionCount}}\",\"Applies\":\"{{get-job-analytics.applyCount}}\",\"Views\":\"{{get-job-analytics.viewCount}}\"}"
- name: post-digest
type: call
call: "msteams.send-message"
with:
channel_id: "{{teams_channel_id}}"
message: "TALENT PIPELINE: {{job_urn}} | Impressions: {{get-job-analytics.impressionCount}} | Views: {{get-job-analytics.viewCount}} | Applies: {{get-job-analytics.applyCount}} | Tracker updated."
consumes:
- namespace: linkedin
type: http
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: job-analytics
path: "/jobPostingAnalytics"
inputParameters:
- name: job_urn
in: query
operations:
- name: get-job-analytics
method: GET
- namespace: sharepoint
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.ms_graph_token"
resources:
- name: list-items
path: "/sites/{site_id}/lists/{list_id}/items"
inputParameters:
- name: site_id
in: path
- name: list_id
in: path
operations:
- name: create-list-item
method: POST
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.ms_graph_token"
resources:
- name: channel-message
path: "/teams/{team_id}/channels/{channel_id}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves load factor and booking data for a flight across cabin classes.
naftiko: "0.5"
info:
label: "Flight Load Factor Report"
description: "Retrieves load factor and booking data for a flight 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 for a flight."
inputParameters:
- name: flight_number
in: body
type: string
description: "Flight."
- name: flight_date
in: body
type: string
description: "Date."
call: "analytics-api.get-load"
with:
flight: "{{flight_number}}"
date: "{{flight_date}}"
outputParameters:
- name: load_factor
type: number
mapping: "$.overallLoadFactor"
- name: first_load
type: number
mapping: "$.firstClassLoad"
consumes:
- type: http
namespace: analytics-api
baseUri: "https://analytics.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_analytics_token"
resources:
- name: load
path: "/flights/{{flight}}/load-factor"
inputParameters:
- name: flight
in: path
operations:
- name: get-load
method: GET
Files lost baggage claims via WorldTracer, Salesforce case, and passenger SMS notification.
naftiko: "0.5"
info:
label: "Lost Baggage Claim Orchestrator"
description: "Files lost baggage claims via WorldTracer, Salesforce case, and passenger SMS notification."
tags:
- customer-service
- baggage
- salesforce
- notifications
capability:
exposes:
- type: mcp
namespace: lost-baggage
port: 8080
tools:
- name: file-claim
description: "Process lost baggage claim."
inputParameters:
- name: pnr
in: body
type: string
description: "PNR."
- name: bag_tag
in: body
type: string
description: "Bag tag."
- name: flight_number
in: body
type: string
description: "Flight."
steps:
- name: create-tracer
type: call
call: "baggage-api.create-tracer"
with:
pnr: "{{pnr}}"
bag_tag: "{{bag_tag}}"
flight: "{{flight_number}}"
- name: create-case
type: call
call: "salesforce.create-case"
with:
subject: "Lost bag {{bag_tag}} on {{flight_number}}"
priority: "High"
- name: send-sms
type: call
call: "notification-api.send-sms"
with:
pnr: "{{pnr}}"
message: "Baggage claim filed. Track: https://aa.com/baggage/{{create-tracer.tracer_id}}"
consumes:
- type: http
namespace: baggage-api
baseUri: "https://baggage.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_baggage_token"
resources:
- name: tracers
path: "/worldtracer/create"
operations:
- name: create-tracer
method: POST
- type: http
namespace: salesforce
baseUri: "https://aa.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.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_notification_token"
resources:
- name: sms
path: "/sms/send"
operations:
- name: send-sms
method: POST
Submits Flagship First/Business meal preorder.
naftiko: "0.5"
info:
label: "Premium Meal Preorder"
description: "Submits Flagship First/Business meal preorder."
tags:
- inflight-services
- catering
- customer-service
capability:
exposes:
- type: mcp
namespace: preorder
port: 8080
tools:
- name: submit-preorder
description: "Submit meal preorder."
inputParameters:
- name: pnr
in: body
type: string
- name: flight_number
in: body
type: string
- name: meal
in: body
type: string
call: "catering-api.preorder"
with:
pnr: "{{pnr}}"
flight: "{{flight_number}}"
meal: "{{meal}}"
outputParameters:
- name: confirmation
type: string
mapping: "$.confirmation"
consumes:
- type: http
namespace: catering-api
baseUri: "https://catering.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_catering_token"
resources:
- name: preorders
path: "/preorders"
operations:
- name: preorder
method: POST
Coordinates inflight medical emergency by contacting MedAire, finding diversions, alerting stations, and creating incidents.
naftiko: "0.5"
info:
label: "Medical Emergency Response Orchestrator"
description: "Coordinates inflight medical emergency by contacting MedAire, finding diversions, alerting stations, and creating incidents."
tags:
- safety
- flight-operations
- emergency
- servicenow
capability:
exposes:
- type: mcp
namespace: medical
port: 8080
tools:
- name: handle-medical
description: "Coordinate medical emergency response."
inputParameters:
- name: flight_number
in: body
type: string
description: "Flight."
- name: emergency_type
in: body
type: string
description: "Emergency type."
- name: position
in: body
type: string
description: "Aircraft position."
steps:
- name: contact-medaire
type: call
call: "medaire-api.initiate"
with:
flight: "{{flight_number}}"
emergency: "{{emergency_type}}"
- name: find-diversions
type: call
call: "dispatch-api.find-diversions"
with:
position: "{{position}}"
- name: alert-station
type: call
call: "ground-ops.alert"
with:
station: "{{find-diversions.nearest}}"
flight: "{{flight_number}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Medical on {{flight_number}}: {{emergency_type}}"
priority: "1"
consumes:
- type: http
namespace: medaire-api
baseUri: "https://medaire.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_medaire_token"
resources:
- name: consults
path: "/consults/initiate"
operations:
- name: initiate
method: POST
- type: http
namespace: dispatch-api
baseUri: "https://dispatch.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_dispatch_token"
resources:
- name: diversions
path: "/diversions/search"
operations:
- name: find-diversions
method: POST
- type: http
namespace: ground-ops
baseUri: "https://groundops.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_ground_ops_token"
resources:
- name: alerts
path: "/stations/alert"
operations:
- name: alert
method: POST
- type: http
namespace: servicenow
baseUri: "https://aa.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
Processes miles transfer between AAdvantage and oneworld partners.
naftiko: "0.5"
info:
label: "Loyalty Partner Miles Transfer"
description: "Processes miles transfer between AAdvantage and oneworld partners."
tags:
- loyalty
- aadvantage
- partnerships
capability:
exposes:
- type: mcp
namespace: miles
port: 8080
tools:
- name: transfer-miles
description: "Transfer miles to partner."
inputParameters:
- name: aadvantage_number
in: body
type: string
- name: partner
in: body
type: string
- name: amount
in: body
type: number
call: "loyalty-api.transfer"
with:
member: "{{aadvantage_number}}"
partner: "{{partner}}"
amount: "{{amount}}"
outputParameters:
- name: transfer_id
type: string
mapping: "$.transferId"
- name: balance
type: number
mapping: "$.newBalance"
consumes:
- type: http
namespace: loyalty-api
baseUri: "https://loyalty.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_loyalty_token"
resources:
- name: transfers
path: "/miles/transfer"
operations:
- name: transfer
method: POST
Creates a maintenance work order in the AA TechOps system.
naftiko: "0.5"
info:
label: "Maintenance Work Order Creation"
description: "Creates a maintenance work order in the AA TechOps system."
tags:
- maintenance
- flight-operations
capability:
exposes:
- type: mcp
namespace: mx-orders
port: 8080
tools:
- name: create-wo
description: "Create maintenance work order."
inputParameters:
- name: tail_number
in: body
type: string
- name: discrepancy
in: body
type: string
- name: priority
in: body
type: string
call: "mx-api.create-wo"
with:
tail: "{{tail_number}}"
description: "{{discrepancy}}"
priority: "{{priority}}"
outputParameters:
- name: wo_id
type: string
mapping: "$.workOrderId"
- name: status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: mx-api
baseUri: "https://maintenance.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_mx_token"
resources:
- name: work-orders
path: "/work-orders"
operations:
- name: create-wo
method: POST
When a new hire is confirmed in PeopleSoft, provisions a SharePoint onboarding folder, sends a Microsoft Teams welcome message, and creates a GitHub onboarding issue for IT access setup.
naftiko: "0.5"
info:
label: "New Hire Onboarding Orchestrator"
description: "When a new hire is confirmed in PeopleSoft, provisions a SharePoint onboarding folder, sends a Microsoft Teams welcome message, and creates a GitHub onboarding issue for IT access setup."
tags:
- hr
- onboarding
- peoplesoft
- sharepoint
- microsoft-teams
- github
capability:
exposes:
- type: mcp
namespace: hr-onboarding
port: 8080
tools:
- name: trigger-new-hire-onboarding
description: "Given a new hire's PeopleSoft employee ID, start date, and manager email, provision a SharePoint folder, send a Teams welcome, and open a GitHub IT onboarding issue."
inputParameters:
- name: employee_id
in: body
type: string
description: "PeopleSoft employee ID (EMPLID) of the new hire."
- name: full_name
in: body
type: string
description: "Full legal name of the new hire."
- name: start_date
in: body
type: string
description: "Start date in YYYY-MM-DD format."
- name: manager_teams_id
in: body
type: string
description: "Microsoft Teams user ID (UPN) of the hiring manager."
- name: department
in: body
type: string
description: "Department the new hire is joining, e.g. Technology."
steps:
- name: provision-folder
type: call
call: "sharepoint.create-folder"
with:
site_id: "$secrets.hr_sharepoint_site_id"
folder_path: "Onboarding/{{start_date}}/{{full_name}}"
- name: send-welcome
type: call
call: "msteams.send-message"
with:
channel_id: "{{manager_teams_id}}"
message: "New hire confirmed: {{full_name}} | Start: {{start_date}} | Dept: {{department}} | Onboarding docs: {{provision-folder.webUrl}}"
- name: open-it-issue
type: call
call: "github.create-issue"
with:
owner: "AmericanAirlines"
repo: "it-access-provisioning"
title: "IT Onboarding: {{full_name}} (starts {{start_date}})"
body: "Employee ID: {{employee_id}}\nFull Name: {{full_name}}\nStart Date: {{start_date}}\nDepartment: {{department}}\nSharePoint: {{provision-folder.webUrl}}"
labels: "onboarding,new-hire,{{department}}"
consumes:
- namespace: sharepoint
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.ms_graph_token"
resources:
- name: folder
path: "/sites/{site_id}/drive/root:/{folder_path}"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
operations:
- name: create-folder
method: PUT
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.ms_graph_token"
resources:
- name: channel-message
path: "/teams/{team_id}/channels/{channel_id}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
- namespace: github
type: http
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: issues
path: "/repos/{owner}/{repo}/issues"
inputParameters:
- name: owner
in: path
- name: repo
in: path
operations:
- name: create-issue
method: POST
Processes no-show passengers, releasing seats for standby.
naftiko: "0.5"
info:
label: "Passenger No-Show Processing"
description: "Processes no-show passengers, releasing seats for standby."
tags:
- flight-operations
- revenue-management
capability:
exposes:
- type: mcp
namespace: no-show
port: 8080
tools:
- name: process-no-shows
description: "Process no-shows."
inputParameters:
- name: flight_number
in: body
type: string
- name: flight_date
in: body
type: string
call: "pss.process-no-shows"
with:
flight: "{{flight_number}}"
date: "{{flight_date}}"
outputParameters:
- name: count
type: number
mapping: "$.noShowCount"
- name: released
type: number
mapping: "$.seatsReleased"
consumes:
- type: http
namespace: pss
baseUri: "https://pss.aa.com/api/v2"
authentication:
type: bearer
token: "$secrets.aa_pss_token"
resources:
- name: no-shows
path: "/flights/{{flight}}/no-shows"
inputParameters:
- name: flight
in: path
operations:
- name: process-no-shows
method: POST
Verifies flight ops comply with airport noise curfews.
naftiko: "0.5"
info:
label: "Noise Curfew Compliance Check"
description: "Verifies flight ops comply with airport noise curfews."
tags:
- compliance
- flight-operations
- scheduling
capability:
exposes:
- type: mcp
namespace: noise
port: 8080
tools:
- name: check-curfew
description: "Check noise curfew."
inputParameters:
- name: airport
in: body
type: string
- name: time
in: body
type: string
call: "compliance-api.check"
with:
airport: "{{airport}}"
time: "{{time}}"
outputParameters:
- name: compliant
type: boolean
mapping: "$.isCompliant"
consumes:
- type: http
namespace: compliance-api
baseUri: "https://compliance.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_compliance_token"
resources:
- name: curfew
path: "/noise/check"
operations:
- name: check
method: POST
Synchronizes seat inventory with oneworld codeshare partners.
naftiko: "0.5"
info:
label: "Oneworld Codeshare Inventory Sync"
description: "Synchronizes seat inventory with oneworld codeshare partners."
tags:
- flight-operations
- partnerships
- revenue-management
capability:
exposes:
- type: mcp
namespace: codeshare
port: 8080
tools:
- name: sync-inventory
description: "Sync inventory with partner."
inputParameters:
- name: partner_code
in: body
type: string
- name: flight_number
in: body
type: string
- name: flight_date
in: body
type: string
call: "inventory-api.sync"
with:
partner: "{{partner_code}}"
flight: "{{flight_number}}"
date: "{{flight_date}}"
outputParameters:
- name: status
type: string
mapping: "$.syncStatus"
- name: seats
type: number
mapping: "$.seatsSynced"
consumes:
- type: http
namespace: inventory-api
baseUri: "https://inventory.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_inventory_token"
resources:
- name: sync
path: "/codeshare/sync"
operations:
- name: sync
method: POST
Compiles daily OCC briefing from weather, fleet, and crew data, posts to Teams.
naftiko: "0.5"
info:
label: "Ops Daily Briefing Orchestrator"
description: "Compiles daily OCC briefing from weather, fleet, and crew data, posts to Teams."
tags:
- operations
- flight-operations
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: briefing
port: 8080
tools:
- name: generate-briefing
description: "Generate daily ops briefing."
inputParameters:
- name: date
in: body
type: string
steps:
- name: weather
type: call
call: "weather-api.get-outlook"
with:
date: "{{date}}"
- name: fleet
type: call
call: "mx-api.get-summary"
with:
date: "{{date}}"
- name: crew
type: call
call: "crew-api.get-coverage"
with:
date: "{{date}}"
- name: post
type: call
call: "msteams.post-channel-message"
with:
channel_id: "{{occ_channel}}"
text: "DAILY OPS {{date}} | Weather: {{weather.summary}} | Fleet: {{fleet.available}}/{{fleet.total}} | Crew: {{crew.coverage}}%"
consumes:
- type: http
namespace: weather-api
baseUri: "https://dispatch.aa.com/api/v1/weather"
authentication:
type: bearer
token: "$secrets.aa_dispatch_token"
resources:
- name: outlook
path: "/network/outlook"
operations:
- name: get-outlook
method: POST
- type: http
namespace: mx-api
baseUri: "https://maintenance.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_mx_token"
resources:
- name: summary
path: "/fleet/summary"
operations:
- name: get-summary
method: POST
- type: http
namespace: crew-api
baseUri: "https://crew.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_crew_token"
resources:
- name: coverage
path: "/coverage/summary"
operations:
- name: get-coverage
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Manages overbooked flights by finding volunteers, calculating compensation, and sending offers.
naftiko: "0.5"
info:
label: "Overbooking Management Orchestrator"
description: "Manages overbooked flights by finding volunteers, calculating compensation, and sending offers."
tags:
- revenue-management
- customer-service
- flight-operations
capability:
exposes:
- type: mcp
namespace: overbooking
port: 8080
tools:
- name: manage-overbooking
description: "Handle overbooking."
inputParameters:
- name: flight_number
in: body
type: string
- name: flight_date
in: body
type: string
- name: overbook_count
in: body
type: number
steps:
- name: find-volunteers
type: call
call: "pss.find-volunteers"
with:
flight: "{{flight_number}}"
count: "{{overbook_count}}"
- name: calc-comp
type: call
call: "compensation-api.get-rates"
with:
flight: "{{flight_number}}"
- name: find-alts
type: call
call: "pss.search-alternatives"
with:
origin: "{{find-volunteers.origin}}"
destination: "{{find-volunteers.destination}}"
- name: send-offers
type: call
call: "notification-api.batch-notify"
with:
passengers: "{{find-volunteers.candidates}}"
template: "volunteer_offer"
amount: "{{calc-comp.amount}}"
consumes:
- type: http
namespace: pss
baseUri: "https://pss.aa.com/api/v2"
authentication:
type: bearer
token: "$secrets.aa_pss_token"
resources:
- name: volunteers
path: "/flights/{{flight}}/volunteers"
inputParameters:
- name: flight
in: path
operations:
- name: find-volunteers
method: POST
- name: alts
path: "/availability/search"
operations:
- name: search-alternatives
method: POST
- type: http
namespace: compensation-api
baseUri: "https://compensation.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_compensation_token"
resources:
- name: rates
path: "/rates/vdb"
operations:
- name: get-rates
method: POST
- type: http
namespace: notification-api
baseUri: "https://notifications.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_notification_token"
resources:
- name: batch
path: "/batch/notify"
operations:
- name: batch-notify
method: POST
Queries spare parts availability at AA maintenance stations.
naftiko: "0.5"
info:
label: "Maintenance Parts Inventory Lookup"
description: "Queries spare parts availability at AA maintenance stations."
tags:
- maintenance
- inventory
capability:
exposes:
- type: mcp
namespace: parts
port: 8080
tools:
- name: check-parts
description: "Check spare parts."
inputParameters:
- name: part_number
in: body
type: string
- name: station
in: body
type: string
call: "mx-api.get-stock"
with:
part: "{{part_number}}"
station: "{{station}}"
outputParameters:
- name: quantity
type: number
mapping: "$.quantity"
- name: lead_time
type: number
mapping: "$.leadTimeDays"
consumes:
- type: http
namespace: mx-api
baseUri: "https://maintenance.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_mx_token"
resources:
- name: stock
path: "/parts/stock"
operations:
- name: get-stock
method: POST
Processes upgrades by checking cabin availability, verifying AAdvantage eligibility, and sending confirmation.
naftiko: "0.5"
info:
label: "Passenger Upgrade Orchestrator"
description: "Processes upgrades by checking cabin availability, verifying AAdvantage eligibility, and sending confirmation."
tags:
- customer-service
- loyalty
- aadvantage
capability:
exposes:
- type: mcp
namespace: upgrades
port: 8080
tools:
- name: process-upgrade
description: "Process passenger upgrade."
inputParameters:
- name: pnr
in: body
type: string
description: "PNR."
- name: flight_number
in: body
type: string
description: "Flight."
- name: aadvantage_number
in: body
type: string
description: "AAdvantage number."
- name: target_cabin
in: body
type: string
description: "Target cabin (Flagship First, Flagship Business, First)."
steps:
- name: check-cabin
type: call
call: "pss.check-cabin"
with:
flight: "{{flight_number}}"
cabin: "{{target_cabin}}"
- name: verify-eligibility
type: call
call: "loyalty-api.check-upgrade"
with:
member: "{{aadvantage_number}}"
cabin: "{{target_cabin}}"
- name: execute
type: call
call: "pss.process-upgrade"
with:
pnr: "{{pnr}}"
flight: "{{flight_number}}"
cabin: "{{target_cabin}}"
- name: confirm
type: call
call: "notification-api.send-email"
with:
member: "{{aadvantage_number}}"
template: "upgrade_confirmation"
consumes:
- type: http
namespace: pss
baseUri: "https://pss.aa.com/api/v2"
authentication:
type: bearer
token: "$secrets.aa_pss_token"
resources:
- name: cabin
path: "/availability/cabin"
operations:
- name: check-cabin
method: POST
- name: upgrades
path: "/upgrades/process"
operations:
- name: process-upgrade
method: POST
- type: http
namespace: loyalty-api
baseUri: "https://loyalty.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_loyalty_token"
resources:
- name: upgrade
path: "/members/{{member}}/upgrade-eligibility"
inputParameters:
- name: member
in: path
operations:
- name: check-upgrade
method: GET
- type: http
namespace: notification-api
baseUri: "https://notifications.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_notification_token"
resources:
- name: email
path: "/email/send"
operations:
- name: send-email
method: POST
Retrieves an employee's current profile, department, and manager from PeopleSoft HCM for HR agent workflows and headcount reporting.
naftiko: "0.5"
info:
label: "PeopleSoft Employee Profile Lookup"
description: "Retrieves an employee's current profile, department, and manager from PeopleSoft HCM for HR agent workflows and headcount reporting."
tags:
- hr
- peoplesoft
- employee-data
- reporting
capability:
exposes:
- type: mcp
namespace: hr-data
port: 8080
tools:
- name: get-employee-profile
description: "Given a PeopleSoft employee ID, retrieve the employee's current job title, department, location, and manager. Use in onboarding, offboarding, and headcount audit workflows."
inputParameters:
- name: employee_id
in: body
type: string
description: "PeopleSoft employee ID (EMPLID)."
call: "peoplesoft.get-employee"
with:
emplid: "{{employee_id}}"
outputParameters:
- name: employee_name
type: string
mapping: "$.name"
- name: job_title
type: string
mapping: "$.jobTitle"
- name: department
type: string
mapping: "$.department"
- name: manager_id
type: string
mapping: "$.managerId"
consumes:
- namespace: peoplesoft
type: http
baseUri: "https://hcm.aa.com/PSIGW/RESTListeningConnector/PSFT_HR"
authentication:
type: basic
username: "$secrets.peoplesoft_username"
password: "$secrets.peoplesoft_password"
resources:
- name: employee
path: "/EmployeeProfile/v1/{emplid}"
inputParameters:
- name: emplid
in: path
operations:
- name: get-employee
method: GET
Validates pet-in-cabin booking against aircraft and route restrictions.
naftiko: "0.5"
info:
label: "Pet Booking Validation"
description: "Validates pet-in-cabin booking against aircraft and route restrictions."
tags:
- customer-service
- compliance
capability:
exposes:
- type: mcp
namespace: pet
port: 8080
tools:
- name: validate-pet
description: "Validate pet booking."
inputParameters:
- name: flight_number
in: body
type: string
- name: pet_type
in: body
type: string
call: "pss.validate-pet"
with:
flight: "{{flight_number}}"
pet: "{{pet_type}}"
outputParameters:
- name: allowed
type: boolean
mapping: "$.isAllowed"
- name: slots
type: number
mapping: "$.remainingSlots"
consumes:
- type: http
namespace: pss
baseUri: "https://pss.aa.com/api/v2"
authentication:
type: bearer
token: "$secrets.aa_pss_token"
resources:
- name: pet
path: "/bookings/pet-validation"
operations:
- name: validate-pet
method: POST
Retrieves pilot training records including type ratings and recurrent training dates.
naftiko: "0.5"
info:
label: "Pilot Training Record Lookup"
description: "Retrieves pilot training records including type ratings and recurrent training dates."
tags:
- crew-scheduling
- training
- compliance
capability:
exposes:
- type: mcp
namespace: training
port: 8080
tools:
- name: get-training
description: "Look up pilot training records."
inputParameters:
- name: employee_id
in: body
type: string
description: "Employee ID."
call: "crew-api.get-training"
with:
employee_id: "{{employee_id}}"
outputParameters:
- name: type_ratings
type: array
mapping: "$.typeRatings"
- name: next_recurrent
type: string
mapping: "$.nextRecurrent"
consumes:
- type: http
namespace: crew-api
baseUri: "https://crew.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_crew_token"
resources:
- name: training
path: "/pilots/{{employee_id}}/training"
inputParameters:
- name: employee_id
in: path
operations:
- name: get-training
method: GET
Retrieves Pluralsight course completion data for a team and posts a learning progress digest to the HR development channel in Microsoft Teams.
naftiko: "0.5"
info:
label: "Pluralsight Learning Completion Reporter"
description: "Retrieves Pluralsight course completion data for a team and posts a learning progress digest to the HR development channel in Microsoft Teams."
tags:
- hr
- learning-development
- pluralsight
- microsoft-teams
- reporting
capability:
exposes:
- type: mcp
namespace: learning-dev
port: 8080
tools:
- name: digest-team-learning
description: "Given a Pluralsight team handle and a date range, retrieve course completions and post a learning progress digest to Microsoft Teams. Use for monthly L&D reporting."
inputParameters:
- name: team_id
in: body
type: string
description: "Pluralsight team identifier."
- name: start_date
in: body
type: string
description: "Report start date in YYYY-MM-DD format."
- name: end_date
in: body
type: string
description: "Report end date in YYYY-MM-DD format."
- name: teams_channel_id
in: body
type: string
description: "Microsoft Teams channel ID for the L&D digest."
steps:
- name: get-completions
type: call
call: "pluralsight.get-team-progress"
with:
team_id: "{{team_id}}"
start: "{{start_date}}"
end: "{{end_date}}"
- name: post-digest
type: call
call: "msteams.send-message"
with:
channel_id: "{{teams_channel_id}}"
message: "L&D DIGEST ({{start_date}} to {{end_date}}): Team {{team_id}} | Courses Completed: {{get-completions.totalCoursesCompleted}} | Hours Watched: {{get-completions.totalMinutesWatched}} | Active Learners: {{get-completions.activeLearners}}"
consumes:
- namespace: pluralsight
type: http
baseUri: "https://api.pluralsight.com/rest"
authentication:
type: bearer
token: "$secrets.pluralsight_token"
resources:
- name: team-progress
path: "/teams/{team_id}/progress"
inputParameters:
- name: team_id
in: path
- name: start
in: query
- name: end
in: query
operations:
- name: get-team-progress
method: GET
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.ms_graph_token"
resources:
- name: channel-message
path: "/teams/{team_id}/channels/{channel_id}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When a Microsoft Power Automate flow fails, queries the run history, opens a GitHub issue for the automation team, and posts a failure summary to Microsoft Teams.
naftiko: "0.5"
info:
label: "Power Automate Workflow Failure Alert"
description: "When a Microsoft Power Automate flow fails, queries the run history, opens a GitHub issue for the automation team, and posts a failure summary to Microsoft Teams."
tags:
- automation
- microsoft-power-automate
- github
- microsoft-teams
- workflow-monitoring
capability:
exposes:
- type: mcp
namespace: automation-ops
port: 8080
tools:
- name: handle-flow-failure
description: "Given a Power Automate flow ID, flow name, and run ID, retrieve run error details, open a GitHub issue, and alert the automation team in Microsoft Teams."
inputParameters:
- name: flow_id
in: body
type: string
description: "Microsoft Power Automate flow identifier (GUID)."
- name: flow_name
in: body
type: string
description: "Human-readable flow name for notifications."
- name: run_id
in: body
type: string
description: "Specific flow run ID that failed."
- name: environment_id
in: body
type: string
description: "Power Platform environment ID where the flow runs."
steps:
- name: get-run-details
type: call
call: "power-automate.get-flow-run"
with:
environment_id: "{{environment_id}}"
flow_id: "{{flow_id}}"
run_id: "{{run_id}}"
- name: open-issue
type: call
call: "github.create-issue"
with:
owner: "AmericanAirlines"
repo: "automation-platform"
title: "Flow Failure: {{flow_name}}"
body: "Flow: {{flow_name}}\nFlow ID: {{flow_id}}\nRun ID: {{run_id}}\nError: {{get-run-details.error.message}}\nFailed action: {{get-run-details.error.action}}"
labels: "automation,flow-failure,needs-triage"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.automation_teams_channel_id"
message: "FLOW FAILURE: {{flow_name}} | Error: {{get-run-details.error.message}} | Failed action: {{get-run-details.error.action}} | Issue: {{open-issue.html_url}}"
consumes:
- namespace: power-automate
type: http
baseUri: "https://api.flow.microsoft.com/providers/Microsoft.ProcessSimple/environments"
authentication:
type: bearer
token: "$secrets.ms_graph_token"
resources:
- name: flow-run
path: "/{environment_id}/flows/{flow_id}/runs/{run_id}"
inputParameters:
- name: environment_id
in: path
- name: flow_id
in: path
- name: run_id
in: path
operations:
- name: get-flow-run
method: GET
- namespace: github
type: http
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: issues
path: "/repos/{owner}/{repo}/issues"
inputParameters:
- name: owner
in: path
- name: repo
in: path
operations:
- name: create-issue
method: POST
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.ms_graph_token"
resources:
- name: channel-message
path: "/teams/{team_id}/channels/{channel_id}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Reports ramp safety incidents via ServiceNow, Teams notification, and Workday employee record.
naftiko: "0.5"
info:
label: "Ramp Safety Incident Orchestrator"
description: "Reports ramp safety incidents via ServiceNow, Teams notification, and Workday employee record."
tags:
- safety
- ground-ops
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: safety
port: 8080
tools:
- name: report-incident
description: "Report ramp safety incident."
inputParameters:
- name: station
in: body
type: string
description: "Station."
- name: incident_type
in: body
type: string
description: "Type."
- name: employee_id
in: body
type: string
description: "Employee."
- name: description
in: body
type: string
description: "Description."
steps:
- name: create-report
type: call
call: "servicenow.create-incident"
with:
short_description: "Ramp safety: {{incident_type}} at {{station}}"
category: "safety"
priority: "1"
- name: notify
type: call
call: "msteams.post-channel-message"
with:
channel_id: "{{safety_channel}}"
text: "SAFETY at {{station}}: {{incident_type}} — {{description}}"
- name: log
type: call
call: "peoplesoft.create-event"
with:
employee_id: "{{employee_id}}"
event_type: "{{incident_type}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://aa.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
- type: http
namespace: peoplesoft
baseUri: "https://peoplesoft.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_peoplesoft_token"
resources:
- name: events
path: "/safety/events"
operations:
- name: create-event
method: POST
Generates route profitability metrics including load factor, RASM, and operating margin.
naftiko: "0.5"
info:
label: "Route Profitability Report"
description: "Generates route profitability metrics including load factor, RASM, and operating margin."
tags:
- revenue-management
- analytics
capability:
exposes:
- type: mcp
namespace: route-analytics
port: 8080
tools:
- name: get-route-profitability
description: "Retrieve route profitability metrics."
inputParameters:
- name: origin
in: body
type: string
description: "Origin."
- name: destination
in: body
type: string
description: "Destination."
- name: period
in: body
type: string
description: "Period."
call: "analytics-api.get-route"
with:
origin: "{{origin}}"
destination: "{{destination}}"
period: "{{period}}"
outputParameters:
- name: load_factor
type: number
mapping: "$.loadFactor"
- name: rasm
type: number
mapping: "$.rasm"
- name: margin
type: number
mapping: "$.operatingMargin"
consumes:
- type: http
namespace: analytics-api
baseUri: "https://analytics.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_analytics_token"
resources:
- name: routes
path: "/routes/profitability"
operations:
- name: get-route
method: POST
Generates RPM report broken down by operations.
naftiko: "0.5"
info:
label: "Revenue Passenger Miles Report"
description: "Generates RPM report broken down by operations."
tags:
- revenue-management
- analytics
capability:
exposes:
- type: mcp
namespace: rpm
port: 8080
tools:
- name: get-rpm
description: "Generate RPM report."
inputParameters:
- name: start_date
in: body
type: string
- name: end_date
in: body
type: string
call: "analytics-api.get-rpm"
with:
start: "{{start_date}}"
end: "{{end_date}}"
outputParameters:
- name: total
type: number
mapping: "$.totalRPM"
- name: domestic
type: number
mapping: "$.domesticRPM"
consumes:
- type: http
namespace: analytics-api
baseUri: "https://analytics.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_analytics_token"
resources:
- name: rpm
path: "/metrics/rpm"
operations:
- name: get-rpm
method: POST
Submits runway slot requests at slot-controlled airports.
naftiko: "0.5"
info:
label: "Runway Slot Request"
description: "Submits runway slot requests at slot-controlled airports."
tags:
- flight-operations
- dispatch
- scheduling
capability:
exposes:
- type: mcp
namespace: slots
port: 8080
tools:
- name: request-slot
description: "Request runway slot."
inputParameters:
- name: airport
in: body
type: string
- name: flight_number
in: body
type: string
- name: time
in: body
type: string
call: "slot-api.request"
with:
airport: "{{airport}}"
flight: "{{flight_number}}"
time: "{{time}}"
outputParameters:
- name: slot_id
type: string
mapping: "$.slotId"
- name: granted
type: string
mapping: "$.grantedTime"
consumes:
- type: http
namespace: slot-api
baseUri: "https://scheduling.aa.com/api/v1/slots"
authentication:
type: bearer
token: "$secrets.aa_scheduling_token"
resources:
- name: slots
path: "/request"
operations:
- name: request
method: POST
When a high-priority Salesforce case is opened or escalated, posts a structured escalation notification to the customer operations Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Salesforce Case Escalation to Teams"
description: "When a high-priority Salesforce case is opened or escalated, posts a structured escalation notification to the customer operations Microsoft Teams channel."
tags:
- crm
- customer-support
- salesforce
- microsoft-teams
- escalation
capability:
exposes:
- type: mcp
namespace: case-escalation
port: 8080
tools:
- name: escalate-salesforce-case
description: "Given a Salesforce case ID and priority level, retrieve case details and post an escalation notification to the customer ops Teams channel. Use when a new P1 or P2 case is detected in Salesforce."
inputParameters:
- name: case_id
in: body
type: string
description: "Salesforce case record ID to escalate."
- name: priority
in: body
type: string
description: "Escalation priority: P1 or P2."
- name: teams_channel_id
in: body
type: string
description: "Microsoft Teams channel ID for the escalation notification."
steps:
- name: get-case
type: call
call: "salesforce.get-case"
with:
case_id: "{{case_id}}"
- name: post-escalation
type: call
call: "msteams.send-message"
with:
channel_id: "{{teams_channel_id}}"
message: "CASE ESCALATION ({{priority}}): {{get-case.Subject}} | Status: {{get-case.Status}} | Customer: {{get-case.Account.Name}} | Owner: {{get-case.Owner.Name}} | Salesforce: https://american-airlines.my.salesforce.com/{{case_id}}"
consumes:
- namespace: salesforce
type: http
baseUri: "https://american-airlines.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: case
path: "/sobjects/Case/{case_id}"
inputParameters:
- name: case_id
in: path
operations:
- name: get-case
method: GET
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.ms_graph_token"
resources:
- name: channel-message
path: "/teams/{team_id}/channels/{channel_id}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves the current status, priority, and assigned owner of a Salesforce case for use in customer service routing and escalation workflows.
naftiko: "0.5"
info:
label: "Salesforce Customer Case Status Lookup"
description: "Retrieves the current status, priority, and assigned owner of a Salesforce case for use in customer service routing and escalation workflows."
tags:
- crm
- customer-support
- salesforce
capability:
exposes:
- type: mcp
namespace: customer-service
port: 8080
tools:
- name: get-case-status
description: "Given a Salesforce case ID, return its current status, priority, subject, and assigned owner. Use in agent workflows that need to assess whether a customer issue is pending, in-progress, or resolved."
inputParameters:
- name: case_id
in: body
type: string
description: "Salesforce case record ID."
call: "salesforce.get-case"
with:
case_id: "{{case_id}}"
outputParameters:
- name: status
type: string
mapping: "$.Status"
- name: priority
type: string
mapping: "$.Priority"
- name: subject
type: string
mapping: "$.Subject"
- name: owner_name
type: string
mapping: "$.Owner.Name"
consumes:
- namespace: salesforce
type: http
baseUri: "https://american-airlines.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: case
path: "/sobjects/Case/{case_id}"
inputParameters:
- name: case_id
in: path
operations:
- name: get-case
method: GET
When a new lead arrives in Salesforce Lightning, enriches it with ZoomInfo firmographic data and updates the Salesforce record, then notifies the owning sales rep via Microsoft Teams.
naftiko: "0.5"
info:
label: "Salesforce Lead Intelligence Enrichment"
description: "When a new lead arrives in Salesforce Lightning, enriches it with ZoomInfo firmographic data and updates the Salesforce record, then notifies the owning sales rep via Microsoft Teams."
tags:
- crm
- sales
- salesforce
- zoominfo
- microsoft-teams
- lead-enrichment
capability:
exposes:
- type: mcp
namespace: sales-intelligence
port: 8080
tools:
- name: enrich-salesforce-lead
description: "Given a Salesforce lead ID and contact email, query ZoomInfo for firmographic enrichment, update the Salesforce lead record, and notify the owning rep in Microsoft Teams."
inputParameters:
- name: lead_id
in: body
type: string
description: "Salesforce lead record ID."
- name: contact_email
in: body
type: string
description: "Contact email address to use for ZoomInfo lookup."
- name: rep_teams_id
in: body
type: string
description: "Microsoft Teams user ID (UPN) of the sales rep who owns this lead."
steps:
- name: lookup-zoominfo
type: call
call: "zoominfo.search-contact"
with:
email: "{{contact_email}}"
- name: update-lead
type: call
call: "salesforce.update-lead"
with:
lead_id: "{{lead_id}}"
Company: "{{lookup-zoominfo.company}}"
Industry: "{{lookup-zoominfo.industry}}"
AnnualRevenue: "{{lookup-zoominfo.revenue}}"
NumberOfEmployees: "{{lookup-zoominfo.employeeCount}}"
Title: "{{lookup-zoominfo.jobTitle}}"
- name: notify-rep
type: call
call: "msteams.send-message"
with:
channel_id: "{{rep_teams_id}}"
message: "Lead Enriched: {{lookup-zoominfo.firstName}} {{lookup-zoominfo.lastName}} | Company: {{lookup-zoominfo.company}} | Industry: {{lookup-zoominfo.industry}} | Employees: {{lookup-zoominfo.employeeCount}} | Salesforce: https://american-airlines.my.salesforce.com/{{lead_id}}"
consumes:
- namespace: zoominfo
type: http
baseUri: "https://api.zoominfo.com/search"
authentication:
type: bearer
token: "$secrets.zoominfo_token"
resources:
- name: contact
path: "/contact"
inputParameters:
- name: email
in: query
operations:
- name: search-contact
method: GET
- namespace: salesforce
type: http
baseUri: "https://american-airlines.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: lead
path: "/sobjects/Lead/{lead_id}"
inputParameters:
- name: lead_id
in: path
operations:
- name: update-lead
method: PATCH
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.ms_graph_token"
resources:
- name: channel-message
path: "/teams/{team_id}/channels/{channel_id}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Analyzes schedule change impact on connections and crew, notifies planning.
naftiko: "0.5"
info:
label: "Schedule Change Impact Orchestrator"
description: "Analyzes schedule change impact on connections and crew, notifies planning."
tags:
- scheduling
- flight-operations
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: schedule
port: 8080
tools:
- name: assess-change
description: "Analyze schedule change."
inputParameters:
- name: flight_number
in: body
type: string
- name: new_time
in: body
type: string
steps:
- name: connections
type: call
call: "scheduling-api.analyze-cx"
with:
flight: "{{flight_number}}"
time: "{{new_time}}"
- name: crew
type: call
call: "crew-api.assess-impact"
with:
flight: "{{flight_number}}"
time: "{{new_time}}"
- name: notify
type: call
call: "msteams.post-channel-message"
with:
channel_id: "{{planning_channel}}"
text: "Schedule change {{flight_number}}: {{connections.affected}} cx, {{crew.pairings}} pairings"
consumes:
- type: http
namespace: scheduling-api
baseUri: "https://scheduling.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_scheduling_token"
resources:
- name: cx
path: "/analysis/connections"
operations:
- name: analyze-cx
method: POST
- type: http
namespace: crew-api
baseUri: "https://crew.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_crew_token"
resources:
- name: impact
path: "/pairings/impact"
operations:
- name: assess-impact
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves seat map and availability for an AA flight.
naftiko: "0.5"
info:
label: "Seat Map Availability Lookup"
description: "Retrieves seat map and availability for an AA flight."
tags:
- customer-service
- flight-operations
capability:
exposes:
- type: mcp
namespace: seat-map
port: 8080
tools:
- name: get-seat-map
description: "Get seat availability."
inputParameters:
- name: flight_number
in: body
type: string
description: "Flight."
- name: flight_date
in: body
type: string
description: "Date."
call: "pss.get-seats"
with:
flight: "{{flight_number}}"
date: "{{flight_date}}"
outputParameters:
- name: available
type: number
mapping: "$.availableSeats"
- name: cabins
type: object
mapping: "$.cabinBreakdown"
consumes:
- type: http
namespace: pss
baseUri: "https://pss.aa.com/api/v2"
authentication:
type: bearer
token: "$secrets.aa_pss_token"
resources:
- name: seats
path: "/flights/{{flight}}/seat-map"
inputParameters:
- name: flight
in: path
operations:
- name: get-seats
method: GET
When Palo Alto Networks raises a high-severity threat, logs the event in Datadog, opens a GitHub security issue, and escalates to the security team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Security Threat Alert Triage"
description: "When Palo Alto Networks raises a high-severity threat, logs the event in Datadog, opens a GitHub security issue, and escalates to the security team via Microsoft Teams."
tags:
- security
- incident-response
- palo-alto-networks
- datadog
- github
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: security-ops
port: 8080
tools:
- name: handle-security-threat
description: "Given a Palo Alto Networks threat ID and severity, annotate Datadog with the event, open a GitHub security issue, and notify the security team in Microsoft Teams."
inputParameters:
- name: threat_id
in: body
type: string
description: "Palo Alto Networks threat event identifier."
- name: severity
in: body
type: string
description: "Threat severity: critical, high, medium, or low."
- name: source_ip
in: body
type: string
description: "Source IP address of the detected threat."
- name: destination_ip
in: body
type: string
description: "Destination IP address targeted by the threat."
- name: threat_name
in: body
type: string
description: "Human-readable name of the detected threat signature."
steps:
- name: annotate-datadog
type: call
call: "datadog.create-event"
with:
title: "Security Threat: {{threat_name}} ({{severity}})"
text: "Threat {{threat_id}} — src: {{source_ip}} → dst: {{destination_ip}}"
alert_type: "error"
tags: "severity:{{severity}},threat:{{threat_id}}"
- name: open-security-issue
type: call
call: "github.create-issue"
with:
owner: "AmericanAirlines"
repo: "security-response"
title: "[{{severity}}] Security Threat: {{threat_name}}"
body: "Threat ID: {{threat_id}}\nSeverity: {{severity}}\nSource IP: {{source_ip}}\nDestination IP: {{destination_ip}}\nDatadog: {{annotate-datadog.url}}"
labels: "security,{{severity}},needs-investigation"
- name: notify-security-team
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.security_teams_channel_id"
message: "SECURITY THREAT ({{severity}}): {{threat_name}} | Src: {{source_ip}} | Dst: {{destination_ip}} | Issue: {{open-security-issue.html_url}}"
consumes:
- namespace: datadog
type: http
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
- namespace: github
type: http
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: issues
path: "/repos/{owner}/{repo}/issues"
inputParameters:
- name: owner
in: path
- name: repo
in: path
operations:
- name: create-issue
method: POST
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.ms_graph_token"
resources:
- name: channel-message
path: "/teams/{team_id}/channels/{channel_id}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves estimated security wait times at an AA hub.
naftiko: "0.5"
info:
label: "Security Checkpoint Wait Times"
description: "Retrieves estimated security wait times at an AA hub."
tags:
- customer-service
- airport
capability:
exposes:
- type: mcp
namespace: security
port: 8080
tools:
- name: get-waits
description: "Get security wait times."
inputParameters:
- name: station
in: body
type: string
- name: terminal
in: body
type: string
call: "airport-api.get-waits"
with:
station: "{{station}}"
terminal: "{{terminal}}"
outputParameters:
- name: standard
type: number
mapping: "$.standardWait"
- name: precheck
type: number
mapping: "$.precheckWait"
consumes:
- type: http
namespace: airport-api
baseUri: "https://api.aa.com/v1/airports"
authentication:
type: bearer
token: "$secrets.aa_api_token"
resources:
- name: waits
path: "/{{station}}/security"
inputParameters:
- name: station
in: path
operations:
- name: get-waits
method: GET
Queries Teradata system tables for long-running or blocked queries and posts a pipeline health digest to the data engineering channel in Microsoft Teams.
naftiko: "0.5"
info:
label: "Teradata Data Pipeline Health Monitor"
description: "Queries Teradata system tables for long-running or blocked queries and posts a pipeline health digest to the data engineering channel in Microsoft Teams."
tags:
- data
- analytics
- teradata
- microsoft-teams
- pipeline-monitoring
capability:
exposes:
- type: mcp
namespace: data-ops
port: 8080
tools:
- name: monitor-teradata-pipeline
description: "Given a Teradata query threshold (in seconds), retrieve active sessions exceeding that duration and post a digest to the data engineering Teams channel. Use for proactive data pipeline triage."
inputParameters:
- name: duration_threshold_seconds
in: body
type: integer
description: "Alert threshold in seconds. Queries running longer than this value will be included in the digest."
- name: teams_channel_id
in: body
type: string
description: "Microsoft Teams channel ID for the data pipeline health digest."
steps:
- name: query-active-sessions
type: call
call: "teradata.query-sessions"
with:
min_duration_seconds: "{{duration_threshold_seconds}}"
- name: post-digest
type: call
call: "msteams.send-message"
with:
channel_id: "{{teams_channel_id}}"
message: "TERADATA PIPELINE HEALTH: {{query-active-sessions.longRunningCount}} queries > {{duration_threshold_seconds}}s | Blocked: {{query-active-sessions.blockedCount}} | Top query: {{query-active-sessions.topQuery}} ({{query-active-sessions.topDuration}}s)"
consumes:
- namespace: teradata
type: http
baseUri: "https://teradata.aa.com/api/rest/v1"
authentication:
type: basic
username: "$secrets.teradata_username"
password: "$secrets.teradata_password"
resources:
- name: sessions
path: "/queryMonitor/sessions"
inputParameters:
- name: min_duration_seconds
in: query
operations:
- name: query-sessions
method: GET
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.ms_graph_token"
resources:
- name: channel-message
path: "/teams/{team_id}/channels/{channel_id}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When Terraform Cloud detects a plan with drift on a production workspace, annotates Datadog, opens a GitHub issue, and notifies the infrastructure team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Terraform Infrastructure Drift Alert"
description: "When Terraform Cloud detects a plan with drift on a production workspace, annotates Datadog, opens a GitHub issue, and notifies the infrastructure team via Microsoft Teams."
tags:
- cloud
- infra
- terraform
- datadog
- github
- microsoft-teams
- drift-detection
capability:
exposes:
- type: mcp
namespace: infra-governance
port: 8080
tools:
- name: handle-terraform-drift
description: "Given a Terraform Cloud workspace name and run ID, create a Datadog event, open a GitHub issue with drift details, and alert the infrastructure channel in Microsoft Teams."
inputParameters:
- name: workspace_name
in: body
type: string
description: "Terraform Cloud workspace name where drift was detected, e.g. aa-prod-network."
- name: run_id
in: body
type: string
description: "Terraform Cloud run ID that identified the drift."
- name: resource_count
in: body
type: integer
description: "Number of resources with detected drift."
steps:
- name: get-run
type: call
call: "terraform.get-run"
with:
run_id: "{{run_id}}"
- name: annotate-datadog
type: call
call: "datadog.create-event"
with:
title: "Terraform Drift: {{workspace_name}}"
text: "Run {{run_id}} detected drift on {{resource_count}} resources. Status: {{get-run.status}}"
alert_type: "warning"
tags: "workspace:{{workspace_name}},env:production"
- name: open-issue
type: call
call: "github.create-issue"
with:
owner: "AmericanAirlines"
repo: "infrastructure"
title: "Terraform Drift: {{workspace_name}} ({{resource_count}} resources)"
body: "Workspace: {{workspace_name}}\nRun ID: {{run_id}}\nDrifted resources: {{resource_count}}\nRun status: {{get-run.status}}\nDatadog: {{annotate-datadog.url}}"
labels: "infrastructure,drift,production"
- name: notify-teams
type: call
call: "msteams.send-message"
with:
channel_id: "$secrets.infra_teams_channel_id"
message: "TERRAFORM DRIFT: {{workspace_name}} | {{resource_count}} resources | Run: {{run_id}} | Issue: {{open-issue.html_url}}"
consumes:
- namespace: terraform
type: http
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_cloud_token"
resources:
- name: run
path: "/runs/{run_id}"
inputParameters:
- name: run_id
in: path
operations:
- name: get-run
method: GET
- namespace: datadog
type: http
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
- namespace: github
type: http
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: issues
path: "/repos/{owner}/{repo}/issues"
inputParameters:
- name: owner
in: path
- name: repo
in: path
operations:
- name: create-issue
method: POST
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.ms_graph_token"
resources:
- name: channel-message
path: "/teams/{team_id}/channels/{channel_id}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When an employee completes a trip, retrieves the SAP Concur expense report status and posts a summary to the employee's Microsoft Teams, prompting submission if still in draft.
naftiko: "0.5"
info:
label: "Travel Expense Report Submission"
description: "When an employee completes a trip, retrieves the SAP Concur expense report status and posts a summary to the employee's Microsoft Teams, prompting submission if still in draft."
tags:
- finance
- travel
- sap-concur
- microsoft-teams
- expense-management
capability:
exposes:
- type: mcp
namespace: travel-finance
port: 8080
tools:
- name: check-expense-report
description: "Given an employee login ID and SAP Concur report ID, retrieve the expense report status and post a summary or submission reminder to Microsoft Teams."
inputParameters:
- name: employee_login_id
in: body
type: string
description: "The employee's SAP Concur login ID or email address."
- name: report_id
in: body
type: string
description: "The SAP Concur expense report ID to check."
- name: teams_user_id
in: body
type: string
description: "Microsoft Teams user ID (UPN) to send the notification to."
steps:
- name: get-report
type: call
call: "concur.get-expense-report"
with:
report_id: "{{report_id}}"
- name: notify-employee
type: call
call: "msteams.send-message"
with:
channel_id: "{{teams_user_id}}"
message: "Expense Report {{report_id}}: Status={{get-report.Status}} | Total={{get-report.Total}} {{get-report.CurrencyCode}} | Trip={{get-report.Name}} | Submit at: https://www.concursolutions.com"
consumes:
- namespace: concur
type: http
baseUri: "https://www.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.sap_concur_token"
resources:
- name: expense-report
path: "/expense/reports/{report_id}"
inputParameters:
- name: report_id
in: path
operations:
- name: get-expense-report
method: GET
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.ms_graph_token"
resources:
- name: channel-message
path: "/teams/{team_id}/channels/{channel_id}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Tracks unaccompanied minor passengers.
naftiko: "0.5"
info:
label: "Unaccompanied Minor Tracking"
description: "Tracks unaccompanied minor passengers."
tags:
- customer-service
- safety
- tracking
capability:
exposes:
- type: mcp
namespace: umnr
port: 8080
tools:
- name: track-umnr
description: "Track UMNR."
inputParameters:
- name: pnr
in: body
type: string
call: "umnr-api.get-status"
with:
pnr: "{{pnr}}"
outputParameters:
- name: checkpoint
type: string
mapping: "$.checkpoint"
- name: handoff
type: string
mapping: "$.handoffStatus"
consumes:
- type: http
namespace: umnr-api
baseUri: "https://pss.aa.com/api/v2/umnr"
authentication:
type: bearer
token: "$secrets.aa_pss_token"
resources:
- name: tracking
path: "/tracking/{{pnr}}"
inputParameters:
- name: pnr
in: path
operations:
- name: get-status
method: GET
Arranges VIP handling including reservation flagging, meet-and-greet, and station notification.
naftiko: "0.5"
info:
label: "VIP Passenger Handling Orchestrator"
description: "Arranges VIP handling including reservation flagging, meet-and-greet, and station notification."
tags:
- customer-service
- ground-ops
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: vip
port: 8080
tools:
- name: arrange-vip
description: "Set up VIP handling."
inputParameters:
- name: pnr
in: body
type: string
- name: flight_number
in: body
type: string
- name: station
in: body
type: string
steps:
- name: flag
type: call
call: "pss.add-ssr"
with:
pnr: "{{pnr}}"
ssr: "VIP"
- name: meet-greet
type: call
call: "ground-ops.create-meet-greet"
with:
station: "{{station}}"
flight: "{{flight_number}}"
- name: notify
type: call
call: "msteams.post-channel-message"
with:
channel_id: "{{station_channel}}"
text: "VIP for {{flight_number}} at {{station}}"
consumes:
- type: http
namespace: pss
baseUri: "https://pss.aa.com/api/v2"
authentication:
type: bearer
token: "$secrets.aa_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.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_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: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Assesses weather impact at an AA hub by querying forecasts, identifying affected flights, creating ServiceNow incidents, and alerting OCC.
naftiko: "0.5"
info:
label: "Weather Impact Assessment Orchestrator"
description: "Assesses weather impact at an AA hub by querying forecasts, identifying affected flights, creating ServiceNow incidents, and alerting OCC."
tags:
- flight-operations
- weather
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: weather
port: 8080
tools:
- name: assess-weather
description: "Assess weather impact at a hub."
inputParameters:
- name: hub
in: body
type: string
description: "Hub code."
- name: hours
in: body
type: number
description: "Hours ahead."
steps:
- name: get-forecast
type: call
call: "weather-api.get-forecast"
with:
station: "{{hub}}"
hours: "{{hours}}"
- name: get-flights
type: call
call: "aa-api.search-departures"
with:
station: "{{hub}}"
hours: "{{hours}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Weather at {{hub}}: {{get-forecast.severity}} — {{get-flights.count}} flights"
priority: "2"
- name: notify
type: call
call: "msteams.post-channel-message"
with:
channel_id: "{{occ_channel}}"
text: "Weather alert {{hub}}: {{get-forecast.summary}} | {{get-flights.count}} departures impacted"
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: aa-api
baseUri: "https://api.aa.com/v1/flights"
authentication:
type: bearer
token: "$secrets.aa_api_token"
resources:
- name: departures
path: "/departures/search"
operations:
- name: search-departures
method: POST
- type: http
namespace: servicenow
baseUri: "https://aa.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{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 pre-departure dispatch.
naftiko: "0.5"
info:
label: "Weight and Balance Calculation"
description: "Calculates aircraft weight and balance for pre-departure dispatch."
tags:
- dispatch
- flight-operations
- safety
capability:
exposes:
- type: mcp
namespace: wb
port: 8080
tools:
- name: calc-wb
description: "Calculate weight and balance."
inputParameters:
- name: tail_number
in: body
type: string
description: "Tail."
- name: pax_count
in: body
type: number
description: "Passengers."
- name: cargo_kg
in: body
type: number
description: "Cargo weight."
- name: fuel_kg
in: body
type: number
description: "Fuel load."
call: "dispatch-api.calc-wb"
with:
tail: "{{tail_number}}"
pax: "{{pax_count}}"
cargo: "{{cargo_kg}}"
fuel: "{{fuel_kg}}"
outputParameters:
- name: takeoff_weight
type: number
mapping: "$.takeoffWeight"
- name: within_limits
type: boolean
mapping: "$.withinLimits"
consumes:
- type: http
namespace: dispatch-api
baseUri: "https://dispatch.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_dispatch_token"
resources:
- name: wb
path: "/weight-balance/calculate"
operations:
- name: calc-wb
method: POST
Creates wheelchair assistance request for a passenger.
naftiko: "0.5"
info:
label: "Wheelchair Service Request"
description: "Creates wheelchair assistance request for a passenger."
tags:
- customer-service
- ground-ops
- accessibility
capability:
exposes:
- type: mcp
namespace: wheelchair
port: 8080
tools:
- name: request-wheelchair
description: "Submit wheelchair request."
inputParameters:
- name: pnr
in: body
type: string
- name: station
in: body
type: string
- name: type
in: body
type: string
call: "ground-ops.create-wheelchair"
with:
pnr: "{{pnr}}"
station: "{{station}}"
type: "{{type}}"
outputParameters:
- name: request_id
type: string
mapping: "$.requestId"
consumes:
- type: http
namespace: ground-ops
baseUri: "https://groundops.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_ground_ops_token"
resources:
- name: wheelchair
path: "/wheelchair/request"
operations:
- name: create-wheelchair
method: POST
Retrieves inflight WiFi metrics for an aircraft.
naftiko: "0.5"
info:
label: "Inflight WiFi Performance Report"
description: "Retrieves inflight WiFi metrics for an aircraft."
tags:
- inflight-services
- technology
- analytics
capability:
exposes:
- type: mcp
namespace: wifi
port: 8080
tools:
- name: get-wifi
description: "Get WiFi metrics."
inputParameters:
- name: tail_number
in: body
type: string
call: "connectivity-api.get-metrics"
with:
tail: "{{tail_number}}"
outputParameters:
- name: uptime
type: number
mapping: "$.uptimePercent"
- name: bandwidth
type: number
mapping: "$.avgBandwidth"
consumes:
- type: http
namespace: connectivity-api
baseUri: "https://connectivity.aa.com/api/v1"
authentication:
type: bearer
token: "$secrets.aa_connectivity_token"
resources:
- name: metrics
path: "/aircraft/{{tail}}/wifi"
inputParameters:
- name: tail
in: path
operations:
- name: get-metrics
method: GET