Alaska Airlines Capabilities
Naftiko 0.5 capability definitions for Alaska Airlines - 100 capabilities showing integration workflows and service orchestrations.
Queries Workday for employees with elevated system access roles and cross-checks Entra ID group memberships to identify access requiring recertification. Creates Jira review tasks for the security team for each exception found.
naftiko: "0.5"
info:
label: "Access Certification Review"
description: "Queries Workday for employees with elevated system access roles and cross-checks Entra ID group memberships to identify access requiring recertification. Creates Jira review tasks for the security team for each exception found."
tags:
- security
- identity
- access-management
- workday
- microsoft-entra
- jira
capability:
exposes:
- type: mcp
namespace: access-review
port: 8080
tools:
- name: run-access-certification
description: "Given an Entra ID group ID and department scope, retrieve group memberships, validate against Workday job roles, and create Jira review tasks for access mismatches. Use for quarterly access certification campaigns."
inputParameters:
- name: group_id
in: body
type: string
description: "The Entra ID group ID to certify (e.g., grp-alaska-sabre-admin)."
- name: department
in: body
type: string
description: "The Alaska Airlines department scope for the review."
steps:
- name: get-group-members
type: call
call: "entra-access.get-group-members"
with:
group_id: "{{group_id}}"
- name: get-workday-roles
type: call
call: "workday-access.get-workers"
with:
department: "{{department}}"
- name: create-review-task
type: call
call: "jira-access.create-issue"
with:
project_key: "SEC"
summary: "Access certification: {{group_id}} — {{department}}"
description: "{{get-group-members.member_count}} members require access recertification in {{department}}."
issue_type: "Task"
consumes:
- type: http
namespace: entra-access
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: group-members
path: "/groups/{{group_id}}/members"
inputParameters:
- name: group_id
in: path
operations:
- name: get-group-members
method: GET
- type: http
namespace: workday-access
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/alaska-airlines/workers"
inputParameters:
- name: department
in: query
operations:
- name: get-workers
method: GET
- type: http
namespace: jira-access
baseUri: "https://alaska-airlines.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issue
path: "/issue"
inputParameters:
- name: project_key
in: body
- name: summary
in: body
- name: description
in: body
- name: issue_type
in: body
operations:
- name: create-issue
method: POST
When a major irregular operation (IRROP) event is detected, sends flight disruption details to Anthropic Claude for recovery option summarization, and posts recommended re-accommodation options to the Salesforce Service Cloud case and the operations Teams channel.
naftiko: "0.5"
info:
label: "AI-Assisted Passenger Disruption Triage"
description: "When a major irregular operation (IRROP) event is detected, sends flight disruption details to Anthropic Claude for recovery option summarization, and posts recommended re-accommodation options to the Salesforce Service Cloud case and the operations Teams channel."
tags:
- ai
- customer-service
- anthropic
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: irrop-ai
port: 8080
tools:
- name: triage-passenger-disruption
description: "Given a Salesforce case ID and flight disruption details, send disruption context to Anthropic Claude for recovery option summarization, update the Salesforce case with recommendations, and notify the ops team in Teams. Use during IRROP events to accelerate re-accommodation decisions."
inputParameters:
- name: case_id
in: body
type: string
description: "The Salesforce service case ID for the disrupted passenger."
- name: disruption_details
in: body
type: string
description: "A description of the disruption event (cancelled flight, delay duration, affected routes)."
- name: passenger_tier
in: body
type: string
description: "The passenger's Mileage Plan elite tier (MVP, MVP Gold, MVP Gold 75K)."
steps:
- name: summarize-with-claude
type: call
call: "anthropic-irrop.create-message"
with:
model: "claude-opus-4-5"
max_tokens: 512
messages: "[{\"role\":\"user\",\"content\":\"Summarize top 3 re-accommodation options for a {{passenger_tier}} passenger given this IRROP: {{disruption_details}}\"}]"
- name: update-salesforce-case
type: call
call: "salesforce-irrop.update-case"
with:
case_id: "{{case_id}}"
recovery_options: "{{summarize-with-claude.content}}"
- name: notify-ops-team
type: call
call: "msteams-irrop.send-message"
with:
channel_id: "operations-irrop"
message: "IRROP triage complete for case {{case_id}} ({{passenger_tier}}). Recovery options updated in Salesforce."
consumes:
- type: http
namespace: anthropic-irrop
baseUri: "https://api.anthropic.com/v1"
authentication:
type: apikey
key: "x-api-key"
value: "$secrets.anthropic_api_key"
placement: header
resources:
- name: message
path: "/messages"
inputParameters:
- name: model
in: body
- name: max_tokens
in: body
- name: messages
in: body
operations:
- name: create-message
method: POST
- type: http
namespace: salesforce-irrop
baseUri: "https://alaska-airlines.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: case
path: "/sobjects/Case/{{case_id}}"
inputParameters:
- name: case_id
in: path
- name: recovery_options
in: body
operations:
- name: update-case
method: PATCH
- type: http
namespace: msteams-irrop
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: message
path: "/teams/{{channel_id}}/channels/messages"
inputParameters:
- name: channel_id
in: path
- name: message
in: body
operations:
- name: send-message
method: POST
Tracks component lifecycle by pulling installation data from Oracle ERP, usage metrics from Snowflake, and creating Jira maintenance tasks when limits approach.
naftiko: "0.5"
info:
label: "Aircraft Component Lifecycle Tracker"
description: "Tracks component lifecycle by pulling installation data from Oracle ERP, usage metrics from Snowflake, and creating Jira maintenance tasks when limits approach."
tags:
- maintenance
- oracle-erp
- snowflake
- jira
capability:
exposes:
- type: mcp
namespace: maintenance
port: 8080
tools:
- name: track_component_lifecycle
description: "Given a part number, check lifecycle status and create tasks if needed."
inputParameters:
- name: part_number
in: body
type: string
description: "The component part number."
steps:
- name: get-install-data
type: call
call: "oracle-erp.get-component"
with:
part_number: "{{part_number}}"
- name: get-usage
type: call
call: "snowflake.run-query"
with:
query: "SELECT flight_hours, cycles, remaining_life_pct FROM component_usage WHERE part_number = '{{part_number}}'"
- name: create-task
type: call
call: "jira.create-issue"
with:
project: "MX"
summary: "Component lifecycle: {{part_number}} at {{get-usage.data[0].REMAINING_LIFE_PCT}}% remaining"
issuetype: "Task"
consumes:
- type: http
namespace: oracle-erp
baseUri: "https://alaska-erp.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: basic
username: "$secrets.oracle_erp_user"
password: "$secrets.oracle_erp_pass"
resources:
- name: components
path: "/fixedAssets/components/{{part_number}}"
inputParameters:
- name: part_number
in: path
operations:
- name: get-component
method: GET
- type: http
namespace: snowflake
baseUri: "https://alaska.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira
baseUri: "https://alaska-airlines.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Prepares aircraft lease return documentation by retrieving maintenance records from Oracle ERP, compliance data from Snowflake, and uploading the package to SharePoint.
naftiko: "0.5"
info:
label: "Aircraft Lease Return Preparation"
description: "Prepares aircraft lease return documentation by retrieving maintenance records from Oracle ERP, compliance data from Snowflake, and uploading the package to SharePoint."
tags:
- fleet
- oracle-erp
- snowflake
- sharepoint
capability:
exposes:
- type: mcp
namespace: fleet
port: 8080
tools:
- name: prepare_lease_return
description: "Given a tail number, compile lease return documentation package."
inputParameters:
- name: tail_number
in: body
type: string
description: "The aircraft tail number."
steps:
- name: get-maintenance
type: call
call: "oracle-erp.get-maintenance-history"
with:
asset_id: "{{tail_number}}"
- name: get-compliance
type: call
call: "snowflake.run-query"
with:
query: "SELECT ad_number, compliance_date, status FROM ad_compliance WHERE tail_number = '{{tail_number}}'"
- name: upload-package
type: call
call: "sharepoint.upload-file"
with:
folder: "Fleet/LeaseReturns/{{tail_number}}"
filename: "lease_return_package.json"
content: "Maintenance records: {{get-maintenance.count}}. AD compliance items: {{get-compliance.row_count}}"
consumes:
- type: http
namespace: oracle-erp
baseUri: "https://alaska-erp.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: basic
username: "$secrets.oracle_erp_user"
password: "$secrets.oracle_erp_pass"
resources:
- name: maintenance
path: "/fixedAssets/{{asset_id}}/maintenance"
inputParameters:
- name: asset_id
in: path
operations:
- name: get-maintenance-history
method: GET
- type: http
namespace: snowflake
baseUri: "https://alaska.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites/alaskaair.sharepoint.com"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/drive/root:/{{folder}}/{{filename}}:/content"
inputParameters:
- name: folder
in: path
- name: filename
in: path
operations:
- name: upload-file
method: PUT
Syncs aircraft maintenance work orders between the MRO system and ServiceNow, creates Jira tasks for engineering review, and notifies maintenance teams via Microsoft Teams.
naftiko: "0.5"
info:
label: "Aircraft Maintenance Work Order Sync"
description: "Syncs aircraft maintenance work orders between the MRO system and ServiceNow, creates Jira tasks for engineering review, and notifies maintenance teams via Microsoft Teams."
tags:
- maintenance
- mro
- servicenow
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: maintenance
port: 8080
tools:
- name: sync-maintenance-order
description: "Given an aircraft tail number and work order ID, sync MRO data to ServiceNow, create Jira task, and notify maintenance."
inputParameters:
- name: work_order_id
in: body
type: string
description: "The maintenance work order ID."
steps:
- name: get-work-order
type: call
call: servicenow.get-work-order
with:
work_order_id: "{{work_order_id}}"
- name: create-task
type: call
call: jira.create-issue
with:
project_key: "MRO"
summary: "Review: WO {{work_order_id}}"
issue_type: "Task"
- name: notify-team
type: call
call: msteams.send-message
with:
channel_id: "$secrets.teams_maintenance_channel_id"
text: "MAINTENANCE: WO {{work_order_id}} synced. Jira: {{create-task.key}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://alaskaairlines.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: work-orders
path: "/table/wm_order"
operations:
- name: get-work-order
method: GET
- type: http
namespace: jira
baseUri: "https://alaska-airlines.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Audits weight and balance records by retrieving load data from Snowflake, comparing with aircraft limits from Oracle ERP, and flagging exceptions in a Jira ticket.
naftiko: "0.5"
info:
label: "Aircraft Weight and Balance Audit"
description: "Audits weight and balance records by retrieving load data from Snowflake, comparing with aircraft limits from Oracle ERP, and flagging exceptions in a Jira ticket."
tags:
- safety
- snowflake
- oracle-erp
- jira
capability:
exposes:
- type: mcp
namespace: safety
port: 8080
tools:
- name: audit_weight_balance
description: "Given a tail number and date range, audit weight and balance compliance."
inputParameters:
- name: tail_number
in: body
type: string
description: "The aircraft tail number."
- name: date_from
in: body
type: string
description: "Start date."
steps:
- name: get-load-data
type: call
call: "snowflake.run-query"
with:
query: "SELECT flight_number, takeoff_weight, max_weight, cg_position FROM weight_balance WHERE tail_number = '{{tail_number}}' AND flight_date >= '{{date_from}}'"
- name: get-limits
type: call
call: "oracle-erp.get-aircraft-limits"
with:
tail_number: "{{tail_number}}"
- name: flag-exceptions
type: call
call: "jira.create-issue"
with:
project: "SAFETY"
summary: "W&B audit: {{tail_number}} - {{get-load-data.row_count}} flights reviewed"
issuetype: "Task"
consumes:
- type: http
namespace: snowflake
baseUri: "https://alaska.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: oracle-erp
baseUri: "https://alaska-erp.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: basic
username: "$secrets.oracle_erp_user"
password: "$secrets.oracle_erp_pass"
resources:
- name: aircraft
path: "/fixedAssets/{{tail_number}}/limits"
inputParameters:
- name: tail_number
in: path
operations:
- name: get-aircraft-limits
method: GET
- type: http
namespace: jira
baseUri: "https://alaska-airlines.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Coordinates deicing resources by checking weather forecasts and flight schedules in Snowflake, posting resource requirements to the station operations Teams channel and creating a ServiceNow request.
naftiko: "0.5"
info:
label: "Airport Deicing Resource Coordinator"
description: "Coordinates deicing resources by checking weather forecasts and flight schedules in Snowflake, posting resource requirements to the station operations Teams channel and creating a ServiceNow request."
tags:
- flight-operations
- snowflake
- microsoft-teams
- servicenow
capability:
exposes:
- type: mcp
namespace: flight-operations
port: 8080
tools:
- name: coordinate_deicing
description: "Given a station, check deicing requirements and coordinate resources."
inputParameters:
- name: station
in: body
type: string
description: "The station IATA code."
steps:
- name: get-requirements
type: call
call: "snowflake.run-query"
with:
query: "SELECT departures_count, temp_forecast, precipitation_type FROM deicing_forecast WHERE station = '{{station}}' AND forecast_date = CURRENT_DATE()"
- name: post-requirements
type: call
call: "msteams.send-message"
with:
channel_id: "station-ops-{{station}}"
message: "Deicing forecast {{station}}: {{get-requirements.data[0].DEPARTURES_COUNT}} departures. Temp: {{get-requirements.data[0].TEMP_FORECAST}}. Precip: {{get-requirements.data[0].PRECIPITATION_TYPE}}"
- name: create-request
type: call
call: "servicenow.create-request"
with:
short_description: "Deicing resources: {{station}}"
category: "ground_ops"
consumes:
- type: http
namespace: snowflake
baseUri: "https://alaska.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/station-ops/channels/general/messages"
operations:
- name: send-message
method: POST
- type: http
namespace: servicenow
baseUri: "https://alaskaair.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_pass"
resources:
- name: requests
path: "/table/sc_request"
operations:
- name: create-request
method: POST
Monitors lounge capacity by querying guest counts from Snowflake, checking Mileage Plan tier eligibility in Salesforce, and posting capacity alerts to the lounge operations Slack channel.
naftiko: "0.5"
info:
label: "Airport Lounge Capacity Monitor"
description: "Monitors lounge capacity by querying guest counts from Snowflake, checking Mileage Plan tier eligibility in Salesforce, and posting capacity alerts to the lounge operations Slack channel."
tags:
- customer-service
- snowflake
- salesforce
- slack
capability:
exposes:
- type: mcp
namespace: customer-service
port: 8080
tools:
- name: monitor_lounge_capacity
description: "Given a station, check current lounge occupancy and upcoming eligible guests."
inputParameters:
- name: station
in: body
type: string
description: "The airport station code."
steps:
- name: get-occupancy
type: call
call: "snowflake.run-query"
with:
query: "SELECT current_guests, capacity, pct_full FROM lounge_occupancy WHERE station = '{{station}}'"
- name: get-upcoming
type: call
call: "salesforce.get-eligible-pax"
with:
station: "{{station}}"
- name: alert-ops
type: call
call: "slack.post-message"
with:
channel: "lounge-ops"
text: "Lounge {{station}}: {{get-occupancy.data[0].CURRENT_GUESTS}}/{{get-occupancy.data[0].CAPACITY}} ({{get-occupancy.data[0].PCT_FULL}}%). Upcoming eligible: {{get-upcoming.count}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://alaska.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: salesforce
baseUri: "https://alaskaair.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: eligible
path: "/query?q=SELECT+Count+FROM+Booking__c+WHERE+Station__c='{{station}}'+AND+Tier__c+IN+('MVP+Gold','75K')"
inputParameters:
- name: station
in: query
operations:
- name: get-eligible-pax
method: GET
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Optimizes station staffing by pulling flight schedules from Snowflake, checking available staff in Workday, and posting recommendations to the station managers Slack channel.
naftiko: "0.5"
info:
label: "Airport Station Staffing Optimizer"
description: "Optimizes station staffing by pulling flight schedules from Snowflake, checking available staff in Workday, and posting recommendations to the station managers Slack channel."
tags:
- flight-operations
- snowflake
- workday
- slack
capability:
exposes:
- type: mcp
namespace: flight-operations
port: 8080
tools:
- name: optimize_station_staffing
description: "Given a station and date, optimize staffing levels."
inputParameters:
- name: station
in: body
type: string
description: "The station IATA code."
- name: date
in: body
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: get-schedule
type: call
call: "snowflake.run-query"
with:
query: "SELECT hour_block, flight_count, pax_total FROM hourly_schedule WHERE station = '{{station}}' AND ops_date = '{{date}}'"
- name: get-staff
type: call
call: "workday.get-station-staff"
with:
station: "{{station}}"
date: "{{date}}"
- name: post-recommendations
type: call
call: "slack.post-message"
with:
channel: "station-mgrs-{{station}}"
text: "Staffing for {{station}} on {{date}}: Peak flights: {{get-schedule.max_flights}}. Available staff: {{get-staff.available_count}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://alaska.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: staff
path: "/alaska/staffing?station={{station}}&date={{date}}"
inputParameters:
- name: station
in: query
- name: date
in: query
operations:
- name: get-station-staff
method: GET
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Optimizes cargo revenue by querying capacity utilization from Snowflake, checking booking requests in Salesforce, and posting optimization suggestions to the cargo Slack channel.
naftiko: "0.5"
info:
label: "Cargo Revenue Optimization"
description: "Optimizes cargo revenue by querying capacity utilization from Snowflake, checking booking requests in Salesforce, and posting optimization suggestions to the cargo Slack channel."
tags:
- commercial
- snowflake
- salesforce
- slack
capability:
exposes:
- type: mcp
namespace: commercial
port: 8080
tools:
- name: optimize_cargo_revenue
description: "Given a route, analyze cargo capacity and booking requests for optimization."
inputParameters:
- name: route
in: body
type: string
description: "The route (e.g., SEA-ANC)."
steps:
- name: get-capacity
type: call
call: "snowflake.run-query"
with:
query: "SELECT available_weight_kg, utilization_pct, revenue_per_kg FROM cargo_capacity WHERE route = '{{route}}'"
- name: get-bookings
type: call
call: "salesforce.get-cargo-requests"
with:
route: "{{route}}"
- name: post-suggestions
type: call
call: "slack.post-message"
with:
channel: "cargo-revenue"
text: "Cargo {{route}}: Utilization {{get-capacity.data[0].UTILIZATION_PCT}}%. Pending requests: {{get-bookings.count}}. Revenue/kg: ${{get-capacity.data[0].REVENUE_PER_KG}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://alaska.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: salesforce
baseUri: "https://alaskaair.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cargo
path: "/query?q=SELECT+Id+FROM+Cargo_Request__c+WHERE+Route__c='{{route}}'+AND+Status__c='Pending'"
inputParameters:
- name: route
in: query
operations:
- name: get-cargo-requests
method: GET
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Optimizes catering orders by retrieving passenger counts from Snowflake, checking dietary preferences in Salesforce, and sending optimized orders to the catering Slack channel.
naftiko: "0.5"
info:
label: "Catering Order Optimization"
description: "Optimizes catering orders by retrieving passenger counts from Snowflake, checking dietary preferences in Salesforce, and sending optimized orders to the catering Slack channel."
tags:
- flight-operations
- snowflake
- salesforce
- slack
capability:
exposes:
- type: mcp
namespace: flight-operations
port: 8080
tools:
- name: optimize_catering
description: "Given a flight number and date, optimize the catering order."
inputParameters:
- name: flight_number
in: body
type: string
description: "The flight number."
steps:
- name: get-pax-count
type: call
call: "snowflake.run-query"
with:
query: "SELECT pax_count, first_class, premium FROM bookings WHERE flight_number = '{{flight_number}}'"
- name: get-preferences
type: call
call: "salesforce.get-dietary-prefs"
with:
flight: "{{flight_number}}"
- name: send-order
type: call
call: "slack.post-message"
with:
channel: "catering-ops"
text: "Catering for {{flight_number}}: {{get-pax-count.data[0].PAX_COUNT}} pax. Special meals: {{get-preferences.special_count}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://alaska.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: salesforce
baseUri: "https://alaskaair.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: dietary
path: "/query?q=SELECT+Count+FROM+Dietary_Preference__c+WHERE+Flight__c='{{flight}}'"
inputParameters:
- name: flight
in: query
operations:
- name: get-dietary-prefs
method: GET
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a GitHub Actions pipeline fails on a critical airline systems repository, creates a Jira incident ticket, alerts the platform engineering team in Microsoft Teams, and logs the event in Datadog. Ensures rapid response to software build failures.
naftiko: "0.5"
info:
label: "CI/CD Pipeline Failure Response"
description: "When a GitHub Actions pipeline fails on a critical airline systems repository, creates a Jira incident ticket, alerts the platform engineering team in Microsoft Teams, and logs the event in Datadog. Ensures rapid response to software build failures."
tags:
- devops
- cicd
- github
- jira
- datadog
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: cicd-ops
port: 8080
tools:
- name: handle-pipeline-failure
description: "Given a GitHub repository name, workflow run ID, and branch, create a Jira incident, alert the engineering Teams channel, and log a Datadog event. Use when a CI/CD pipeline failure occurs on a critical branch."
inputParameters:
- name: repo_name
in: body
type: string
description: "The GitHub repository name where the failure occurred (e.g., reservation-system)."
- name: run_id
in: body
type: string
description: "The GitHub Actions workflow run ID."
- name: branch
in: body
type: string
description: "The branch where the failure occurred (e.g., main, release/2025)."
steps:
- name: create-jira-issue
type: call
call: "jira-eng.create-issue"
with:
project_key: "ENG"
summary: "Pipeline failure: {{repo_name}} on {{branch}}"
issue_type: "Bug"
priority: "High"
- name: notify-engineering
type: call
call: "msteams-eng.send-message"
with:
channel_id: "engineering-alerts"
message: "CI/CD failure in {{repo_name}} ({{branch}}). Jira: {{create-jira-issue.key}}. Run: {{run_id}}"
- name: log-datadog
type: call
call: "datadog-cicd.create-event"
with:
title: "Pipeline failure: {{repo_name}}"
text: "Run {{run_id}} failed on {{branch}}"
tags: "repo:{{repo_name}},branch:{{branch}}"
consumes:
- type: http
namespace: jira-eng
baseUri: "https://alaska-airlines.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issue
path: "/issue"
inputParameters:
- name: project_key
in: body
- name: summary
in: body
- name: issue_type
in: body
- name: priority
in: body
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams-eng
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: message
path: "/teams/{{channel_id}}/channels/messages"
inputParameters:
- name: channel_id
in: path
- name: message
in: body
operations:
- name: send-message
method: POST
- type: http
namespace: datadog-cicd
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: event
path: "/events"
inputParameters:
- name: title
in: body
- name: text
in: body
- name: tags
in: body
operations:
- name: create-event
method: POST
When Datadog detects an AWS cloud spend anomaly, retrieves cost details, creates a ServiceNow incident, and alerts the FinOps team in Microsoft Teams. Enables rapid cost containment for Alaska Airlines cloud infrastructure.
naftiko: "0.5"
info:
label: "Cloud FinOps Cost Anomaly Responder"
description: "When Datadog detects an AWS cloud spend anomaly, retrieves cost details, creates a ServiceNow incident, and alerts the FinOps team in Microsoft Teams. Enables rapid cost containment for Alaska Airlines cloud infrastructure."
tags:
- finops
- cloud
- datadog
- aws
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: finops-ops
port: 8080
tools:
- name: handle-cost-anomaly
description: "Given a Datadog alert ID and AWS account ID, retrieve cost breakdown, open a ServiceNow incident, and notify the FinOps Teams channel. Use when AWS cloud spend exceeds expected thresholds."
inputParameters:
- name: alert_id
in: body
type: string
description: "The Datadog monitor alert ID for the cost anomaly."
- name: aws_account_id
in: body
type: string
description: "The AWS account ID where the cost anomaly was detected."
- name: threshold_percent
in: body
type: number
description: "The percentage over budget that triggered the alert."
steps:
- name: get-datadog-alert
type: call
call: "datadog-finops.get-monitor"
with:
monitor_id: "{{alert_id}}"
- name: create-snow-incident
type: call
call: "servicenow-finops.create-incident"
with:
short_description: "AWS cost anomaly: {{threshold_percent}}% over budget on account {{aws_account_id}}"
category: "Cloud"
urgency: "2"
- name: notify-finops-team
type: call
call: "msteams-finops.send-message"
with:
channel_id: "finops-alerts"
message: "Cost anomaly: {{threshold_percent}}% over budget on AWS account {{aws_account_id}}. Incident: {{create-snow-incident.number}}"
consumes:
- type: http
namespace: datadog-finops
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: monitor
path: "/monitor/{{monitor_id}}"
inputParameters:
- name: monitor_id
in: path
operations:
- name: get-monitor
method: GET
- type: http
namespace: servicenow-finops
baseUri: "https://alaska-airlines.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_pass"
resources:
- name: incident
path: "/table/incident"
inputParameters:
- name: short_description
in: body
- name: category
in: body
- name: urgency
in: body
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams-finops
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: message
path: "/teams/{{channel_id}}/channels/messages"
inputParameters:
- name: channel_id
in: path
- name: message
in: body
operations:
- name: send-message
method: POST
Searches the Alaska Airlines safety Confluence space for bulletins and advisories matching a query.
naftiko: "0.5"
info:
label: "Confluence Safety Bulletin Search"
description: "Searches the Alaska Airlines safety Confluence space for bulletins and advisories matching a query."
tags:
- safety
- confluence
- knowledge-management
capability:
exposes:
- type: mcp
namespace: safety
port: 8080
tools:
- name: search-safety-bulletins
description: "Search the safety Confluence space for bulletins matching a text query."
inputParameters:
- name: query
in: body
type: string
description: "The search query."
call: "confluence.search"
with:
cql: "space = SAFETY AND text ~ '{{query}}'"
outputParameters:
- name: results
type: array
mapping: "$.results"
consumes:
- type: http
namespace: confluence
baseUri: "https://alaska-airlines.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: search
path: "/search?cql={{cql}}"
inputParameters:
- name: cql
in: query
operations:
- name: search
method: GET
Processes contractor offboarding by deactivating the Okta account, closing the ServiceNow asset record, and sending confirmation via Microsoft Teams.
naftiko: "0.5"
info:
label: "Contractor Offboarding Workflow"
description: "Processes contractor offboarding by deactivating the Okta account, closing the ServiceNow asset record, and sending confirmation via Microsoft Teams."
tags:
- hr
- okta
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr
port: 8080
tools:
- name: offboard_contractor
description: "Given a contractor email, process the offboarding across systems."
inputParameters:
- name: contractor_email
in: body
type: string
description: "The contractor's email address."
steps:
- name: deactivate-okta
type: call
call: "okta.deactivate-user"
with:
login: "{{contractor_email}}"
- name: close-assets
type: call
call: "servicenow.update-ci"
with:
user: "{{contractor_email}}"
status: "retired"
- name: confirm
type: call
call: "msteams.send-message"
with:
channel_id: "hr-admin"
message: "Contractor {{contractor_email}} offboarded. Okta deactivated. Assets closed."
consumes:
- type: http
namespace: okta
baseUri: "https://alaskaair.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: users
path: "/users/{{login}}/lifecycle/deactivate"
inputParameters:
- name: login
in: path
operations:
- name: deactivate-user
method: POST
- type: http
namespace: servicenow
baseUri: "https://alaskaair.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_pass"
resources:
- name: ci
path: "/table/cmdb_ci"
operations:
- name: update-ci
method: PATCH
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/hr-admin/channels/general/messages"
operations:
- name: send-message
method: POST
Processes crew base transfers by updating the Workday record, adjusting Okta access groups for the new base, and notifying the crew member and new base manager via Microsoft Teams.
naftiko: "0.5"
info:
label: "Crew Base Transfer Processing"
description: "Processes crew base transfers by updating the Workday record, adjusting Okta access groups for the new base, and notifying the crew member and new base manager via Microsoft Teams."
tags:
- crew-management
- workday
- okta
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: crew-management
port: 8080
tools:
- name: process_base_transfer
description: "Given a crew member ID and new base, process the transfer."
inputParameters:
- name: crew_id
in: body
type: string
description: "The crew member Workday ID."
- name: new_base
in: body
type: string
description: "The new base station code."
steps:
- name: update-workday
type: call
call: "workday.update-worker-location"
with:
worker_id: "{{crew_id}}"
location: "{{new_base}}"
- name: update-access
type: call
call: "okta.update-user-groups"
with:
user_id: "{{crew_id}}"
new_group: "crew-{{new_base}}"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "crew-admin"
message: "Base transfer completed: {{crew_id}} to {{new_base}}. Workday and Okta updated."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/alaska/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: update-worker-location
method: PATCH
- type: http
namespace: okta
baseUri: "https://alaskaair.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: groups
path: "/users/{{user_id}}/groups"
inputParameters:
- name: user_id
in: path
operations:
- name: update-user-groups
method: PUT
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/crew-admin/channels/general/messages"
operations:
- name: send-message
method: POST
Evaluates crew fatigue risk by checking duty times in Workday, cross-referencing rest periods in Snowflake, and alerting crew scheduling via Slack if risk thresholds are exceeded.
naftiko: "0.5"
info:
label: "Crew Fatigue Risk Assessment"
description: "Evaluates crew fatigue risk by checking duty times in Workday, cross-referencing rest periods in Snowflake, and alerting crew scheduling via Slack if risk thresholds are exceeded."
tags:
- crew-management
- workday
- snowflake
- slack
capability:
exposes:
- type: mcp
namespace: crew-management
port: 8080
tools:
- name: assess_fatigue_risk
description: "Given a crew member ID, evaluate fatigue risk based on duty and rest records."
inputParameters:
- name: crew_id
in: body
type: string
description: "The crew member identifier."
steps:
- name: get-duty-hours
type: call
call: "workday.get-duty-record"
with:
worker_id: "{{crew_id}}"
- name: get-rest-periods
type: call
call: "snowflake.run-query"
with:
query: "SELECT rest_hours, duty_date FROM crew_rest WHERE crew_id = '{{crew_id}}' ORDER BY duty_date DESC LIMIT 7"
- name: alert-scheduling
type: call
call: "slack.post-message"
with:
channel: "crew-scheduling"
text: "Fatigue assessment for {{crew_id}}: Recent duty hours: {{get-duty-hours.total_hours}}. Min rest: {{get-rest-periods.data[0].REST_HOURS}}h"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: duty
path: "/alaska/workers/{{worker_id}}/timeOff"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-duty-record
method: GET
- type: http
namespace: snowflake
baseUri: "https://alaska.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Coordinates crew hotel bookings by checking crew layover schedules in Workday, querying hotel availability, and confirming bookings with a notification to crew scheduling via Slack.
naftiko: "0.5"
info:
label: "Crew Hotel Booking Coordinator"
description: "Coordinates crew hotel bookings by checking crew layover schedules in Workday, querying hotel availability, and confirming bookings with a notification to crew scheduling via Slack."
tags:
- crew-management
- workday
- slack
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: crew-management
port: 8080
tools:
- name: coordinate_crew_hotels
description: "Given a station and date, coordinate crew hotel bookings."
inputParameters:
- name: station
in: body
type: string
description: "The layover station."
- name: date
in: body
type: string
description: "Layover date."
steps:
- name: get-layovers
type: call
call: "workday.get-crew-layovers"
with:
station: "{{station}}"
date: "{{date}}"
- name: notify-scheduling
type: call
call: "slack.post-message"
with:
channel: "crew-scheduling"
text: "Hotel coordination for {{station}} on {{date}}: {{get-layovers.crew_count}} crew members need rooms."
- name: confirm-bookings
type: call
call: "msteams.send-message"
with:
channel_id: "crew-admin"
message: "Hotel bookings confirmed for {{station}} ({{date}}). {{get-layovers.crew_count}} rooms."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: layovers
path: "/alaska/crewLayovers?station={{station}}&date={{date}}"
inputParameters:
- name: station
in: query
- name: date
in: query
operations:
- name: get-crew-layovers
method: GET
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/crew-admin/channels/general/messages"
operations:
- name: send-message
method: POST
Detects crew scheduling conflicts in Workday, creates a Jira task for crew planning, and notifies the crew scheduling team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Crew Scheduling Conflict Resolver"
description: "Detects crew scheduling conflicts in Workday, creates a Jira task for crew planning, and notifies the crew scheduling team via Microsoft Teams."
tags:
- crew-operations
- scheduling
- workday
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: crew-ops
port: 8080
tools:
- name: resolve-crew-conflict
description: "Given a crew member ID and date range, detect scheduling conflicts in Workday, create Jira task, and notify crew scheduling via Teams."
inputParameters:
- name: crew_member_id
in: body
type: string
description: "The Workday employee ID of the crew member."
- name: date_range
in: body
type: string
description: "The date range to check."
steps:
- name: check-schedule
type: call
call: workday.get-crew-schedule
with:
employee_id: "{{crew_member_id}}"
range: "{{date_range}}"
- name: create-task
type: call
call: jira.create-issue
with:
project_key: "CREW"
summary: "Scheduling conflict: {{crew_member_id}} — {{date_range}}"
description: "Conflicts: {{check-schedule.conflict_count}}"
issue_type: "Task"
- name: notify-scheduling
type: call
call: msteams.send-message
with:
channel_id: "$secrets.teams_crew_channel_id"
text: "CREW CONFLICT: {{crew_member_id}} has {{check-schedule.conflict_count}} conflicts in {{date_range}}. Jira: {{create-task.key}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd5-services1.workday.com/ccx/api/v1/alaska-airlines"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: schedules
path: "/workers/{{employee_id}}/schedule"
inputParameters:
- name: employee_id
in: path
operations:
- name: get-crew-schedule
method: GET
- type: http
namespace: jira
baseUri: "https://alaska-airlines.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Analyzes complaint trends by querying Salesforce case data, enriching with flight data from Snowflake, and posting a trend report to the customer experience Teams channel.
naftiko: "0.5"
info:
label: "Customer Complaint Trend Analysis"
description: "Analyzes complaint trends by querying Salesforce case data, enriching with flight data from Snowflake, and posting a trend report to the customer experience Teams channel."
tags:
- customer-service
- salesforce
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: customer-service
port: 8080
tools:
- name: analyze_complaint_trends
description: "Given a period, compile complaint trends and post the analysis."
inputParameters:
- name: period
in: body
type: string
description: "Reporting period (e.g., 2026-03)."
steps:
- name: get-complaints
type: call
call: "salesforce.get-case-trends"
with:
period: "{{period}}"
- name: get-flight-context
type: call
call: "snowflake.run-query"
with:
query: "SELECT category, count(*) as cnt FROM complaints WHERE period = '{{period}}' GROUP BY category ORDER BY cnt DESC"
- name: post-analysis
type: call
call: "msteams.send-message"
with:
channel_id: "customer-experience"
message: "Complaint Trends {{period}} | Total cases: {{get-complaints.total}}. Top category: {{get-flight-context.data[0].CATEGORY}} ({{get-flight-context.data[0].CNT}})"
consumes:
- type: http
namespace: salesforce
baseUri: "https://alaskaair.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/query?q=SELECT+Count()+FROM+Case+WHERE+CreatedDate>=THIS_MONTH"
operations:
- name: get-case-trends
method: GET
- type: http
namespace: snowflake
baseUri: "https://alaska.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/customer-experience/channels/general/messages"
operations:
- name: send-message
method: POST
Compiles the daily operations briefing by pulling flight performance from Snowflake, crew staffing from Workday, and posting the brief to the leadership Teams channel.
naftiko: "0.5"
info:
label: "Daily Operations Briefing Compiler"
description: "Compiles the daily operations briefing by pulling flight performance from Snowflake, crew staffing from Workday, and posting the brief to the leadership Teams channel."
tags:
- flight-operations
- snowflake
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: flight-operations
port: 8080
tools:
- name: compile_daily_briefing
description: "Given a date, compile the daily operations briefing."
inputParameters:
- name: report_date
in: body
type: string
description: "Report date in YYYY-MM-DD."
steps:
- name: get-flight-performance
type: call
call: "snowflake.run-query"
with:
query: "SELECT on_time_pct, completion_factor, cancellation_count FROM daily_ops WHERE ops_date = '{{report_date}}'"
- name: get-staffing
type: call
call: "workday.get-staffing-summary"
with:
date: "{{report_date}}"
- name: post-briefing
type: call
call: "msteams.send-message"
with:
channel_id: "ops-leadership"
message: "Daily Ops Brief {{report_date}} | OTP: {{get-flight-performance.data[0].ON_TIME_PCT}}% | Completion: {{get-flight-performance.data[0].COMPLETION_FACTOR}}% | Cancellations: {{get-flight-performance.data[0].CANCELLATION_COUNT}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://alaska.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: staffing
path: "/alaska/staffing/summary?date={{date}}"
inputParameters:
- name: date
in: query
operations:
- name: get-staffing-summary
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/ops-leadership/channels/general/messages"
operations:
- name: send-message
method: POST
When Snowflake query SLAs are breached, retrieves the offending queries, creates a Jira ticket for the data team, and alerts the analytics Slack channel.
naftiko: "0.5"
info:
label: "Data Warehouse SLA Breach Handler"
description: "When Snowflake query SLAs are breached, retrieves the offending queries, creates a Jira ticket for the data team, and alerts the analytics Slack channel."
tags:
- data-engineering
- snowflake
- jira
- slack
capability:
exposes:
- type: mcp
namespace: data-engineering
port: 8080
tools:
- name: handle_sla_breach
description: "Given a warehouse name, investigate SLA breaches and create tickets."
inputParameters:
- name: warehouse
in: body
type: string
description: "The Snowflake warehouse name."
steps:
- name: get-slow-queries
type: call
call: "snowflake.run-query"
with:
query: "SELECT query_id, execution_time, user_name FROM query_history WHERE warehouse = '{{warehouse}}' AND execution_time > sla_threshold ORDER BY execution_time DESC LIMIT 10"
- name: create-ticket
type: call
call: "jira.create-issue"
with:
project: "DATA"
summary: "SLA breach: {{warehouse}} - {{get-slow-queries.row_count}} slow queries"
issuetype: "Bug"
- name: alert-team
type: call
call: "slack.post-message"
with:
channel: "data-analytics"
text: "SLA breach on {{warehouse}}: {{get-slow-queries.row_count}} queries exceeded threshold. Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://alaska.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira
baseUri: "https://alaska-airlines.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Retrieves SLO compliance history from Datadog for Alaska Airlines customer-facing applications, publishes the weekly report to Confluence, and refreshes the Power BI operations dashboard. Ensures on-time performance visibility for leadership.
naftiko: "0.5"
info:
label: "Datadog Application SLO Report"
description: "Retrieves SLO compliance history from Datadog for Alaska Airlines customer-facing applications, publishes the weekly report to Confluence, and refreshes the Power BI operations dashboard. Ensures on-time performance visibility for leadership."
tags:
- observability
- slo
- datadog
- confluence
- power-bi
capability:
exposes:
- type: mcp
namespace: slo-reporting
port: 8080
tools:
- name: publish-slo-report
description: "Given a Datadog SLO ID list and report week, retrieve compliance data, publish to Confluence, and refresh Power BI. Use for weekly application SLO reporting across Alaska Airlines digital platforms."
inputParameters:
- name: slo_ids
in: body
type: string
description: "Comma-separated Datadog SLO IDs to include in the report."
- name: report_week
in: body
type: string
description: "The ISO week identifier for the report (e.g., 2025-W14)."
steps:
- name: get-slo-history
type: call
call: "datadog-slo.get-slo-history"
with:
slo_ids: "{{slo_ids}}"
- name: publish-confluence-page
type: call
call: "confluence-slo.create-page"
with:
space_key: "OPS"
title: "SLO Report — {{report_week}}"
body: "Weekly SLO compliance: {{get-slo-history.summary}}"
- name: refresh-powerbi
type: call
call: "powerbi-slo.trigger-refresh"
with:
dataset_id: "$secrets.powerbi_slo_dataset_id"
consumes:
- type: http
namespace: datadog-slo
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: slo-history
path: "/slo/history"
inputParameters:
- name: slo_ids
in: query
operations:
- name: get-slo-history
method: GET
- type: http
namespace: confluence-slo
baseUri: "https://alaska-airlines.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: page
path: "/content"
inputParameters:
- name: space_key
in: body
- name: title
in: body
- name: body
in: body
operations:
- name: create-page
method: POST
- type: http
namespace: powerbi-slo
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: refresh
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: trigger-refresh
method: POST
Retrieves the current status of Datadog monitors for flight operations systems, returning monitor name, status, and last triggered time.
naftiko: "0.5"
info:
label: "Datadog Flight Systems Monitor Status"
description: "Retrieves the current status of Datadog monitors for flight operations systems, returning monitor name, status, and last triggered time."
tags:
- it-operations
- datadog
- monitoring
capability:
exposes:
- type: mcp
namespace: monitoring
port: 8080
tools:
- name: get-flight-system-monitors
description: "Given a monitor tag, retrieve the status of flight systems monitors from Datadog."
inputParameters:
- name: tag
in: body
type: string
description: "The Datadog monitor tag to filter by."
call: "datadog.get-monitors"
with:
tag: "{{tag}}"
outputParameters:
- name: monitors
type: array
mapping: "$.monitors"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: monitors
path: "/monitor?tags={{tag}}"
inputParameters:
- name: tag
in: query
operations:
- name: get-monitors
method: GET
Queries Datadog for the current health status of a monitored flight operations service, returning uptime, error rate, and p99 latency.
naftiko: "0.5"
info:
label: "Datadog Service Health Check"
description: "Queries Datadog for the current health status of a monitored flight operations service, returning uptime, error rate, and p99 latency."
tags:
- observability
- monitoring
- datadog
- sre
capability:
exposes:
- type: mcp
namespace: observability
port: 8080
tools:
- name: get-service-health
description: "Check health of an Alaska Airlines service in Datadog. Returns uptime, error rate, and p99 latency."
inputParameters:
- name: service_name
in: body
type: string
description: "The Datadog service name."
call: datadog.get-service-metrics
with:
service_name: "{{service_name}}"
outputParameters:
- name: uptime_pct
type: string
mapping: "$.series[0].pointlist[-1][1]"
- name: error_rate
type: string
mapping: "$.series[1].pointlist[-1][1]"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: metrics
path: "/query"
operations:
- name: get-service-metrics
method: GET
When an employee departure is confirmed in Workday, deactivates the Microsoft Entra ID account, closes open Jira tasks, and sends a handover summary to the departing employee's manager via Teams. Ensures complete offboarding for Alaska Airlines staff.
naftiko: "0.5"
info:
label: "Employee Offboarding Orchestration"
description: "When an employee departure is confirmed in Workday, deactivates the Microsoft Entra ID account, closes open Jira tasks, and sends a handover summary to the departing employee's manager via Teams. Ensures complete offboarding for Alaska Airlines staff."
tags:
- hr
- offboarding
- workday
- microsoft-entra
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-offboarding
port: 8080
tools:
- name: trigger-employee-offboarding
description: "Given a Workday employee ID and last working day, disable the Entra ID account and notify the manager in Teams. Use when an employee's departure is confirmed in Workday."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday worker ID of the departing employee."
- name: last_working_day
in: body
type: string
description: "The employee's last working day in ISO 8601 format (YYYY-MM-DD)."
steps:
- name: get-worker
type: call
call: "workday-off.get-worker"
with:
employee_id: "{{employee_id}}"
- name: disable-entra-account
type: call
call: "entra-id.disable-user"
with:
userPrincipalName: "{{get-worker.email}}"
accountEnabled: false
- name: notify-manager
type: call
call: "msteams-off.send-message"
with:
channel_id: "{{get-worker.manager_email}}"
message: "Offboarding complete for {{get-worker.display_name}}. Last day: {{last_working_day}}. Account deactivated."
consumes:
- type: http
namespace: workday-off
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: worker
path: "/alaska-airlines/workers/{{employee_id}}"
inputParameters:
- name: employee_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: entra-id
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: user
path: "/users/{{userPrincipalName}}"
inputParameters:
- name: userPrincipalName
in: path
- name: accountEnabled
in: body
operations:
- name: disable-user
method: PATCH
- type: http
namespace: msteams-off
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: message
path: "/users/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
- name: message
in: body
operations:
- name: send-message
method: POST
When an employee role change is approved in Workday, updates Entra ID group memberships and notifies both the employee and their new manager via Microsoft Teams. Supports Alaska Airlines access provisioning for crew and corporate role transitions.
naftiko: "0.5"
info:
label: "Employee Role Change Provisioning"
description: "When an employee role change is approved in Workday, updates Entra ID group memberships and notifies both the employee and their new manager via Microsoft Teams. Supports Alaska Airlines access provisioning for crew and corporate role transitions."
tags:
- hr
- identity
- role-change
- workday
- microsoft-entra
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-role-change
port: 8080
tools:
- name: provision-role-change
description: "Given a Workday employee ID, old Entra group ID, and new Entra group ID, update group memberships and notify the employee and new manager in Teams. Use when an employee's role or position changes are approved."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday worker ID of the employee changing roles."
- name: old_group_id
in: body
type: string
description: "The Entra ID group ID to remove the employee from."
- name: new_group_id
in: body
type: string
description: "The Entra ID group ID to add the employee to."
steps:
- name: get-worker-info
type: call
call: "workday-role.get-worker"
with:
employee_id: "{{employee_id}}"
- name: remove-old-group
type: call
call: "entra-role.remove-group-member"
with:
group_id: "{{old_group_id}}"
user_id: "{{get-worker-info.entra_object_id}}"
- name: add-new-group
type: call
call: "entra-role.add-group-member"
with:
group_id: "{{new_group_id}}"
user_id: "{{get-worker-info.entra_object_id}}"
- name: notify-employee
type: call
call: "msteams-role.send-message"
with:
channel_id: "{{get-worker-info.email}}"
message: "Your role has been updated in Alaska Airlines systems. New access is now active."
consumes:
- type: http
namespace: workday-role
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: worker
path: "/alaska-airlines/workers/{{employee_id}}"
inputParameters:
- name: employee_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: entra-role
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: group-member
path: "/groups/{{group_id}}/members/{{user_id}}/$ref"
inputParameters:
- name: group_id
in: path
- name: user_id
in: path
operations:
- name: add-group-member
method: POST
- name: remove-group-member
method: DELETE
- type: http
namespace: msteams-role
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: message
path: "/users/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
- name: message
in: body
operations:
- name: send-message
method: POST
When engine health parameters exceed thresholds in Snowflake, retrieves maintenance history from Oracle ERP, and pages the powerplant engineering team via PagerDuty.
naftiko: "0.5"
info:
label: "Engine Health Monitoring Alert"
description: "When engine health parameters exceed thresholds in Snowflake, retrieves maintenance history from Oracle ERP, and pages the powerplant engineering team via PagerDuty."
tags:
- maintenance
- snowflake
- oracle-erp
- pagerduty
capability:
exposes:
- type: mcp
namespace: maintenance
port: 8080
tools:
- name: alert_engine_health
description: "Given a tail number and engine position, check health parameters and alert if needed."
inputParameters:
- name: tail_number
in: body
type: string
description: "The aircraft tail number."
- name: engine_position
in: body
type: string
description: "Engine position (1 or 2)."
steps:
- name: get-health-data
type: call
call: "snowflake.run-query"
with:
query: "SELECT egt_margin, oil_consumption, vibration_level FROM engine_health WHERE tail_number = '{{tail_number}}' AND engine_pos = '{{engine_position}}' ORDER BY reading_date DESC LIMIT 1"
- name: get-mx-history
type: call
call: "oracle-erp.get-engine-maintenance"
with:
tail_number: "{{tail_number}}"
engine_position: "{{engine_position}}"
- name: page-powerplant
type: call
call: "pagerduty.create-incident"
with:
title: "Engine health alert: {{tail_number}} E{{engine_position}}"
service_id: "powerplant-engineering"
urgency: "high"
body: "EGT margin: {{get-health-data.data[0].EGT_MARGIN}}. Last shop visit: {{get-mx-history.last_shop_visit}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://alaska.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: oracle-erp
baseUri: "https://alaska-erp.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: basic
username: "$secrets.oracle_erp_user"
password: "$secrets.oracle_erp_pass"
resources:
- name: engine-maintenance
path: "/fixedAssets/{{tail_number}}/engines/{{engine_position}}/maintenance"
inputParameters:
- name: tail_number
in: path
- name: engine_position
in: path
operations:
- name: get-engine-maintenance
method: GET
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_api_key"
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
Tracks FAA Airworthiness Directive compliance by querying the compliance database in Snowflake, cross-referencing fleet data in Oracle ERP, and posting status to the safety Teams channel.
naftiko: "0.5"
info:
label: "FAA AD Compliance Tracker"
description: "Tracks FAA Airworthiness Directive compliance by querying the compliance database in Snowflake, cross-referencing fleet data in Oracle ERP, and posting status to the safety Teams channel."
tags:
- compliance
- snowflake
- oracle-erp
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: compliance
port: 8080
tools:
- name: track_ad_compliance
description: "Given an AD number, check fleet compliance status."
inputParameters:
- name: ad_number
in: body
type: string
description: "The FAA AD reference number."
steps:
- name: get-compliance-status
type: call
call: "snowflake.run-query"
with:
query: "SELECT tail_number, compliance_status, due_date FROM ad_compliance WHERE ad_number = '{{ad_number}}'"
- name: get-fleet-info
type: call
call: "oracle-erp.get-fleet-assets"
with:
ad_number: "{{ad_number}}"
- name: post-status
type: call
call: "msteams.send-message"
with:
channel_id: "safety-compliance"
message: "AD {{ad_number}} compliance: {{get-compliance-status.row_count}} aircraft tracked. Fleet assets: {{get-fleet-info.count}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://alaska.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: oracle-erp
baseUri: "https://alaska-erp.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: basic
username: "$secrets.oracle_erp_user"
password: "$secrets.oracle_erp_pass"
resources:
- name: fleet
path: "/fixedAssets?ad={{ad_number}}"
inputParameters:
- name: ad_number
in: query
operations:
- name: get-fleet-assets
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/safety-compliance/channels/general/messages"
operations:
- name: send-message
method: POST
Orchestrates Aircraft on Ground response by identifying the AOG aircraft in Snowflake, paging the maintenance duty manager via PagerDuty, and creating an emergency Jira ticket.
naftiko: "0.5"
info:
label: "Fleet AOG Response Orchestrator"
description: "Orchestrates Aircraft on Ground response by identifying the AOG aircraft in Snowflake, paging the maintenance duty manager via PagerDuty, and creating an emergency Jira ticket."
tags:
- maintenance
- snowflake
- pagerduty
- jira
capability:
exposes:
- type: mcp
namespace: maintenance
port: 8080
tools:
- name: respond_to_aog
description: "Given a tail number and station, initiate AOG response procedures."
inputParameters:
- name: tail_number
in: body
type: string
description: "The aircraft tail number."
- name: station
in: body
type: string
description: "The station IATA code."
steps:
- name: get-aircraft-info
type: call
call: "snowflake.run-query"
with:
query: "SELECT fleet_type, next_scheduled_flight, pax_affected FROM fleet_status WHERE tail_number = '{{tail_number}}'"
- name: page-duty-manager
type: call
call: "pagerduty.create-incident"
with:
title: "AOG: {{tail_number}} at {{station}}"
service_id: "maintenance-ops"
urgency: "high"
- name: create-mx-ticket
type: call
call: "jira.create-issue"
with:
project: "MX"
summary: "AOG: {{tail_number}} at {{station}} - {{get-aircraft-info.data[0].FLEET_TYPE}}"
issuetype: "Bug"
priority: "Critical"
consumes:
- type: http
namespace: snowflake
baseUri: "https://alaska.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_api_key"
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
- type: http
namespace: jira
baseUri: "https://alaska-airlines.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Tracks fleet insurance renewals by pulling policy dates from Oracle ERP, checking claims history in Snowflake, and notifying the risk management team via Microsoft Teams before expiry.
naftiko: "0.5"
info:
label: "Fleet Insurance Renewal Tracker"
description: "Tracks fleet insurance renewals by pulling policy dates from Oracle ERP, checking claims history in Snowflake, and notifying the risk management team via Microsoft Teams before expiry."
tags:
- finance
- oracle-erp
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: finance
port: 8080
tools:
- name: track_insurance_renewals
description: "Given a days-ahead threshold, identify policies nearing renewal."
inputParameters:
- name: days_ahead
in: body
type: string
description: "Number of days to look ahead."
steps:
- name: get-expiring-policies
type: call
call: "oracle-erp.get-insurance-policies"
with:
days_ahead: "{{days_ahead}}"
- name: get-claims-history
type: call
call: "snowflake.run-query"
with:
query: "SELECT policy_id, claim_count, total_payout FROM insurance_claims GROUP BY policy_id"
- name: notify-risk-team
type: call
call: "msteams.send-message"
with:
channel_id: "risk-management"
message: "Insurance renewals: {{get-expiring-policies.count}} policies expiring in {{days_ahead}} days. Claims history available for review."
consumes:
- type: http
namespace: oracle-erp
baseUri: "https://alaska-erp.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: basic
username: "$secrets.oracle_erp_user"
password: "$secrets.oracle_erp_pass"
resources:
- name: policies
path: "/insurancePolicies?expiringIn={{days_ahead}}"
inputParameters:
- name: days_ahead
in: query
operations:
- name: get-insurance-policies
method: GET
- type: http
namespace: snowflake
baseUri: "https://alaska.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/risk-management/channels/general/messages"
operations:
- name: send-message
method: POST
When a flight irregularity is detected, retrieves flight details from Snowflake, creates a ServiceNow incident for operations, rebooking tasks in Salesforce, and alerts operations via Microsoft Teams.
naftiko: "0.5"
info:
label: "Flight Irregular Operations Handler"
description: "When a flight irregularity is detected, retrieves flight details from Snowflake, creates a ServiceNow incident for operations, rebooking tasks in Salesforce, and alerts operations via Microsoft Teams."
tags:
- flight-operations
- irrops
- snowflake
- servicenow
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: flight-ops
port: 8080
tools:
- name: handle-irregular-ops
description: "Given a flight number and date, retrieve IRROPS details from Snowflake, create ServiceNow incident, Salesforce rebooking tasks, and alert operations via Teams."
inputParameters:
- name: flight_number
in: body
type: string
description: "The flight number, e.g. AS123."
- name: flight_date
in: body
type: string
description: "The flight date."
steps:
- name: query-flight
type: call
call: snowflake.query-flight-details
with:
flight: "{{flight_number}}"
date: "{{flight_date}}"
- name: create-incident
type: call
call: servicenow.create-incident
with:
short_description: "IRROPS: {{flight_number}} on {{flight_date}}"
description: "Status: {{query-flight.status}}. Affected passengers: {{query-flight.pax_count}}."
urgency: "1"
- name: create-rebooking
type: call
call: salesforce.create-rebooking-task
with:
flight: "{{flight_number}}"
pax_count: "{{query-flight.pax_count}}"
- name: alert-ops
type: call
call: msteams.send-message
with:
channel_id: "$secrets.teams_ops_channel_id"
text: "IRROPS: {{flight_number}} on {{flight_date}} — {{query-flight.pax_count}} pax affected. INC {{create-incident.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://alaska-airlines.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query-flight-details
method: POST
- type: http
namespace: servicenow
baseUri: "https://alaskaairlines.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: salesforce
baseUri: "https://alaska-airlines.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: tasks
path: "/sobjects/Task"
operations:
- name: create-rebooking-task
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When a Priority-1 incident impacting flight operations systems is created in ServiceNow, retrieves Datadog alert context, pages the on-call engineer via PagerDuty, and assembles a war-room Teams channel. Ensures rapid response for Alaska Airlines operational technology outages.
naftiko: "0.5"
info:
label: "Flight Operations IT Priority-1 Incident Triage"
description: "When a Priority-1 incident impacting flight operations systems is created in ServiceNow, retrieves Datadog alert context, pages the on-call engineer via PagerDuty, and assembles a war-room Teams channel. Ensures rapid response for Alaska Airlines operational technology outages."
tags:
- itsm
- incident-response
- servicenow
- datadog
- pagerduty
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: it-ops
port: 8080
tools:
- name: handle-p1-incident
description: "Given a ServiceNow incident number and Datadog monitor ID, retrieve alert context, page the on-call team via PagerDuty, and post a war-room summary to the ops Teams channel. Use when a P1 incident affecting flight operations systems is created."
inputParameters:
- name: incident_number
in: body
type: string
description: "The ServiceNow incident number (e.g., INC0012345)."
- name: monitor_id
in: body
type: string
description: "The Datadog monitor ID for the triggering alert."
- name: affected_system
in: body
type: string
description: "The name of the affected operational system (e.g., DCS, PSS, crew-scheduling)."
steps:
- name: get-snow-incident
type: call
call: "servicenow-it.get-incident"
with:
number: "{{incident_number}}"
- name: get-datadog-alert
type: call
call: "datadog-it.get-monitor"
with:
monitor_id: "{{monitor_id}}"
- name: page-oncall
type: call
call: "pagerduty-it.create-incident"
with:
title: "P1: {{get-snow-incident.short_description}} — {{affected_system}}"
service_id: "$secrets.pagerduty_ops_service_id"
urgency: "high"
- name: notify-war-room
type: call
call: "msteams-it.send-message"
with:
channel_id: "it-incident-response"
message: "P1 ACTIVE: {{affected_system}} — {{get-snow-incident.short_description}}. PD: {{page-oncall.incident_number}}"
consumes:
- type: http
namespace: servicenow-it
baseUri: "https://alaska-airlines.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_pass"
resources:
- name: incident
path: "/table/incident"
inputParameters:
- name: number
in: query
operations:
- name: get-incident
method: GET
- type: http
namespace: datadog-it
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: monitor
path: "/monitor/{{monitor_id}}"
inputParameters:
- name: monitor_id
in: path
operations:
- name: get-monitor
method: GET
- type: http
namespace: pagerduty-it
baseUri: "https://api.pagerduty.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.pagerduty_token"
placement: header
resources:
- name: incident
path: "/incidents"
inputParameters:
- name: title
in: body
- name: service_id
in: body
- name: urgency
in: body
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams-it
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: message
path: "/teams/{{channel_id}}/channels/messages"
inputParameters:
- name: channel_id
in: path
- name: message
in: body
operations:
- name: send-message
method: POST
Compiles fuel cost variance by pulling planned costs from Oracle ERP, actual consumption from Snowflake, and posting the variance report to the fuel management Teams channel.
naftiko: "0.5"
info:
label: "Fuel Cost Variance Analysis"
description: "Compiles fuel cost variance by pulling planned costs from Oracle ERP, actual consumption from Snowflake, and posting the variance report to the fuel management Teams channel."
tags:
- finance
- oracle-erp
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: finance
port: 8080
tools:
- name: analyze-fuel-variance
description: "Given a period, compile planned vs actual fuel costs and post the variance report."
inputParameters:
- name: period
in: body
type: string
description: "Reporting period (e.g., 2026-03)."
steps:
- name: get-planned
type: call
call: "oracle-erp.get-fuel-budget"
with:
period: "{{period}}"
- name: get-actual
type: call
call: "snowflake.run-query"
with:
query: "SELECT SUM(fuel_cost) as actual_cost, SUM(gallons) as gallons FROM fuel_consumption WHERE period = '{{period}}'"
- name: post-report
type: call
call: "msteams.send-message"
with:
channel_id: "fuel-management"
message: "Fuel variance for {{period}} | Planned: {{get-planned.budget}} | Actual: {{get-actual.data[0].ACTUAL_COST}} | Gallons: {{get-actual.data[0].GALLONS}}"
consumes:
- type: http
namespace: oracle-erp
baseUri: "https://alaska-erp.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: basic
username: "$secrets.oracle_erp_user"
password: "$secrets.oracle_erp_pass"
resources:
- name: budget
path: "/budgets?category=FUEL&period={{period}}"
inputParameters:
- name: period
in: query
operations:
- name: get-fuel-budget
method: GET
- type: http
namespace: snowflake
baseUri: "https://alaska.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/fuel-management/channels/general/messages"
operations:
- name: send-message
method: POST
When a gate conflict is detected, retrieves flight details from Snowflake, checks alternative gates, and notifies the ramp coordinator via Microsoft Teams.
naftiko: "0.5"
info:
label: "Gate Assignment Conflict Resolver"
description: "When a gate conflict is detected, retrieves flight details from Snowflake, checks alternative gates, and notifies the ramp coordinator via Microsoft Teams."
tags:
- flight-operations
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: flight-ops
port: 8080
tools:
- name: resolve-gate-conflict
description: "Given a flight number and station, identify the conflict and notify the ramp team."
inputParameters:
- name: flight_number
in: body
type: string
description: "The flight number."
- name: station
in: body
type: string
description: "The IATA station code."
steps:
- name: get-conflict-details
type: call
call: "snowflake.run-query"
with:
query: "SELECT flight_number, gate, arrival_time, departure_time FROM gate_assignments WHERE station = '{{station}}' AND gate IN (SELECT gate FROM gate_assignments WHERE flight_number = '{{flight_number}}')"
- name: notify-ramp
type: call
call: "msteams.send-message"
with:
channel_id: "ramp-ops-{{station}}"
message: "Gate conflict at {{station}} for flight {{flight_number}}. {{get-conflict-details.row_count}} flights sharing gate."
consumes:
- type: http
namespace: snowflake
baseUri: "https://alaska.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/ramp-ops/channels/general/messages"
operations:
- name: send-message
method: POST
Retrieves the latest deployment status for a GitHub repository, returning environment, state, and timestamp.
naftiko: "0.5"
info:
label: "GitHub Deployment Pipeline Status"
description: "Retrieves the latest deployment status for a GitHub repository, returning environment, state, and timestamp."
tags:
- engineering
- github
- ci-cd
capability:
exposes:
- type: mcp
namespace: engineering
port: 8080
tools:
- name: get-deployment-status
description: "Given a repository and environment, retrieve the latest deployment status."
inputParameters:
- name: repo
in: body
type: string
description: "The GitHub repository (org/repo format)."
- name: environment
in: body
type: string
description: "The deployment environment."
call: "github.get-deployments"
with:
repo: "{{repo}}"
environment: "{{environment}}"
outputParameters:
- name: state
type: string
mapping: "$.deployments[0].statuses[0].state"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: deployments
path: "/repos/{{repo}}/deployments?environment={{environment}}&per_page=1"
inputParameters:
- name: repo
in: path
- name: environment
in: query
operations:
- name: get-deployments
method: GET
Creates a GitHub release tag for an Alaska Airlines digital product, publishes release notes to Confluence, and notifies the engineering and operations Teams channels. Coordinates software release activities across the airline's digital portfolio.
naftiko: "0.5"
info:
label: "GitHub Release Deployment Coordination"
description: "Creates a GitHub release tag for an Alaska Airlines digital product, publishes release notes to Confluence, and notifies the engineering and operations Teams channels. Coordinates software release activities across the airline's digital portfolio."
tags:
- devops
- release-management
- github
- confluence
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: release-mgmt
port: 8080
tools:
- name: coordinate-release
description: "Given a GitHub repository, version tag, and release notes, create the GitHub release, publish to Confluence, and notify the engineering Teams channel. Use when releasing a new version of an Alaska Airlines digital system."
inputParameters:
- name: repo_owner
in: body
type: string
description: "The GitHub organization or owner name."
- name: repo_name
in: body
type: string
description: "The GitHub repository name (e.g., alaskaair-mobile-app, alaskaair-booking-api)."
- name: version_tag
in: body
type: string
description: "The semantic version tag (e.g., v3.12.0)."
- name: release_notes
in: body
type: string
description: "The release notes describing changes in this version."
steps:
- name: create-github-release
type: call
call: "github-release.create-release"
with:
owner: "{{repo_owner}}"
repo: "{{repo_name}}"
tag_name: "{{version_tag}}"
body: "{{release_notes}}"
- name: publish-confluence
type: call
call: "confluence-release.create-page"
with:
space_key: "ENG"
title: "Release: {{repo_name}} {{version_tag}}"
body: "{{release_notes}}"
- name: notify-engineering
type: call
call: "msteams-release.send-message"
with:
channel_id: "engineering-releases"
message: "Released {{version_tag}} for {{repo_name}}. Notes: {{publish-confluence.url}}"
consumes:
- type: http
namespace: github-release
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: release
path: "/repos/{{owner}}/{{repo}}/releases"
inputParameters:
- name: owner
in: path
- name: repo
in: path
- name: tag_name
in: body
- name: body
in: body
operations:
- name: create-release
method: POST
- type: http
namespace: confluence-release
baseUri: "https://alaska-airlines.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: page
path: "/content"
inputParameters:
- name: space_key
in: body
- name: title
in: body
- name: body
in: body
operations:
- name: create-page
method: POST
- type: http
namespace: msteams-release
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: message
path: "/teams/{{channel_id}}/channels/messages"
inputParameters:
- name: channel_id
in: path
- name: message
in: body
operations:
- name: send-message
method: POST
Schedules ground equipment maintenance by retrieving equipment status from ServiceNow CMDB, checking usage hours in Snowflake, and creating work orders in Jira.
naftiko: "0.5"
info:
label: "Ground Equipment Maintenance Scheduler"
description: "Schedules ground equipment maintenance by retrieving equipment status from ServiceNow CMDB, checking usage hours in Snowflake, and creating work orders in Jira."
tags:
- maintenance
- servicenow
- snowflake
- jira
capability:
exposes:
- type: mcp
namespace: maintenance
port: 8080
tools:
- name: schedule_gse_maintenance
description: "Given an equipment type and station, schedule maintenance based on usage."
inputParameters:
- name: equipment_type
in: body
type: string
description: "The ground equipment type."
- name: station
in: body
type: string
description: "The station code."
steps:
- name: get-equipment
type: call
call: "servicenow.get-gse-assets"
with:
type: "{{equipment_type}}"
station: "{{station}}"
- name: get-usage
type: call
call: "snowflake.run-query"
with:
query: "SELECT asset_id, usage_hours, last_service FROM gse_usage WHERE equipment_type = '{{equipment_type}}' AND station = '{{station}}' AND usage_hours > service_interval"
- name: create-work-orders
type: call
call: "jira.create-issue"
with:
project: "GSE"
summary: "GSE maintenance: {{equipment_type}} at {{station}} - {{get-usage.row_count}} units due"
issuetype: "Task"
consumes:
- type: http
namespace: servicenow
baseUri: "https://alaskaair.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_pass"
resources:
- name: cmdb
path: "/table/cmdb_ci?sysparm_query=type={{type}}^station={{station}}"
inputParameters:
- name: type
in: query
- name: station
in: query
operations:
- name: get-gse-assets
method: GET
- type: http
namespace: snowflake
baseUri: "https://alaska.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira
baseUri: "https://alaska-airlines.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Monitors ground handling SLAs by querying turnaround times from Snowflake, comparing against contract thresholds in Oracle ERP, and flagging breaches via Slack to the ground ops team.
naftiko: "0.5"
info:
label: "Ground Handling SLA Monitor"
description: "Monitors ground handling SLAs by querying turnaround times from Snowflake, comparing against contract thresholds in Oracle ERP, and flagging breaches via Slack to the ground ops team."
tags:
- flight-operations
- snowflake
- oracle-erp
- slack
capability:
exposes:
- type: mcp
namespace: flight-operations
port: 8080
tools:
- name: monitor_gha_sla
description: "Given a station and date, check ground handling SLA compliance."
inputParameters:
- name: station
in: body
type: string
description: "The station IATA code."
- name: date
in: body
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: get-turnaround-times
type: call
call: "snowflake.run-query"
with:
query: "SELECT avg_turnaround_min, breach_count, total_flights FROM gha_performance WHERE station = '{{station}}' AND ops_date = '{{date}}'"
- name: get-sla-thresholds
type: call
call: "oracle-erp.get-contract-sla"
with:
station: "{{station}}"
- name: alert-ops
type: call
call: "slack.post-message"
with:
channel: "ground-ops"
text: "GHA SLA {{station}} ({{date}}): Avg turnaround: {{get-turnaround-times.data[0].AVG_TURNAROUND_MIN}}min. SLA target: {{get-sla-thresholds.target_min}}min. Breaches: {{get-turnaround-times.data[0].BREACH_COUNT}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://alaska.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: oracle-erp
baseUri: "https://alaska-erp.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: basic
username: "$secrets.oracle_erp_user"
password: "$secrets.oracle_erp_pass"
resources:
- name: contracts
path: "/contracts/sla?station={{station}}"
inputParameters:
- name: station
in: query
operations:
- name: get-contract-sla
method: GET
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Activates the incident command structure by paging duty managers via PagerDuty, creating a war room in Microsoft Teams, and logging the activation in ServiceNow.
naftiko: "0.5"
info:
label: "Incident Command Activation"
description: "Activates the incident command structure by paging duty managers via PagerDuty, creating a war room in Microsoft Teams, and logging the activation in ServiceNow."
tags:
- flight-operations
- pagerduty
- microsoft-teams
- servicenow
capability:
exposes:
- type: mcp
namespace: flight-operations
port: 8080
tools:
- name: activate_incident_command
description: "Given an incident type and severity, activate the command structure."
inputParameters:
- name: incident_type
in: body
type: string
description: "Type of operational incident."
- name: severity
in: body
type: string
description: "Severity level (1-5)."
steps:
- name: page-managers
type: call
call: "pagerduty.create-incident"
with:
title: "INCIDENT COMMAND: {{incident_type}} - Sev {{severity}}"
service_id: "ops-command"
urgency: "high"
- name: create-warroom
type: call
call: "msteams.create-channel"
with:
team_id: "incident-response"
name: "IC-{{incident_type}}-{{severity}}"
- name: log-activation
type: call
call: "servicenow.create-incident"
with:
short_description: "Incident Command activated: {{incident_type}}"
priority: "{{severity}}"
category: "operations"
consumes:
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_api_key"
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{team_id}}/channels"
inputParameters:
- name: team_id
in: path
operations:
- name: create-channel
method: POST
- type: http
namespace: servicenow
baseUri: "https://alaskaair.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_pass"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
Synchronizes IFE content by checking the content catalog in Snowflake, validating licensing in SharePoint, and creating deployment tasks in Jira for the IFE engineering team.
naftiko: "0.5"
info:
label: "Inflight Entertainment Content Sync"
description: "Synchronizes IFE content by checking the content catalog in Snowflake, validating licensing in SharePoint, and creating deployment tasks in Jira for the IFE engineering team."
tags:
- it-operations
- snowflake
- sharepoint
- jira
capability:
exposes:
- type: mcp
namespace: it-operations
port: 8080
tools:
- name: sync_ife_content
description: "Given a content cycle, synchronize IFE content across fleet."
inputParameters:
- name: cycle
in: body
type: string
description: "The content cycle identifier."
steps:
- name: get-catalog
type: call
call: "snowflake.run-query"
with:
query: "SELECT title, content_type, license_end FROM ife_catalog WHERE cycle = '{{cycle}}' AND status = 'APPROVED'"
- name: check-licenses
type: call
call: "sharepoint.search-documents"
with:
query: "IFE license {{cycle}}"
- name: create-deployment
type: call
call: "jira.create-issue"
with:
project: "IFE"
summary: "IFE content deployment: Cycle {{cycle}} - {{get-catalog.row_count}} titles"
issuetype: "Task"
consumes:
- type: http
namespace: snowflake
baseUri: "https://alaska.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites/alaskaair.sharepoint.com"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: search
path: "/drive/root/search(q='{{query}}')"
inputParameters:
- name: query
in: query
operations:
- name: search-documents
method: GET
- type: http
namespace: jira
baseUri: "https://alaska-airlines.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Enforces IT change freezes by checking the freeze calendar in ServiceNow, blocking pending GitHub deployments, and notifying the engineering team via Slack.
naftiko: "0.5"
info:
label: "IT Change Freeze Enforcement"
description: "Enforces IT change freezes by checking the freeze calendar in ServiceNow, blocking pending GitHub deployments, and notifying the engineering team via Slack."
tags:
- it-operations
- servicenow
- github
- slack
capability:
exposes:
- type: mcp
namespace: it-operations
port: 8080
tools:
- name: enforce_change_freeze
description: "Check if a change freeze is active and block pending deployments."
inputParameters:
- name: repo
in: body
type: string
description: "The GitHub repository to check."
steps:
- name: check-freeze
type: call
call: "servicenow.get-freeze-status"
with:
date: "today"
- name: get-pending-deploys
type: call
call: "github.get-pending-deployments"
with:
repo: "{{repo}}"
- name: notify-team
type: call
call: "slack.post-message"
with:
channel: "engineering"
text: "Change freeze active. {{get-pending-deploys.count}} pending deployments for {{repo}} are blocked."
consumes:
- type: http
namespace: servicenow
baseUri: "https://alaskaair.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_pass"
resources:
- name: freeze
path: "/table/change_freeze?sysparm_query=active=true"
operations:
- name: get-freeze-status
method: GET
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: deployments
path: "/repos/{{repo}}/deployments?task=deploy&per_page=10"
inputParameters:
- name: repo
in: path
operations:
- name: get-pending-deployments
method: GET
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Retrieves an aircraft maintenance Jira ticket by key, returning status, assigned technician, priority, and aircraft tail number.
naftiko: "0.5"
info:
label: "Jira Maintenance Ticket Lookup"
description: "Retrieves an aircraft maintenance Jira ticket by key, returning status, assigned technician, priority, and aircraft tail number."
tags:
- maintenance
- jira
capability:
exposes:
- type: mcp
namespace: maintenance
port: 8080
tools:
- name: get-maintenance-ticket
description: "Given a Jira ticket key, retrieve the maintenance task details."
inputParameters:
- name: ticket_key
in: body
type: string
description: "The Jira ticket key, e.g. MX-4567."
call: "jira.get-issue"
with:
issue_key: "{{ticket_key}}"
outputParameters:
- name: status
type: string
mapping: "$.fields.status.name"
- name: assignee
type: string
mapping: "$.fields.assignee.displayName"
consumes:
- type: http
namespace: jira
baseUri: "https://alaska-airlines.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue/{{issue_key}}"
inputParameters:
- name: issue_key
in: path
operations:
- name: get-issue
method: GET
Queries LinkedIn Talent Solutions for candidates with airline or travel industry experience matching active Alaska Airlines recruiting requisitions, and creates Jira recruiting tasks for each qualified candidate profile found.
naftiko: "0.5"
info:
label: "LinkedIn Corporate Travel Talent Pipeline"
description: "Queries LinkedIn Talent Solutions for candidates with airline or travel industry experience matching active Alaska Airlines recruiting requisitions, and creates Jira recruiting tasks for each qualified candidate profile found."
tags:
- hr
- recruiting
- linkedin
- jira
capability:
exposes:
- type: mcp
namespace: talent-acquisition
port: 8080
tools:
- name: enrich-talent-pipeline
description: "Given a LinkedIn job posting ID and role discipline, retrieve matching candidate profiles from LinkedIn and create a Jira recruiting task for follow-up. Use when sourcing candidates for Alaska Airlines corporate or operations roles."
inputParameters:
- name: job_posting_id
in: body
type: string
description: "The LinkedIn job posting ID for the active requisition."
- name: discipline
in: body
type: string
description: "The role discipline to filter candidates (e.g., Operations, Technology, Commercial)."
steps:
- name: get-candidates
type: call
call: "linkedin-talent.search-candidates"
with:
jobPostingId: "{{job_posting_id}}"
discipline: "{{discipline}}"
- name: create-recruiter-task
type: call
call: "jira-recruiting.create-issue"
with:
project_key: "RECRUIT"
summary: "Candidate pipeline: {{discipline}} — {{job_posting_id}}"
description: "{{get-candidates.total_count}} candidates identified for {{discipline}} requisition."
issue_type: "Task"
consumes:
- type: http
namespace: linkedin-talent
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: candidates
path: "/talentSearch"
inputParameters:
- name: jobPostingId
in: query
- name: discipline
in: query
operations:
- name: search-candidates
method: GET
- type: http
namespace: jira-recruiting
baseUri: "https://alaska-airlines.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issue
path: "/issue"
inputParameters:
- name: project_key
in: body
- name: summary
in: body
- name: description
in: body
- name: issue_type
in: body
operations:
- name: create-issue
method: POST
Identifies members due for tier downgrade by querying activity in Snowflake, updating status in Salesforce, and sending retention offer emails via Microsoft Graph.
naftiko: "0.5"
info:
label: "Loyalty Tier Downgrade Notification"
description: "Identifies members due for tier downgrade by querying activity in Snowflake, updating status in Salesforce, and sending retention offer emails via Microsoft Graph."
tags:
- loyalty
- snowflake
- salesforce
- microsoft-graph
capability:
exposes:
- type: mcp
namespace: loyalty
port: 8080
tools:
- name: process_tier_downgrades
description: "Given a cycle date, identify and process tier downgrades with retention offers."
inputParameters:
- name: cycle_date
in: body
type: string
description: "The tier evaluation date."
steps:
- name: get-downgrade-candidates
type: call
call: "snowflake.run-query"
with:
query: "SELECT member_id, current_tier, qualifying_miles, email FROM loyalty_members WHERE qualifying_miles < tier_threshold AND eval_date = '{{cycle_date}}'"
- name: update-salesforce
type: call
call: "salesforce.update-tier-status"
with:
cycle_date: "{{cycle_date}}"
count: "{{get-downgrade-candidates.row_count}}"
- name: send-retention-emails
type: call
call: "msgraph.send-mail"
with:
to: "loyalty-ops@alaskaair.com"
subject: "Tier downgrade cycle: {{cycle_date}}"
body: "{{get-downgrade-candidates.row_count}} members identified for tier downgrade. Retention offers initiated."
consumes:
- type: http
namespace: snowflake
baseUri: "https://alaska.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: salesforce
baseUri: "https://alaskaair.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: tiers
path: "/sobjects/Loyalty_Tier_Change__c"
operations:
- name: update-tier-status
method: POST
- type: http
namespace: msgraph
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/me/sendMail"
operations:
- name: send-mail
method: POST
Retrieves recent messages from the flight operations Microsoft Teams channel, returning message content, sender, and timestamp.
naftiko: "0.5"
info:
label: "Microsoft Teams Flight Ops Channel Lookup"
description: "Retrieves recent messages from the flight operations Microsoft Teams channel, returning message content, sender, and timestamp."
tags:
- flight-operations
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: flight-ops
port: 8080
tools:
- name: get-flight-ops-messages
description: "Retrieve the latest messages from the flight ops Teams channel."
inputParameters:
- name: channel_id
in: body
type: string
description: "The Teams channel ID."
call: "msteams.get-messages"
with:
channel_id: "{{channel_id}}"
outputParameters:
- name: messages
type: array
mapping: "$.value"
consumes:
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/flight-ops/channels/{{channel_id}}/messages?$top=10"
inputParameters:
- name: channel_id
in: path
operations:
- name: get-messages
method: GET
Detects potential loyalty program fraud by analyzing redemption patterns in Snowflake, checking account flags in Salesforce, and creating a ServiceNow investigation ticket.
naftiko: "0.5"
info:
label: "Mileage Plan Fraud Detection"
description: "Detects potential loyalty program fraud by analyzing redemption patterns in Snowflake, checking account flags in Salesforce, and creating a ServiceNow investigation ticket."
tags:
- loyalty
- snowflake
- salesforce
- servicenow
capability:
exposes:
- type: mcp
namespace: loyalty
port: 8080
tools:
- name: detect_loyalty_fraud
description: "Given a member ID, analyze redemption patterns and flag suspicious activity."
inputParameters:
- name: member_id
in: body
type: string
description: "The Mileage Plan member ID."
steps:
- name: get-patterns
type: call
call: "snowflake.run-query"
with:
query: "SELECT redemption_count, total_miles, avg_per_txn FROM loyalty_redemptions WHERE member_id = '{{member_id}}' AND period = CURRENT_MONTH()"
- name: get-account
type: call
call: "salesforce.get-member"
with:
member_id: "{{member_id}}"
- name: create-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "Fraud investigation: Member {{member_id}}"
description: "Redemptions: {{get-patterns.data[0].REDEMPTION_COUNT}}. Account tier: {{get-account.tier}}"
category: "fraud"
consumes:
- type: http
namespace: snowflake
baseUri: "https://alaska.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: salesforce
baseUri: "https://alaskaair.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: members
path: "/sobjects/Loyalty_Member__c/{{member_id}}"
inputParameters:
- name: member_id
in: path
operations:
- name: get-member
method: GET
- type: http
namespace: servicenow
baseUri: "https://alaskaair.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_pass"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
Reconciles partner airline mileage accruals by pulling transaction data from Snowflake, comparing with partner reports in SharePoint, and creating a ServiceNow ticket for discrepancies.
naftiko: "0.5"
info:
label: "Mileage Plan Partnership Reconciliation"
description: "Reconciles partner airline mileage accruals by pulling transaction data from Snowflake, comparing with partner reports in SharePoint, and creating a ServiceNow ticket for discrepancies."
tags:
- loyalty
- snowflake
- sharepoint
- servicenow
capability:
exposes:
- type: mcp
namespace: loyalty
port: 8080
tools:
- name: reconcile_partnerships
description: "Given a partner code and period, reconcile mileage accruals."
inputParameters:
- name: partner_code
in: body
type: string
description: "The partner airline code."
- name: period
in: body
type: string
description: "Reconciliation period."
steps:
- name: get-our-data
type: call
call: "snowflake.run-query"
with:
query: "SELECT SUM(miles) as total_miles, COUNT(*) as txn_count FROM partner_accruals WHERE partner = '{{partner_code}}' AND period = '{{period}}'"
- name: get-partner-report
type: call
call: "sharepoint.search-documents"
with:
query: "{{partner_code}} reconciliation {{period}}"
- name: flag-discrepancies
type: call
call: "servicenow.create-incident"
with:
short_description: "Partner recon: {{partner_code}} - {{period}}"
description: "Our records: {{get-our-data.data[0].TXN_COUNT}} txns, {{get-our-data.data[0].TOTAL_MILES}} miles. Partner report: {{get-partner-report.result_count}} docs found."
consumes:
- type: http
namespace: snowflake
baseUri: "https://alaska.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites/alaskaair.sharepoint.com"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: search
path: "/drive/root/search(q='{{query}}')"
inputParameters:
- name: query
in: query
operations:
- name: search-documents
method: GET
- type: http
namespace: servicenow
baseUri: "https://alaskaair.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_pass"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
Runs network planning scenarios by querying demand data from Snowflake, pulling cost assumptions from Oracle ERP, and posting scenario results to the network planning Teams channel.
naftiko: "0.5"
info:
label: "Network Planning Scenario Analysis"
description: "Runs network planning scenarios by querying demand data from Snowflake, pulling cost assumptions from Oracle ERP, and posting scenario results to the network planning Teams channel."
tags:
- commercial
- snowflake
- oracle-erp
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: commercial
port: 8080
tools:
- name: run_scenario_analysis
description: "Given a route and scenario parameters, run the network planning analysis."
inputParameters:
- name: route
in: body
type: string
description: "The route to analyze (e.g., SEA-LAX)."
- name: frequency
in: body
type: string
description: "Proposed daily frequency."
steps:
- name: get-demand
type: call
call: "snowflake.run-query"
with:
query: "SELECT avg_demand, seasonality_factor, competitor_share FROM route_demand WHERE route = '{{route}}'"
- name: get-costs
type: call
call: "oracle-erp.get-route-costs"
with:
route: "{{route}}"
frequency: "{{frequency}}"
- name: post-results
type: call
call: "msteams.send-message"
with:
channel_id: "network-planning"
message: "Scenario: {{route}} at {{frequency}}x daily. Demand: {{get-demand.data[0].AVG_DEMAND}}. Est. cost: {{get-costs.total_cost}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://alaska.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: oracle-erp
baseUri: "https://alaska-erp.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: basic
username: "$secrets.oracle_erp_user"
password: "$secrets.oracle_erp_pass"
resources:
- name: costs
path: "/routeCosts?route={{route}}&frequency={{frequency}}"
inputParameters:
- name: route
in: query
- name: frequency
in: query
operations:
- name: get-route-costs
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/network-planning/channels/general/messages"
operations:
- name: send-message
method: POST
When a new hire is created in Workday, opens a ServiceNow onboarding ticket, provisions a Microsoft Teams workspace, and sends a welcome notification to the hiring manager. Ensures day-one readiness for Alaska Airlines crew and corporate staff.
naftiko: "0.5"
info:
label: "New Employee Onboarding Orchestration"
description: "When a new hire is created in Workday, opens a ServiceNow onboarding ticket, provisions a Microsoft Teams workspace, and sends a welcome notification to the hiring manager. Ensures day-one readiness for Alaska Airlines crew and corporate staff."
tags:
- hr
- onboarding
- workday
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-onboarding
port: 8080
tools:
- name: trigger-employee-onboarding
description: "Given a Workday employee ID and start date, orchestrate the full onboarding sequence across ServiceNow for ticket creation and Microsoft Teams for welcome notification. Invoke when a new hire record is confirmed in Workday."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday worker ID for the new hire."
- name: start_date
in: body
type: string
description: "The new hire's start date in ISO 8601 format (YYYY-MM-DD)."
- name: department
in: body
type: string
description: "The department the employee is joining (e.g., Flight Operations, Customer Service)."
steps:
- name: get-worker
type: call
call: "workday-onboard.get-worker"
with:
employee_id: "{{employee_id}}"
- name: create-onboarding-ticket
type: call
call: "servicenow-onboard.create-incident"
with:
short_description: "Onboarding: {{get-worker.display_name}}"
caller_id: "{{get-worker.manager_email}}"
assignment_group: "IT Onboarding"
- name: notify-manager
type: call
call: "msteams-hr.send-message"
with:
channel_id: "{{department}}-general"
message: "Welcome {{get-worker.display_name}} joining on {{start_date}}! Onboarding ticket: {{create-onboarding-ticket.number}}"
consumes:
- type: http
namespace: workday-onboard
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: worker
path: "/alaska-airlines/workers/{{employee_id}}"
inputParameters:
- name: employee_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow-onboard
baseUri: "https://alaska-airlines.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_pass"
resources:
- name: incident
path: "/table/incident"
inputParameters:
- name: short_description
in: body
- name: caller_id
in: body
- name: assignment_group
in: body
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams-hr
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: message
path: "/teams/{{channel_id}}/channels/messages"
inputParameters:
- name: channel_id
in: path
- name: message
in: body
operations:
- name: send-message
method: POST
Coordinates new route launches by creating marketing tasks in Jira, setting up revenue monitoring in Snowflake, and notifying commercial teams via Microsoft Teams.
naftiko: "0.5"
info:
label: "New Route Launch Coordination"
description: "Coordinates new route launches by creating marketing tasks in Jira, setting up revenue monitoring in Snowflake, and notifying commercial teams via Microsoft Teams."
tags:
- commercial
- jira
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: commercial
port: 8080
tools:
- name: coordinate_route_launch
description: "Given route details, coordinate the launch across marketing, revenue, and commercial teams."
inputParameters:
- name: origin
in: body
type: string
description: "Origin IATA code."
- name: destination
in: body
type: string
description: "Destination IATA code."
- name: launch_date
in: body
type: string
description: "Launch date in YYYY-MM-DD."
steps:
- name: create-marketing-epic
type: call
call: "jira.create-issue"
with:
project: "MKT"
summary: "New route launch: {{origin}}-{{destination}} on {{launch_date}}"
issuetype: "Epic"
- name: setup-monitoring
type: call
call: "snowflake.run-query"
with:
query: "INSERT INTO route_monitoring (origin, destination, launch_date, status) VALUES ('{{origin}}', '{{destination}}', '{{launch_date}}', 'ACTIVE')"
- name: notify-commercial
type: call
call: "msteams.send-message"
with:
channel_id: "commercial-planning"
message: "New route {{origin}}-{{destination}} launching {{launch_date}}. Marketing epic: {{create-marketing-epic.key}}. Revenue monitoring active."
consumes:
- type: http
namespace: jira
baseUri: "https://alaska-airlines.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: snowflake
baseUri: "https://alaska.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/commercial-planning/channels/general/messages"
operations:
- name: send-message
method: POST
Retrieves all application assignments for an Okta user by email, returning app names and assignment status for access review.
naftiko: "0.5"
info:
label: "Okta Employee Access Review Lookup"
description: "Retrieves all application assignments for an Okta user by email, returning app names and assignment status for access review."
tags:
- security
- okta
- identity
capability:
exposes:
- type: mcp
namespace: identity
port: 8080
tools:
- name: get-user-apps
description: "Given an Okta user email, retrieve all assigned applications for access review."
inputParameters:
- name: user_email
in: body
type: string
description: "The user's Okta login email."
call: "okta.get-user-apps"
with:
user_email: "{{user_email}}"
outputParameters:
- name: apps
type: array
mapping: "$.appLinks"
consumes:
- type: http
namespace: okta
baseUri: "https://alaskaair.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: user-apps
path: "/users/{{user_email}}/appLinks"
inputParameters:
- name: user_email
in: path
operations:
- name: get-user-apps
method: GET
Handles inflight WiFi incidents by retrieving connectivity data from Datadog, identifying the affected aircraft in Snowflake, and creating a vendor escalation ticket in ServiceNow.
naftiko: "0.5"
info:
label: "Onboard WiFi Incident Handler"
description: "Handles inflight WiFi incidents by retrieving connectivity data from Datadog, identifying the affected aircraft in Snowflake, and creating a vendor escalation ticket in ServiceNow."
tags:
- it-operations
- datadog
- snowflake
- servicenow
capability:
exposes:
- type: mcp
namespace: it-operations
port: 8080
tools:
- name: handle_wifi_incident
description: "Given a flight number, investigate WiFi issues and escalate to the vendor."
inputParameters:
- name: flight_number
in: body
type: string
description: "The flight number."
steps:
- name: get-connectivity
type: call
call: "datadog.get-wifi-metrics"
with:
flight: "{{flight_number}}"
- name: get-aircraft
type: call
call: "snowflake.run-query"
with:
query: "SELECT tail_number, wifi_vendor, equipment_type FROM flight_assignments WHERE flight_number = '{{flight_number}}'"
- name: create-vendor-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "WiFi incident: {{flight_number}} - {{get-aircraft.data[0].TAIL_NUMBER}}"
description: "Connectivity: {{get-connectivity.uptime_pct}}%. Vendor: {{get-aircraft.data[0].WIFI_VENDOR}}"
category: "vendor_escalation"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: wifi
path: "/query?query=wifi.uptime{flight:{{flight}}}"
inputParameters:
- name: flight
in: query
operations:
- name: get-wifi-metrics
method: GET
- type: http
namespace: snowflake
baseUri: "https://alaska.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://alaskaair.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_pass"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
Retrieves supplier invoices from Oracle ERP pending approval, validates invoice details against purchase orders, and routes approved invoices for payment. Supports Alaska Airlines accounts payable processing for vendor payments.
naftiko: "0.5"
info:
label: "Oracle ERP Accounts Payable Invoice Processing"
description: "Retrieves supplier invoices from Oracle ERP pending approval, validates invoice details against purchase orders, and routes approved invoices for payment. Supports Alaska Airlines accounts payable processing for vendor payments."
tags:
- finance
- accounts-payable
- oracle
capability:
exposes:
- type: mcp
namespace: ap-processing
port: 8080
tools:
- name: process-ap-invoice
description: "Given an Oracle ERP invoice ID and PO number, retrieve invoice details, validate against the purchase order, and approve for payment in Oracle. Use when a supplier invoice requires three-way match validation."
inputParameters:
- name: invoice_id
in: body
type: string
description: "The Oracle ERP invoice ID to process."
- name: po_number
in: body
type: string
description: "The purchase order number for three-way matching."
steps:
- name: get-invoice
type: call
call: "oracle-ap-invoice.get-invoice"
with:
InvoiceId: "{{invoice_id}}"
- name: get-purchase-order
type: call
call: "oracle-ap-po.get-order"
with:
PONumber: "{{po_number}}"
- name: approve-invoice
type: call
call: "oracle-ap-invoice.approve-invoice"
with:
InvoiceId: "{{invoice_id}}"
ApprovalStatus: "APPROVED"
consumes:
- type: http
namespace: oracle-ap-invoice
baseUri: "https://alaska-airlines.oraclecloud.com/fscmRestApi/resources/11.13.18.05"
authentication:
type: basic
username: "$secrets.oracle_erp_user"
password: "$secrets.oracle_erp_pass"
resources:
- name: invoice
path: "/invoices/{{InvoiceId}}"
inputParameters:
- name: InvoiceId
in: path
operations:
- name: get-invoice
method: GET
- name: approve-invoice
method: PATCH
- type: http
namespace: oracle-ap-po
baseUri: "https://alaska-airlines.oraclecloud.com/fscmRestApi/resources/11.13.18.05"
authentication:
type: basic
username: "$secrets.oracle_erp_user"
password: "$secrets.oracle_erp_pass"
resources:
- name: order
path: "/purchaseOrders/{{PONumber}}"
inputParameters:
- name: PONumber
in: path
operations:
- name: get-order
method: GET
Retrieves an aircraft fixed asset record from Oracle ERP by asset number, returning book value, depreciation schedule, and acquisition date.
naftiko: "0.5"
info:
label: "Oracle ERP Asset Lookup"
description: "Retrieves an aircraft fixed asset record from Oracle ERP by asset number, returning book value, depreciation schedule, and acquisition date."
tags:
- finance
- oracle-erp
- fleet
capability:
exposes:
- type: mcp
namespace: finance
port: 8080
tools:
- name: get-aircraft-asset
description: "Given an Oracle asset number, retrieve the aircraft fixed asset details."
inputParameters:
- name: asset_number
in: body
type: string
description: "The Oracle ERP fixed asset number."
call: "oracle-erp.get-asset"
with:
asset_number: "{{asset_number}}"
outputParameters:
- name: book_value
type: string
mapping: "$.NetBookValue"
- name: acquisition_date
type: string
mapping: "$.AcquisitionDate"
consumes:
- type: http
namespace: oracle-erp
baseUri: "https://alaska-erp.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: basic
username: "$secrets.oracle_erp_user"
password: "$secrets.oracle_erp_pass"
resources:
- name: assets
path: "/fixedAssets/{{asset_number}}"
inputParameters:
- name: asset_number
in: path
operations:
- name: get-asset
method: GET
Processes budget transfers by validating the request in Oracle ERP, checking available budget in Snowflake, and logging the approval in ServiceNow.
naftiko: "0.5"
info:
label: "Oracle ERP Budget Transfer Workflow"
description: "Processes budget transfers by validating the request in Oracle ERP, checking available budget in Snowflake, and logging the approval in ServiceNow."
tags:
- finance
- oracle-erp
- snowflake
- servicenow
capability:
exposes:
- type: mcp
namespace: finance
port: 8080
tools:
- name: process_budget_transfer
description: "Given source and target cost centers and amount, process the budget transfer."
inputParameters:
- name: source_cc
in: body
type: string
description: "Source cost center."
- name: target_cc
in: body
type: string
description: "Target cost center."
- name: amount
in: body
type: string
description: "Transfer amount."
steps:
- name: validate-budget
type: call
call: "snowflake.run-query"
with:
query: "SELECT available_budget FROM cost_center_budgets WHERE cost_center = '{{source_cc}}'"
- name: execute-transfer
type: call
call: "oracle-erp.create-budget-transfer"
with:
source: "{{source_cc}}"
target: "{{target_cc}}"
amount: "{{amount}}"
- name: log-approval
type: call
call: "servicenow.create-record"
with:
table: "u_budget_transfers"
source: "{{source_cc}}"
target: "{{target_cc}}"
amount: "{{amount}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://alaska.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: oracle-erp
baseUri: "https://alaska-erp.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: basic
username: "$secrets.oracle_erp_user"
password: "$secrets.oracle_erp_pass"
resources:
- name: budget-transfers
path: "/budgetTransfers"
operations:
- name: create-budget-transfer
method: POST
- type: http
namespace: servicenow
baseUri: "https://alaskaair.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_pass"
resources:
- name: records
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST
Retrieves an accounts payable invoice from Oracle ERP by invoice number and returns status, supplier, amount, and due date.
naftiko: "0.5"
info:
label: "Oracle ERP Invoice Status"
description: "Retrieves an accounts payable invoice from Oracle ERP by invoice number and returns status, supplier, amount, and due date."
tags:
- finance
- accounts-payable
- oracle
- erp
capability:
exposes:
- type: mcp
namespace: erp
port: 8080
tools:
- name: get-invoice-status
description: "Look up an Oracle ERP AP invoice. Returns status, supplier, amount, and due date."
inputParameters:
- name: invoice_number
in: body
type: string
description: "The Oracle invoice number."
call: oracle.get-invoice
with:
invoice_number: "{{invoice_number}}"
outputParameters:
- name: status
type: string
mapping: "$.InvoiceStatus"
- name: supplier
type: string
mapping: "$.Supplier"
- name: amount
type: string
mapping: "$.InvoiceAmount"
consumes:
- type: http
namespace: oracle
baseUri: "https://alaska-airlines-erp.oracle.com/fscmRestApi/resources/v1"
authentication:
type: bearer
token: "$secrets.oracle_token"
resources:
- name: invoices
path: "/payablesInvoices/{{invoice_number}}"
inputParameters:
- name: invoice_number
in: path
operations:
- name: get-invoice
method: GET
Retrieves a journal entry from Oracle ERP by header ID, returning posting status, ledger, period, and total debits and credits.
naftiko: "0.5"
info:
label: "Oracle ERP Journal Entry Lookup"
description: "Retrieves a journal entry from Oracle ERP by header ID, returning posting status, ledger, period, and total debits and credits."
tags:
- finance
- oracle-erp
capability:
exposes:
- type: mcp
namespace: finance
port: 8080
tools:
- name: get-journal-entry
description: "Given a journal header ID, retrieve the journal entry details from Oracle ERP."
inputParameters:
- name: header_id
in: body
type: string
description: "The Oracle GL journal header ID."
call: "oracle-erp.get-journal"
with:
header_id: "{{header_id}}"
outputParameters:
- name: status
type: string
mapping: "$.Status"
- name: total_debits
type: string
mapping: "$.TotalDebits"
consumes:
- type: http
namespace: oracle-erp
baseUri: "https://alaska-erp.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: basic
username: "$secrets.oracle_erp_user"
password: "$secrets.oracle_erp_pass"
resources:
- name: journals
path: "/journals/{{header_id}}"
inputParameters:
- name: header_id
in: path
operations:
- name: get-journal
method: GET
Retrieves a purchase order from Oracle ERP by PO number, returning status, supplier name, total amount, and currency for procurement tracking.
naftiko: "0.5"
info:
label: "Oracle ERP Purchase Order Lookup"
description: "Retrieves a purchase order from Oracle ERP by PO number, returning status, supplier name, total amount, and currency for procurement tracking."
tags:
- finance
- procurement
- oracle
- erp
capability:
exposes:
- type: mcp
namespace: erp
port: 8080
tools:
- name: get-purchase-order
description: "Look up an Alaska Airlines Oracle ERP purchase order. Returns status, supplier, total amount, and currency."
inputParameters:
- name: po_number
in: body
type: string
description: "The Oracle purchase order number."
call: oracle.get-po
with:
po_number: "{{po_number}}"
outputParameters:
- name: status
type: string
mapping: "$.OrderStatus"
- name: supplier
type: string
mapping: "$.Supplier"
- name: total_amount
type: string
mapping: "$.TotalAmount"
consumes:
- type: http
namespace: oracle
baseUri: "https://alaska-airlines-erp.oracle.com/fscmRestApi/resources/v1"
authentication:
type: bearer
token: "$secrets.oracle_token"
resources:
- name: purchase-orders
path: "/purchaseOrders/{{po_number}}"
inputParameters:
- name: po_number
in: path
operations:
- name: get-po
method: GET
Retrieves the current accounts payable balance for a vendor from Oracle ERP by vendor ID, returning outstanding amount and payment terms.
naftiko: "0.5"
info:
label: "Oracle ERP Vendor Balance Lookup"
description: "Retrieves the current accounts payable balance for a vendor from Oracle ERP by vendor ID, returning outstanding amount and payment terms."
tags:
- finance
- oracle-erp
capability:
exposes:
- type: mcp
namespace: finance
port: 8080
tools:
- name: get-vendor-balance
description: "Given a vendor ID, retrieve the AP balance and payment terms from Oracle ERP."
inputParameters:
- name: vendor_id
in: body
type: string
description: "The Oracle ERP vendor ID."
call: "oracle-erp.get-vendor-balance"
with:
vendor_id: "{{vendor_id}}"
outputParameters:
- name: outstanding_amount
type: string
mapping: "$.OutstandingAmount"
- name: payment_terms
type: string
mapping: "$.PaymentTerms"
consumes:
- type: http
namespace: oracle-erp
baseUri: "https://alaska-erp.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: basic
username: "$secrets.oracle_erp_user"
password: "$secrets.oracle_erp_pass"
resources:
- name: vendors
path: "/suppliers/{{vendor_id}}"
inputParameters:
- name: vendor_id
in: path
operations:
- name: get-vendor-balance
method: GET
Automates Oracle ERP period close steps, validates GL balances, refreshes Power BI financial dashboard, and posts close status to the finance Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Oracle Period Close Automation"
description: "Automates Oracle ERP period close steps, validates GL balances, refreshes Power BI financial dashboard, and posts close status to the finance Microsoft Teams channel."
tags:
- finance
- period-close
- oracle
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: finance
port: 8080
tools:
- name: run-period-close
description: "Given a fiscal period, run Oracle ERP close validation, refresh Power BI dashboard, and post status to finance Teams."
inputParameters:
- name: fiscal_period
in: body
type: string
description: "The fiscal period to close, e.g. 2025-12."
steps:
- name: validate-balances
type: call
call: oracle.validate-gl-close
with:
period: "{{fiscal_period}}"
- name: refresh-dashboard
type: call
call: powerbi.trigger-refresh
with:
dataset_id: "$secrets.powerbi_finance_dataset_id"
- name: post-status
type: call
call: msteams.send-message
with:
channel_id: "$secrets.teams_finance_channel_id"
text: "PERIOD CLOSE: {{fiscal_period}} — Status: {{validate-balances.status}}, Unreconciled: {{validate-balances.unreconciled_count}} accounts."
consumes:
- type: http
namespace: oracle
baseUri: "https://alaska-airlines-erp.oracle.com/fscmRestApi/resources/v1"
authentication:
type: bearer
token: "$secrets.oracle_token"
resources:
- name: gl-close
path: "/generalLedgerPeriodClose"
operations:
- name: validate-gl-close
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: refreshes
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: trigger-refresh
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves the current on-call duty manager from the PagerDuty flight operations schedule, returning name and contact details.
naftiko: "0.5"
info:
label: "PagerDuty Flight Ops On-Call Lookup"
description: "Retrieves the current on-call duty manager from the PagerDuty flight operations schedule, returning name and contact details."
tags:
- flight-operations
- pagerduty
capability:
exposes:
- type: mcp
namespace: flight-ops
port: 8080
tools:
- name: get-flight-ops-oncall
description: "Retrieve the currently on-call flight operations duty manager."
inputParameters:
- name: schedule_id
in: body
type: string
description: "The PagerDuty schedule ID for flight ops."
call: "pagerduty.get-oncall"
with:
schedule_id: "{{schedule_id}}"
outputParameters:
- name: name
type: string
mapping: "$.oncalls[0].user.name"
- name: email
type: string
mapping: "$.oncalls[0].user.email"
consumes:
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_api_key"
resources:
- name: oncalls
path: "/oncalls?schedule_ids[]={{schedule_id}}"
inputParameters:
- name: schedule_id
in: query
operations:
- name: get-oncall
method: GET
Processes passenger compensation claims by retrieving the booking from Salesforce, calculating entitlement from Snowflake delay data, and sending the compensation offer via email.
naftiko: "0.5"
info:
label: "Passenger Compensation Workflow"
description: "Processes passenger compensation claims by retrieving the booking from Salesforce, calculating entitlement from Snowflake delay data, and sending the compensation offer via email."
tags:
- customer-service
- salesforce
- snowflake
- microsoft-graph
capability:
exposes:
- type: mcp
namespace: customer-service
port: 8080
tools:
- name: process_compensation
description: "Given a PNR and flight number, process the compensation claim."
inputParameters:
- name: pnr
in: body
type: string
description: "The passenger name record."
- name: flight_number
in: body
type: string
description: "The affected flight number."
steps:
- name: get-booking
type: call
call: "salesforce.get-booking"
with:
pnr: "{{pnr}}"
- name: get-delay-data
type: call
call: "snowflake.run-query"
with:
query: "SELECT delay_minutes, delay_reason FROM flight_delays WHERE flight_number = '{{flight_number}}' ORDER BY flight_date DESC LIMIT 1"
- name: send-offer
type: call
call: "msgraph.send-mail"
with:
to: "{{get-booking.passenger_email}}"
subject: "Compensation for flight {{flight_number}}"
body: "Dear {{get-booking.passenger_name}}, regarding your delayed flight {{flight_number}} ({{get-delay-data.data[0].DELAY_MINUTES}} min delay), we would like to offer compensation."
consumes:
- type: http
namespace: salesforce
baseUri: "https://alaskaair.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: bookings
path: "/query?q=SELECT+Id,Passenger_Email__c,Passenger_Name__c+FROM+Booking__c+WHERE+PNR__c='{{pnr}}'"
inputParameters:
- name: pnr
in: query
operations:
- name: get-booking
method: GET
- type: http
namespace: snowflake
baseUri: "https://alaska.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: msgraph
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/me/sendMail"
operations:
- name: send-mail
method: POST
When a high-priority passenger complaint is received in Salesforce, creates a ServiceNow case for investigation, logs analytics in Snowflake, and notifies customer relations via Microsoft Teams.
naftiko: "0.5"
info:
label: "Passenger Complaint Escalation Workflow"
description: "When a high-priority passenger complaint is received in Salesforce, creates a ServiceNow case for investigation, logs analytics in Snowflake, and notifies customer relations via Microsoft Teams."
tags:
- customer-service
- complaints
- salesforce
- servicenow
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: customer-service
port: 8080
tools:
- name: escalate-complaint
description: "Given a Salesforce case ID for a passenger complaint, create ServiceNow investigation case, log to Snowflake, and notify customer relations."
inputParameters:
- name: case_id
in: body
type: string
description: "The Salesforce case ID."
steps:
- name: get-case
type: call
call: salesforce.get-case
with:
case_id: "{{case_id}}"
- name: create-investigation
type: call
call: servicenow.create-case
with:
short_description: "Passenger complaint: {{get-case.subject}}"
description: "{{get-case.description}}"
priority: "{{get-case.priority}}"
- name: log-analytics
type: call
call: snowflake.insert-record
with:
table: "CUSTOMER_SERVICE.COMPLAINTS"
case_id: "{{case_id}}"
category: "{{get-case.category}}"
- name: notify-team
type: call
call: msteams.send-message
with:
channel_id: "$secrets.teams_cs_channel_id"
text: "COMPLAINT: {{get-case.subject}} — Priority: {{get-case.priority}}. SNOW: {{create-investigation.number}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://alaska-airlines.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/sobjects/Case/{{case_id}}"
inputParameters:
- name: case_id
in: path
operations:
- name: get-case
method: GET
- type: http
namespace: servicenow
baseUri: "https://alaskaairlines.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cases
path: "/table/sn_customerservice_case"
operations:
- name: create-case
method: POST
- type: http
namespace: snowflake
baseUri: "https://alaska-airlines.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: insert-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Queries Oracle ERP for Alaska Airlines financial period close status across cost centers, identifies open items, and triggers a Power BI executive dashboard refresh. Supports month-end financial close for the finance team.
naftiko: "0.5"
info:
label: "Period Close Financial Status Check"
description: "Queries Oracle ERP for Alaska Airlines financial period close status across cost centers, identifies open items, and triggers a Power BI executive dashboard refresh. Supports month-end financial close for the finance team."
tags:
- finance
- period-close
- oracle
- power-bi
capability:
exposes:
- type: mcp
namespace: finance-close
port: 8080
tools:
- name: get-period-close-status
description: "Given a fiscal period and ledger ID, retrieve open/closed status from Oracle ERP and trigger a Power BI finance dashboard refresh. Use during month-end close to monitor financial period status."
inputParameters:
- name: fiscal_period
in: body
type: string
description: "The fiscal period in YYYY-MM format."
- name: ledger_id
in: body
type: string
description: "The Oracle ERP ledger ID for Alaska Airlines."
steps:
- name: get-period-status
type: call
call: "oracle-erp.get-period-status"
with:
PeriodName: "{{fiscal_period}}"
LedgerId: "{{ledger_id}}"
- name: refresh-powerbi
type: call
call: "powerbi-finance.trigger-refresh"
with:
dataset_id: "$secrets.powerbi_period_close_dataset_id"
consumes:
- type: http
namespace: oracle-erp
baseUri: "https://alaska-airlines.oraclecloud.com/fscmRestApi/resources/11.13.18.05"
authentication:
type: basic
username: "$secrets.oracle_erp_user"
password: "$secrets.oracle_erp_pass"
resources:
- name: period-status
path: "/openingPeriods"
inputParameters:
- name: PeriodName
in: query
- name: LedgerId
in: query
operations:
- name: get-period-status
method: GET
- type: http
namespace: powerbi-finance
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: refresh
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: trigger-refresh
method: POST
Monitors pilot training certificate expiration dates in Workday, identifies those expiring within 30 days, and creates training enrollment requests in ServiceNow.
naftiko: "0.5"
info:
label: "Pilot Training Expiration Alert"
description: "Monitors pilot training certificate expiration dates in Workday, identifies those expiring within 30 days, and creates training enrollment requests in ServiceNow."
tags:
- crew-management
- workday
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: crew-management
port: 8080
tools:
- name: alert_training_expiration
description: "Given a fleet type, check for pilots with expiring certifications and create training requests."
inputParameters:
- name: fleet_type
in: body
type: string
description: "Aircraft fleet type (e.g., B737, E175)."
steps:
- name: get-expiring
type: call
call: "workday.get-expiring-certs"
with:
fleet_type: "{{fleet_type}}"
days_ahead: "30"
- name: create-requests
type: call
call: "servicenow.create-request"
with:
short_description: "Training renewals: {{fleet_type}} - {{get-expiring.count}} pilots"
category: "training"
- name: notify-chief-pilot
type: call
call: "msteams.send-message"
with:
channel_id: "chief-pilot-{{fleet_type}}"
message: "{{get-expiring.count}} pilots on {{fleet_type}} have certifications expiring in 30 days. Training request: {{create-requests.number}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: certifications
path: "/alaska/workers?certExpiring={{days_ahead}}&fleetType={{fleet_type}}"
inputParameters:
- name: fleet_type
in: query
- name: days_ahead
in: query
operations:
- name: get-expiring-certs
method: GET
- type: http
namespace: servicenow
baseUri: "https://alaskaair.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_pass"
resources:
- name: requests
path: "/table/sc_request"
operations:
- name: create-request
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Checks the refresh status of the crew utilization Power BI dataset, returning last refresh time and status.
naftiko: "0.5"
info:
label: "Power BI Crew Utilization Dashboard Status"
description: "Checks the refresh status of the crew utilization Power BI dataset, returning last refresh time and status."
tags:
- crew-management
- power-bi
- analytics
capability:
exposes:
- type: mcp
namespace: analytics
port: 8080
tools:
- name: get-crew-dashboard-refresh
description: "Retrieve the Power BI crew utilization dataset refresh status."
inputParameters:
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID."
call: "powerbi.get-refresh"
with:
dataset_id: "{{dataset_id}}"
outputParameters:
- name: status
type: string
mapping: "$.value[0].status"
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: refreshes
path: "/datasets/{{dataset_id}}/refreshes?$top=1"
inputParameters:
- name: dataset_id
in: path
operations:
- name: get-refresh
method: GET
Triggers a Power BI dataset refresh for the on-time performance (OTP) executive dashboard and notifies the operations leadership team in Microsoft Teams. Ensures Alaska Airlines leadership has current OTP data for daily operations reviews.
naftiko: "0.5"
info:
label: "Power BI On-Time Performance Executive Report Refresh"
description: "Triggers a Power BI dataset refresh for the on-time performance (OTP) executive dashboard and notifies the operations leadership team in Microsoft Teams. Ensures Alaska Airlines leadership has current OTP data for daily operations reviews."
tags:
- reporting
- power-bi
- microsoft-teams
- flight-operations
capability:
exposes:
- type: mcp
namespace: otp-reporting
port: 8080
tools:
- name: refresh-otp-dashboard
description: "Given a Power BI dataset ID, trigger a refresh of the on-time performance dashboard and notify the operations leadership Teams channel. Use at the start of each business day for daily OTP review."
inputParameters:
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID for the OTP executive dashboard."
- name: report_date
in: body
type: string
description: "The reporting date in YYYY-MM-DD format."
steps:
- name: trigger-powerbi-refresh
type: call
call: "powerbi-otp.trigger-refresh"
with:
dataset_id: "{{dataset_id}}"
- name: notify-ops-leadership
type: call
call: "msteams-otp.send-message"
with:
channel_id: "operations-leadership"
message: "OTP dashboard refreshed for {{report_date}}. Dataset: {{dataset_id}}"
consumes:
- type: http
namespace: powerbi-otp
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: refresh
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: trigger-refresh
method: POST
- type: http
namespace: msteams-otp
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: message
path: "/teams/{{channel_id}}/channels/messages"
inputParameters:
- name: channel_id
in: path
- name: message
in: body
operations:
- name: send-message
method: POST
Compiles quarterly DOT reporting data from Snowflake flight operations metrics, validates against Oracle ERP financial data, and archives the report to SharePoint.
naftiko: "0.5"
info:
label: "Quarterly DOT Reporting Pipeline"
description: "Compiles quarterly DOT reporting data from Snowflake flight operations metrics, validates against Oracle ERP financial data, and archives the report to SharePoint."
tags:
- compliance
- snowflake
- oracle-erp
- sharepoint
capability:
exposes:
- type: mcp
namespace: compliance
port: 8080
tools:
- name: compile_dot_report
description: "Given a quarter, compile DOT reporting data and archive it."
inputParameters:
- name: quarter
in: body
type: string
description: "The reporting quarter (e.g., 2026-Q1)."
steps:
- name: get-ops-data
type: call
call: "snowflake.run-query"
with:
query: "SELECT total_flights, on_time_count, cancel_count, pax_total FROM dot_metrics WHERE quarter = '{{quarter}}'"
- name: get-financials
type: call
call: "oracle-erp.get-quarterly-revenue"
with:
quarter: "{{quarter}}"
- name: archive-report
type: call
call: "sharepoint.upload-file"
with:
folder: "Compliance/DOT/{{quarter}}"
filename: "dot_report_{{quarter}}.json"
content: "Flights: {{get-ops-data.data[0].TOTAL_FLIGHTS}}. Revenue: {{get-financials.total_revenue}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://alaska.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: oracle-erp
baseUri: "https://alaska-erp.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: basic
username: "$secrets.oracle_erp_user"
password: "$secrets.oracle_erp_pass"
resources:
- name: revenue
path: "/financials/revenue?quarter={{quarter}}"
inputParameters:
- name: quarter
in: query
operations:
- name: get-quarterly-revenue
method: GET
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites/alaskaair.sharepoint.com"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/drive/root:/{{folder}}/{{filename}}:/content"
inputParameters:
- name: folder
in: path
- name: filename
in: path
operations:
- name: upload-file
method: PUT
Pulls daily revenue data from Snowflake, refreshes Power BI revenue dashboard, and posts a revenue management digest to the commercial Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Revenue Management Daily Digest"
description: "Pulls daily revenue data from Snowflake, refreshes Power BI revenue dashboard, and posts a revenue management digest to the commercial Microsoft Teams channel."
tags:
- revenue-management
- analytics
- snowflake
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: revenue
port: 8080
tools:
- name: generate-revenue-digest
description: "Pull daily revenue data from Snowflake, refresh Power BI dashboard, and post digest to commercial Teams."
inputParameters:
- name: date
in: body
type: string
description: "The reporting date."
steps:
- name: query-revenue
type: call
call: snowflake.query-daily-revenue
with:
date: "{{date}}"
- name: refresh-dashboard
type: call
call: powerbi.trigger-refresh
with:
dataset_id: "$secrets.powerbi_revenue_dataset_id"
- name: post-digest
type: call
call: msteams.send-message
with:
channel_id: "$secrets.teams_commercial_channel_id"
text: "REVENUE DIGEST ({{date}}): Total: ${{query-revenue.total_revenue}}, Load Factor: {{query-revenue.load_factor}}%, RASM: ${{query-revenue.rasm}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://alaska-airlines.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query-daily-revenue
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: refreshes
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: trigger-refresh
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves a Salesforce support case by case number and returns status, priority, owner, and last modified date for customer service tracking.
naftiko: "0.5"
info:
label: "Salesforce Case Status Lookup"
description: "Retrieves a Salesforce support case by case number and returns status, priority, owner, and last modified date for customer service tracking."
tags:
- customer-service
- support
- salesforce
- crm
capability:
exposes:
- type: mcp
namespace: crm
port: 8080
tools:
- name: get-case-status
description: "Look up an Alaska Airlines Salesforce support case. Returns status, priority, owner, and last modified date."
inputParameters:
- name: case_number
in: body
type: string
description: "The Salesforce case number."
call: salesforce.get-case
with:
case_number: "{{case_number}}"
outputParameters:
- name: status
type: string
mapping: "$.Status"
- name: priority
type: string
mapping: "$.Priority"
- name: owner
type: string
mapping: "$.Owner.Name"
consumes:
- type: http
namespace: salesforce
baseUri: "https://alaska-airlines.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/sobjects/Case/{{case_number}}"
inputParameters:
- name: case_number
in: path
operations:
- name: get-case
method: GET
Retrieves a Mileage Plan member's account details from Salesforce Service Cloud, including tier status, miles balance, and recent activity. Used by customer service agents to resolve loyalty inquiries at the counter or via chat.
naftiko: "0.5"
info:
label: "Salesforce Customer Loyalty Account Lookup"
description: "Retrieves a Mileage Plan member's account details from Salesforce Service Cloud, including tier status, miles balance, and recent activity. Used by customer service agents to resolve loyalty inquiries at the counter or via chat."
tags:
- crm
- loyalty
- salesforce
- customer-service
capability:
exposes:
- type: mcp
namespace: loyalty-crm
port: 8080
tools:
- name: get-mileage-plan-account
description: "Given a Mileage Plan member number or email, retrieve account details from Salesforce including elite tier, miles balance, and recent transactions. Use when a customer service agent needs to access a member account."
inputParameters:
- name: member_number
in: body
type: string
description: "The Alaska Airlines Mileage Plan member number."
- name: email
in: body
type: string
description: "The member's email address (alternative lookup key)."
call: "salesforce-loyalty.search-contacts"
with:
q: "SELECT Id, Name, AS_Mileage_Plan__c, AS_Elite_Tier__c, AS_Miles_Balance__c FROM Contact WHERE AS_Mileage_Plan__c = '{{member_number}}'"
outputParameters:
- name: member_name
type: string
mapping: "$.records[0].Name"
- name: elite_tier
type: string
mapping: "$.records[0].AS_Elite_Tier__c"
- name: miles_balance
type: string
mapping: "$.records[0].AS_Miles_Balance__c"
consumes:
- type: http
namespace: salesforce-loyalty
baseUri: "https://alaska-airlines.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: contacts
path: "/query"
inputParameters:
- name: q
in: query
operations:
- name: search-contacts
method: GET
Retrieves recent Net Promoter Score survey responses from Salesforce for Alaska Airlines guests, calculates NPS by route and service class, and writes the results to Snowflake for the customer experience analytics team.
naftiko: "0.5"
info:
label: "Salesforce Customer NPS Survey Sync"
description: "Retrieves recent Net Promoter Score survey responses from Salesforce for Alaska Airlines guests, calculates NPS by route and service class, and writes the results to Snowflake for the customer experience analytics team."
tags:
- crm
- customer-experience
- salesforce
- snowflake
capability:
exposes:
- type: mcp
namespace: cx-analytics
port: 8080
tools:
- name: sync-nps-survey-results
description: "Given a date range and route filter, retrieve NPS survey responses from Salesforce, compute aggregate scores, and write results to Snowflake. Use for weekly CX analytics reporting."
inputParameters:
- name: date_from
in: body
type: string
description: "Start date for NPS survey retrieval in YYYY-MM-DD format."
- name: date_to
in: body
type: string
description: "End date for NPS survey retrieval in YYYY-MM-DD format."
- name: route_filter
in: body
type: string
description: "Optional route filter (e.g., SEA-LAX) or 'ALL' for all routes."
steps:
- name: get-nps-responses
type: call
call: "salesforce-nps.query-surveys"
with:
q: "SELECT Id, AS_NPS_Score__c, AS_Route__c, AS_Service_Class__c, CreatedDate FROM AS_Survey__c WHERE CreatedDate >= {{date_from}} AND CreatedDate <= {{date_to}}"
- name: write-snowflake-nps
type: call
call: "snowflake-nps.insert-rows"
with:
table: "CX.NPS_SURVEY_RESPONSES"
data: "{{get-nps-responses.records}}"
consumes:
- type: http
namespace: salesforce-nps
baseUri: "https://alaska-airlines.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: surveys
path: "/query"
inputParameters:
- name: q
in: query
operations:
- name: query-surveys
method: GET
- type: http
namespace: snowflake-nps
baseUri: "https://alaska-airlines.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: rows
path: "/statements"
inputParameters:
- name: table
in: body
- name: data
in: body
operations:
- name: insert-rows
method: POST
Retrieves Mileage Plan loyalty member details from Salesforce by member number, returning tier, miles balance, and status.
naftiko: "0.5"
info:
label: "Salesforce Loyalty Member Lookup"
description: "Retrieves Mileage Plan loyalty member details from Salesforce by member number, returning tier, miles balance, and status."
tags:
- loyalty
- crm
- salesforce
- mileage-plan
capability:
exposes:
- type: mcp
namespace: crm
port: 8080
tools:
- name: get-loyalty-member
description: "Look up Mileage Plan member details in Salesforce. Returns tier, miles balance, and status."
inputParameters:
- name: member_number
in: body
type: string
description: "The Mileage Plan member number."
call: salesforce.get-member
with:
member_number: "{{member_number}}"
outputParameters:
- name: tier
type: string
mapping: "$.Tier__c"
- name: miles_balance
type: string
mapping: "$.Miles_Balance__c"
- name: status
type: string
mapping: "$.Status__c"
consumes:
- type: http
namespace: salesforce
baseUri: "https://alaska-airlines.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: loyalty-members
path: "/sobjects/LoyaltyMember__c/{{member_number}}"
inputParameters:
- name: member_number
in: path
operations:
- name: get-member
method: GET
Retrieves Salesforce opportunity pipeline data for Alaska's corporate travel accounts, computes revenue forecast vs. actuals, and publishes the digest to Snowflake and a Power BI sales dashboard. Supports the corporate sales team's weekly pipeline review.
naftiko: "0.5"
info:
label: "Salesforce Passenger Revenue Intelligence Digest"
description: "Retrieves Salesforce opportunity pipeline data for Alaska's corporate travel accounts, computes revenue forecast vs. actuals, and publishes the digest to Snowflake and a Power BI sales dashboard. Supports the corporate sales team's weekly pipeline review."
tags:
- crm
- sales
- salesforce
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: sales-reporting
port: 8080
tools:
- name: digest-sales-pipeline
description: "Given a fiscal quarter and region, retrieve Salesforce opportunity pipeline for corporate travel accounts, write to Snowflake, and refresh the Power BI sales dashboard. Use for weekly corporate sales pipeline reviews."
inputParameters:
- name: fiscal_quarter
in: body
type: string
description: "The fiscal quarter to report on (e.g., 2025-Q2)."
- name: region
in: body
type: string
description: "The sales region filter (e.g., West, National, International)."
steps:
- name: get-pipeline
type: call
call: "salesforce-sales.query-opportunities"
with:
q: "SELECT Id, Name, Amount, StageName, CloseDate, Account.Name FROM Opportunity WHERE FiscalQuarter = '{{fiscal_quarter}}' AND Region__c = '{{region}}'"
- name: write-snowflake
type: call
call: "snowflake-sales.insert-rows"
with:
table: "SALES.OPPORTUNITY_PIPELINE"
data: "{{get-pipeline.records}}"
- name: refresh-powerbi
type: call
call: "powerbi-sales.trigger-refresh"
with:
dataset_id: "$secrets.powerbi_sales_dataset_id"
consumes:
- type: http
namespace: salesforce-sales
baseUri: "https://alaska-airlines.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/query"
inputParameters:
- name: q
in: query
operations:
- name: query-opportunities
method: GET
- type: http
namespace: snowflake-sales
baseUri: "https://alaska-airlines.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: rows
path: "/statements"
inputParameters:
- name: table
in: body
- name: data
in: body
operations:
- name: insert-rows
method: POST
- type: http
namespace: powerbi-sales
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: refresh
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: trigger-refresh
method: POST
Communicates seasonal schedule changes by pulling the new schedule from Snowflake, creating customer notifications in Salesforce, and posting internal updates to the commercial Teams channel.
naftiko: "0.5"
info:
label: "Seasonal Schedule Change Communication"
description: "Communicates seasonal schedule changes by pulling the new schedule from Snowflake, creating customer notifications in Salesforce, and posting internal updates to the commercial Teams channel."
tags:
- commercial
- snowflake
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: commercial
port: 8080
tools:
- name: communicate_schedule_change
description: "Given a season identifier, distribute schedule change communications."
inputParameters:
- name: season
in: body
type: string
description: "The season identifier (e.g., S26, W26)."
steps:
- name: get-changes
type: call
call: "snowflake.run-query"
with:
query: "SELECT route, change_type, effective_date FROM schedule_changes WHERE season = '{{season}}'"
- name: create-notifications
type: call
call: "salesforce.create-campaign"
with:
name: "Schedule change: {{season}}"
type: "notification"
- name: post-internal
type: call
call: "msteams.send-message"
with:
channel_id: "commercial-ops"
message: "{{season}} schedule changes published. {{get-changes.row_count}} route changes. Campaign: {{create-notifications.id}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://alaska.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: salesforce
baseUri: "https://alaskaair.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: campaigns
path: "/sobjects/Campaign"
operations:
- name: create-campaign
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/commercial-ops/channels/general/messages"
operations:
- name: send-message
method: POST
Audits badge access by pulling entry logs from Snowflake, comparing against Okta active employee roster, and flagging anomalies in a ServiceNow security ticket.
naftiko: "0.5"
info:
label: "Security Badge Access Audit"
description: "Audits badge access by pulling entry logs from Snowflake, comparing against Okta active employee roster, and flagging anomalies in a ServiceNow security ticket."
tags:
- security
- snowflake
- okta
- servicenow
capability:
exposes:
- type: mcp
namespace: security
port: 8080
tools:
- name: audit_badge_access
description: "Given a facility and date range, audit badge access against employee roster."
inputParameters:
- name: facility
in: body
type: string
description: "The facility code."
- name: date
in: body
type: string
description: "Audit date in YYYY-MM-DD."
steps:
- name: get-access-logs
type: call
call: "snowflake.run-query"
with:
query: "SELECT badge_id, employee_id, access_time FROM badge_access WHERE facility = '{{facility}}' AND access_date = '{{date}}'"
- name: get-active-employees
type: call
call: "okta.get-active-users"
with:
facility: "{{facility}}"
- name: flag-anomalies
type: call
call: "servicenow.create-incident"
with:
short_description: "Badge access audit: {{facility}} on {{date}}"
description: "Access entries: {{get-access-logs.row_count}}. Active employees: {{get-active-employees.count}}"
category: "security"
consumes:
- type: http
namespace: snowflake
baseUri: "https://alaska.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: okta
baseUri: "https://alaskaair.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: users
path: "/users?filter=status eq 'ACTIVE'&facility={{facility}}"
inputParameters:
- name: facility
in: query
operations:
- name: get-active-users
method: GET
- type: http
namespace: servicenow
baseUri: "https://alaskaair.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_pass"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
When a critical CVE is identified, queries Datadog security signals, creates a ServiceNow security incident, and notifies the CISO team in Microsoft Teams. Ensures rapid vulnerability response for Alaska Airlines digital systems.
naftiko: "0.5"
info:
label: "Security CVE Vulnerability Triage"
description: "When a critical CVE is identified, queries Datadog security signals, creates a ServiceNow security incident, and notifies the CISO team in Microsoft Teams. Ensures rapid vulnerability response for Alaska Airlines digital systems."
tags:
- security
- cve
- datadog
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: security-ops
port: 8080
tools:
- name: triage-cve
description: "Given a CVE identifier, affected system, and severity level, retrieve Datadog security signals, create a ServiceNow security incident, and notify the security team in Teams. Use for critical or high CVE triage."
inputParameters:
- name: cve_id
in: body
type: string
description: "The CVE identifier (e.g., CVE-2024-12345)."
- name: affected_system
in: body
type: string
description: "The name or identifier of the affected system."
- name: severity
in: body
type: string
description: "The CVE severity level (critical, high, medium, low)."
steps:
- name: get-security-signals
type: call
call: "datadog-sec.list-signals"
with:
query: "cve:{{cve_id}}"
- name: create-security-incident
type: call
call: "servicenow-sec.create-incident"
with:
short_description: "CVE {{cve_id}} ({{severity}}) on {{affected_system}}"
category: "Security"
priority: "1"
- name: notify-security-team
type: call
call: "msteams-sec.send-message"
with:
channel_id: "security-alerts"
message: "CVE {{cve_id}} ({{severity}}) detected on {{affected_system}}. Incident: {{create-security-incident.number}}"
consumes:
- type: http
namespace: datadog-sec
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: signals
path: "/security_analytics/signals/search"
inputParameters:
- name: query
in: body
operations:
- name: list-signals
method: POST
- type: http
namespace: servicenow-sec
baseUri: "https://alaska-airlines.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_pass"
resources:
- name: incident
path: "/table/incident"
inputParameters:
- name: short_description
in: body
- name: category
in: body
- name: priority
in: body
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams-sec
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: message
path: "/teams/{{channel_id}}/channels/messages"
inputParameters:
- name: channel_id
in: path
- name: message
in: body
operations:
- name: send-message
method: POST
Submits a change request in ServiceNow for planned infrastructure or software changes, and notifies the change advisory board approvers in Microsoft Teams. Supports Alaska Airlines ITIL-compliant change governance.
naftiko: "0.5"
info:
label: "ServiceNow Change Management Approval"
description: "Submits a change request in ServiceNow for planned infrastructure or software changes, and notifies the change advisory board approvers in Microsoft Teams. Supports Alaska Airlines ITIL-compliant change governance."
tags:
- itsm
- change-management
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: change-mgmt
port: 8080
tools:
- name: submit-change-request
description: "Given a change title, risk level, and planned start date, create a ServiceNow change request and notify the CAB approval team in Teams. Use when a planned change to production systems requires formal approval."
inputParameters:
- name: change_title
in: body
type: string
description: "The title of the change request (e.g., Sabre reservation system maintenance window)."
- name: risk_level
in: body
type: string
description: "The change risk level (low, medium, high)."
- name: planned_start
in: body
type: string
description: "Planned start date and time in ISO 8601 format."
- name: assigned_group
in: body
type: string
description: "The ServiceNow assignment group responsible for the change."
steps:
- name: create-change-request
type: call
call: "servicenow-change.create-change"
with:
short_description: "{{change_title}}"
risk: "{{risk_level}}"
start_date: "{{planned_start}}"
assignment_group: "{{assigned_group}}"
- name: notify-cab
type: call
call: "msteams-change.send-message"
with:
channel_id: "cab-approvals"
message: "New change request: {{change_title}} ({{risk_level}} risk). CHG: {{create-change-request.number}}. Planned: {{planned_start}}"
consumes:
- type: http
namespace: servicenow-change
baseUri: "https://alaska-airlines.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_pass"
resources:
- name: change
path: "/table/change_request"
inputParameters:
- name: short_description
in: body
- name: risk
in: body
- name: start_date
in: body
- name: assignment_group
in: body
operations:
- name: create-change
method: POST
- type: http
namespace: msteams-change
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: message
path: "/teams/{{channel_id}}/channels/messages"
inputParameters:
- name: channel_id
in: path
- name: message
in: body
operations:
- name: send-message
method: POST
Retrieves an IT incident from ServiceNow by incident number and returns state, priority, assigned group, and short description.
naftiko: "0.5"
info:
label: "ServiceNow Incident Status Lookup"
description: "Retrieves an IT incident from ServiceNow by incident number and returns state, priority, assigned group, and short description."
tags:
- itsm
- support
- servicenow
- incident-management
capability:
exposes:
- type: mcp
namespace: itsm
port: 8080
tools:
- name: get-incident-status
description: "Look up an Alaska Airlines ServiceNow incident. Returns state, priority, assigned group, and description."
inputParameters:
- name: incident_number
in: body
type: string
description: "The ServiceNow incident number."
call: servicenow.get-incident
with:
incident_number: "{{incident_number}}"
outputParameters:
- name: state
type: string
mapping: "$.result.state"
- name: priority
type: string
mapping: "$.result.priority"
consumes:
- type: http
namespace: servicenow
baseUri: "https://alaskaairlines.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident?sysparm_query=number={{incident_number}}"
inputParameters:
- name: incident_number
in: query
operations:
- name: get-incident
method: GET
Retrieves an IT asset configuration item from the ServiceNow CMDB by asset tag, returning asset type, status, and assigned user.
naftiko: "0.5"
info:
label: "ServiceNow IT Asset Lookup"
description: "Retrieves an IT asset configuration item from the ServiceNow CMDB by asset tag, returning asset type, status, and assigned user."
tags:
- it-operations
- servicenow
capability:
exposes:
- type: mcp
namespace: it-ops
port: 8080
tools:
- name: get-it-asset
description: "Given an asset tag, retrieve the CMDB configuration item details."
inputParameters:
- name: asset_tag
in: body
type: string
description: "The IT asset tag."
call: "servicenow.get-ci"
with:
asset_tag: "{{asset_tag}}"
outputParameters:
- name: asset_type
type: string
mapping: "$.result.sys_class_name"
- name: status
type: string
mapping: "$.result.install_status"
consumes:
- type: http
namespace: servicenow
baseUri: "https://alaskaair.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_pass"
resources:
- name: cmdb
path: "/table/cmdb_ci?sysparm_query=asset_tag={{asset_tag}}"
inputParameters:
- name: asset_tag
in: query
operations:
- name: get-ci
method: GET
Searches the Alaska Airlines operations manual library on SharePoint for documents matching a query, returning titles and URLs.
naftiko: "0.5"
info:
label: "SharePoint Ops Manual Search"
description: "Searches the Alaska Airlines operations manual library on SharePoint for documents matching a query, returning titles and URLs."
tags:
- flight-operations
- sharepoint
- knowledge-management
capability:
exposes:
- type: mcp
namespace: knowledge
port: 8080
tools:
- name: search-ops-manuals
description: "Search the operations manual SharePoint library by keyword."
inputParameters:
- name: query
in: body
type: string
description: "The search keyword or phrase."
call: "sharepoint.search-documents"
with:
query: "{{query}}"
outputParameters:
- name: results
type: array
mapping: "$.value"
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites/alaskaair.sharepoint.com"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: search
path: "/drive/root/search(q='{{query}}')"
inputParameters:
- name: query
in: query
operations:
- name: search-documents
method: GET
Retrieves recent messages from the crew scheduling Slack channel, returning messages with timestamps and senders.
naftiko: "0.5"
info:
label: "Slack Crew Scheduling Channel Lookup"
description: "Retrieves recent messages from the crew scheduling Slack channel, returning messages with timestamps and senders."
tags:
- crew-management
- slack
capability:
exposes:
- type: mcp
namespace: crew
port: 8080
tools:
- name: get-crew-messages
description: "Given a Slack channel ID, retrieve the latest crew scheduling messages."
inputParameters:
- name: channel_id
in: body
type: string
description: "The Slack channel ID."
call: "slack.get-history"
with:
channel: "{{channel_id}}"
outputParameters:
- name: messages
type: array
mapping: "$.messages"
consumes:
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: conversations
path: "/conversations.history?channel={{channel}}&limit=20"
inputParameters:
- name: channel
in: query
operations:
- name: get-history
method: GET
Queries Snowflake for baggage claim metrics by station, returning mishandled bag count, resolution time, and top causes.
naftiko: "0.5"
info:
label: "Snowflake Baggage Claim Analytics"
description: "Queries Snowflake for baggage claim metrics by station, returning mishandled bag count, resolution time, and top causes."
tags:
- customer-service
- snowflake
- analytics
capability:
exposes:
- type: mcp
namespace: customer-service
port: 8080
tools:
- name: get-baggage-metrics
description: "Given a station code and period, retrieve baggage claim analytics."
inputParameters:
- name: station
in: body
type: string
description: "The IATA station code."
- name: period
in: body
type: string
description: "The reporting period (e.g., 2026-03)."
call: "snowflake.run-query"
with:
query: "SELECT mishandled_count, avg_resolution_hours, top_cause FROM baggage_metrics WHERE station = '{{station}}' AND period = '{{period}}'"
outputParameters:
- name: mishandled_count
type: string
mapping: "$.data[0].MISHANDLED_COUNT"
consumes:
- type: http
namespace: snowflake
baseUri: "https://alaska.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
Queries Snowflake for the execution status of flight data ingestion pipelines, identifies stalled or failed tasks, and creates Jira tickets for data engineering remediation. Ensures timely availability of on-time performance and revenue analytics.
naftiko: "0.5"
info:
label: "Snowflake Flight Data Pipeline Health Check"
description: "Queries Snowflake for the execution status of flight data ingestion pipelines, identifies stalled or failed tasks, and creates Jira tickets for data engineering remediation. Ensures timely availability of on-time performance and revenue analytics."
tags:
- data
- analytics
- snowflake
- jira
- flight-operations
capability:
exposes:
- type: mcp
namespace: data-ops
port: 8080
tools:
- name: check-flight-pipeline-health
description: "Given a pipeline prefix and lookback window in hours, query Snowflake task history for failures and open Jira data engineering tickets for each. Use for daily flight data pipeline health reviews."
inputParameters:
- name: pipeline_prefix
in: body
type: string
description: "The Snowflake task name prefix to filter (e.g., FLIGHT_, REVENUE_, LOYALTY_)."
- name: lookback_hours
in: body
type: integer
description: "Number of hours to look back for failed pipeline tasks."
steps:
- name: query-pipeline-tasks
type: call
call: "snowflake-data.query-tasks"
with:
prefix: "{{pipeline_prefix}}"
hours: "{{lookback_hours}}"
- name: create-jira-task
type: call
call: "jira-data.create-issue"
with:
project_key: "DATA"
summary: "Flight pipeline failures: {{pipeline_prefix}}"
description: "{{query-pipeline-tasks.failed_count}} tasks failed in the last {{lookback_hours}} hours."
issue_type: "Task"
consumes:
- type: http
namespace: snowflake-data
baseUri: "https://alaska-airlines.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: tasks
path: "/statements"
inputParameters:
- name: prefix
in: body
- name: hours
in: body
operations:
- name: query-tasks
method: POST
- type: http
namespace: jira-data
baseUri: "https://alaska-airlines.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issue
path: "/issue"
inputParameters:
- name: project_key
in: body
- name: summary
in: body
- name: description
in: body
- name: issue_type
in: body
operations:
- name: create-issue
method: POST
Queries Snowflake for flight delay statistics by route and date range for operations analysis, returning average delay, on-time percentage, and top delay causes.
naftiko: "0.5"
info:
label: "Snowflake Flight Delay Query"
description: "Queries Snowflake for flight delay statistics by route and date range for operations analysis, returning average delay, on-time percentage, and top delay causes."
tags:
- data
- analytics
- snowflake
- flight-operations
capability:
exposes:
- type: mcp
namespace: data-ops
port: 8080
tools:
- name: query-flight-delays
description: "Query Snowflake for flight delay statistics by route and date range."
inputParameters:
- name: route
in: body
type: string
description: "The flight route, e.g. SEA-LAX."
- name: date_range
in: body
type: string
description: "Date range for analysis."
call: snowflake.query-delays
with:
route: "{{route}}"
date_range: "{{date_range}}"
outputParameters:
- name: avg_delay_minutes
type: string
mapping: "$.data[0].avg_delay"
- name: on_time_pct
type: string
mapping: "$.data[0].on_time_pct"
consumes:
- type: http
namespace: snowflake
baseUri: "https://alaska-airlines.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query-delays
method: POST
Queries the Snowflake data warehouse for route-level profitability metrics, returning revenue, cost, and margin for a specific origin-destination pair.
naftiko: "0.5"
info:
label: "Snowflake Route Profitability Query"
description: "Queries the Snowflake data warehouse for route-level profitability metrics, returning revenue, cost, and margin for a specific origin-destination pair."
tags:
- finance
- snowflake
- revenue-management
capability:
exposes:
- type: mcp
namespace: revenue
port: 8080
tools:
- name: get-route-profitability
description: "Given an origin and destination airport code, retrieve route profitability metrics."
inputParameters:
- name: origin
in: body
type: string
description: "Origin IATA airport code."
- name: destination
in: body
type: string
description: "Destination IATA airport code."
call: "snowflake.run-query"
with:
query: "SELECT revenue, cost, margin_pct, pax_count FROM route_profitability WHERE origin = '{{origin}}' AND destination = '{{destination}}' AND period = CURRENT_MONTH()"
outputParameters:
- name: revenue
type: string
mapping: "$.data[0].REVENUE"
- name: margin_pct
type: string
mapping: "$.data[0].MARGIN_PCT"
consumes:
- type: http
namespace: snowflake
baseUri: "https://alaska.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
Retrieves completed story points from Jira for the last sprint, publishes the velocity report to Confluence, and posts a digest to the engineering Teams channel. Supports Alaska Airlines agile delivery tracking for digital products.
naftiko: "0.5"
info:
label: "Sprint Velocity Digest"
description: "Retrieves completed story points from Jira for the last sprint, publishes the velocity report to Confluence, and posts a digest to the engineering Teams channel. Supports Alaska Airlines agile delivery tracking for digital products."
tags:
- devops
- reporting
- jira
- confluence
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: agile-reporting
port: 8080
tools:
- name: digest-sprint-velocity
description: "Given a Jira project key and sprint ID, retrieve completed story points, publish a Confluence velocity page, and post a summary to the engineering Teams channel. Use at the end of each sprint."
inputParameters:
- name: project_key
in: body
type: string
description: "The Jira project key (e.g., MOBILE, RESERVATIONS, LOYALTY)."
- name: sprint_id
in: body
type: string
description: "The Jira sprint ID to report on."
steps:
- name: get-sprint-data
type: call
call: "jira-agile.get-sprint-issues"
with:
project_key: "{{project_key}}"
sprint_id: "{{sprint_id}}"
- name: publish-confluence
type: call
call: "confluence-agile.create-page"
with:
space_key: "ENG"
title: "Sprint Velocity — {{project_key}} Sprint {{sprint_id}}"
body: "Completed: {{get-sprint-data.completed_points}} story points. Total issues: {{get-sprint-data.completed_issues}}"
- name: notify-teams
type: call
call: "msteams-agile.send-message"
with:
channel_id: "engineering-metrics"
message: "Sprint {{sprint_id}} closed: {{get-sprint-data.completed_points}} story points for {{project_key}}. Report: {{publish-confluence.url}}"
consumes:
- type: http
namespace: jira-agile
baseUri: "https://alaska-airlines.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: sprint-issues
path: "/search"
inputParameters:
- name: project_key
in: query
- name: sprint_id
in: query
operations:
- name: get-sprint-issues
method: GET
- type: http
namespace: confluence-agile
baseUri: "https://alaska-airlines.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: page
path: "/content"
inputParameters:
- name: space_key
in: body
- name: title
in: body
- name: body
in: body
operations:
- name: create-page
method: POST
- type: http
namespace: msteams-agile
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: message
path: "/teams/{{channel_id}}/channels/messages"
inputParameters:
- name: channel_id
in: path
- name: message
in: body
operations:
- name: send-message
method: POST
Compiles carbon offset data by querying emissions from Snowflake, mapping to offset purchases in Oracle ERP, and distributing the report to the sustainability team via email.
naftiko: "0.5"
info:
label: "Sustainability Carbon Offset Reporting"
description: "Compiles carbon offset data by querying emissions from Snowflake, mapping to offset purchases in Oracle ERP, and distributing the report to the sustainability team via email."
tags:
- sustainability
- snowflake
- oracle-erp
- microsoft-graph
capability:
exposes:
- type: mcp
namespace: sustainability
port: 8080
tools:
- name: compile_offset_report
description: "Given a period, compile the carbon offset report."
inputParameters:
- name: period
in: body
type: string
description: "Reporting period."
steps:
- name: get-emissions
type: call
call: "snowflake.run-query"
with:
query: "SELECT total_co2_tonnes, domestic_co2, international_co2 FROM emissions WHERE period = '{{period}}'"
- name: get-offsets
type: call
call: "oracle-erp.get-offset-purchases"
with:
period: "{{period}}"
- name: send-report
type: call
call: "msgraph.send-mail"
with:
to: "sustainability@alaskaair.com"
subject: "Carbon Offset Report: {{period}}"
body: "Emissions: {{get-emissions.data[0].TOTAL_CO2_TONNES}} tonnes. Offsets purchased: {{get-offsets.offset_tonnes}} tonnes."
consumes:
- type: http
namespace: snowflake
baseUri: "https://alaska.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: oracle-erp
baseUri: "https://alaska-erp.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: basic
username: "$secrets.oracle_erp_user"
password: "$secrets.oracle_erp_pass"
resources:
- name: offsets
path: "/carbonOffsets?period={{period}}"
inputParameters:
- name: period
in: query
operations:
- name: get-offset-purchases
method: GET
- type: http
namespace: msgraph
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/me/sendMail"
operations:
- name: send-mail
method: POST
Applies a Terraform Cloud workspace run to provision or update Alaska Airlines AWS infrastructure, logs the outcome to Datadog, and notifies the platform engineering team. Automates infrastructure-as-code deployments across Alaska's cloud environments.
naftiko: "0.5"
info:
label: "Terraform Cloud Infrastructure Provisioning"
description: "Applies a Terraform Cloud workspace run to provision or update Alaska Airlines AWS infrastructure, logs the outcome to Datadog, and notifies the platform engineering team. Automates infrastructure-as-code deployments across Alaska's cloud environments."
tags:
- cloud
- infrastructure
- terraform
- datadog
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: infra-provisioning
port: 8080
tools:
- name: trigger-terraform-run
description: "Given a Terraform Cloud workspace ID and target environment, trigger a plan-and-apply run, log the outcome to Datadog, and notify the platform team in Teams. Use when infrastructure changes need to be applied."
inputParameters:
- name: workspace_id
in: body
type: string
description: "The Terraform Cloud workspace ID (e.g., ws-abc123)."
- name: environment
in: body
type: string
description: "The target environment (prod, staging, dev)."
steps:
- name: create-terraform-run
type: call
call: "terraform-cloud.create-run"
with:
workspace_id: "{{workspace_id}}"
auto_apply: true
- name: log-datadog
type: call
call: "datadog-infra.create-event"
with:
title: "Terraform run triggered: {{workspace_id}}"
text: "Run {{create-terraform-run.run_id}} started for {{environment}}"
tags: "env:{{environment}},workspace:{{workspace_id}}"
- name: notify-platform-team
type: call
call: "msteams-infra.send-message"
with:
channel_id: "platform-engineering"
message: "Terraform run started for workspace {{workspace_id}} ({{environment}}). Run ID: {{create-terraform-run.run_id}}"
consumes:
- type: http
namespace: terraform-cloud
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: run
path: "/runs"
inputParameters:
- name: workspace_id
in: body
- name: auto_apply
in: body
operations:
- name: create-run
method: POST
- type: http
namespace: datadog-infra
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: event
path: "/events"
inputParameters:
- name: title
in: body
- name: text
in: body
- name: tags
in: body
operations:
- name: create-event
method: POST
- type: http
namespace: msteams-infra
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: message
path: "/teams/{{channel_id}}/channels/messages"
inputParameters:
- name: channel_id
in: path
- name: message
in: body
operations:
- name: send-message
method: POST
Performs three-way matching by retrieving the PO from Oracle ERP, goods receipt from Snowflake, and creating a ServiceNow exception ticket for mismatches.
naftiko: "0.5"
info:
label: "Vendor Invoice Three-Way Match"
description: "Performs three-way matching by retrieving the PO from Oracle ERP, goods receipt from Snowflake, and creating a ServiceNow exception ticket for mismatches."
tags:
- finance
- oracle-erp
- snowflake
- servicenow
capability:
exposes:
- type: mcp
namespace: finance
port: 8080
tools:
- name: three_way_match
description: "Given an invoice number, perform PO-receipt-invoice matching."
inputParameters:
- name: invoice_number
in: body
type: string
description: "The vendor invoice number."
steps:
- name: get-po
type: call
call: "oracle-erp.get-purchase-order"
with:
invoice: "{{invoice_number}}"
- name: get-receipt
type: call
call: "snowflake.run-query"
with:
query: "SELECT receipt_qty, receipt_date FROM goods_receipts WHERE po_number = '{{get-po.po_number}}'"
- name: flag-exception
type: call
call: "servicenow.create-incident"
with:
short_description: "3-way match exception: Invoice {{invoice_number}}"
description: "PO: {{get-po.po_number}} | PO amount: {{get-po.amount}} | Receipt qty: {{get-receipt.data[0].RECEIPT_QTY}}"
consumes:
- type: http
namespace: oracle-erp
baseUri: "https://alaska-erp.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: basic
username: "$secrets.oracle_erp_user"
password: "$secrets.oracle_erp_pass"
resources:
- name: purchase-orders
path: "/purchaseOrders?invoice={{invoice}}"
inputParameters:
- name: invoice
in: query
operations:
- name: get-purchase-order
method: GET
- type: http
namespace: snowflake
baseUri: "https://alaska.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://alaskaair.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_pass"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
When severe weather is forecast, queries affected flights from Snowflake, creates a Salesforce case for rebooking, and notifies the operations center via Microsoft Teams.
naftiko: "0.5"
info:
label: "Weather Delay Proactive Notification"
description: "When severe weather is forecast, queries affected flights from Snowflake, creates a Salesforce case for rebooking, and notifies the operations center via Microsoft Teams."
tags:
- flight-operations
- snowflake
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: flight-ops
port: 8080
tools:
- name: handle-weather-delay
description: "Given a station and weather severity, identify affected flights and initiate passenger communication."
inputParameters:
- name: station
in: body
type: string
description: "The affected station IATA code."
- name: severity
in: body
type: string
description: "Weather severity level."
steps:
- name: get-affected-flights
type: call
call: "snowflake.run-query"
with:
query: "SELECT flight_number, scheduled_time, pax_count FROM flight_schedule WHERE origin = '{{station}}' AND status = 'SCHEDULED'"
- name: create-case
type: call
call: "salesforce.create-case"
with:
subject: "Weather delay rebooking: {{station}} - {{severity}}"
description: "{{get-affected-flights.row_count}} flights affected"
- name: notify-ops
type: call
call: "msteams.send-message"
with:
channel_id: "operations-center"
message: "WEATHER: {{severity}} at {{station}}. {{get-affected-flights.row_count}} flights affected. Case: {{create-case.id}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://alaska.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: salesforce
baseUri: "https://alaskaair.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/sobjects/Case"
operations:
- name: create-case
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/operations-center/channels/general/messages"
operations:
- name: send-message
method: POST
Initiates the annual performance review by pulling the active roster from Workday, creating review forms, and notifying department managers via Microsoft Teams.
naftiko: "0.5"
info:
label: "Workday Annual Review Cycle Kickoff"
description: "Initiates the annual performance review by pulling the active roster from Workday, creating review forms, and notifying department managers via Microsoft Teams."
tags:
- hr
- workday
- microsoft-teams
- servicenow
capability:
exposes:
- type: mcp
namespace: hr
port: 8080
tools:
- name: kickoff_annual_reviews
description: "Given a review cycle ID, initiate the performance review process."
inputParameters:
- name: cycle_id
in: body
type: string
description: "The review cycle identifier."
steps:
- name: get-roster
type: call
call: "workday.get-active-workers"
with:
status: "ACTIVE"
- name: log-kickoff
type: call
call: "servicenow.create-record"
with:
table: "u_review_cycles"
cycle_id: "{{cycle_id}}"
employee_count: "{{get-roster.count}}"
- name: notify-managers
type: call
call: "msteams.send-message"
with:
channel_id: "people-leaders"
message: "Performance review cycle {{cycle_id}} initiated. {{get-roster.count}} employees enrolled. Please begin evaluations."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/alaska/workers?status={{status}}"
inputParameters:
- name: status
in: query
operations:
- name: get-active-workers
method: GET
- type: http
namespace: servicenow
baseUri: "https://alaskaair.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_pass"
resources:
- name: records
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/people-leaders/channels/general/messages"
operations:
- name: send-message
method: POST
Retrieves the benefits enrollment status for an employee from Workday, returning elected plans and coverage levels.
naftiko: "0.5"
info:
label: "Workday Benefits Enrollment Status"
description: "Retrieves the benefits enrollment status for an employee from Workday, returning elected plans and coverage levels."
tags:
- hr
- workday
capability:
exposes:
- type: mcp
namespace: hr
port: 8080
tools:
- name: get-benefits-status
description: "Given a worker ID, retrieve the current benefits enrollment details."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID."
call: "workday.get-benefits"
with:
worker_id: "{{worker_id}}"
outputParameters:
- name: plans
type: array
mapping: "$.Benefits.ElectedPlans"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: benefits
path: "/alaska/workers/{{worker_id}}/benefits"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-benefits
method: GET
Retrieves the compensation summary for an employee from Workday by worker ID, returning base salary, bonus target, and total compensation.
naftiko: "0.5"
info:
label: "Workday Compensation Summary Lookup"
description: "Retrieves the compensation summary for an employee from Workday by worker ID, returning base salary, bonus target, and total compensation."
tags:
- hr
- workday
capability:
exposes:
- type: mcp
namespace: hr
port: 8080
tools:
- name: get-compensation
description: "Given a Workday worker ID, retrieve the compensation summary."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID."
call: "workday.get-compensation"
with:
worker_id: "{{worker_id}}"
outputParameters:
- name: base_salary
type: string
mapping: "$.Compensation.BaseSalary"
- name: bonus_target
type: string
mapping: "$.Compensation.BonusTarget"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: compensation
path: "/alaska/workers/{{worker_id}}/compensation"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-compensation
method: GET
Retrieves pilot and crew member certification status from Workday, returning certification type, expiration date, and renewal status.
naftiko: "0.5"
info:
label: "Workday Crew Certification Check"
description: "Retrieves pilot and crew member certification status from Workday, returning certification type, expiration date, and renewal status."
tags:
- hr
- compliance
- workday
- crew-operations
capability:
exposes:
- type: mcp
namespace: hr
port: 8080
tools:
- name: check-crew-certifications
description: "Look up crew member certification status in Workday. Returns certification types and expiration dates."
inputParameters:
- name: employee_id
in: body
type: string
description: "The crew member Workday employee ID."
call: workday.get-certifications
with:
employee_id: "{{employee_id}}"
outputParameters:
- name: certifications
type: array
mapping: "$.Worker.Certifications"
consumes:
- type: http
namespace: workday
baseUri: "https://wd5-services1.workday.com/ccx/api/v1/alaska-airlines"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: certifications
path: "/workers/{{employee_id}}/certifications"
inputParameters:
- name: employee_id
in: path
operations:
- name: get-certifications
method: GET
Queries Workday for crew members approaching FAA rest requirement limits, computes compliance status, and creates ServiceNow tasks for the scheduling team to address any potential violations. Ensures Alaska Airlines remains FAA Part 117 compliant.
naftiko: "0.5"
info:
label: "Workday Crew Scheduling Compliance Check"
description: "Queries Workday for crew members approaching FAA rest requirement limits, computes compliance status, and creates ServiceNow tasks for the scheduling team to address any potential violations. Ensures Alaska Airlines remains FAA Part 117 compliant."
tags:
- hr
- compliance
- workday
- servicenow
- flight-operations
capability:
exposes:
- type: mcp
namespace: crew-compliance
port: 8080
tools:
- name: check-crew-rest-compliance
description: "Given a crew base and check window in hours, retrieve crew scheduling records from Workday, identify members near FAA rest limits, and create ServiceNow compliance tasks for the scheduling team. Use for daily crew rest compliance monitoring."
inputParameters:
- name: crew_base
in: body
type: string
description: "The crew base airport code (e.g., SEA, PDX, SFO, LAX)."
- name: check_window_hours
in: body
type: integer
description: "The number of hours ahead to check for rest compliance issues."
steps:
- name: get-crew-schedules
type: call
call: "workday-crew.get-crew-schedule"
with:
base: "{{crew_base}}"
window: "{{check_window_hours}}"
- name: create-compliance-task
type: call
call: "servicenow-crew.create-incident"
with:
short_description: "FAA rest compliance review: {{crew_base}} — {{get-crew-schedules.at_risk_count}} crew members at risk"
category: "Compliance"
assignment_group: "Crew Scheduling"
consumes:
- type: http
namespace: workday-crew
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: crew-schedule
path: "/alaska-airlines/workers"
inputParameters:
- name: base
in: query
- name: window
in: query
operations:
- name: get-crew-schedule
method: GET
- type: http
namespace: servicenow-crew
baseUri: "https://alaska-airlines.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_pass"
resources:
- name: incident
path: "/table/incident"
inputParameters:
- name: short_description
in: body
- name: category
in: body
- name: assignment_group
in: body
operations:
- name: create-incident
method: POST
Retrieves an employee profile from Workday by employee ID, returning name, title, department, manager, and hire date for HR inquiries.
naftiko: "0.5"
info:
label: "Workday Employee Profile Lookup"
description: "Retrieves an employee profile from Workday by employee ID, returning name, title, department, manager, and hire date for HR inquiries."
tags:
- hr
- people
- workday
- hcm
capability:
exposes:
- type: mcp
namespace: hr
port: 8080
tools:
- name: get-employee-profile
description: "Look up an Alaska Airlines employee profile in Workday by employee ID. Returns name, title, department, manager, and hire date."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday employee ID."
call: workday.get-worker
with:
employee_id: "{{employee_id}}"
outputParameters:
- name: full_name
type: string
mapping: "$.Worker.Worker_Data.Personal_Data.Name_Data.Legal_Name"
- name: title
type: string
mapping: "$.Worker.Worker_Data.Employment_Data.Job_Data.Position_Data.Business_Title"
- name: department
type: string
mapping: "$.Worker.Worker_Data.Employment_Data.Job_Data.Position_Data.Business_Unit"
consumes:
- type: http
namespace: workday
baseUri: "https://wd5-services1.workday.com/ccx/api/v1/alaska-airlines"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{employee_id}}"
inputParameters:
- name: employee_id
in: path
operations:
- name: get-worker
method: GET
Pulls headcount totals from Workday by department and publishes the snapshot to Snowflake and Power BI for HR and finance leadership. Used for monthly workforce planning and budget reconciliation across Alaska Airlines business units.
naftiko: "0.5"
info:
label: "Workday Headcount Snapshot Report"
description: "Pulls headcount totals from Workday by department and publishes the snapshot to Snowflake and Power BI for HR and finance leadership. Used for monthly workforce planning and budget reconciliation across Alaska Airlines business units."
tags:
- hr
- reporting
- workday
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: hr-reporting
port: 8080
tools:
- name: publish-headcount-snapshot
description: "Given a cost center and reporting period, retrieve headcount from Workday, write the snapshot to Snowflake, and trigger a Power BI refresh. Use for monthly HR headcount reporting."
inputParameters:
- name: cost_center
in: body
type: string
description: "The Workday cost center ID (e.g., CC-FLIGHT-OPS, CC-CORPORATE)."
- name: reporting_period
in: body
type: string
description: "The reporting period in YYYY-MM format."
steps:
- name: get-headcount
type: call
call: "workday-hr.get-workers"
with:
cost_center: "{{cost_center}}"
- name: write-snowflake
type: call
call: "snowflake-hr.insert-rows"
with:
table: "HR.HEADCOUNT_SNAPSHOTS"
data: "{{get-headcount.workers}}"
- name: refresh-powerbi
type: call
call: "powerbi-hr.trigger-refresh"
with:
dataset_id: "$secrets.powerbi_headcount_dataset_id"
consumes:
- type: http
namespace: workday-hr
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/alaska-airlines/workers"
inputParameters:
- name: cost_center
in: query
operations:
- name: get-workers
method: GET
- type: http
namespace: snowflake-hr
baseUri: "https://alaska-airlines.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: rows
path: "/statements"
inputParameters:
- name: table
in: body
- name: data
in: body
operations:
- name: insert-rows
method: POST
- type: http
namespace: powerbi-hr
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: refresh
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: trigger-refresh
method: POST
Retrieves payroll processing results from Workday for a pay cycle, compares totals against the prior period in Snowflake, and creates a Jira variance review task if the delta exceeds threshold. Supports Alaska Airlines payroll integrity for 22,000+ employees.
naftiko: "0.5"
info:
label: "Workday Payroll Reconciliation"
description: "Retrieves payroll processing results from Workday for a pay cycle, compares totals against the prior period in Snowflake, and creates a Jira variance review task if the delta exceeds threshold. Supports Alaska Airlines payroll integrity for 22,000+ employees."
tags:
- hr
- payroll
- workday
- snowflake
- jira
capability:
exposes:
- type: mcp
namespace: payroll-ops
port: 8080
tools:
- name: reconcile-payroll
description: "Given a Workday pay group ID and variance threshold percentage, retrieve payroll totals, compare against prior period from Snowflake, and create a Jira task if the variance exceeds the threshold. Use for bi-weekly payroll reconciliation."
inputParameters:
- name: pay_group_id
in: body
type: string
description: "The Workday pay group ID (e.g., BIWEEKLY-CREW, MONTHLY-MGMT)."
- name: variance_threshold_pct
in: body
type: number
description: "The percentage variance above which a Jira review task is created."
steps:
- name: get-payroll-results
type: call
call: "workday-payroll.get-pay-run"
with:
pay_group_id: "{{pay_group_id}}"
- name: query-prior-period
type: call
call: "snowflake-payroll.query-prior"
with:
pay_group_id: "{{pay_group_id}}"
- name: create-variance-task
type: call
call: "jira-payroll.create-issue"
with:
project_key: "PAY"
summary: "Payroll variance: {{pay_group_id}}"
description: "Variance above {{variance_threshold_pct}}% detected. Finance review required."
issue_type: "Task"
consumes:
- type: http
namespace: workday-payroll
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: pay-run
path: "/alaska-airlines/payrollResults"
inputParameters:
- name: pay_group_id
in: query
operations:
- name: get-pay-run
method: GET
- type: http
namespace: snowflake-payroll
baseUri: "https://alaska-airlines.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: prior
path: "/statements"
inputParameters:
- name: pay_group_id
in: body
operations:
- name: query-prior
method: POST
- type: http
namespace: jira-payroll
baseUri: "https://alaska-airlines.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issue
path: "/issue"
inputParameters:
- name: project_key
in: body
- name: summary
in: body
- name: description
in: body
- name: issue_type
in: body
operations:
- name: create-issue
method: POST