Airbus Capabilities
Naftiko 0.5 capability definitions for Airbus - 100 capabilities showing integration workflows and service orchestrations.
Queries SAP SuccessFactors for employees with elevated system access and cross-checks Entra ID group memberships to identify access that needs recertification. Creates a Jira review task for each exception found and notifies the security team.
naftiko: "0.5"
info:
label: "Access Certification Review"
description: "Queries SAP SuccessFactors for employees with elevated system access and cross-checks Entra ID group memberships to identify access that needs recertification. Creates a Jira review task for each exception found and notifies the security team."
tags:
- security
- identity
- access-management
- sap-successfactors
- microsoft-entra
- jira
capability:
exposes:
- type: mcp
namespace: access-review
port: 8080
tools:
- name: run-access-certification
description: "Given a role group name and business unit, retrieve Entra ID group members, validate against SuccessFactors job roles, and create Jira review tasks for any 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-airbus-erp-admin)."
- name: business_unit
in: body
type: string
description: "The Airbus business unit scope for the review."
steps:
- name: get-group-members
type: call
call: "entra-access.get-group-members"
with:
group_id: "{{group_id}}"
- name: get-job-roles
type: call
call: "successfactors-access.get-job-roles"
with:
businessUnit: "{{business_unit}}"
- name: create-review-task
type: call
call: "jira-access.create-issue"
with:
project_key: "SEC"
summary: "Access certification review: {{group_id}}"
description: "Review required for {{business_unit}} — {{get-group-members.member_count}} members to certify."
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: successfactors-access
baseUri: "https://airbus.successfactors.com/odata/v2"
authentication:
type: bearer
token: "$secrets.successfactors_token"
resources:
- name: job-roles
path: "/EmpJob"
inputParameters:
- name: businessUnit
in: query
operations:
- name: get-job-roles
method: GET
- type: http
namespace: jira-access
baseUri: "https://airbus.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
Fetches a regulatory or certification document from SharePoint, sends the text to Anthropic Claude for structured summarization, and posts the summary to a Confluence compliance page. Accelerates Airbus regulatory team review of EASA and FAA documents.
naftiko: "0.5"
info:
label: "AI-Assisted Regulatory Document Summarization"
description: "Fetches a regulatory or certification document from SharePoint, sends the text to Anthropic Claude for structured summarization, and posts the summary to a Confluence compliance page. Accelerates Airbus regulatory team review of EASA and FAA documents."
tags:
- ai
- compliance
- regulatory
- anthropic
- sharepoint
- confluence
capability:
exposes:
- type: mcp
namespace: regulatory-ai
port: 8080
tools:
- name: summarize-regulatory-document
description: "Given a SharePoint document URL and compliance regulation reference, fetch the document content, send it to Anthropic Claude for structured summarization, and publish the result to Confluence. Use when regulatory staff need rapid comprehension of EASA, FAA, or ICAO documents."
inputParameters:
- name: sharepoint_file_url
in: body
type: string
description: "The SharePoint file URL of the regulatory document to summarize."
- name: regulation_reference
in: body
type: string
description: "The regulatory reference code (e.g., EASA CS-25, FAA AC 25.629-1)."
- name: confluence_space_key
in: body
type: string
description: "The Confluence space key where the summary will be published."
steps:
- name: fetch-document
type: call
call: "sharepoint-reg.get-file-content"
with:
file_url: "{{sharepoint_file_url}}"
- name: summarize-with-claude
type: call
call: "anthropic-reg.create-message"
with:
model: "claude-opus-4-5"
max_tokens: 1024
messages: "[{\"role\":\"user\",\"content\":\"Summarize this regulatory document for aerospace compliance: {{fetch-document.content}}\"}]"
- name: publish-confluence-summary
type: call
call: "confluence-reg.create-page"
with:
space_key: "{{confluence_space_key}}"
title: "Regulatory Summary: {{regulation_reference}}"
body: "{{summarize-with-claude.content}}"
consumes:
- type: http
namespace: sharepoint-reg
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: file-content
path: "/sites/{{site_id}}/drive/root:/{{file_url}}:/content"
inputParameters:
- name: file_url
in: path
operations:
- name: get-file-content
method: GET
- type: http
namespace: anthropic-reg
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: confluence-reg
baseUri: "https://airbus.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
When queried for an aircraft serial number, retrieves the delivery milestone status from SAP, checks the latest test flight report in Snowflake, and posts a summary to the program management Teams channel.
naftiko: "0.5"
info:
label: "Aircraft Delivery Milestone Tracker"
description: "When queried for an aircraft serial number, retrieves the delivery milestone status from SAP, checks the latest test flight report in Snowflake, and posts a summary to the program management Teams channel."
tags:
- aerospace
- sap-s4hana
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: delivery
port: 8080
tools:
- name: track-delivery-milestone
description: "Given an aircraft serial number, orchestrate milestone retrieval from SAP, test flight data from Snowflake, and post a summary to Teams."
inputParameters:
- name: serial_number
in: body
type: string
description: "The aircraft serial number (MSN)."
steps:
- name: get-milestone
type: call
call: "sap-s4.get-milestone"
with:
serial_number: "{{serial_number}}"
- name: get-test-flight
type: call
call: "snowflake.run-query"
with:
query: "SELECT flight_date, result, hours FROM test_flights WHERE msn = '{{serial_number}}' ORDER BY flight_date DESC LIMIT 1"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "delivery-program"
message: "MSN {{serial_number}} | Milestone: {{get-milestone.current_phase}} | Last test flight: {{get-test-flight.data[0].FLIGHT_DATE}} - {{get-test-flight.data[0].RESULT}}"
consumes:
- type: http
namespace: sap-s4
baseUri: "https://airbus-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_user"
password: "$secrets.sap_s4_pass"
resources:
- name: milestones
path: "/A_ProductionOrder_2?$filter=SerialNumber eq '{{serial_number}}'"
inputParameters:
- name: serial_number
in: query
operations:
- name: get-milestone
method: GET
- type: http
namespace: snowflake
baseUri: "https://airbus.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/delivery-program/channels/general/messages"
operations:
- name: send-message
method: POST
When a new airworthiness directive is issued, searches the compliance database in Snowflake, identifies affected fleet MSNs, and creates a tracking Jira epic for the engineering team.
naftiko: "0.5"
info:
label: "Airworthiness Directive Compliance Check"
description: "When a new airworthiness directive is issued, searches the compliance database in Snowflake, identifies affected fleet MSNs, and creates a tracking Jira epic for the engineering team."
tags:
- compliance
- snowflake
- jira
- aerospace
capability:
exposes:
- type: mcp
namespace: compliance
port: 8080
tools:
- name: check-ad-compliance
description: "Given an AD reference number, identify affected aircraft and create a tracking epic."
inputParameters:
- name: ad_reference
in: body
type: string
description: "The airworthiness directive reference number."
- name: affected_type
in: body
type: string
description: "The aircraft type designation (e.g., A320, A350)."
steps:
- name: find-affected-aircraft
type: call
call: "snowflake.run-query"
with:
query: "SELECT msn, operator, delivery_date FROM fleet_registry WHERE aircraft_type = '{{affected_type}}' AND status = 'IN_SERVICE'"
- name: create-epic
type: call
call: "jira.create-issue"
with:
project: "COMPLY"
summary: "AD {{ad_reference}} compliance - {{affected_type}}"
issuetype: "Epic"
description: "Airworthiness directive {{ad_reference}} affects {{find-affected-aircraft.row_count}} in-service {{affected_type}} aircraft."
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "airworthiness"
message: "New AD {{ad_reference}} for {{affected_type}}. {{find-affected-aircraft.row_count}} aircraft affected. Tracking epic: {{create-epic.key}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://airbus.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://airbus-engineering.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: messages
path: "/teams/airworthiness/channels/general/messages"
operations:
- name: send-message
method: POST
When Datadog detects API gateway rate limit breaches, retrieves the offending client details, creates a ServiceNow problem ticket, and alerts the API platform team via Slack.
naftiko: "0.5"
info:
label: "API Gateway Rate Limit Breach Handler"
description: "When Datadog detects API gateway rate limit breaches, retrieves the offending client details, creates a ServiceNow problem ticket, and alerts the API platform team via Slack."
tags:
- platform-engineering
- datadog
- servicenow
- slack
capability:
exposes:
- type: mcp
namespace: platform
port: 8080
tools:
- name: handle-rate-limit-breach
description: "Given an API endpoint and client ID, investigate the breach, create a problem ticket, and alert the team."
inputParameters:
- name: api_endpoint
in: body
type: string
description: "The API endpoint experiencing rate limit breaches."
- name: client_id
in: body
type: string
description: "The API client ID causing the breach."
steps:
- name: get-metrics
type: call
call: "datadog.get-api-metrics"
with:
query: "api.rate_limit.breaches{endpoint:{{api_endpoint}},client:{{client_id}}}"
- name: create-problem
type: call
call: "servicenow.create-problem"
with:
short_description: "API rate limit breach: {{api_endpoint}} by client {{client_id}}"
description: "Rate limit breaches detected. Peak rate: {{get-metrics.max_rate}}/min. Duration: {{get-metrics.breach_duration}}"
- name: alert-team
type: call
call: "slack.post-message"
with:
channel: "api-platform"
text: "Rate limit breach on {{api_endpoint}} by client {{client_id}}. Peak: {{get-metrics.max_rate}}/min. Problem: {{create-problem.number}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.eu/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: metrics
path: "/query?query={{query}}"
inputParameters:
- name: query
in: query
operations:
- name: get-api-metrics
method: GET
- type: http
namespace: servicenow
baseUri: "https://airbus.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_pass"
resources:
- name: problems
path: "/table/problem"
operations:
- name: create-problem
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a supplier invoice is submitted via SAP Ariba, retrieves the matching purchase order from SAP S/4HANA, validates line-item amounts, and triggers approval or exception routing in Ariba. Streamlines three-way matching for Airbus procurement.
naftiko: "0.5"
info:
label: "Ariba Invoice Approval Workflow"
description: "When a supplier invoice is submitted via SAP Ariba, retrieves the matching purchase order from SAP S/4HANA, validates line-item amounts, and triggers approval or exception routing in Ariba. Streamlines three-way matching for Airbus procurement."
tags:
- finance
- procurement
- sap-ariba
- sap-s4hana
capability:
exposes:
- type: mcp
namespace: ap-approval
port: 8080
tools:
- name: process-ariba-invoice
description: "Given an Ariba invoice ID and SAP PO number, retrieve both the invoice and the PO, validate amounts, and trigger Ariba approval or flag an exception. Use when a new supplier invoice requires three-way matching validation."
inputParameters:
- name: invoice_id
in: body
type: string
description: "The SAP Ariba invoice ID to process."
- name: po_number
in: body
type: string
description: "The related SAP purchase order number for three-way matching."
steps:
- name: get-ariba-invoice
type: call
call: "sap-ariba-ap.get-invoice"
with:
invoiceId: "{{invoice_id}}"
- name: get-sap-po
type: call
call: "sap-s4-ap.get-purchase-order"
with:
PurchaseOrder: "{{po_number}}"
- name: approve-invoice
type: call
call: "sap-ariba-ap.approve-invoice"
with:
invoiceId: "{{invoice_id}}"
status: "Approved"
consumes:
- type: http
namespace: sap-ariba-ap
baseUri: "https://openapi.ariba.com/api/invoice/v1"
authentication:
type: apikey
key: "apiKey"
value: "$secrets.ariba_api_key"
placement: query
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: sap-s4-ap
baseUri: "https://airbus-s4.sap.com/sap/opu/odata/sap/API_PURCHASEORDER_PROCESS_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_user"
password: "$secrets.sap_s4_pass"
resources:
- name: purchase-order
path: "/A_PurchaseOrder('{{PurchaseOrder}}')"
inputParameters:
- name: PurchaseOrder
in: path
operations:
- name: get-purchase-order
method: GET
Retrieves the latest build status from Azure DevOps for a given pipeline, returning build result, duration, and triggered-by information.
naftiko: "0.5"
info:
label: "Azure DevOps Build Status"
description: "Retrieves the latest build status from Azure DevOps for a given pipeline, returning build result, duration, and triggered-by information."
tags:
- engineering
- azure-devops
- ci-cd
capability:
exposes:
- type: mcp
namespace: ci-cd
port: 8080
tools:
- name: get-build-status
description: "Given an Azure DevOps pipeline ID, retrieve the latest build status including result and duration."
inputParameters:
- name: pipeline_id
in: body
type: string
description: "The Azure DevOps pipeline ID."
call: "azdo.get-builds"
with:
definitions: "{{pipeline_id}}"
outputParameters:
- name: result
type: string
mapping: "$.value[0].result"
- name: status
type: string
mapping: "$.value[0].status"
- name: triggered_by
type: string
mapping: "$.value[0].requestedFor.displayName"
consumes:
- type: http
namespace: azdo
baseUri: "https://dev.azure.com/airbus/aerospace/_apis/build"
authentication:
type: basic
username: "$secrets.azdo_user"
password: "$secrets.azdo_pat"
resources:
- name: builds
path: "/builds?definitions={{definitions}}&$top=1&api-version=7.0"
inputParameters:
- name: definitions
in: query
operations:
- name: get-builds
method: GET
Compiles carbon emissions data from Snowflake manufacturing metrics, generates a Power BI report refresh, and distributes the summary to the sustainability team via email.
naftiko: "0.5"
info:
label: "Carbon Emissions Reporting Pipeline"
description: "Compiles carbon emissions data from Snowflake manufacturing metrics, generates a Power BI report refresh, and distributes the summary to the sustainability team via email."
tags:
- sustainability
- snowflake
- power-bi
- microsoft-graph
capability:
exposes:
- type: mcp
namespace: sustainability
port: 8080
tools:
- name: generate-emissions-report
description: "Given a reporting period, compile emissions data, refresh the dashboard, and email the sustainability team."
inputParameters:
- name: period
in: body
type: string
description: "Reporting period (e.g., 2026-Q1)."
- name: facility
in: body
type: string
description: "Facility code or 'ALL' for company-wide."
steps:
- name: get-emissions-data
type: call
call: "snowflake.run-query"
with:
query: "SELECT facility, scope, total_co2_tonnes FROM emissions_summary WHERE period = '{{period}}' AND (facility = '{{facility}}' OR '{{facility}}' = 'ALL')"
- name: refresh-dashboard
type: call
call: "powerbi.trigger-refresh"
with:
dataset_id: "sustainability-emissions"
- name: email-report
type: call
call: "msgraph.send-mail"
with:
to: "sustainability@airbus.com"
subject: "Carbon Emissions Report: {{period}} - {{facility}}"
body: "Emissions data compiled for {{period}}. Facilities reported: {{get-emissions-data.row_count}}. Dashboard refresh status: {{refresh-dashboard.status}}."
consumes:
- type: http
namespace: snowflake
baseUri: "https://airbus.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: 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: 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 Datadog detects a cloud spend anomaly above threshold, retrieves Azure cost details, creates a ServiceNow incident, and alerts the FinOps team in Microsoft Teams. Enables rapid cost containment for Airbus cloud operations.
naftiko: "0.5"
info:
label: "Cloud FinOps Cost Anomaly Responder"
description: "When Datadog detects a cloud spend anomaly above threshold, retrieves Azure cost details, creates a ServiceNow incident, and alerts the FinOps team in Microsoft Teams. Enables rapid cost containment for Airbus cloud operations."
tags:
- finops
- cloud
- datadog
- azure
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: finops-ops
port: 8080
tools:
- name: handle-cost-anomaly
description: "Given a Datadog alert ID and Azure subscription ID, retrieve cost breakdown, open a ServiceNow incident, and notify the FinOps Teams channel. Use when cloud spend exceeds expected thresholds."
inputParameters:
- name: alert_id
in: body
type: string
description: "The Datadog monitor alert ID that triggered the anomaly."
- name: subscription_id
in: body
type: string
description: "The Azure subscription ID where 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-alert"
with:
monitor_id: "{{alert_id}}"
- name: get-azure-cost
type: call
call: "azure-cost.get-usage"
with:
subscriptionId: "{{subscription_id}}"
- name: create-snow-incident
type: call
call: "servicenow-finops.create-incident"
with:
short_description: "Cloud cost anomaly: {{threshold_percent}}% over budget"
category: "Cloud"
urgency: "2"
- name: notify-finops-team
type: call
call: "msteams-finops.send-message"
with:
channel_id: "finops-alerts"
message: "Cost anomaly detected: {{threshold_percent}}% over budget on subscription {{subscription_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: alert
path: "/monitor/{{monitor_id}}"
inputParameters:
- name: monitor_id
in: path
operations:
- name: get-alert
method: GET
- type: http
namespace: azure-cost
baseUri: "https://management.azure.com/subscriptions"
authentication:
type: bearer
token: "$secrets.azure_mgmt_token"
resources:
- name: usage
path: "/{{subscriptionId}}/providers/Microsoft.Consumption/usageDetails"
inputParameters:
- name: subscriptionId
in: path
operations:
- name: get-usage
method: GET
- type: http
namespace: servicenow-finops
baseUri: "https://airbus.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
Traces composite material batches by retrieving batch records from SAP, pulling cure cycle data from Snowflake, and logging the traceability query in ServiceNow for regulatory compliance.
naftiko: "0.5"
info:
label: "Composite Material Traceability Lookup"
description: "Traces composite material batches by retrieving batch records from SAP, pulling cure cycle data from Snowflake, and logging the traceability query in ServiceNow for regulatory compliance."
tags:
- manufacturing
- sap-s4hana
- snowflake
- servicenow
- quality
capability:
exposes:
- type: mcp
namespace: quality
port: 8080
tools:
- name: trace-composite-batch
description: "Given a batch number, retrieve the full material traceability chain including cure cycle data."
inputParameters:
- name: batch_number
in: body
type: string
description: "The composite material batch number."
steps:
- name: get-batch-record
type: call
call: "sap-s4.get-batch"
with:
Batch: "{{batch_number}}"
- name: get-cure-data
type: call
call: "snowflake.run-query"
with:
query: "SELECT cure_temp, cure_pressure, cure_duration, autoclave_id, operator FROM cure_cycles WHERE batch_number = '{{batch_number}}'"
- name: log-query
type: call
call: "servicenow.create-record"
with:
table: "u_traceability_log"
batch: "{{batch_number}}"
material: "{{get-batch-record.Material}}"
cure_records: "{{get-cure-data.row_count}}"
consumes:
- type: http
namespace: sap-s4
baseUri: "https://airbus-s4.sap.com/sap/opu/odata/sap/API_BATCH_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_user"
password: "$secrets.sap_s4_pass"
resources:
- name: batches
path: "/A_Batch('{{Batch}}')"
inputParameters:
- name: Batch
in: path
operations:
- name: get-batch
method: GET
- type: http
namespace: snowflake
baseUri: "https://airbus.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://airbus.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
Tracks aircraft configuration changes by pulling change history from SAP PLM, cross-referencing with Jira engineering tickets, and archiving the audit trail to SharePoint for regulatory purposes.
naftiko: "0.5"
info:
label: "Configuration Management Audit Trail"
description: "Tracks aircraft configuration changes by pulling change history from SAP PLM, cross-referencing with Jira engineering tickets, and archiving the audit trail to SharePoint for regulatory purposes."
tags:
- engineering
- sap-s4hana
- jira
- sharepoint
- compliance
capability:
exposes:
- type: mcp
namespace: config-mgmt
port: 8080
tools:
- name: generate-config-audit-trail
description: "Given an MSN and date range, compile configuration change history and archive the audit trail."
inputParameters:
- name: msn
in: body
type: string
description: "The aircraft MSN."
- name: date_from
in: body
type: string
description: "Start date in YYYY-MM-DD."
- name: date_to
in: body
type: string
description: "End date in YYYY-MM-DD."
steps:
- name: get-config-changes
type: call
call: "sap-s4.get-change-records"
with:
SerialNumber: "{{msn}}"
DateFrom: "{{date_from}}"
DateTo: "{{date_to}}"
- name: get-linked-tickets
type: call
call: "jira.search-issues"
with:
jql: "labels = 'MSN-{{msn}}' AND updated >= '{{date_from}}' AND updated <= '{{date_to}}'"
- name: archive-trail
type: call
call: "sharepoint.upload-file"
with:
folder: "Configuration/AuditTrails/{{msn}}"
filename: "config_audit_{{date_from}}_{{date_to}}.json"
content: "MSN: {{msn}} | Config changes: {{get-config-changes.count}} | Linked Jira tickets: {{get-linked-tickets.total}}"
consumes:
- type: http
namespace: sap-s4
baseUri: "https://airbus-s4.sap.com/sap/opu/odata/sap/API_CHANGERECORD_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_user"
password: "$secrets.sap_s4_pass"
resources:
- name: changes
path: "/A_ChangeRecord?$filter=SerialNumber eq '{{SerialNumber}}' and ChangeDate ge datetime'{{DateFrom}}' and ChangeDate le datetime'{{DateTo}}'"
inputParameters:
- name: SerialNumber
in: query
- name: DateFrom
in: query
- name: DateTo
in: query
operations:
- name: get-change-records
method: GET
- type: http
namespace: jira
baseUri: "https://airbus-engineering.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: search
path: "/search?jql={{jql}}"
inputParameters:
- name: jql
in: query
operations:
- name: search-issues
method: GET
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites/airbus.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
Searches the Airbus engineering Confluence space for documents matching a query, returning titles, URLs, and last-modified dates.
naftiko: "0.5"
info:
label: "Confluence Engineering Document Search"
description: "Searches the Airbus engineering Confluence space for documents matching a query, returning titles, URLs, and last-modified dates."
tags:
- engineering
- confluence
- knowledge-management
capability:
exposes:
- type: mcp
namespace: knowledge
port: 8080
tools:
- name: search-confluence
description: "Search the engineering Confluence space for documents matching a text query."
inputParameters:
- name: query
in: body
type: string
description: "The search query text."
call: "confluence.search-content"
with:
cql: "space = ENG AND text ~ '{{query}}'"
outputParameters:
- name: results
type: array
mapping: "$.results"
consumes:
- type: http
namespace: confluence
baseUri: "https://airbus-engineering.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-content
method: GET
When a contract milestone is completed, verifies delivery evidence in SharePoint, triggers the payment in SAP, and notifies the contract manager via email.
naftiko: "0.5"
info:
label: "Contract Milestone Payment Trigger"
description: "When a contract milestone is completed, verifies delivery evidence in SharePoint, triggers the payment in SAP, and notifies the contract manager via email."
tags:
- finance
- sharepoint
- sap-s4hana
- microsoft-graph
capability:
exposes:
- type: mcp
namespace: finance
port: 8080
tools:
- name: trigger-milestone-payment
description: "Given a contract ID and milestone number, verify evidence, trigger payment, and notify the contract manager."
inputParameters:
- name: contract_id
in: body
type: string
description: "The contract identifier."
- name: milestone_number
in: body
type: string
description: "The milestone sequence number."
steps:
- name: verify-evidence
type: call
call: "sharepoint.search-documents"
with:
query: "{{contract_id}} milestone {{milestone_number}} evidence"
- name: create-payment
type: call
call: "sap-s4.create-payment-request"
with:
ContractID: "{{contract_id}}"
Milestone: "{{milestone_number}}"
- name: notify-manager
type: call
call: "msgraph.send-mail"
with:
to: "contracts@airbus.com"
subject: "Milestone payment triggered: {{contract_id}} - M{{milestone_number}}"
body: "Payment request {{create-payment.document_number}} created for contract {{contract_id}}, milestone {{milestone_number}}. Evidence documents: {{verify-evidence.result_count}} found."
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites/airbus.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: sap-s4
baseUri: "https://airbus-s4.sap.com/sap/opu/odata/sap/API_SUPPLIERINVOICE_PROCESS_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_user"
password: "$secrets.sap_s4_pass"
resources:
- name: payment-requests
path: "/A_SupplierInvoice"
operations:
- name: create-payment-request
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 new contractor is approved, creates their profile in SAP SuccessFactors, provisions Okta access with restricted permissions, and opens a ServiceNow facilities request for badge and workspace.
naftiko: "0.5"
info:
label: "Contractor Onboarding Orchestration"
description: "When a new contractor is approved, creates their profile in SAP SuccessFactors, provisions Okta access with restricted permissions, and opens a ServiceNow facilities request for badge and workspace."
tags:
- hr
- sap-successfactors
- okta
- servicenow
capability:
exposes:
- type: mcp
namespace: hr
port: 8080
tools:
- name: onboard-contractor
description: "Given contractor details, create the SF profile, provision Okta access, and request facilities setup."
inputParameters:
- name: first_name
in: body
type: string
description: "Contractor's first name."
- name: last_name
in: body
type: string
description: "Contractor's last name."
- name: email
in: body
type: string
description: "Contractor's email address."
- name: department
in: body
type: string
description: "Department the contractor will support."
- name: end_date
in: body
type: string
description: "Contract end date in YYYY-MM-DD format."
steps:
- name: create-sf-profile
type: call
call: "successfactors.create-contingent-worker"
with:
firstName: "{{first_name}}"
lastName: "{{last_name}}"
email: "{{email}}"
department: "{{department}}"
endDate: "{{end_date}}"
- name: provision-okta
type: call
call: "okta.create-user"
with:
login: "{{email}}"
firstName: "{{first_name}}"
lastName: "{{last_name}}"
groupIds: "contractors-{{department}}"
- name: request-facilities
type: call
call: "servicenow.create-request"
with:
short_description: "Contractor facilities: {{first_name}} {{last_name}} - {{department}}"
category: "facilities"
description: "Badge and workspace needed for contractor {{first_name}} {{last_name}} in {{department}}. Contract through {{end_date}}."
consumes:
- type: http
namespace: successfactors
baseUri: "https://airbus.successfactors.com/odata/v2"
authentication:
type: bearer
token: "$secrets.successfactors_token"
resources:
- name: contingent-workers
path: "/PerPerson"
operations:
- name: create-contingent-worker
method: POST
- type: http
namespace: okta
baseUri: "https://airbus.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: users
path: "/users"
operations:
- name: create-user
method: POST
- type: http
namespace: servicenow
baseUri: "https://airbus.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
Aggregates program status across engineering (Jira), manufacturing (SAP), and finance (Snowflake) for a given aircraft program, posting a unified executive summary to Microsoft Teams.
naftiko: "0.5"
info:
label: "Cross-Functional Program Status Aggregator"
description: "Aggregates program status across engineering (Jira), manufacturing (SAP), and finance (Snowflake) for a given aircraft program, posting a unified executive summary to Microsoft Teams."
tags:
- program-management
- jira
- sap-s4hana
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: program-mgmt
port: 8080
tools:
- name: aggregate-program-status
description: "Given a program code, pull engineering, manufacturing, and finance data into a unified summary."
inputParameters:
- name: program_code
in: body
type: string
description: "The aircraft program code (e.g., A320, A350, A220)."
steps:
- name: get-eng-status
type: call
call: "jira.search-issues"
with:
jql: "project = '{{program_code}}' AND status != Done"
- name: get-mfg-status
type: call
call: "sap-s4.get-production-orders"
with:
Program: "{{program_code}}"
- name: get-finance-status
type: call
call: "snowflake.run-query"
with:
query: "SELECT budget_total, actual_spend, forecast FROM program_financials WHERE program = '{{program_code}}' AND period = CURRENT_MONTH()"
- name: post-summary
type: call
call: "msteams.send-message"
with:
channel_id: "executive-program-review"
message: "Program {{program_code}} Status | Engineering: {{get-eng-status.total}} open items | Manufacturing: {{get-mfg-status.active_orders}} active orders | Finance: {{get-finance-status.data[0].ACTUAL_SPEND}}/{{get-finance-status.data[0].BUDGET_TOTAL}} spent"
consumes:
- type: http
namespace: jira
baseUri: "https://airbus-engineering.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: search
path: "/search?jql={{jql}}"
inputParameters:
- name: jql
in: query
operations:
- name: search-issues
method: GET
- type: http
namespace: sap-s4
baseUri: "https://airbus-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_user"
password: "$secrets.sap_s4_pass"
resources:
- name: production-orders
path: "/A_ProductionOrder_2?$filter=Program eq '{{Program}}'"
inputParameters:
- name: Program
in: query
operations:
- name: get-production-orders
method: GET
- type: http
namespace: snowflake
baseUri: "https://airbus.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/executive-program-review/channels/general/messages"
operations:
- name: send-message
method: POST
When an aircraft delivery is confirmed, retrieves customer details from Salesforce, updates the delivery milestone in SAP, and sends a formal delivery notification email via Microsoft Graph.
naftiko: "0.5"
info:
label: "Customer Delivery Notification Workflow"
description: "When an aircraft delivery is confirmed, retrieves customer details from Salesforce, updates the delivery milestone in SAP, and sends a formal delivery notification email via Microsoft Graph."
tags:
- sales
- salesforce
- sap-s4hana
- microsoft-graph
capability:
exposes:
- type: mcp
namespace: sales
port: 8080
tools:
- name: notify-customer-delivery
description: "Given an aircraft MSN and delivery date, look up the customer, update SAP, and send the delivery notification."
inputParameters:
- name: msn
in: body
type: string
description: "The aircraft manufacturer serial number."
- name: delivery_date
in: body
type: string
description: "Delivery date in YYYY-MM-DD format."
steps:
- name: get-customer
type: call
call: "salesforce.get-opportunity"
with:
msn: "{{msn}}"
- name: update-milestone
type: call
call: "sap-s4.update-delivery-status"
with:
SerialNumber: "{{msn}}"
DeliveryDate: "{{delivery_date}}"
Status: "DELIVERED"
- name: send-notification
type: call
call: "msgraph.send-mail"
with:
to: "{{get-customer.contact_email}}"
subject: "Aircraft Delivery Confirmation - MSN {{msn}}"
body: "Dear {{get-customer.contact_name}}, we are pleased to confirm the delivery of aircraft MSN {{msn}} to {{get-customer.airline_name}} on {{delivery_date}}."
consumes:
- type: http
namespace: salesforce
baseUri: "https://airbus.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/query?q=SELECT+Id,Contact_Email__c,Contact_Name__c,Airline_Name__c+FROM+Opportunity+WHERE+MSN__c='{{msn}}'"
inputParameters:
- name: msn
in: query
operations:
- name: get-opportunity
method: GET
- type: http
namespace: sap-s4
baseUri: "https://airbus-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_user"
password: "$secrets.sap_s4_pass"
resources:
- name: delivery
path: "/A_ProductionOrder_2('{{SerialNumber}}')"
inputParameters:
- name: SerialNumber
in: path
operations:
- name: update-delivery-status
method: PATCH
- 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 customer support case arrives in Salesforce, enriches it with customer fleet data from Snowflake, assigns it to the appropriate regional team, and notifies the assigned engineer via Slack.
naftiko: "0.5"
info:
label: "Customer Support Case Routing"
description: "When a customer support case arrives in Salesforce, enriches it with customer fleet data from Snowflake, assigns it to the appropriate regional team, and notifies the assigned engineer via Slack."
tags:
- customer-support
- salesforce
- snowflake
- slack
capability:
exposes:
- type: mcp
namespace: support
port: 8080
tools:
- name: route-support-case
description: "Given a Salesforce case ID, enrich with fleet context, route to the right team, and notify the engineer."
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: get-fleet-context
type: call
call: "snowflake.run-query"
with:
query: "SELECT aircraft_count, region, support_tier FROM customer_fleet WHERE customer_id = '{{get-case.customer_id}}'"
- name: notify-engineer
type: call
call: "slack.post-message"
with:
channel: "support-{{get-fleet-context.data[0].REGION}}"
text: "New case {{case_id}} from {{get-case.customer_name}} | Fleet: {{get-fleet-context.data[0].AIRCRAFT_COUNT}} aircraft | Tier: {{get-fleet-context.data[0].SUPPORT_TIER}} | Subject: {{get-case.subject}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://airbus.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: snowflake
baseUri: "https://airbus.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
Aggregates threat intelligence from Datadog security signals and Snowflake SIEM data, creates a ServiceNow security advisory, and distributes the digest to the CISO team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Cybersecurity Threat Intel Digest"
description: "Aggregates threat intelligence from Datadog security signals and Snowflake SIEM data, creates a ServiceNow security advisory, and distributes the digest to the CISO team via Microsoft Teams."
tags:
- security
- datadog
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: security
port: 8080
tools:
- name: generate-threat-digest
description: "Given a time range, compile security signals and SIEM data into a threat intelligence digest."
inputParameters:
- name: hours_back
in: body
type: string
description: "Number of hours to look back for threat data."
steps:
- name: get-signals
type: call
call: "datadog.get-security-signals"
with:
filter: "severity:high"
from: "-{{hours_back}}h"
- name: get-siem-data
type: call
call: "snowflake.run-query"
with:
query: "SELECT threat_type, count(*) as occurrences FROM siem_events WHERE event_time > DATEADD('hour', -{{hours_back}}, CURRENT_TIMESTAMP()) GROUP BY threat_type ORDER BY occurrences DESC"
- name: create-advisory
type: call
call: "servicenow.create-record"
with:
table: "u_security_advisory"
title: "Threat Intel Digest - Last {{hours_back}}h"
high_severity_count: "{{get-signals.count}}"
- name: notify-ciso
type: call
call: "msteams.send-message"
with:
channel_id: "ciso-team"
message: "Threat Intel Digest | Period: Last {{hours_back}}h | High-severity signals: {{get-signals.count}} | Top threat: {{get-siem-data.data[0].THREAT_TYPE}} ({{get-siem-data.data[0].OCCURRENCES}}x) | Advisory: {{create-advisory.number}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.eu/api/v2"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: security-signals
path: "/security_monitoring/signals?filter={{filter}}&from={{from}}"
inputParameters:
- name: filter
in: query
- name: from
in: query
operations:
- name: get-security-signals
method: GET
- type: http
namespace: snowflake
baseUri: "https://airbus.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://airbus.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/ciso-team/channels/general/messages"
operations:
- name: send-message
method: POST
When a Snowflake ETL pipeline fails, retrieves error details, creates a Jira bug ticket for the data engineering team, and sends a PagerDuty alert to the on-call data engineer.
naftiko: "0.5"
info:
label: "Data Pipeline Failure Recovery"
description: "When a Snowflake ETL pipeline fails, retrieves error details, creates a Jira bug ticket for the data engineering team, and sends a PagerDuty alert to the on-call data engineer."
tags:
- data-engineering
- snowflake
- jira
- pagerduty
capability:
exposes:
- type: mcp
namespace: data-engineering
port: 8080
tools:
- name: handle-pipeline-failure
description: "Given a pipeline name and error message, log the failure, create a Jira ticket, and page the on-call engineer."
inputParameters:
- name: pipeline_name
in: body
type: string
description: "The Snowflake pipeline name."
- name: error_message
in: body
type: string
description: "The pipeline error message."
steps:
- name: get-pipeline-history
type: call
call: "snowflake.run-query"
with:
query: "SELECT * FROM pipeline_runs WHERE pipeline_name = '{{pipeline_name}}' ORDER BY run_time DESC LIMIT 5"
- name: create-bug
type: call
call: "jira.create-issue"
with:
project: "DATA"
summary: "Pipeline failure: {{pipeline_name}}"
description: "Error: {{error_message}}. Recent runs: {{get-pipeline-history.row_count}}"
issuetype: "Bug"
priority: "High"
- name: page-oncall
type: call
call: "pagerduty.create-incident"
with:
title: "ETL Pipeline Failure: {{pipeline_name}}"
service_id: "data-engineering"
urgency: "high"
body: "Pipeline {{pipeline_name}} failed. Jira: {{create-bug.key}}. Error: {{error_message}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://airbus.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://airbus-engineering.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_api_key"
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
Retrieves performance metrics for a specified Airbus application from Datadog, identifies anomalies against baseline thresholds, and creates a ServiceNow incident if SLA breach is detected. Ensures proactive performance management for Airbus digital platforms.
naftiko: "0.5"
info:
label: "Datadog Application Performance Monitoring Alert"
description: "Retrieves performance metrics for a specified Airbus application from Datadog, identifies anomalies against baseline thresholds, and creates a ServiceNow incident if SLA breach is detected. Ensures proactive performance management for Airbus digital platforms."
tags:
- observability
- performance
- datadog
- servicenow
capability:
exposes:
- type: mcp
namespace: apm-ops
port: 8080
tools:
- name: check-application-performance
description: "Given an application service name and time window, retrieve Datadog APM metrics, evaluate against SLA thresholds, and create a ServiceNow incident if a breach is detected. Use for proactive performance monitoring of critical Airbus systems."
inputParameters:
- name: service_name
in: body
type: string
description: "The Datadog APM service name (e.g., airbus-myairbus-api, erp-gateway)."
- name: time_window_minutes
in: body
type: integer
description: "The time window in minutes to evaluate (e.g., 15, 30, 60)."
- name: latency_threshold_ms
in: body
type: number
description: "The p95 latency threshold in milliseconds above which a breach is declared."
steps:
- name: get-apm-metrics
type: call
call: "datadog-apm.get-service-metrics"
with:
service: "{{service_name}}"
from: "{{time_window_minutes}}"
- name: create-performance-incident
type: call
call: "servicenow-apm.create-incident"
with:
short_description: "Performance breach: {{service_name}} exceeded {{latency_threshold_ms}}ms p95"
category: "Performance"
priority: "2"
consumes:
- type: http
namespace: datadog-apm
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: service-metrics
path: "/metrics/query"
inputParameters:
- name: service
in: query
- name: from
in: query
operations:
- name: get-service-metrics
method: GET
- type: http
namespace: servicenow-apm
baseUri: "https://airbus.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
Queries Datadog for the health and metric summary of a specific infrastructure host, returning CPU, memory, and alert status.
naftiko: "0.5"
info:
label: "Datadog Infrastructure Host Status"
description: "Queries Datadog for the health and metric summary of a specific infrastructure host, returning CPU, memory, and alert status."
tags:
- it-operations
- datadog
- monitoring
capability:
exposes:
- type: mcp
namespace: monitoring
port: 8080
tools:
- name: get-host-status
description: "Given a hostname, retrieve the Datadog host health summary including CPU, memory, and active alerts."
inputParameters:
- name: hostname
in: body
type: string
description: "The infrastructure hostname."
call: "datadog.get-host"
with:
filter: "host:{{hostname}}"
outputParameters:
- name: cpu_pct
type: string
mapping: "$.host_list[0].metrics.cpu"
- name: memory_pct
type: string
mapping: "$.host_list[0].metrics.memory"
- name: status
type: string
mapping: "$.host_list[0].up"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.eu/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: hosts
path: "/hosts?filter={{filter}}"
inputParameters:
- name: filter
in: query
operations:
- name: get-host
method: GET
Prepares for a design review by gathering open Jira issues for the component, pulling the latest CAD revision references from SharePoint, and scheduling a Teams meeting with the review board.
naftiko: "0.5"
info:
label: "Design Review Meeting Preparation"
description: "Prepares for a design review by gathering open Jira issues for the component, pulling the latest CAD revision references from SharePoint, and scheduling a Teams meeting with the review board."
tags:
- engineering
- jira
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: engineering
port: 8080
tools:
- name: prepare-design-review
description: "Given a component ID and review date, gather issues, documents, and schedule the review meeting."
inputParameters:
- name: component_id
in: body
type: string
description: "The component or assembly identifier."
- name: review_date
in: body
type: string
description: "Review date in YYYY-MM-DD format."
steps:
- name: get-open-issues
type: call
call: "jira.search-issues"
with:
jql: "component = '{{component_id}}' AND status != Done"
- name: get-cad-docs
type: call
call: "sharepoint.search-documents"
with:
query: "{{component_id}} CAD revision"
- name: schedule-meeting
type: call
call: "msteams.create-event"
with:
subject: "Design Review: {{component_id}}"
start: "{{review_date}}T10:00:00"
body: "Open issues: {{get-open-issues.total}}. Latest CAD documents available in SharePoint. Review package ready."
consumes:
- type: http
namespace: jira
baseUri: "https://airbus-engineering.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: search
path: "/search?jql={{jql}}"
inputParameters:
- name: jql
in: query
operations:
- name: search-issues
method: GET
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites/airbus.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: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: events
path: "/me/events"
operations:
- name: create-event
method: POST
Verifies digital twin synchronization by checking the latest sync timestamp in Snowflake, comparing against SAP configuration data, and alerting the engineering team via Slack if drift is detected.
naftiko: "0.5"
info:
label: "Digital Twin Sync Status Check"
description: "Verifies digital twin synchronization by checking the latest sync timestamp in Snowflake, comparing against SAP configuration data, and alerting the engineering team via Slack if drift is detected."
tags:
- engineering
- snowflake
- sap-s4hana
- slack
capability:
exposes:
- type: mcp
namespace: engineering
port: 8080
tools:
- name: check-digital-twin-sync
description: "Given an aircraft MSN, verify the digital twin is synchronized with SAP master data."
inputParameters:
- name: msn
in: body
type: string
description: "The aircraft MSN."
steps:
- name: get-twin-status
type: call
call: "snowflake.run-query"
with:
query: "SELECT last_sync, config_hash, drift_detected FROM digital_twins WHERE msn = '{{msn}}'"
- name: get-sap-config
type: call
call: "sap-s4.get-config"
with:
SerialNumber: "{{msn}}"
- name: alert-if-drift
type: call
call: "slack.post-message"
with:
channel: "digital-twin-ops"
text: "Digital twin sync check for MSN {{msn}} | Last sync: {{get-twin-status.data[0].LAST_SYNC}} | Drift detected: {{get-twin-status.data[0].DRIFT_DETECTED}} | SAP config version: {{get-sap-config.version}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://airbus.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: sap-s4
baseUri: "https://airbus-s4.sap.com/sap/opu/odata/sap/API_PRODUCT_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_user"
password: "$secrets.sap_s4_pass"
resources:
- name: config
path: "/A_Product?$filter=SerialNumber eq '{{SerialNumber}}'"
inputParameters:
- name: SerialNumber
in: query
operations:
- name: get-config
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
Monitors Airbus drone fleet health by querying telemetry from Snowflake, comparing against maintenance schedules in SAP, and posting health summaries to the UAS operations Teams channel.
naftiko: "0.5"
info:
label: "Drone Fleet Health Monitoring"
description: "Monitors Airbus drone fleet health by querying telemetry from Snowflake, comparing against maintenance schedules in SAP, and posting health summaries to the UAS operations Teams channel."
tags:
- aerospace
- snowflake
- sap-s4hana
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: uas-ops
port: 8080
tools:
- name: check-drone-fleet-health
description: "Given a fleet group, check telemetry and maintenance data, then post a fleet health summary."
inputParameters:
- name: fleet_group
in: body
type: string
description: "The drone fleet group identifier."
steps:
- name: get-telemetry
type: call
call: "snowflake.run-query"
with:
query: "SELECT drone_id, battery_health_pct, flight_hours, last_check FROM drone_telemetry WHERE fleet_group = '{{fleet_group}}' AND battery_health_pct < 80"
- name: get-maintenance
type: call
call: "sap-pm.get-due-maintenance"
with:
FleetGroup: "{{fleet_group}}"
- name: post-summary
type: call
call: "msteams.send-message"
with:
channel_id: "uas-operations"
message: "Drone Fleet {{fleet_group}} Health | Low battery units: {{get-telemetry.row_count}} | Maintenance due: {{get-maintenance.count}} drones"
consumes:
- type: http
namespace: snowflake
baseUri: "https://airbus.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: sap-pm
baseUri: "https://airbus-s4.sap.com/sap/opu/odata/sap/API_MAINTENANCEORDER"
authentication:
type: basic
username: "$secrets.sap_s4_user"
password: "$secrets.sap_s4_pass"
resources:
- name: maintenance
path: "/MaintenanceOrder?$filter=FleetGroup eq '{{FleetGroup}}' and Status eq 'DUE'"
inputParameters:
- name: FleetGroup
in: query
operations:
- name: get-due-maintenance
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/uas-operations/channels/general/messages"
operations:
- name: send-message
method: POST
When an employee departure is confirmed in SAP SuccessFactors, deactivates their identity in Microsoft Entra ID, closes all open Jira tasks, and posts a handover summary to the manager in Microsoft Teams. Ensures complete access revocation and knowledge transfer for Airbus staff exits.
naftiko: "0.5"
info:
label: "Employee Offboarding Orchestration"
description: "When an employee departure is confirmed in SAP SuccessFactors, deactivates their identity in Microsoft Entra ID, closes all open Jira tasks, and posts a handover summary to the manager in Microsoft Teams. Ensures complete access revocation and knowledge transfer for Airbus staff exits."
tags:
- hr
- offboarding
- sap-successfactors
- microsoft-entra
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-offboarding
port: 8080
tools:
- name: trigger-employee-offboarding
description: "Given a SuccessFactors employee ID and last working day, disable the Entra ID account, close open Jira tasks, and send a handover summary to the manager via Teams. Use when an employee departure is confirmed."
inputParameters:
- name: employee_id
in: body
type: string
description: "The SAP SuccessFactors employee 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-employee-details
type: call
call: "successfactors-off.get-employee"
with:
employee_id: "{{employee_id}}"
- name: disable-entra-account
type: call
call: "entra-id.disable-user"
with:
userPrincipalName: "{{get-employee-details.email}}"
accountEnabled: false
- name: notify-manager
type: call
call: "msteams-offboard.send-message"
with:
channel_id: "{{get-employee-details.manager_email}}"
message: "Offboarding complete for {{get-employee-details.display_name}}. Last day: {{last_working_day}}. Account deactivated."
consumes:
- type: http
namespace: successfactors-off
baseUri: "https://airbus.successfactors.com/odata/v2"
authentication:
type: bearer
token: "$secrets.successfactors_token"
resources:
- name: employee
path: "/PerPerson('{{employee_id}}')"
inputParameters:
- name: employee_id
in: path
operations:
- name: get-employee
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-offboard
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 a role change is approved in SAP SuccessFactors, updates the employee's Entra ID group memberships, modifies their SAP access permissions, and notifies both the employee and their new manager via Microsoft Teams.
naftiko: "0.5"
info:
label: "Employee Role Change Provisioning"
description: "When a role change is approved in SAP SuccessFactors, updates the employee's Entra ID group memberships, modifies their SAP access permissions, and notifies both the employee and their new manager via Microsoft Teams."
tags:
- hr
- identity
- role-change
- sap-successfactors
- microsoft-entra
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-role-change
port: 8080
tools:
- name: provision-role-change
description: "Given a SuccessFactors employee ID, old group ID, and new group ID, update Entra ID group memberships and notify the employee and new manager in Teams. Use when an employee's role or department changes are approved."
inputParameters:
- name: employee_id
in: body
type: string
description: "The SAP SuccessFactors employee ID."
- 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-employee-info
type: call
call: "successfactors-role.get-employee"
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-employee-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-employee-info.entra_object_id}}"
- name: notify-employee
type: call
call: "msteams-role.send-message"
with:
channel_id: "{{get-employee-info.email}}"
message: "Your role has been updated. New access groups are active."
consumes:
- type: http
namespace: successfactors-role
baseUri: "https://airbus.successfactors.com/odata/v2"
authentication:
type: bearer
token: "$secrets.successfactors_token"
resources:
- name: employee
path: "/PerPerson('{{employee_id}}')"
inputParameters:
- name: employee_id
in: path
operations:
- name: get-employee
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 an employee transfers between departments, updates their Okta group memberships, creates a ServiceNow ticket for equipment transfer, and notifies the new manager via Microsoft Teams.
naftiko: "0.5"
info:
label: "Employee Transfer Provisioning Workflow"
description: "When an employee transfers between departments, updates their Okta group memberships, creates a ServiceNow ticket for equipment transfer, and notifies the new manager via Microsoft Teams."
tags:
- hr
- okta
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr
port: 8080
tools:
- name: process-transfer
description: "Given an employee email and new department, update access groups, request equipment transfer, and notify the new manager."
inputParameters:
- name: employee_email
in: body
type: string
description: "The employee's email address."
- name: new_department
in: body
type: string
description: "The new department name."
- name: new_manager_email
in: body
type: string
description: "The new manager's email."
steps:
- name: update-groups
type: call
call: "okta.update-user-groups"
with:
login: "{{employee_email}}"
new_group: "{{new_department}}"
- name: create-transfer-ticket
type: call
call: "servicenow.create-request"
with:
short_description: "Equipment transfer: {{employee_email}} to {{new_department}}"
category: "facilities"
- name: notify-manager
type: call
call: "msteams.send-message"
with:
recipient: "{{new_manager_email}}"
message: "{{employee_email}} has been transferred to {{new_department}}. Okta groups updated. Equipment transfer ticket: {{create-transfer-ticket.number}}"
consumes:
- type: http
namespace: okta
baseUri: "https://airbus.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: user-groups
path: "/users/{{login}}/groups"
inputParameters:
- name: login
in: path
operations:
- name: update-user-groups
method: PUT
- type: http
namespace: servicenow
baseUri: "https://airbus.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: "/chats/messages"
operations:
- name: send-message
method: POST
When an engineering change request is submitted, creates a ServiceNow change record, retrieves the affected BOM from SAP, and notifies the design authority via email through Microsoft Graph.
naftiko: "0.5"
info:
label: "Engineering Change Request Workflow"
description: "When an engineering change request is submitted, creates a ServiceNow change record, retrieves the affected BOM from SAP, and notifies the design authority via email through Microsoft Graph."
tags:
- engineering
- servicenow
- sap-s4hana
- microsoft-graph
capability:
exposes:
- type: mcp
namespace: engineering
port: 8080
tools:
- name: submit-change-request
description: "Given a change description, affected assembly, and requestor, create a ServiceNow change, look up the SAP BOM, and email the design authority."
inputParameters:
- name: change_description
in: body
type: string
description: "Description of the engineering change."
- name: assembly_number
in: body
type: string
description: "The affected assembly or part number."
- name: requestor_email
in: body
type: string
description: "Email of the change requestor."
steps:
- name: create-change
type: call
call: "servicenow.create-change"
with:
short_description: "ECR: {{assembly_number}} - {{change_description}}"
category: "engineering"
requested_by: "{{requestor_email}}"
- name: get-bom
type: call
call: "sap-s4.get-bom"
with:
Material: "{{assembly_number}}"
- name: email-authority
type: call
call: "msgraph.send-mail"
with:
to: "{{get-bom.design_authority_email}}"
subject: "ECR {{create-change.number}}: {{assembly_number}}"
body: "An engineering change request has been submitted for assembly {{assembly_number}}. Change: {{create-change.number}}. Description: {{change_description}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://airbus.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_pass"
resources:
- name: changes
path: "/table/change_request"
operations:
- name: create-change
method: POST
- type: http
namespace: sap-s4
baseUri: "https://airbus-s4.sap.com/sap/opu/odata/sap/API_BILL_OF_MATERIAL_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_user"
password: "$secrets.sap_s4_pass"
resources:
- name: bom
path: "/A_BillOfMaterial?$filter=Material eq '{{Material}}'"
inputParameters:
- name: Material
in: query
operations:
- name: get-bom
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
When a GitHub Actions pipeline fails on a critical aerospace software repository, creates a Jira incident ticket, alerts the engineering team in Microsoft Teams, and logs the failure in Datadog. Ensures rapid response for flight-critical software defects.
naftiko: "0.5"
info:
label: "Engineering CI/CD Pipeline Failure Response"
description: "When a GitHub Actions pipeline fails on a critical aerospace software repository, creates a Jira incident ticket, alerts the engineering team in Microsoft Teams, and logs the failure in Datadog. Ensures rapid response for flight-critical software defects."
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, post an alert to the engineering Teams channel, and log a Datadog event. Invoke when a CI/CD pipeline failure is detected on a critical branch."
inputParameters:
- name: repo_name
in: body
type: string
description: "The GitHub repository name where the failure occurred (e.g., avionics-firmware)."
- 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/A380)."
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-teams
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}}"
- name: log-datadog-event
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://airbus.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
After a structural test completes, retrieves results from Snowflake, archives the report to SharePoint, and distributes a summary to the stress engineering team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Engineering Test Report Distribution"
description: "After a structural test completes, retrieves results from Snowflake, archives the report to SharePoint, and distributes a summary to the stress engineering team via Microsoft Teams."
tags:
- engineering
- snowflake
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: engineering
port: 8080
tools:
- name: distribute-test-report
description: "Given a test ID, retrieve results, archive to SharePoint, and notify the engineering team."
inputParameters:
- name: test_id
in: body
type: string
description: "The structural test identifier."
- name: test_type
in: body
type: string
description: "Type of test (e.g., fatigue, static, damage-tolerance)."
steps:
- name: get-results
type: call
call: "snowflake.run-query"
with:
query: "SELECT test_id, specimen, load_cycles, result, notes FROM test_results WHERE test_id = '{{test_id}}'"
- name: archive-report
type: call
call: "sharepoint.upload-file"
with:
folder: "Engineering/TestReports/{{test_type}}"
filename: "{{test_id}}_report.json"
content: "{{get-results.data}}"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "stress-engineering"
message: "Test report available: {{test_id}} ({{test_type}}) | Result: {{get-results.data[0].RESULT}} | Archived to SharePoint: Engineering/TestReports/{{test_type}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://airbus.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/airbus.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
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/stress-engineering/channels/general/messages"
operations:
- name: send-message
method: POST
When a shipment is planned, retrieves the material export classification from SAP, checks the destination against the compliance database in Snowflake, and logs the result in ServiceNow.
naftiko: "0.5"
info:
label: "Export Control Classification Check"
description: "When a shipment is planned, retrieves the material export classification from SAP, checks the destination against the compliance database in Snowflake, and logs the result in ServiceNow."
tags:
- compliance
- sap-s4hana
- snowflake
- servicenow
capability:
exposes:
- type: mcp
namespace: compliance
port: 8080
tools:
- name: check-export-control
description: "Given a material number and destination country, verify export classification and log the compliance check."
inputParameters:
- name: material_number
in: body
type: string
description: "The material to be exported."
- name: destination_country
in: body
type: string
description: "ISO country code of the destination."
steps:
- name: get-classification
type: call
call: "sap-s4.get-export-class"
with:
Material: "{{material_number}}"
- name: check-restrictions
type: call
call: "snowflake.run-query"
with:
query: "SELECT restricted, reason FROM export_restrictions WHERE eccn = '{{get-classification.ECCN}}' AND country = '{{destination_country}}'"
- name: log-check
type: call
call: "servicenow.create-record"
with:
table: "u_export_compliance_log"
material: "{{material_number}}"
destination: "{{destination_country}}"
eccn: "{{get-classification.ECCN}}"
result: "{{check-restrictions.restricted}}"
consumes:
- type: http
namespace: sap-s4
baseUri: "https://airbus-s4.sap.com/sap/opu/odata/sap/API_PRODUCT_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_user"
password: "$secrets.sap_s4_pass"
resources:
- name: export-class
path: "/A_Product('{{Material}}')/to_ExportControl"
inputParameters:
- name: Material
in: path
operations:
- name: get-export-class
method: GET
- type: http
namespace: snowflake
baseUri: "https://airbus.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://airbus.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
Compiles a daily final assembly line status by querying production order progress from SAP, quality hold data from Snowflake, and posting the consolidated report to the operations Teams channel.
naftiko: "0.5"
info:
label: "Final Assembly Line Status Report"
description: "Compiles a daily final assembly line status by querying production order progress from SAP, quality hold data from Snowflake, and posting the consolidated report to the operations Teams channel."
tags:
- manufacturing
- sap-s4hana
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: manufacturing
port: 8080
tools:
- name: get-fal-status
description: "Given a facility and date, compile production progress and quality hold data into a status report."
inputParameters:
- name: facility
in: body
type: string
description: "The final assembly line facility code."
- name: report_date
in: body
type: string
description: "Report date in YYYY-MM-DD format."
steps:
- name: get-production-progress
type: call
call: "sap-s4.get-production-orders"
with:
Plant: "{{facility}}"
ScheduledDate: "{{report_date}}"
- name: get-quality-holds
type: call
call: "snowflake.run-query"
with:
query: "SELECT msn, hold_reason, hold_date FROM quality_holds WHERE facility = '{{facility}}' AND status = 'OPEN'"
- name: post-report
type: call
call: "msteams.send-message"
with:
channel_id: "fal-operations"
message: "FAL {{facility}} Daily Status | Date: {{report_date}} | Active orders: {{get-production-progress.count}} | Quality holds: {{get-quality-holds.row_count}}"
consumes:
- type: http
namespace: sap-s4
baseUri: "https://airbus-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_user"
password: "$secrets.sap_s4_pass"
resources:
- name: production-orders
path: "/A_ProductionOrder_2?$filter=Plant eq '{{Plant}}' and ScheduledStartDate eq datetime'{{ScheduledDate}}'"
inputParameters:
- name: Plant
in: query
- name: ScheduledDate
in: query
operations:
- name: get-production-orders
method: GET
- type: http
namespace: snowflake
baseUri: "https://airbus.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/fal-operations/channels/general/messages"
operations:
- name: send-message
method: POST
After a test flight completes, ingests telemetry data into Snowflake, triggers a Power BI dataset refresh, and notifies the flight test engineering team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Flight Test Data Pipeline Orchestration"
description: "After a test flight completes, ingests telemetry data into Snowflake, triggers a Power BI dataset refresh, and notifies the flight test engineering team via Microsoft Teams."
tags:
- aerospace
- snowflake
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: flight-test
port: 8080
tools:
- name: process-flight-test-data
description: "Given a test flight ID, ingest telemetry to Snowflake, refresh the dashboard, and notify the team."
inputParameters:
- name: flight_id
in: body
type: string
description: "The test flight identifier."
- name: aircraft_msn
in: body
type: string
description: "The aircraft MSN."
steps:
- name: ingest-telemetry
type: call
call: "snowflake.run-query"
with:
query: "CALL ingest_flight_telemetry('{{flight_id}}', '{{aircraft_msn}}')"
- name: refresh-dashboard
type: call
call: "powerbi.trigger-refresh"
with:
dataset_id: "flight-test-analytics"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "flight-test-engineering"
message: "Flight test {{flight_id}} for MSN {{aircraft_msn}} data ingested. Dashboard refresh triggered. Status: {{refresh-dashboard.status}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://airbus.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: 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: messages
path: "/teams/flight-test-engineering/channels/general/messages"
operations:
- name: send-message
method: POST
Creates a GitHub release tag on a specified repository, triggers the deployment workflow, and posts the release notes to the engineering Teams channel and a Confluence release page. Coordinates Airbus software release activities across teams.
naftiko: "0.5"
info:
label: "GitHub Deployment Release Coordination"
description: "Creates a GitHub release tag on a specified repository, triggers the deployment workflow, and posts the release notes to the engineering Teams channel and a Confluence release page. Coordinates Airbus software release activities across teams."
tags:
- devops
- release-management
- github
- microsoft-teams
- confluence
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, post notes to Teams engineering channel, and publish to Confluence. Use when coordinating a software release for Airbus systems."
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 for the release."
- name: version_tag
in: body
type: string
description: "The semantic version tag for the release (e.g., v2.4.1)."
- 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-release
type: call
call: "confluence-release.create-page"
with:
space_key: "ENG"
title: "Release Notes: {{repo_name}} {{version_tag}}"
body: "{{release_notes}}"
- name: notify-engineering
type: call
call: "msteams-release.send-message"
with:
channel_id: "engineering-releases"
message: "Release {{version_tag}} published for {{repo_name}}. Confluence: {{publish-confluence-release.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://airbus.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
Retrieves the status of a GitHub pull request by repo and PR number, returning review state, merge status, and CI checks summary.
naftiko: "0.5"
info:
label: "GitHub Pull Request Status"
description: "Retrieves the status of a GitHub pull request by repo and PR number, returning review state, merge status, and CI checks summary."
tags:
- engineering
- github
- ci-cd
capability:
exposes:
- type: mcp
namespace: engineering
port: 8080
tools:
- name: get-pr-status
description: "Given a repository name and PR number, retrieve the pull request state, review status, and CI check results."
inputParameters:
- name: repo
in: body
type: string
description: "The GitHub repository name (org/repo format)."
- name: pr_number
in: body
type: string
description: "The pull request number."
call: "github.get-pull-request"
with:
repo: "{{repo}}"
pr_number: "{{pr_number}}"
outputParameters:
- name: state
type: string
mapping: "$.state"
- name: mergeable
type: string
mapping: "$.mergeable"
- name: review_status
type: string
mapping: "$.reviews[0].state"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: pulls
path: "/repos/{{repo}}/pulls/{{pr_number}}"
inputParameters:
- name: repo
in: path
- name: pr_number
in: path
operations:
- name: get-pull-request
method: GET
Triggers a GitHub Advanced Security code scan on a specified aerospace software repository, retrieves scan results, and creates Jira issues for any critical findings. Ensures Airbus software development meets security standards for airworthiness.
naftiko: "0.5"
info:
label: "GitHub Repository Security Scanning"
description: "Triggers a GitHub Advanced Security code scan on a specified aerospace software repository, retrieves scan results, and creates Jira issues for any critical findings. Ensures Airbus software development meets security standards for airworthiness."
tags:
- devops
- security
- github
- jira
capability:
exposes:
- type: mcp
namespace: code-security
port: 8080
tools:
- name: scan-repository-security
description: "Given a GitHub repository name and branch, trigger a security scan via GitHub Advanced Security API, retrieve findings, and create Jira issues for critical vulnerabilities. Use for pre-release security validation of Airbus software repositories."
inputParameters:
- name: repo_owner
in: body
type: string
description: "The GitHub organization or owner name (e.g., airbus-group)."
- name: repo_name
in: body
type: string
description: "The GitHub repository name to scan (e.g., avionics-control-sw)."
- name: branch
in: body
type: string
description: "The branch to scan (e.g., main, release/2025)."
steps:
- name: get-code-scanning-alerts
type: call
call: "github-sec.list-code-alerts"
with:
owner: "{{repo_owner}}"
repo: "{{repo_name}}"
ref: "{{branch}}"
severity: "critical"
- name: create-jira-security-issue
type: call
call: "jira-security.create-issue"
with:
project_key: "SEC"
summary: "Security findings: {{repo_name}} on {{branch}}"
description: "{{get-code-scanning-alerts.total_count}} critical findings detected. Immediate remediation required."
issue_type: "Bug"
priority: "Critical"
consumes:
- type: http
namespace: github-sec
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: code-alerts
path: "/repos/{{owner}}/{{repo}}/code-scanning/alerts"
inputParameters:
- name: owner
in: path
- name: repo
in: path
- name: ref
in: query
- name: severity
in: query
operations:
- name: list-code-alerts
method: GET
- type: http
namespace: jira-security
baseUri: "https://airbus.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
- name: priority
in: body
operations:
- name: create-issue
method: POST
Pulls current headcount totals from SAP SuccessFactors by business unit and publishes the snapshot to a Snowflake analytics table and a Power BI dataset. Used by HR and finance leadership for workforce planning reviews.
naftiko: "0.5"
info:
label: "Headcount Snapshot Report"
description: "Pulls current headcount totals from SAP SuccessFactors by business unit and publishes the snapshot to a Snowflake analytics table and a Power BI dataset. Used by HR and finance leadership for workforce planning reviews."
tags:
- hr
- reporting
- sap-successfactors
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: hr-reporting
port: 8080
tools:
- name: publish-headcount-snapshot
description: "Given a business unit code and reporting period, retrieve headcount from SuccessFactors, write the snapshot to Snowflake, and trigger a Power BI dataset refresh. Use for monthly or on-demand workforce headcount reports."
inputParameters:
- name: business_unit
in: body
type: string
description: "The Airbus business unit code (e.g., COMMERCIAL, DEFENCE, HELICOPTERS)."
- name: reporting_period
in: body
type: string
description: "The reporting period in YYYY-MM format."
steps:
- name: get-headcount
type: call
call: "successfactors-hr.get-headcount"
with:
businessUnit: "{{business_unit}}"
period: "{{reporting_period}}"
- name: write-snowflake
type: call
call: "snowflake-hr.insert-rows"
with:
table: "HR.HEADCOUNT_SNAPSHOTS"
data: "{{get-headcount.results}}"
- name: refresh-powerbi
type: call
call: "powerbi-hr.trigger-refresh"
with:
dataset_id: "$secrets.powerbi_headcount_dataset_id"
consumes:
- type: http
namespace: successfactors-hr
baseUri: "https://airbus.successfactors.com/odata/v2"
authentication:
type: bearer
token: "$secrets.successfactors_token"
resources:
- name: headcount
path: "/EmpJob"
inputParameters:
- name: businessUnit
in: query
- name: period
in: query
operations:
- name: get-headcount
method: GET
- type: http
namespace: snowflake-hr
baseUri: "https://airbus.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
Compiles helicopter fleet utilization data from Snowflake, enriches with maintenance compliance from SAP PM, and distributes the report to the rotorcraft division via Microsoft Teams.
naftiko: "0.5"
info:
label: "Helicopter Fleet Utilization Report"
description: "Compiles helicopter fleet utilization data from Snowflake, enriches with maintenance compliance from SAP PM, and distributes the report to the rotorcraft division via Microsoft Teams."
tags:
- aerospace
- snowflake
- sap-s4hana
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: rotorcraft
port: 8080
tools:
- name: generate-utilization-report
description: "Given a fleet type and period, compile utilization and maintenance compliance data."
inputParameters:
- name: fleet_type
in: body
type: string
description: "Helicopter fleet type (e.g., H135, H145, H175)."
- name: period
in: body
type: string
description: "Reporting period (e.g., 2026-03)."
steps:
- name: get-utilization
type: call
call: "snowflake.run-query"
with:
query: "SELECT aircraft_reg, total_flight_hours, missions_completed, availability_pct FROM helicopter_utilization WHERE fleet_type = '{{fleet_type}}' AND period = '{{period}}'"
- name: get-maintenance-status
type: call
call: "sap-pm.get-fleet-maintenance"
with:
FleetType: "{{fleet_type}}"
- name: post-report
type: call
call: "msteams.send-message"
with:
channel_id: "rotorcraft-ops"
message: "{{fleet_type}} Fleet Report ({{period}}) | Aircraft: {{get-utilization.row_count}} | Avg availability: {{get-utilization.avg_availability}}% | Maintenance overdue: {{get-maintenance-status.overdue_count}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://airbus.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: sap-pm
baseUri: "https://airbus-s4.sap.com/sap/opu/odata/sap/API_MAINTENANCEORDER"
authentication:
type: basic
username: "$secrets.sap_s4_user"
password: "$secrets.sap_s4_pass"
resources:
- name: fleet-maintenance
path: "/MaintenanceOrder?$filter=FleetType eq '{{FleetType}}'"
inputParameters:
- name: FleetType
in: query
operations:
- name: get-fleet-maintenance
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/rotorcraft-ops/channels/general/messages"
operations:
- name: send-message
method: POST
After a major IT incident is resolved, retrieves the incident timeline from ServiceNow, pulls monitoring data from Datadog, and generates a postmortem document uploaded to Confluence.
naftiko: "0.5"
info:
label: "Incident Postmortem Report Generator"
description: "After a major IT incident is resolved, retrieves the incident timeline from ServiceNow, pulls monitoring data from Datadog, and generates a postmortem document uploaded to Confluence."
tags:
- it-operations
- servicenow
- datadog
- confluence
capability:
exposes:
- type: mcp
namespace: it-ops
port: 8080
tools:
- name: generate-postmortem
description: "Given a ServiceNow incident number, compile timeline and monitoring data into a postmortem report."
inputParameters:
- name: incident_number
in: body
type: string
description: "The ServiceNow incident number."
steps:
- name: get-incident-timeline
type: call
call: "servicenow.get-incident-history"
with:
number: "{{incident_number}}"
- name: get-monitoring-data
type: call
call: "datadog.get-incident-metrics"
with:
incident_id: "{{incident_number}}"
- name: create-postmortem
type: call
call: "confluence.create-page"
with:
space: "IT-OPS"
title: "Postmortem: {{incident_number}}"
body: "Incident: {{incident_number}} | Duration: {{get-incident-timeline.duration}} | Root cause: {{get-incident-timeline.root_cause}} | Impact: {{get-monitoring-data.affected_services}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://airbus.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_pass"
resources:
- name: incident-history
path: "/table/incident?sysparm_query=number={{number}}"
inputParameters:
- name: number
in: query
operations:
- name: get-incident-history
method: GET
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.eu/api/v2"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: incidents
path: "/incidents/{{incident_id}}"
inputParameters:
- name: incident_id
in: path
operations:
- name: get-incident-metrics
method: GET
- type: http
namespace: confluence
baseUri: "https://airbus-engineering.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
Pulls cloud infrastructure costs from Datadog, maps them to cost centers in SAP, and uploads the allocation report to the finance SharePoint site for monthly chargeback.
naftiko: "0.5"
info:
label: "Infrastructure Cost Allocation Report"
description: "Pulls cloud infrastructure costs from Datadog, maps them to cost centers in SAP, and uploads the allocation report to the finance SharePoint site for monthly chargeback."
tags:
- finops
- datadog
- sap-s4hana
- sharepoint
capability:
exposes:
- type: mcp
namespace: finops
port: 8080
tools:
- name: generate-cost-allocation
description: "Given a month, compile cloud costs, map to SAP cost centers, and upload the allocation report."
inputParameters:
- name: month
in: body
type: string
description: "The reporting month in YYYY-MM format."
steps:
- name: get-cloud-costs
type: call
call: "datadog.get-cost-data"
with:
month: "{{month}}"
- name: get-cost-center-mapping
type: call
call: "sap-s4.get-cost-centers"
with:
CompanyCode: "AIRBUS"
- name: upload-report
type: call
call: "sharepoint.upload-file"
with:
folder: "Finance/CostAllocation"
filename: "cloud_cost_allocation_{{month}}.json"
content: "Total cloud spend: {{get-cloud-costs.total}} | Cost centers: {{get-cost-center-mapping.count}} | Month: {{month}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.eu/api/v2"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: cost
path: "/usage/cost_by_org?start_month={{month}}"
inputParameters:
- name: month
in: query
operations:
- name: get-cost-data
method: GET
- type: http
namespace: sap-s4
baseUri: "https://airbus-s4.sap.com/sap/opu/odata/sap/API_COSTCENTER_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_user"
password: "$secrets.sap_s4_pass"
resources:
- name: cost-centers
path: "/A_CostCenter?$filter=CompanyCode eq '{{CompanyCode}}'"
inputParameters:
- name: CompanyCode
in: query
operations:
- name: get-cost-centers
method: GET
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites/airbus.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
When an IT asset reaches end-of-life, retrieves asset details from ServiceNow CMDB, decommissions the Okta service account, and creates a disposal request in SAP.
naftiko: "0.5"
info:
label: "IT Asset Lifecycle Management"
description: "When an IT asset reaches end-of-life, retrieves asset details from ServiceNow CMDB, decommissions the Okta service account, and creates a disposal request in SAP."
tags:
- it-operations
- servicenow
- okta
- sap-s4hana
capability:
exposes:
- type: mcp
namespace: it-ops
port: 8080
tools:
- name: decommission-asset
description: "Given an asset tag, retrieve CMDB details, deactivate service accounts, and create a disposal request."
inputParameters:
- name: asset_tag
in: body
type: string
description: "The IT asset tag identifier."
steps:
- name: get-asset
type: call
call: "servicenow.get-cmdb-ci"
with:
asset_tag: "{{asset_tag}}"
- name: deactivate-account
type: call
call: "okta.deactivate-user"
with:
login: "{{get-asset.service_account}}"
- name: create-disposal
type: call
call: "sap-s4.create-asset-retirement"
with:
AssetNumber: "{{get-asset.sap_asset_number}}"
RetirementDate: "{{get-asset.eol_date}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://airbus.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-cmdb-ci
method: GET
- type: http
namespace: okta
baseUri: "https://airbus.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: sap-s4
baseUri: "https://airbus-s4.sap.com/sap/opu/odata/sap/API_FIXEDASSET_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_user"
password: "$secrets.sap_s4_pass"
resources:
- name: retirements
path: "/A_FixedAssetRetirement"
operations:
- name: create-asset-retirement
method: POST
When a Priority-1 incident is created in ServiceNow, retrieves alert details from Datadog, assembles an incident war-room channel in Microsoft Teams, and pages the on-call engineer. Designed for rapid response to production outages affecting Airbus operational systems.
naftiko: "0.5"
info:
label: "IT Priority-1 Incident Triage"
description: "When a Priority-1 incident is created in ServiceNow, retrieves alert details from Datadog, assembles an incident war-room channel in Microsoft Teams, and pages the on-call engineer. Designed for rapid response to production outages affecting Airbus operational systems."
tags:
- itsm
- incident-response
- servicenow
- datadog
- microsoft-teams
- pagerduty
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, create a Teams war-room channel, and trigger a PagerDuty page to the on-call engineer. Use when a P1 severity incident 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 associated with the triggering alert."
- name: service_name
in: body
type: string
description: "The affected service or system name."
steps:
- name: get-snow-incident
type: call
call: "servicenow-it.get-incident"
with:
number: "{{incident_number}}"
- name: get-datadog-monitor
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}}"
service_id: "$secrets.pagerduty_service_id"
urgency: "high"
consumes:
- type: http
namespace: servicenow-it
baseUri: "https://airbus.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
Retrieves a Jira issue by key and returns status, assignee, priority, and summary for engineering project tracking.
naftiko: "0.5"
info:
label: "Jira Issue Status Lookup"
description: "Retrieves a Jira issue by key and returns status, assignee, priority, and summary for engineering project tracking."
tags:
- engineering
- jira
capability:
exposes:
- type: mcp
namespace: engineering
port: 8080
tools:
- name: get-jira-issue
description: "Given a Jira issue key, retrieve the issue status, assignee, priority, and summary."
inputParameters:
- name: issue_key
in: body
type: string
description: "The Jira issue key, e.g. AERO-1234."
call: "jira.get-issue"
with:
issue_key: "{{issue_key}}"
outputParameters:
- name: status
type: string
mapping: "$.fields.status.name"
- name: assignee
type: string
mapping: "$.fields.assignee.displayName"
- name: priority
type: string
mapping: "$.fields.priority.name"
consumes:
- type: http
namespace: jira
baseUri: "https://airbus-engineering.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
When a Datadog alert signals high resource utilization on a Kubernetes cluster, retrieves node metrics, triggers a scaling action via Terraform, and posts the outcome to the platform engineering Slack channel.
naftiko: "0.5"
info:
label: "Kubernetes Cluster Scaling Response"
description: "When a Datadog alert signals high resource utilization on a Kubernetes cluster, retrieves node metrics, triggers a scaling action via Terraform, and posts the outcome to the platform engineering Slack channel."
tags:
- platform-engineering
- datadog
- terraform
- slack
capability:
exposes:
- type: mcp
namespace: platform
port: 8080
tools:
- name: scale-cluster
description: "Given a cluster name and target node count, check metrics, trigger scaling, and notify the team."
inputParameters:
- name: cluster_name
in: body
type: string
description: "The Kubernetes cluster name."
- name: target_nodes
in: body
type: string
description: "Target number of worker nodes."
steps:
- name: get-metrics
type: call
call: "datadog.get-cluster-metrics"
with:
query: "kubernetes.cpu.usage{cluster:{{cluster_name}}}"
- name: trigger-scale
type: call
call: "terraform.trigger-run"
with:
workspace: "k8s-{{cluster_name}}"
variables: "node_count={{target_nodes}}"
- name: notify-team
type: call
call: "slack.post-message"
with:
channel: "platform-engineering"
text: "Cluster {{cluster_name}} scaling to {{target_nodes}} nodes. CPU was at {{get-metrics.avg_cpu}}%. Terraform run: {{trigger-scale.run_id}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.eu/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: metrics
path: "/query?query={{query}}&from=-600"
inputParameters:
- name: query
in: query
operations:
- name: get-cluster-metrics
method: GET
- type: http
namespace: terraform
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: runs
path: "/workspaces/{{workspace}}/runs"
inputParameters:
- name: workspace
in: path
operations:
- name: trigger-run
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Queries the LinkedIn Talent Solutions API for aerospace engineering candidates matching a job requisition, enriches candidate data with ZoomInfo, and creates Jira recruiting tasks for each qualified candidate. Supports Airbus talent acquisition for engineering roles.
naftiko: "0.5"
info:
label: "LinkedIn Aerospace Talent Pipeline Enrichment"
description: "Queries the LinkedIn Talent Solutions API for aerospace engineering candidates matching a job requisition, enriches candidate data with ZoomInfo, and creates Jira recruiting tasks for each qualified candidate. Supports Airbus talent acquisition for engineering roles."
tags:
- hr
- recruiting
- linkedin
- jira
capability:
exposes:
- type: mcp
namespace: talent-acquisition
port: 8080
tools:
- name: enrich-candidate-pipeline
description: "Given a LinkedIn job posting ID and target discipline, retrieve matching candidate profiles, enrich with additional data, and create Jira tasks for recruiter follow-up. Use when sourcing engineering candidates for active Airbus requisitions."
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 engineering discipline to filter candidates (e.g., Avionics, Structures, Propulsion)."
steps:
- name: get-linkedin-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-linkedin-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://airbus.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
Retrieves Datadog SLO compliance metrics for Airbus manufacturing execution systems, computes breach counts, and publishes a weekly observability digest to Confluence and Power BI. Ensures operational excellence tracking for shop-floor systems.
naftiko: "0.5"
info:
label: "Manufacturing SLO Observability Report"
description: "Retrieves Datadog SLO compliance metrics for Airbus manufacturing execution systems, computes breach counts, and publishes a weekly observability digest to Confluence and Power BI. Ensures operational excellence tracking for shop-floor systems."
tags:
- observability
- manufacturing
- 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 reporting week, retrieve compliance data, write the results to a Confluence page, and refresh the Power BI SLO dashboard. Use for weekly operational SLO reviews."
inputParameters:
- name: slo_ids
in: body
type: string
description: "Comma-separated list of Datadog SLO IDs to include in the report."
- name: report_week
in: body
type: string
description: "The ISO week for the report (e.g., 2025-W12)."
steps:
- name: get-slo-history
type: call
call: "datadog-slo.get-slo-history"
with:
slo_ids: "{{slo_ids}}"
- name: publish-confluence-report
type: call
call: "confluence-slo.create-page"
with:
space_key: "OPS"
title: "SLO Report — {{report_week}}"
body: "SLO compliance data for {{report_week}}: {{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://airbus.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
When inventory drops below reorder threshold in Snowflake, retrieves supplier lead times from SAP Ariba, creates an expedite request in ServiceNow, and alerts the procurement team on Slack.
naftiko: "0.5"
info:
label: "Material Shortage Escalation Workflow"
description: "When inventory drops below reorder threshold in Snowflake, retrieves supplier lead times from SAP Ariba, creates an expedite request in ServiceNow, and alerts the procurement team on Slack."
tags:
- supply-chain
- snowflake
- sap-ariba
- servicenow
- slack
capability:
exposes:
- type: mcp
namespace: supply-chain
port: 8080
tools:
- name: escalate-shortage
description: "Given a part number, check inventory, get supplier lead time, create expedite request, and alert procurement."
inputParameters:
- name: part_number
in: body
type: string
description: "The part number with shortage."
- name: current_qty
in: body
type: string
description: "Current stock quantity."
steps:
- name: get-supplier-info
type: call
call: "ariba.get-preferred-supplier"
with:
part_number: "{{part_number}}"
- name: create-expedite
type: call
call: "servicenow.create-incident"
with:
short_description: "Material shortage: {{part_number}} - Qty: {{current_qty}}"
priority: "2"
category: "procurement"
- name: alert-procurement
type: call
call: "slack.post-message"
with:
channel: "procurement-alerts"
text: "SHORTAGE: Part {{part_number}} at {{current_qty}} units. Supplier: {{get-supplier-info.supplier_name}} (lead time: {{get-supplier-info.lead_days}} days). Expedite ticket: {{create-expedite.number}}"
consumes:
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/supplier-management/v1"
authentication:
type: bearer
token: "$secrets.ariba_api_token"
resources:
- name: preferred-suppliers
path: "/preferred-suppliers?partNumber={{part_number}}"
inputParameters:
- name: part_number
in: query
operations:
- name: get-preferred-supplier
method: GET
- type: http
namespace: servicenow
baseUri: "https://airbus.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
- 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 recent messages from a Microsoft Teams channel, returning message content, sender, and timestamp for team communication review.
naftiko: "0.5"
info:
label: "Microsoft Teams Channel Message Lookup"
description: "Retrieves recent messages from a Microsoft Teams channel, returning message content, sender, and timestamp for team communication review."
tags:
- collaboration
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: collaboration
port: 8080
tools:
- name: get-channel-messages
description: "Given a Teams team ID and channel ID, retrieve recent messages including sender and timestamp."
inputParameters:
- name: team_id
in: body
type: string
description: "The Microsoft Teams team ID."
- name: channel_id
in: body
type: string
description: "The channel ID within the team."
call: "msteams.get-messages"
with:
team_id: "{{team_id}}"
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/{{team_id}}/channels/{{channel_id}}/messages?$top=10"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: get-messages
method: GET
Compiles monthly budget variance data from SAP controlling, enriches with actuals from Snowflake, and distributes the variance report to finance stakeholders via email.
naftiko: "0.5"
info:
label: "Monthly Budget Variance Report"
description: "Compiles monthly budget variance data from SAP controlling, enriches with actuals from Snowflake, and distributes the variance report to finance stakeholders via email."
tags:
- finance
- sap-s4hana
- snowflake
- microsoft-graph
capability:
exposes:
- type: mcp
namespace: finance
port: 8080
tools:
- name: generate-variance-report
description: "Given a cost center and period, compile budget vs actual data and email the variance report."
inputParameters:
- name: cost_center
in: body
type: string
description: "The SAP cost center."
- name: fiscal_period
in: body
type: string
description: "Fiscal period (e.g., 2026-03)."
steps:
- name: get-budget
type: call
call: "sap-s4.get-budget"
with:
CostCenter: "{{cost_center}}"
FiscalPeriod: "{{fiscal_period}}"
- name: get-actuals
type: call
call: "snowflake.run-query"
with:
query: "SELECT cost_element, actual_amount FROM cost_actuals WHERE cost_center = '{{cost_center}}' AND period = '{{fiscal_period}}'"
- name: email-report
type: call
call: "msgraph.send-mail"
with:
to: "finance-controllers@airbus.com"
subject: "Budget Variance: {{cost_center}} - {{fiscal_period}}"
body: "Budget: {{get-budget.total_budget}} | Actuals: {{get-actuals.total_actual}} | Variance: {{get-budget.variance_pct}}%"
consumes:
- type: http
namespace: sap-s4
baseUri: "https://airbus-s4.sap.com/sap/opu/odata/sap/API_COSTCENTER_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_user"
password: "$secrets.sap_s4_pass"
resources:
- name: budget
path: "/A_CostCenterBudget?$filter=CostCenter eq '{{CostCenter}}' and FiscalPeriod eq '{{FiscalPeriod}}'"
inputParameters:
- name: CostCenter
in: query
- name: FiscalPeriod
in: query
operations:
- name: get-budget
method: GET
- type: http
namespace: snowflake
baseUri: "https://airbus.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 new hire is created in SAP SuccessFactors, opens a ServiceNow onboarding ticket, provisions a Microsoft Teams workspace, and sends a welcome notification. Ensures day-one readiness for Airbus engineering and operations staff.
naftiko: "0.5"
info:
label: "New Employee Onboarding Orchestration"
description: "When a new hire is created in SAP SuccessFactors, opens a ServiceNow onboarding ticket, provisions a Microsoft Teams workspace, and sends a welcome notification. Ensures day-one readiness for Airbus engineering and operations staff."
tags:
- hr
- onboarding
- sap-successfactors
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-onboarding
port: 8080
tools:
- name: trigger-employee-onboarding
description: "Given a SuccessFactors employee ID and start date, orchestrate the full onboarding sequence across ServiceNow, and Microsoft Teams. Invoke when a new hire record is confirmed in SuccessFactors."
inputParameters:
- name: employee_id
in: body
type: string
description: "The SAP SuccessFactors employee 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 or business unit the employee is joining (e.g., Engineering, Operations)."
steps:
- name: get-employee
type: call
call: "successfactors.get-employee"
with:
employee_id: "{{employee_id}}"
- name: create-onboarding-ticket
type: call
call: "servicenow-onboard.create-incident"
with:
short_description: "Onboarding: {{get-employee.display_name}}"
caller_id: "{{get-employee.manager_email}}"
assignment_group: "IT Onboarding"
- name: notify-teams
type: call
call: "msteams-hr.send-message"
with:
channel_id: "{{department}}-general"
message: "Welcome {{get-employee.display_name}} joining on {{start_date}}!"
consumes:
- type: http
namespace: successfactors
baseUri: "https://airbus.successfactors.com/odata/v2"
authentication:
type: bearer
token: "$secrets.successfactors_token"
resources:
- name: employee
path: "/PerPerson('{{employee_id}}')"
inputParameters:
- name: employee_id
in: path
operations:
- name: get-employee
method: GET
- type: http
namespace: servicenow-onboard
baseUri: "https://airbus.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
Retrieves the group memberships of an Okta user by login email, returning group names and IDs for access review purposes.
naftiko: "0.5"
info:
label: "Okta User Group Membership Lookup"
description: "Retrieves the group memberships of an Okta user by login email, returning group names and IDs for access review purposes."
tags:
- security
- okta
- identity
capability:
exposes:
- type: mcp
namespace: identity
port: 8080
tools:
- name: get-user-groups
description: "Given an Okta user login email, retrieve all group memberships for access review."
inputParameters:
- name: user_login
in: body
type: string
description: "The user's Okta login email."
call: "okta.get-user-groups"
with:
user_login: "{{user_login}}"
outputParameters:
- name: groups
type: array
mapping: "$.groups"
consumes:
- type: http
namespace: okta
baseUri: "https://airbus.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: user-groups
path: "/users/{{user_login}}/groups"
inputParameters:
- name: user_login
in: path
operations:
- name: get-user-groups
method: GET
Retrieves the current on-call engineer for a given PagerDuty schedule, returning name, email, and rotation end time.
naftiko: "0.5"
info:
label: "PagerDuty On-Call Schedule Lookup"
description: "Retrieves the current on-call engineer for a given PagerDuty schedule, returning name, email, and rotation end time."
tags:
- it-operations
- pagerduty
capability:
exposes:
- type: mcp
namespace: it-ops
port: 8080
tools:
- name: get-oncall
description: "Given a PagerDuty schedule ID, retrieve the currently on-call engineer's name and contact details."
inputParameters:
- name: schedule_id
in: body
type: string
description: "The PagerDuty schedule ID."
call: "pagerduty.get-oncall"
with:
schedule_id: "{{schedule_id}}"
outputParameters:
- name: oncall_name
type: string
mapping: "$.oncalls[0].user.name"
- name: oncall_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
Retrieves the paint shop queue from SAP, checks weather conditions via an external API for outdoor curing windows, and posts an optimized schedule to the operations Slack channel.
naftiko: "0.5"
info:
label: "Paint Shop Scheduling Optimizer"
description: "Retrieves the paint shop queue from SAP, checks weather conditions via an external API for outdoor curing windows, and posts an optimized schedule to the operations Slack channel."
tags:
- manufacturing
- sap-s4hana
- slack
- scheduling
capability:
exposes:
- type: mcp
namespace: manufacturing
port: 8080
tools:
- name: optimize-paint-schedule
description: "Given a facility code and date, retrieve queue and weather data to post an optimized paint schedule."
inputParameters:
- name: facility
in: body
type: string
description: "The paint shop facility code."
- name: schedule_date
in: body
type: string
description: "The schedule date in YYYY-MM-DD."
steps:
- name: get-queue
type: call
call: "sap-s4.get-paint-queue"
with:
Plant: "{{facility}}"
Date: "{{schedule_date}}"
- name: post-schedule
type: call
call: "slack.post-message"
with:
channel: "paint-shop-ops"
text: "Paint schedule for {{facility}} on {{schedule_date}} | Aircraft in queue: {{get-queue.count}} | Priority MSN: {{get-queue.results[0].MSN}}"
consumes:
- type: http
namespace: sap-s4
baseUri: "https://airbus-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_user"
password: "$secrets.sap_s4_pass"
resources:
- name: paint-queue
path: "/A_ProductionOrder_2?$filter=Plant eq '{{Plant}}' and OrderType eq 'PAINT' and ScheduledStartDate eq datetime'{{Date}}'"
inputParameters:
- name: Plant
in: query
- name: Date
in: query
operations:
- name: get-paint-queue
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 an engineering change order (ECO) is approved in Teamcenter PLM, creates a linked Jira epic, notifies the affected engineering teams in Microsoft Teams, and updates the SAP production order. Bridges engineering design changes to manufacturing execution.
naftiko: "0.5"
info:
label: "PLM Engineering Change Order Sync"
description: "When an engineering change order (ECO) is approved in Teamcenter PLM, creates a linked Jira epic, notifies the affected engineering teams in Microsoft Teams, and updates the SAP production order. Bridges engineering design changes to manufacturing execution."
tags:
- engineering
- plm
- teamcenter
- jira
- sap-s4hana
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: plm-change
port: 8080
tools:
- name: sync-engineering-change-order
description: "Given a Teamcenter ECO ID and affected part number, create a Jira epic, notify engineering teams in Teams, and update the SAP production order status. Use when an approved ECO needs to propagate to project tracking and manufacturing."
inputParameters:
- name: eco_id
in: body
type: string
description: "The Teamcenter engineering change order ID."
- name: part_number
in: body
type: string
description: "The affected aircraft part number."
- name: affected_team
in: body
type: string
description: "The engineering team channel to notify (e.g., structures-eng, avionics-eng)."
steps:
- name: get-eco-details
type: call
call: "teamcenter.get-eco"
with:
eco_id: "{{eco_id}}"
- name: create-jira-epic
type: call
call: "jira-plm.create-issue"
with:
project_key: "PLM"
summary: "ECO {{eco_id}}: {{get-eco-details.title}}"
issue_type: "Epic"
- name: notify-engineering-team
type: call
call: "msteams-plm.send-message"
with:
channel_id: "{{affected_team}}"
message: "ECO {{eco_id}} approved for part {{part_number}}. Jira epic: {{create-jira-epic.key}}"
consumes:
- type: http
namespace: teamcenter
baseUri: "https://teamcenter.airbus.com/api/v1"
authentication:
type: bearer
token: "$secrets.teamcenter_token"
resources:
- name: eco
path: "/change-orders/{{eco_id}}"
inputParameters:
- name: eco_id
in: path
operations:
- name: get-eco
method: GET
- type: http
namespace: jira-plm
baseUri: "https://airbus.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
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams-plm
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
Triggers a scheduled refresh of the Airbus program delivery Power BI dataset, validates the refresh completed successfully, and notifies the program management office via Microsoft Teams. Ensures leadership has current program status data.
naftiko: "0.5"
info:
label: "Power BI Executive Delivery Dashboard Refresh"
description: "Triggers a scheduled refresh of the Airbus program delivery Power BI dataset, validates the refresh completed successfully, and notifies the program management office via Microsoft Teams. Ensures leadership has current program status data."
tags:
- reporting
- power-bi
- microsoft-teams
- program-management
capability:
exposes:
- type: mcp
namespace: executive-reporting
port: 8080
tools:
- name: refresh-delivery-dashboard
description: "Given a Power BI dataset ID, trigger a refresh, poll for completion, and notify the PMO Teams channel with the result. Use at the start of each business day or before executive program reviews."
inputParameters:
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID for the delivery dashboard."
- name: report_name
in: body
type: string
description: "The human-readable name of the report for notification purposes."
steps:
- name: trigger-refresh
type: call
call: "powerbi-exec.trigger-refresh"
with:
dataset_id: "{{dataset_id}}"
- name: notify-pmo
type: call
call: "msteams-exec.send-message"
with:
channel_id: "pmo-updates"
message: "Power BI refresh triggered for {{report_name}}. Dataset: {{dataset_id}}"
consumes:
- type: http
namespace: powerbi-exec
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-exec
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
Checks the refresh status of the manufacturing KPI Power BI dataset, returning last refresh time, status, and any failure messages.
naftiko: "0.5"
info:
label: "Power BI Manufacturing KPI Dashboard Status"
description: "Checks the refresh status of the manufacturing KPI Power BI dataset, returning last refresh time, status, and any failure messages."
tags:
- manufacturing
- power-bi
- analytics
capability:
exposes:
- type: mcp
namespace: analytics
port: 8080
tools:
- name: get-manufacturing-kpi-refresh
description: "Retrieve the Power BI manufacturing KPI dataset refresh status and last refresh timestamp."
inputParameters:
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID for the manufacturing KPI dashboard."
call: "powerbi.get-refresh-history"
with:
dataset_id: "{{dataset_id}}"
outputParameters:
- name: status
type: string
mapping: "$.value[0].status"
- name: end_time
type: string
mapping: "$.value[0].endTime"
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: refreshes
path: "/datasets/{{dataset_id}}/refreshes?$top=1"
inputParameters:
- name: dataset_id
in: path
operations:
- name: get-refresh-history
method: GET
Generates a request for quotation by retrieving material specifications from SAP, pulling qualified suppliers from Ariba, and creating an RFQ document posted to the procurement SharePoint site.
naftiko: "0.5"
info:
label: "Procurement RFQ Generation Workflow"
description: "Generates a request for quotation by retrieving material specifications from SAP, pulling qualified suppliers from Ariba, and creating an RFQ document posted to the procurement SharePoint site."
tags:
- procurement
- sap-s4hana
- sap-ariba
- sharepoint
capability:
exposes:
- type: mcp
namespace: procurement
port: 8080
tools:
- name: generate-rfq
description: "Given a material number and quantity, pull specs and suppliers to generate an RFQ document."
inputParameters:
- name: material_number
in: body
type: string
description: "The material number to source."
- name: quantity
in: body
type: string
description: "Required quantity."
- name: delivery_date
in: body
type: string
description: "Required delivery date in YYYY-MM-DD."
steps:
- name: get-material-spec
type: call
call: "sap-s4.get-material"
with:
MaterialNumber: "{{material_number}}"
- name: get-suppliers
type: call
call: "ariba.get-qualified-suppliers"
with:
commodity: "{{get-material-spec.MaterialGroup}}"
- name: upload-rfq
type: call
call: "sharepoint.upload-file"
with:
folder: "Procurement/RFQs"
filename: "RFQ_{{material_number}}_{{delivery_date}}.json"
content: "Material: {{get-material-spec.MaterialDescription}} | Qty: {{quantity}} | Delivery: {{delivery_date}} | Qualified suppliers: {{get-suppliers.count}}"
consumes:
- type: http
namespace: sap-s4
baseUri: "https://airbus-s4.sap.com/sap/opu/odata/sap/API_PRODUCT_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_user"
password: "$secrets.sap_s4_pass"
resources:
- name: materials
path: "/A_Product('{{MaterialNumber}}')"
inputParameters:
- name: MaterialNumber
in: path
operations:
- name: get-material
method: GET
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/supplier-management/v1"
authentication:
type: bearer
token: "$secrets.ariba_api_token"
resources:
- name: qualified-suppliers
path: "/suppliers?commodity={{commodity}}&status=QUALIFIED"
inputParameters:
- name: commodity
in: query
operations:
- name: get-qualified-suppliers
method: GET
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites/airbus.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
When a production line downtime alert fires in Datadog, retrieves the affected line details from SAP, creates a PagerDuty incident, and posts an alert to the manufacturing operations Slack channel.
naftiko: "0.5"
info:
label: "Production Line Downtime Response"
description: "When a production line downtime alert fires in Datadog, retrieves the affected line details from SAP, creates a PagerDuty incident, and posts an alert to the manufacturing operations Slack channel."
tags:
- manufacturing
- datadog
- pagerduty
- slack
capability:
exposes:
- type: mcp
namespace: manufacturing
port: 8080
tools:
- name: respond-to-downtime
description: "Given a production line ID and alert details, look up the line in SAP, page the on-call engineer, and notify the ops channel."
inputParameters:
- name: line_id
in: body
type: string
description: "The production line identifier."
- name: alert_title
in: body
type: string
description: "The Datadog alert title."
steps:
- name: get-line-info
type: call
call: "sap-s4.get-work-center"
with:
WorkCenter: "{{line_id}}"
- name: create-incident
type: call
call: "pagerduty.create-incident"
with:
title: "Production downtime: Line {{line_id}} - {{alert_title}}"
service_id: "manufacturing-ops"
urgency: "high"
- name: notify-slack
type: call
call: "slack.post-message"
with:
channel: "mfg-operations"
text: "Production Line {{line_id}} ({{get-line-info.WorkCenterName}}) is DOWN. PagerDuty incident: {{create-incident.incident.id}}. Alert: {{alert_title}}"
consumes:
- type: http
namespace: sap-s4
baseUri: "https://airbus-s4.sap.com/sap/opu/odata/sap/API_WORKCENTER_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_user"
password: "$secrets.sap_s4_pass"
resources:
- name: work-centers
path: "/A_WorkCenter('{{WorkCenter}}')"
inputParameters:
- name: WorkCenter
in: path
operations:
- name: get-work-center
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
- 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
Prepares for an EASA regulatory audit by gathering compliance documents from SharePoint, retrieving certification records from SAP QM, and compiling an audit readiness summary sent to the compliance team via email.
naftiko: "0.5"
info:
label: "Regulatory Audit Preparation Workflow"
description: "Prepares for an EASA regulatory audit by gathering compliance documents from SharePoint, retrieving certification records from SAP QM, and compiling an audit readiness summary sent to the compliance team via email."
tags:
- compliance
- sharepoint
- sap-s4hana
- microsoft-graph
capability:
exposes:
- type: mcp
namespace: compliance
port: 8080
tools:
- name: prepare-audit-package
description: "Given an audit type and aircraft program, gather compliance documents, certification records, and email the readiness summary."
inputParameters:
- name: audit_type
in: body
type: string
description: "The type of regulatory audit (e.g., EASA Part 21, DOA)."
- name: program_code
in: body
type: string
description: "The aircraft program code."
steps:
- name: get-documents
type: call
call: "sharepoint.search-documents"
with:
query: "{{audit_type}} {{program_code}} compliance"
- name: get-certifications
type: call
call: "sap-qm.get-certificates"
with:
program: "{{program_code}}"
- name: send-summary
type: call
call: "msgraph.send-mail"
with:
to: "compliance-team@airbus.com"
subject: "Audit Readiness: {{audit_type}} - {{program_code}}"
body: "Audit package prepared. Documents found: {{get-documents.result_count}}. Active certifications: {{get-certifications.cert_count}}. Review package in SharePoint."
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites/airbus.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: sap-qm
baseUri: "https://airbus-s4.sap.com/sap/opu/odata/sap/API_QUALITYCERTIFICATE_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_user"
password: "$secrets.sap_s4_pass"
resources:
- name: certificates
path: "/A_QualityCertificate?$filter=Program eq '{{program}}'"
inputParameters:
- name: program
in: query
operations:
- name: get-certificates
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
When a workplace safety incident is reported, creates a case in ServiceNow, records the event in SAP EHS, and sends an immediate notification to the HSE leadership team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Safety Incident Report Orchestration"
description: "When a workplace safety incident is reported, creates a case in ServiceNow, records the event in SAP EHS, and sends an immediate notification to the HSE leadership team via Microsoft Teams."
tags:
- safety
- servicenow
- sap-s4hana
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: safety
port: 8080
tools:
- name: report-safety-incident
description: "Given incident details, create a ServiceNow case, log in SAP EHS, and notify HSE leadership."
inputParameters:
- name: incident_description
in: body
type: string
description: "Description of the safety incident."
- name: location
in: body
type: string
description: "Location where the incident occurred."
- name: severity
in: body
type: string
description: "Severity level (low, medium, high, critical)."
steps:
- name: create-case
type: call
call: "servicenow.create-incident"
with:
short_description: "Safety incident: {{location}} - {{severity}}"
description: "{{incident_description}}"
priority: "1"
category: "safety"
- name: log-ehs
type: call
call: "sap-ehs.create-safety-event"
with:
Location: "{{location}}"
Severity: "{{severity}}"
Description: "{{incident_description}}"
- name: notify-hse
type: call
call: "msteams.send-message"
with:
channel_id: "hse-leadership"
message: "SAFETY INCIDENT at {{location}} | Severity: {{severity}} | ServiceNow: {{create-case.number}} | {{incident_description}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://airbus.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
- type: http
namespace: sap-ehs
baseUri: "https://airbus-s4.sap.com/sap/opu/odata/sap/API_EHS_INCIDENT_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_user"
password: "$secrets.sap_s4_pass"
resources:
- name: safety-events
path: "/A_SafetyEvent"
operations:
- name: create-safety-event
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/hse-leadership/channels/general/messages"
operations:
- name: send-message
method: POST
Queries SAP Ariba for supplier contracts approaching renewal within a configurable lead time, creates Jira tracking tasks for the procurement team, and sends a summary notification to the sourcing manager in Microsoft Teams.
naftiko: "0.5"
info:
label: "SAP Ariba Contract Renewal Tracking"
description: "Queries SAP Ariba for supplier contracts approaching renewal within a configurable lead time, creates Jira tracking tasks for the procurement team, and sends a summary notification to the sourcing manager in Microsoft Teams."
tags:
- procurement
- contracts
- sap-ariba
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: contract-mgmt
port: 8080
tools:
- name: track-contract-renewals
description: "Given a number of days until expiry, retrieve Ariba contracts expiring within that window, create Jira tracking tasks, and notify the sourcing manager in Teams. Use for proactive contract renewal management."
inputParameters:
- name: days_to_expiry
in: body
type: integer
description: "The number of days before contract expiry to trigger renewal tracking (e.g., 90, 60, 30)."
- name: category
in: body
type: string
description: "The procurement category to filter contracts (e.g., IT, Services, Manufacturing)."
steps:
- name: get-expiring-contracts
type: call
call: "sap-ariba-contract.list-contracts"
with:
daysToExpiry: "{{days_to_expiry}}"
category: "{{category}}"
- name: create-jira-task
type: call
call: "jira-contract.create-issue"
with:
project_key: "PROC"
summary: "Contract renewals due in {{days_to_expiry}} days: {{category}}"
description: "{{get-expiring-contracts.count}} contracts expiring within {{days_to_expiry}} days in category {{category}}."
issue_type: "Task"
- name: notify-sourcing-manager
type: call
call: "msteams-contract.send-message"
with:
channel_id: "sourcing-alerts"
message: "{{get-expiring-contracts.count}} {{category}} contracts expiring in {{days_to_expiry}} days. Jira: {{create-jira-task.key}}"
consumes:
- type: http
namespace: sap-ariba-contract
baseUri: "https://openapi.ariba.com/api/contract/v1"
authentication:
type: apikey
key: "apiKey"
value: "$secrets.ariba_api_key"
placement: query
resources:
- name: contracts
path: "/contracts"
inputParameters:
- name: daysToExpiry
in: query
- name: category
in: query
operations:
- name: list-contracts
method: GET
- type: http
namespace: jira-contract
baseUri: "https://airbus.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
- type: http
namespace: msteams-contract
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 supplier profile details from SAP Ariba by supplier ID, returning qualification status, certifications, and risk rating.
naftiko: "0.5"
info:
label: "SAP Ariba Supplier Profile Lookup"
description: "Retrieves supplier profile details from SAP Ariba by supplier ID, returning qualification status, certifications, and risk rating."
tags:
- procurement
- sap-ariba
capability:
exposes:
- type: mcp
namespace: procurement
port: 8080
tools:
- name: get-supplier-profile
description: "Given an Ariba supplier ID, retrieve the supplier's qualification status, certifications, and risk rating."
inputParameters:
- name: supplier_id
in: body
type: string
description: "The SAP Ariba supplier ID."
call: "ariba.get-supplier"
with:
supplier_id: "{{supplier_id}}"
outputParameters:
- name: company_name
type: string
mapping: "$.supplier.companyName"
- name: qualification_status
type: string
mapping: "$.supplier.qualificationStatus"
- name: risk_rating
type: string
mapping: "$.supplier.riskRating"
consumes:
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/supplier-management/v1"
authentication:
type: bearer
token: "$secrets.ariba_api_token"
resources:
- name: suppliers
path: "/suppliers/{{supplier_id}}"
inputParameters:
- name: supplier_id
in: path
operations:
- name: get-supplier
method: GET
Retrieves submitted travel expense reports from SAP Concur for a given employee and fiscal period, returning report status, total amount, and approval chain. Used by finance and managers to monitor travel spend compliance.
naftiko: "0.5"
info:
label: "SAP Concur Travel Expense Report Lookup"
description: "Retrieves submitted travel expense reports from SAP Concur for a given employee and fiscal period, returning report status, total amount, and approval chain. Used by finance and managers to monitor travel spend compliance."
tags:
- finance
- travel
- sap-concur
capability:
exposes:
- type: mcp
namespace: travel-finance
port: 8080
tools:
- name: get-expense-reports
description: "Given an employee login ID and date range, retrieve all submitted expense reports from SAP Concur including status, amounts, and approver details. Use when reviewing employee travel spend or approving expense reports."
inputParameters:
- name: employee_login
in: body
type: string
description: "The SAP Concur employee login ID (typically the corporate email)."
- name: date_from
in: body
type: string
description: "Start date for the report query in YYYY-MM-DD format."
- name: date_to
in: body
type: string
description: "End date for the report query in YYYY-MM-DD format."
call: "sap-concur.get-reports"
with:
userLoginID: "{{employee_login}}"
submitDateBegin: "{{date_from}}"
submitDateEnd: "{{date_to}}"
outputParameters:
- name: total_count
type: integer
mapping: "$.TotalCount"
- name: items
type: string
mapping: "$.Items"
consumes:
- type: http
namespace: sap-concur
baseUri: "https://www.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_token"
resources:
- name: reports
path: "/expense/reportdigests"
inputParameters:
- name: userLoginID
in: query
- name: submitDateBegin
in: query
- name: submitDateEnd
in: query
operations:
- name: get-reports
method: GET
Retrieves the current flight-hour cost allocation for a specific aircraft program from SAP S/4HANA, returning cost per hour, program code, and budget consumed.
naftiko: "0.5"
info:
label: "SAP Flight Hour Cost Lookup"
description: "Retrieves the current flight-hour cost allocation for a specific aircraft program from SAP S/4HANA, returning cost per hour, program code, and budget consumed."
tags:
- finance
- sap-s4hana
- aerospace
capability:
exposes:
- type: mcp
namespace: finance
port: 8080
tools:
- name: get-flight-hour-cost
description: "Given an aircraft program code, retrieve the flight-hour cost allocation including cost per hour and budget consumed."
inputParameters:
- name: program_code
in: body
type: string
description: "The aircraft program code (e.g., A320, A350)."
call: "sap-s4.get-cost-center"
with:
CostCenter: "{{program_code}}"
outputParameters:
- name: cost_per_hour
type: string
mapping: "$.d.CostPerHour"
- name: budget_consumed
type: string
mapping: "$.d.BudgetConsumed"
- name: currency
type: string
mapping: "$.d.Currency"
consumes:
- type: http
namespace: sap-s4
baseUri: "https://airbus-s4.sap.com/sap/opu/odata/sap/API_COSTCENTER_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_user"
password: "$secrets.sap_s4_pass"
resources:
- name: cost-centers
path: "/A_CostCenter('{{CostCenter}}')"
inputParameters:
- name: CostCenter
in: path
operations:
- name: get-cost-center
method: GET
When a goods movement reversal is needed, retrieves the original document from SAP, posts the reversal, and logs the action in ServiceNow for audit trail purposes.
naftiko: "0.5"
info:
label: "SAP Goods Movement Reversal Handler"
description: "When a goods movement reversal is needed, retrieves the original document from SAP, posts the reversal, and logs the action in ServiceNow for audit trail purposes."
tags:
- supply-chain
- sap-s4hana
- servicenow
capability:
exposes:
- type: mcp
namespace: warehouse
port: 8080
tools:
- name: reverse-goods-movement
description: "Given a material document number, retrieve the original posting, execute reversal, and create an audit log."
inputParameters:
- name: material_doc
in: body
type: string
description: "The SAP material document number to reverse."
- name: reason
in: body
type: string
description: "Reason for the reversal."
steps:
- name: get-original
type: call
call: "sap-s4.get-material-doc"
with:
MaterialDocument: "{{material_doc}}"
- name: post-reversal
type: call
call: "sap-s4.create-reversal"
with:
OriginalDocument: "{{material_doc}}"
ReversalReason: "{{reason}}"
- name: log-audit
type: call
call: "servicenow.create-record"
with:
table: "u_goods_movement_audit"
original_doc: "{{material_doc}}"
reversal_doc: "{{post-reversal.document_number}}"
reason: "{{reason}}"
consumes:
- type: http
namespace: sap-s4
baseUri: "https://airbus-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_DOCUMENT_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_user"
password: "$secrets.sap_s4_pass"
resources:
- name: material-docs
path: "/A_MaterialDocumentHeader('{{MaterialDocument}}')"
inputParameters:
- name: MaterialDocument
in: path
operations:
- name: get-material-doc
method: GET
- name: reversals
path: "/A_MaterialDocumentHeader"
operations:
- name: create-reversal
method: POST
- type: http
namespace: servicenow
baseUri: "https://airbus.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
Reconciles intercompany billing documents between Airbus entities in SAP, flags discrepancies via Snowflake analysis, and creates a ServiceNow ticket for the finance shared services team.
naftiko: "0.5"
info:
label: "SAP Intercompany Billing Reconciliation"
description: "Reconciles intercompany billing documents between Airbus entities in SAP, flags discrepancies via Snowflake analysis, and creates a ServiceNow ticket for the finance shared services team."
tags:
- finance
- sap-s4hana
- snowflake
- servicenow
capability:
exposes:
- type: mcp
namespace: finance
port: 8080
tools:
- name: reconcile-intercompany
description: "Given sending and receiving company codes and a period, reconcile intercompany billing and flag discrepancies."
inputParameters:
- name: sending_company
in: body
type: string
description: "The sending company code."
- name: receiving_company
in: body
type: string
description: "The receiving company code."
- name: period
in: body
type: string
description: "Fiscal period (e.g., 2026-03)."
steps:
- name: get-billing-docs
type: call
call: "sap-s4.get-intercompany-docs"
with:
SendingCompany: "{{sending_company}}"
ReceivingCompany: "{{receiving_company}}"
Period: "{{period}}"
- name: find-discrepancies
type: call
call: "snowflake.run-query"
with:
query: "SELECT doc_number, sender_amount, receiver_amount, ABS(sender_amount - receiver_amount) as diff FROM intercompany_recon WHERE sender = '{{sending_company}}' AND receiver = '{{receiving_company}}' AND period = '{{period}}' AND diff > 0"
- name: create-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "IC recon discrepancy: {{sending_company}} -> {{receiving_company}} ({{period}})"
description: "Discrepancies found: {{find-discrepancies.row_count}} documents. Total billing docs: {{get-billing-docs.count}}"
category: "finance"
consumes:
- type: http
namespace: sap-s4
baseUri: "https://airbus-s4.sap.com/sap/opu/odata/sap/API_BILLING_DOCUMENT_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_user"
password: "$secrets.sap_s4_pass"
resources:
- name: billing-docs
path: "/A_BillingDocument?$filter=SenderCompany eq '{{SendingCompany}}' and ReceiverCompany eq '{{ReceivingCompany}}'"
inputParameters:
- name: SendingCompany
in: query
- name: ReceivingCompany
in: query
operations:
- name: get-intercompany-docs
method: GET
- type: http
namespace: snowflake
baseUri: "https://airbus.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://airbus.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
Queries SAP S/4HANA for the current financial period close status across all Airbus legal entities, identifies open posting periods, and publishes a status report to Power BI for the finance leadership team.
naftiko: "0.5"
info:
label: "SAP Period Close Status Check"
description: "Queries SAP S/4HANA for the current financial period close status across all Airbus legal entities, identifies open posting periods, and publishes a status report to Power BI for the finance leadership team."
tags:
- finance
- period-close
- sap-s4hana
- power-bi
capability:
exposes:
- type: mcp
namespace: finance-close
port: 8080
tools:
- name: get-period-close-status
description: "Given a fiscal year and period number, retrieve open/closed posting period status from SAP S/4HANA and trigger a Power BI refresh of the period close dashboard. Use during month-end close to monitor financial period status."
inputParameters:
- name: fiscal_year
in: body
type: string
description: "The fiscal year to check (e.g., 2025)."
- name: period
in: body
type: string
description: "The fiscal period number (e.g., 01 for January)."
steps:
- name: get-posting-periods
type: call
call: "sap-s4-close.get-posting-periods"
with:
FiscalYear: "{{fiscal_year}}"
FiscalPeriod: "{{period}}"
- name: refresh-powerbi-dashboard
type: call
call: "powerbi-finance.trigger-refresh"
with:
dataset_id: "$secrets.powerbi_period_close_dataset_id"
consumes:
- type: http
namespace: sap-s4-close
baseUri: "https://airbus-s4.sap.com/sap/opu/odata/sap/API_FINANCIALACCOUNTING_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_user"
password: "$secrets.sap_s4_pass"
resources:
- name: posting-periods
path: "/A_FinancialAccountingPeriod"
inputParameters:
- name: FiscalYear
in: query
- name: FiscalPeriod
in: query
operations:
- name: get-posting-periods
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
Retrieves a plant maintenance order from SAP PM by order number, returning equipment, work center, priority, and current status.
naftiko: "0.5"
info:
label: "SAP Plant Maintenance Order Lookup"
description: "Retrieves a plant maintenance order from SAP PM by order number, returning equipment, work center, priority, and current status."
tags:
- manufacturing
- sap-s4hana
- maintenance
capability:
exposes:
- type: mcp
namespace: maintenance
port: 8080
tools:
- name: get-maintenance-order
description: "Given a maintenance order number, retrieve the order details including equipment, work center, and priority."
inputParameters:
- name: order_number
in: body
type: string
description: "The SAP plant maintenance order number."
call: "sap-pm.get-order"
with:
MaintenanceOrder: "{{order_number}}"
outputParameters:
- name: equipment
type: string
mapping: "$.d.Equipment"
- name: work_center
type: string
mapping: "$.d.MainWorkCenter"
- name: priority
type: string
mapping: "$.d.MaintenancePriority"
- name: status
type: string
mapping: "$.d.MaintOrdBasicOrderStatus"
consumes:
- type: http
namespace: sap-pm
baseUri: "https://airbus-s4.sap.com/sap/opu/odata/sap/API_MAINTENANCEORDER"
authentication:
type: basic
username: "$secrets.sap_s4_user"
password: "$secrets.sap_s4_pass"
resources:
- name: orders
path: "/MaintenanceOrder('{{MaintenanceOrder}}')"
inputParameters:
- name: MaintenanceOrder
in: path
operations:
- name: get-order
method: GET
Retrieves the status of a production order from SAP S/4HANA by order number, returning order type, scheduled dates, and completion percentage.
naftiko: "0.5"
info:
label: "SAP Production Order Status Lookup"
description: "Retrieves the status of a production order from SAP S/4HANA by order number, returning order type, scheduled dates, and completion percentage."
tags:
- manufacturing
- sap-s4hana
- production
capability:
exposes:
- type: mcp
namespace: production
port: 8080
tools:
- name: get-production-order
description: "Given a production order number, retrieve order status, type, and completion percentage from SAP."
inputParameters:
- name: order_number
in: body
type: string
description: "The SAP production order number."
call: "sap-s4.get-production-order"
with:
ManufacturingOrder: "{{order_number}}"
outputParameters:
- name: status
type: string
mapping: "$.d.ManufacturingOrderStatus"
- name: order_type
type: string
mapping: "$.d.ManufacturingOrderType"
- name: completion_pct
type: string
mapping: "$.d.CompletionPercent"
consumes:
- type: http
namespace: sap-s4
baseUri: "https://airbus-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_user"
password: "$secrets.sap_s4_pass"
resources:
- name: production-orders
path: "/A_ProductionOrder_2('{{ManufacturingOrder}}')"
inputParameters:
- name: ManufacturingOrder
in: path
operations:
- name: get-production-order
method: GET
Retrieves purchase order details from SAP S/4HANA given a PO number. Used by procurement and finance teams to verify order status, supplier, and line-item details without accessing the ERP UI.
naftiko: "0.5"
info:
label: "SAP Purchase Order Lookup"
description: "Retrieves purchase order details from SAP S/4HANA given a PO number. Used by procurement and finance teams to verify order status, supplier, and line-item details without accessing the ERP UI."
tags:
- finance
- procurement
- sap-s4hana
capability:
exposes:
- type: mcp
namespace: procurement
port: 8080
tools:
- name: get-purchase-order
description: "Given an SAP purchase order number, retrieve full PO details including supplier, line items, delivery date, and status from SAP S/4HANA. Use when an agent or user needs to verify PO data."
inputParameters:
- name: po_number
in: body
type: string
description: "The SAP purchase order number (e.g., 4500012345)."
call: "sap-s4.get-purchase-order"
with:
PurchaseOrder: "{{po_number}}"
outputParameters:
- name: supplier
type: string
mapping: "$.d.Supplier"
- name: status
type: string
mapping: "$.d.PurchaseOrderStatus"
- name: total_net_amount
type: string
mapping: "$.d.PurchaseOrderNetAmount"
consumes:
- type: http
namespace: sap-s4
baseUri: "https://airbus-s4.sap.com/sap/opu/odata/sap/API_PURCHASEORDER_PROCESS_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_user"
password: "$secrets.sap_s4_pass"
resources:
- name: purchase-order
path: "/A_PurchaseOrder('{{PurchaseOrder}}')"
inputParameters:
- name: PurchaseOrder
in: path
operations:
- name: get-purchase-order
method: GET
Retrieves quality inspection lot details from SAP QM by inspection lot number, returning inspection status, defect count, and material reference.
naftiko: "0.5"
info:
label: "SAP Quality Inspection Lot Lookup"
description: "Retrieves quality inspection lot details from SAP QM by inspection lot number, returning inspection status, defect count, and material reference."
tags:
- quality
- sap-s4hana
- manufacturing
capability:
exposes:
- type: mcp
namespace: quality
port: 8080
tools:
- name: get-inspection-lot
description: "Given an inspection lot number, retrieve the quality inspection details including status and defect count."
inputParameters:
- name: lot_number
in: body
type: string
description: "The SAP inspection lot number."
call: "sap-qm.get-inspection-lot"
with:
InspectionLot: "{{lot_number}}"
outputParameters:
- name: status
type: string
mapping: "$.d.InspectionLotStatus"
- name: defect_count
type: string
mapping: "$.d.NumberOfDefects"
- name: material
type: string
mapping: "$.d.Material"
consumes:
- type: http
namespace: sap-qm
baseUri: "https://airbus-s4.sap.com/sap/opu/odata/sap/API_INSPECTIONLOT_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_user"
password: "$secrets.sap_s4_pass"
resources:
- name: inspection-lots
path: "/A_InspectionLot('{{InspectionLot}}')"
inputParameters:
- name: InspectionLot
in: path
operations:
- name: get-inspection-lot
method: GET
Retrieves material master data from SAP S/4HANA by material number, returning description, unit of measure, and material group for engineering and procurement teams.
naftiko: "0.5"
info:
label: "SAP S/4 Material Master Lookup"
description: "Retrieves material master data from SAP S/4HANA by material number, returning description, unit of measure, and material group for engineering and procurement teams."
tags:
- manufacturing
- sap-s4hana
capability:
exposes:
- type: mcp
namespace: materials
port: 8080
tools:
- name: get-material
description: "Given a material number, retrieve the material master record from SAP S/4HANA including description, UoM, and material group."
inputParameters:
- name: material_number
in: body
type: string
description: "The SAP material number."
call: "sap-s4.get-material"
with:
MaterialNumber: "{{material_number}}"
outputParameters:
- name: description
type: string
mapping: "$.d.MaterialDescription"
- name: uom
type: string
mapping: "$.d.BaseUnit"
- name: material_group
type: string
mapping: "$.d.MaterialGroup"
consumes:
- type: http
namespace: sap-s4
baseUri: "https://airbus-s4.sap.com/sap/opu/odata/sap/API_PRODUCT_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_user"
password: "$secrets.sap_s4_pass"
resources:
- name: materials
path: "/A_Product('{{MaterialNumber}}')"
inputParameters:
- name: MaterialNumber
in: path
operations:
- name: get-material
method: GET
Retrieves payroll processing results from SAP SuccessFactors for a given pay cycle, compares totals against the previous period in Snowflake, and flags any variance above threshold for finance review in a Jira task.
naftiko: "0.5"
info:
label: "SAP SuccessFactors Payroll Reconciliation"
description: "Retrieves payroll processing results from SAP SuccessFactors for a given pay cycle, compares totals against the previous period in Snowflake, and flags any variance above threshold for finance review in a Jira task."
tags:
- hr
- payroll
- sap-successfactors
- snowflake
- jira
capability:
exposes:
- type: mcp
namespace: payroll-ops
port: 8080
tools:
- name: reconcile-payroll
description: "Given a pay cycle ID and variance threshold percentage, retrieve payroll totals from SuccessFactors, compare against the prior period stored in Snowflake, and create a Jira task if variance exceeds the threshold. Use for pay cycle reconciliation."
inputParameters:
- name: pay_cycle_id
in: body
type: string
description: "The SAP SuccessFactors pay cycle ID to reconcile."
- name: variance_threshold_pct
in: body
type: number
description: "The percentage variance above which a Jira review task is created (e.g., 5.0 for 5%)."
steps:
- name: get-payroll-results
type: call
call: "successfactors-payroll.get-pay-run"
with:
payCycleId: "{{pay_cycle_id}}"
- name: query-prior-period
type: call
call: "snowflake-payroll.query-prior-period"
with:
pay_cycle_id: "{{pay_cycle_id}}"
- name: create-variance-task
type: call
call: "jira-payroll.create-issue"
with:
project_key: "PAY"
summary: "Payroll variance alert: {{pay_cycle_id}}"
description: "Variance of {{variance_threshold_pct}}% detected versus prior period. Finance review required."
issue_type: "Task"
consumes:
- type: http
namespace: successfactors-payroll
baseUri: "https://airbus.successfactors.com/odata/v2"
authentication:
type: bearer
token: "$secrets.successfactors_token"
resources:
- name: pay-run
path: "/PaymentInformation(payCycleId='{{payCycleId}}')"
inputParameters:
- name: payCycleId
in: path
operations:
- name: get-pay-run
method: GET
- type: http
namespace: snowflake-payroll
baseUri: "https://airbus.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: prior-period
path: "/statements"
inputParameters:
- name: pay_cycle_id
in: body
operations:
- name: query-prior-period
method: POST
- type: http
namespace: jira-payroll
baseUri: "https://airbus.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
Retrieves the status of a vendor invoice in SAP by invoice document number, returning payment status, amount, and posting date.
naftiko: "0.5"
info:
label: "SAP Vendor Invoice Status Lookup"
description: "Retrieves the status of a vendor invoice in SAP by invoice document number, returning payment status, amount, and posting date."
tags:
- finance
- sap-s4hana
- accounts-payable
capability:
exposes:
- type: mcp
namespace: finance
port: 8080
tools:
- name: get-invoice-status
description: "Given an SAP invoice document number, retrieve the payment status, amount, and posting date."
inputParameters:
- name: invoice_number
in: body
type: string
description: "The SAP invoice document number."
call: "sap-s4.get-invoice"
with:
SupplierInvoice: "{{invoice_number}}"
outputParameters:
- name: payment_status
type: string
mapping: "$.d.PaymentStatus"
- name: amount
type: string
mapping: "$.d.InvoiceGrossAmount"
- name: posting_date
type: string
mapping: "$.d.PostingDate"
consumes:
- type: http
namespace: sap-s4
baseUri: "https://airbus-s4.sap.com/sap/opu/odata/sap/API_SUPPLIERINVOICE_PROCESS_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_user"
password: "$secrets.sap_s4_pass"
resources:
- name: invoices
path: "/A_SupplierInvoice('{{SupplierInvoice}}')"
inputParameters:
- name: SupplierInvoice
in: path
operations:
- name: get-invoice
method: GET
When satellite telemetry anomalies are detected in Snowflake, creates a Jira investigation ticket for the space systems team and sends an urgent notification to the mission control Slack channel.
naftiko: "0.5"
info:
label: "Satellite Program Telemetry Alert"
description: "When satellite telemetry anomalies are detected in Snowflake, creates a Jira investigation ticket for the space systems team and sends an urgent notification to the mission control Slack channel."
tags:
- aerospace
- snowflake
- jira
- slack
capability:
exposes:
- type: mcp
namespace: space-systems
port: 8080
tools:
- name: handle-telemetry-anomaly
description: "Given a satellite ID and anomaly type, retrieve telemetry context, create an investigation ticket, and alert mission control."
inputParameters:
- name: satellite_id
in: body
type: string
description: "The satellite identifier."
- name: anomaly_type
in: body
type: string
description: "Type of telemetry anomaly detected."
steps:
- name: get-telemetry
type: call
call: "snowflake.run-query"
with:
query: "SELECT timestamp, subsystem, value, threshold FROM satellite_telemetry WHERE satellite_id = '{{satellite_id}}' AND anomaly_flag = TRUE ORDER BY timestamp DESC LIMIT 10"
- name: create-ticket
type: call
call: "jira.create-issue"
with:
project: "SPACE"
summary: "Telemetry anomaly: {{satellite_id}} - {{anomaly_type}}"
description: "Anomalous readings detected. Recent anomalies: {{get-telemetry.row_count}}"
issuetype: "Bug"
priority: "Critical"
- name: alert-mission-control
type: call
call: "slack.post-message"
with:
channel: "mission-control"
text: "TELEMETRY ANOMALY: Satellite {{satellite_id}} | Type: {{anomaly_type}} | Investigation: {{create-ticket.key}} | {{get-telemetry.row_count}} anomalous readings in recent window"
consumes:
- type: http
namespace: snowflake
baseUri: "https://airbus.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://airbus-engineering.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
When a critical CVE is reported, queries the Datadog security signals feed, creates a ServiceNow security incident, assigns it to the appropriate security team, and notifies the CISO office via Microsoft Teams. Accelerates Airbus vulnerability response.
naftiko: "0.5"
info:
label: "Security CVE Vulnerability Triage"
description: "When a critical CVE is reported, queries the Datadog security signals feed, creates a ServiceNow security incident, assigns it to the appropriate security team, and notifies the CISO office via Microsoft Teams. Accelerates Airbus vulnerability response."
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 and affected system, retrieve security signals from Datadog, create a ServiceNow security incident, and notify the security team in Teams. Use when a critical or high CVE requires immediate 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 or application."
- 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}} 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://airbus.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
When a new service bulletin is published, identifies affected operators from Snowflake fleet data, creates distribution records in Salesforce, and sends notification emails via Microsoft Graph.
naftiko: "0.5"
info:
label: "Service Bulletin Distribution Tracker"
description: "When a new service bulletin is published, identifies affected operators from Snowflake fleet data, creates distribution records in Salesforce, and sends notification emails via Microsoft Graph."
tags:
- customer-support
- snowflake
- salesforce
- microsoft-graph
- aerospace
capability:
exposes:
- type: mcp
namespace: support
port: 8080
tools:
- name: distribute-service-bulletin
description: "Given a service bulletin number and affected aircraft type, identify operators and distribute the bulletin."
inputParameters:
- name: sb_number
in: body
type: string
description: "The service bulletin number."
- name: aircraft_type
in: body
type: string
description: "The affected aircraft type."
steps:
- name: get-affected-operators
type: call
call: "snowflake.run-query"
with:
query: "SELECT DISTINCT operator_name, operator_email, aircraft_count FROM fleet_registry WHERE aircraft_type = '{{aircraft_type}}' AND status = 'IN_SERVICE'"
- name: create-distribution-records
type: call
call: "salesforce.create-distribution"
with:
sb_number: "{{sb_number}}"
operator_count: "{{get-affected-operators.row_count}}"
- name: send-notifications
type: call
call: "msgraph.send-mail"
with:
to: "sb-distribution@airbus.com"
subject: "Service Bulletin {{sb_number}} - {{aircraft_type}} Distribution"
body: "SB {{sb_number}} distributed to {{get-affected-operators.row_count}} operators for {{aircraft_type}} fleet. Distribution record: {{create-distribution-records.id}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://airbus.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://airbus.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: distributions
path: "/sobjects/SB_Distribution__c"
operations:
- name: create-distribution
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
Submits a change request in ServiceNow for a planned infrastructure or software modification, retrieves the change advisory board (CAB) schedule, and notifies approvers via Microsoft Teams. Supports Airbus ITIL-compliant change governance.
naftiko: "0.5"
info:
label: "ServiceNow Change Management Approval"
description: "Submits a change request in ServiceNow for a planned infrastructure or software modification, retrieves the change advisory board (CAB) schedule, and notifies approvers via Microsoft Teams. Supports Airbus 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 group in Teams. Use when a planned change to production systems needs formal approval."
inputParameters:
- name: change_title
in: body
type: string
description: "The title of the change request (e.g., SAP S/4HANA upgrade to 2025)."
- 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 pending approval: {{change_title}} ({{risk_level}} risk). CHG: {{create-change-request.number}}. Planned: {{planned_start}}"
consumes:
- type: http
namespace: servicenow-change
baseUri: "https://airbus.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 the current status of a ServiceNow incident by incident number, returning priority, state, assigned group, and short description.
naftiko: "0.5"
info:
label: "ServiceNow Incident Status Lookup"
description: "Retrieves the current status of a ServiceNow incident by incident number, returning priority, state, assigned group, and short description."
tags:
- it-operations
- servicenow
capability:
exposes:
- type: mcp
namespace: it-ops
port: 8080
tools:
- name: get-incident-status
description: "Given a ServiceNow incident number, retrieve its current state, priority, and assignment group."
inputParameters:
- name: incident_number
in: body
type: string
description: "The ServiceNow incident number, e.g. INC0012345."
call: "servicenow.get-incident"
with:
number: "{{incident_number}}"
outputParameters:
- name: state
type: string
mapping: "$.result.state"
- name: priority
type: string
mapping: "$.result.priority"
- name: assigned_to
type: string
mapping: "$.result.assigned_to.display_value"
consumes:
- type: http
namespace: servicenow
baseUri: "https://airbus.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_pass"
resources:
- name: incidents
path: "/table/incident?sysparm_query=number={{number}}"
inputParameters:
- name: number
in: query
operations:
- name: get-incident
method: GET
Searches the Airbus SharePoint document library for technical documents by keyword, returning document title, URL, and last modified date.
naftiko: "0.5"
info:
label: "SharePoint Technical Document Retrieval"
description: "Searches the Airbus SharePoint document library for technical documents by keyword, returning document title, URL, and last modified date."
tags:
- engineering
- sharepoint
- knowledge-management
capability:
exposes:
- type: mcp
namespace: documents
port: 8080
tools:
- name: search-technical-docs
description: "Search the SharePoint technical document library for files matching a keyword."
inputParameters:
- name: keyword
in: body
type: string
description: "The search keyword."
call: "sharepoint.search-documents"
with:
query: "{{keyword}}"
outputParameters:
- name: results
type: array
mapping: "$.value"
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites/airbus.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 message history from an Airbus engineering Slack channel, returning messages with timestamps and authors.
naftiko: "0.5"
info:
label: "Slack Engineering Channel History"
description: "Retrieves recent message history from an Airbus engineering Slack channel, returning messages with timestamps and authors."
tags:
- collaboration
- slack
- engineering
capability:
exposes:
- type: mcp
namespace: collaboration
port: 8080
tools:
- name: get-slack-history
description: "Given a Slack channel ID, retrieve the latest messages including sender and timestamp."
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 pipeline execution status of manufacturing data feeds, identifies failed or stalled jobs, and creates Jira tickets for data engineering follow-up. Ensures continuous data availability for Airbus production analytics.
naftiko: "0.5"
info:
label: "Snowflake Manufacturing Data Pipeline Health Check"
description: "Queries Snowflake for pipeline execution status of manufacturing data feeds, identifies failed or stalled jobs, and creates Jira tickets for data engineering follow-up. Ensures continuous data availability for Airbus production analytics."
tags:
- data
- analytics
- snowflake
- jira
- manufacturing
capability:
exposes:
- type: mcp
namespace: data-ops
port: 8080
tools:
- name: check-pipeline-health
description: "Given a Snowflake pipeline name prefix, query job execution history, identify failures, and open Jira tickets for each failed job. Use for daily or on-demand data pipeline health checks."
inputParameters:
- name: pipeline_prefix
in: body
type: string
description: "The Snowflake task name prefix to filter pipelines (e.g., MFG_, SUPPLY_)."
- name: lookback_hours
in: body
type: integer
description: "Number of hours to look back for failed tasks."
steps:
- name: query-snowflake-tasks
type: call
call: "snowflake-data.query-tasks"
with:
prefix: "{{pipeline_prefix}}"
hours: "{{lookback_hours}}"
- name: create-jira-for-failures
type: call
call: "jira-data.create-issue"
with:
project_key: "DATA"
summary: "Pipeline failures detected: {{pipeline_prefix}}"
description: "{{query-snowflake-tasks.failed_count}} tasks failed in the last {{lookback_hours}} hours."
issue_type: "Task"
consumes:
- type: http
namespace: snowflake-data
baseUri: "https://airbus.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://airbus.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 the Snowflake data warehouse for current parts inventory levels by part number, returning stock quantity, warehouse location, and reorder threshold.
naftiko: "0.5"
info:
label: "Snowflake Parts Inventory Query"
description: "Queries the Snowflake data warehouse for current parts inventory levels by part number, returning stock quantity, warehouse location, and reorder threshold."
tags:
- manufacturing
- snowflake
- supply-chain
capability:
exposes:
- type: mcp
namespace: supply-chain
port: 8080
tools:
- name: get-parts-inventory
description: "Given a part number, query Snowflake for current inventory levels, warehouse location, and reorder status."
inputParameters:
- name: part_number
in: body
type: string
description: "The aerospace part number."
call: "snowflake.run-query"
with:
query: "SELECT part_number, stock_qty, warehouse, reorder_threshold FROM parts_inventory WHERE part_number = '{{part_number}}'"
outputParameters:
- name: stock_qty
type: string
mapping: "$.data[0].STOCK_QTY"
- name: warehouse
type: string
mapping: "$.data[0].WAREHOUSE"
- name: reorder_threshold
type: string
mapping: "$.data[0].REORDER_THRESHOLD"
consumes:
- type: http
namespace: snowflake
baseUri: "https://airbus.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 across engineering squads, computes velocity trends, and publishes the digest to a Confluence page and posts a summary to the Teams engineering channel. Supports Airbus agile delivery tracking.
naftiko: "0.5"
info:
label: "Sprint Velocity Digest"
description: "Retrieves completed story points from Jira for the last sprint across engineering squads, computes velocity trends, and publishes the digest to a Confluence page and posts a summary to the Teams engineering channel. Supports Airbus agile delivery tracking."
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, compute velocity, publish a Confluence page, and post a summary to Teams. Use at the end of each sprint to distribute velocity metrics."
inputParameters:
- name: project_key
in: body
type: string
description: "The Jira project key (e.g., ENG, AVIONICS)."
- name: sprint_id
in: body
type: string
description: "The Jira sprint ID to report on."
steps:
- name: get-sprint-issues
type: call
call: "jira-agile.get-sprint-issues"
with:
project_key: "{{project_key}}"
sprint_id: "{{sprint_id}}"
- name: publish-confluence-page
type: call
call: "confluence-agile.create-page"
with:
space_key: "ENG"
title: "Sprint Velocity Report — {{project_key}} Sprint {{sprint_id}}"
body: "Story points completed: {{get-sprint-issues.completed_points}}"
- name: notify-teams
type: call
call: "msteams-agile.send-message"
with:
channel_id: "engineering-metrics"
message: "Sprint {{sprint_id}} complete: {{get-sprint-issues.completed_points}} story points. Report: {{publish-confluence-page.url}}"
consumes:
- type: http
namespace: jira-agile
baseUri: "https://airbus.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://airbus.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
Checks mandatory training compliance for a department in SuccessFactors, identifies overdue learners, and sends reminder notifications to their managers via Microsoft Teams.
naftiko: "0.5"
info:
label: "SuccessFactors Learning Compliance Tracker"
description: "Checks mandatory training compliance for a department in SuccessFactors, identifies overdue learners, and sends reminder notifications to their managers via Microsoft Teams."
tags:
- hr
- sap-successfactors
- microsoft-teams
- compliance
capability:
exposes:
- type: mcp
namespace: hr
port: 8080
tools:
- name: check-training-compliance
description: "Given a department and training course ID, find overdue learners and notify their managers."
inputParameters:
- name: department
in: body
type: string
description: "The department to check."
- name: course_id
in: body
type: string
description: "The mandatory training course ID."
steps:
- name: get-overdue
type: call
call: "successfactors.get-overdue-learners"
with:
department: "{{department}}"
courseId: "{{course_id}}"
- name: notify-managers
type: call
call: "msteams.send-message"
with:
channel_id: "{{department}}-managers"
message: "Training compliance alert: {{get-overdue.count}} employees in {{department}} are overdue on course {{course_id}}. Please ensure completion by end of month."
consumes:
- type: http
namespace: successfactors
baseUri: "https://airbus.successfactors.com/odata/v2"
authentication:
type: bearer
token: "$secrets.successfactors_token"
resources:
- name: learning
path: "/LearningHistoryV2?$filter=department eq '{{department}}' and courseId eq '{{courseId}}' and status eq 'OVERDUE'"
inputParameters:
- name: department
in: query
- name: courseId
in: query
operations:
- name: get-overdue-learners
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/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Initiates the annual performance review cycle by retrieving the active employee roster from SuccessFactors, creating review forms, and notifying managers via Microsoft Teams to begin evaluations.
naftiko: "0.5"
info:
label: "SuccessFactors Performance Review Kickoff"
description: "Initiates the annual performance review cycle by retrieving the active employee roster from SuccessFactors, creating review forms, and notifying managers via Microsoft Teams to begin evaluations."
tags:
- hr
- sap-successfactors
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr
port: 8080
tools:
- name: kickoff-performance-reviews
description: "Given a review cycle ID and department, initiate the performance review process and notify managers."
inputParameters:
- name: cycle_id
in: body
type: string
description: "The performance review cycle identifier."
- name: department
in: body
type: string
description: "The department to initiate reviews for."
steps:
- name: get-roster
type: call
call: "successfactors.get-active-employees"
with:
department: "{{department}}"
- name: create-forms
type: call
call: "successfactors.create-review-forms"
with:
cycleId: "{{cycle_id}}"
department: "{{department}}"
- name: notify-managers
type: call
call: "msteams.send-message"
with:
channel_id: "{{department}}-managers"
message: "Performance review cycle {{cycle_id}} has been initiated for {{department}}. {{get-roster.count}} employees enrolled. {{create-forms.forms_created}} review forms created. Please begin evaluations."
consumes:
- type: http
namespace: successfactors
baseUri: "https://airbus.successfactors.com/odata/v2"
authentication:
type: bearer
token: "$secrets.successfactors_token"
resources:
- name: employees
path: "/PerPerson?$filter=department eq '{{department}}' and status eq 'ACTIVE'"
inputParameters:
- name: department
in: query
operations:
- name: get-active-employees
method: GET
- name: review-forms
path: "/FormContent"
operations:
- name: create-review-forms
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
Retrieves the current time-off balance for an employee from SAP SuccessFactors, returning available days by leave type.
naftiko: "0.5"
info:
label: "SuccessFactors Time Off Balance Check"
description: "Retrieves the current time-off balance for an employee from SAP SuccessFactors, returning available days by leave type."
tags:
- hr
- sap-successfactors
capability:
exposes:
- type: mcp
namespace: hr
port: 8080
tools:
- name: get-time-off-balance
description: "Given an employee ID, retrieve their current time-off balances by leave type from SuccessFactors."
inputParameters:
- name: employee_id
in: body
type: string
description: "The SuccessFactors employee ID."
call: "successfactors.get-time-off"
with:
employee_id: "{{employee_id}}"
outputParameters:
- name: balances
type: array
mapping: "$.d.results"
consumes:
- type: http
namespace: successfactors
baseUri: "https://airbus.successfactors.com/odata/v2"
authentication:
type: bearer
token: "$secrets.successfactors_token"
resources:
- name: time-off
path: "/EmployeeTimeBalance?$filter=userId eq '{{employee_id}}'"
inputParameters:
- name: employee_id
in: query
operations:
- name: get-time-off
method: GET
When a quality non-conformance is detected, retrieves supplier details from SAP Ariba, creates a Jira ticket for the quality team, and sends an escalation notification via Microsoft Teams.
naftiko: "0.5"
info:
label: "Supplier Non-Conformance Escalation"
description: "When a quality non-conformance is detected, retrieves supplier details from SAP Ariba, creates a Jira ticket for the quality team, and sends an escalation notification via Microsoft Teams."
tags:
- quality
- sap-ariba
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: quality
port: 8080
tools:
- name: escalate-non-conformance
description: "Given a supplier ID and non-conformance description, retrieve supplier details, create a quality Jira ticket, and notify the team."
inputParameters:
- name: supplier_id
in: body
type: string
description: "The SAP Ariba supplier ID."
- name: nc_description
in: body
type: string
description: "Description of the non-conformance."
- name: part_number
in: body
type: string
description: "The affected part number."
steps:
- name: get-supplier
type: call
call: "ariba.get-supplier"
with:
supplier_id: "{{supplier_id}}"
- name: create-ticket
type: call
call: "jira.create-issue"
with:
project: "QUAL"
summary: "NC: {{get-supplier.companyName}} - Part {{part_number}}"
description: "{{nc_description}}"
issuetype: "Bug"
priority: "High"
- name: notify-quality
type: call
call: "msteams.send-message"
with:
channel_id: "quality-engineering"
message: "Non-conformance escalated for {{get-supplier.companyName}} | Part: {{part_number}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/supplier-management/v1"
authentication:
type: bearer
token: "$secrets.ariba_api_token"
resources:
- name: suppliers
path: "/suppliers/{{supplier_id}}"
inputParameters:
- name: supplier_id
in: path
operations:
- name: get-supplier
method: GET
- type: http
namespace: jira
baseUri: "https://airbus-engineering.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: messages
path: "/teams/quality-engineering/channels/general/messages"
operations:
- name: send-message
method: POST
When a supplier quality deviation is reported via SAP Quality Management, creates a ServiceNow case, enriches supplier data from SAP Ariba, and notifies the quality assurance team. Accelerates supplier non-conformance resolution across Airbus supply chain.
naftiko: "0.5"
info:
label: "Supplier Quality Deviation Triage"
description: "When a supplier quality deviation is reported via SAP Quality Management, creates a ServiceNow case, enriches supplier data from SAP Ariba, and notifies the quality assurance team. Accelerates supplier non-conformance resolution across Airbus supply chain."
tags:
- quality
- supply-chain
- sap-qm
- servicenow
- sap-ariba
capability:
exposes:
- type: mcp
namespace: quality-ops
port: 8080
tools:
- name: handle-supplier-deviation
description: "Given a SAP quality notification ID and supplier number, create a ServiceNow quality case, retrieve Ariba supplier profile, and notify the QA team in Teams. Use when a supplier quality deviation requires cross-functional escalation."
inputParameters:
- name: notification_id
in: body
type: string
description: "The SAP quality notification ID (e.g., QM-2024-001234)."
- name: supplier_number
in: body
type: string
description: "The SAP supplier number associated with the deviation."
steps:
- name: get-qm-notification
type: call
call: "sap-qm.get-notification"
with:
notification_id: "{{notification_id}}"
- name: get-ariba-supplier
type: call
call: "sap-ariba-qa.get-supplier"
with:
supplierId: "{{supplier_number}}"
- name: create-snow-case
type: call
call: "servicenow-qa.create-case"
with:
short_description: "Supplier deviation: {{get-qm-notification.short_text}}"
category: "Quality"
priority: "2"
consumes:
- type: http
namespace: sap-qm
baseUri: "https://airbus-s4.sap.com/sap/opu/odata/sap/API_QUALITYNOTIFICATION_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_user"
password: "$secrets.sap_s4_pass"
resources:
- name: notification
path: "/A_QualityNotification('{{notification_id}}')"
inputParameters:
- name: notification_id
in: path
operations:
- name: get-notification
method: GET
- type: http
namespace: sap-ariba-qa
baseUri: "https://openapi.ariba.com/api/supplier/v1"
authentication:
type: apikey
key: "apiKey"
value: "$secrets.ariba_api_key"
placement: query
resources:
- name: supplier
path: "/suppliers/{{supplierId}}"
inputParameters:
- name: supplierId
in: path
operations:
- name: get-supplier
method: GET
- type: http
namespace: servicenow-qa
baseUri: "https://airbus.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_pass"
resources:
- name: case
path: "/table/sn_customerservice_case"
inputParameters:
- name: short_description
in: body
- name: category
in: body
- name: priority
in: body
operations:
- name: create-case
method: POST
When a supply chain disruption is reported, retrieves affected purchase orders from SAP, identifies impacted production schedules in Snowflake, and creates an escalation ticket in ServiceNow.
naftiko: "0.5"
info:
label: "Supply Chain Disruption Alert Handler"
description: "When a supply chain disruption is reported, retrieves affected purchase orders from SAP, identifies impacted production schedules in Snowflake, and creates an escalation ticket in ServiceNow."
tags:
- supply-chain
- sap-s4hana
- snowflake
- servicenow
capability:
exposes:
- type: mcp
namespace: supply-chain
port: 8080
tools:
- name: handle-disruption
description: "Given a supplier ID and disruption details, identify affected POs, impacted schedules, and create an escalation ticket."
inputParameters:
- name: supplier_id
in: body
type: string
description: "The affected supplier ID."
- name: disruption_type
in: body
type: string
description: "Type of disruption (e.g., delay, quality, force-majeure)."
steps:
- name: get-affected-pos
type: call
call: "sap-s4.get-open-pos"
with:
Supplier: "{{supplier_id}}"
- name: check-production-impact
type: call
call: "snowflake.run-query"
with:
query: "SELECT program, line, scheduled_date FROM production_schedule WHERE supplier_id = '{{supplier_id}}' AND status = 'PENDING'"
- name: create-escalation
type: call
call: "servicenow.create-incident"
with:
short_description: "Supply chain disruption: {{disruption_type}} - Supplier {{supplier_id}}"
priority: "2"
category: "supply_chain"
description: "Affected POs: {{get-affected-pos.count}}. Impacted production lines: {{check-production-impact.row_count}}"
consumes:
- type: http
namespace: sap-s4
baseUri: "https://airbus-s4.sap.com/sap/opu/odata/sap/API_PURCHASEORDER_PROCESS_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_user"
password: "$secrets.sap_s4_pass"
resources:
- name: purchase-orders
path: "/A_PurchaseOrder?$filter=Supplier eq '{{Supplier}}' and PurchasingDocumentDeletionCode eq ''"
inputParameters:
- name: Supplier
in: query
operations:
- name: get-open-pos
method: GET
- type: http
namespace: snowflake
baseUri: "https://airbus.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://airbus.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
Pulls open requisitions from SAP SuccessFactors, enriches with LinkedIn candidate pipeline data, and posts a weekly talent pipeline summary to the HR leadership Teams channel.
naftiko: "0.5"
info:
label: "Talent Acquisition Pipeline Review"
description: "Pulls open requisitions from SAP SuccessFactors, enriches with LinkedIn candidate pipeline data, and posts a weekly talent pipeline summary to the HR leadership Teams channel."
tags:
- hr
- sap-successfactors
- linkedin
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr
port: 8080
tools:
- name: review-talent-pipeline
description: "Given a department filter, compile open reqs, candidate pipeline data, and post the summary."
inputParameters:
- name: department
in: body
type: string
description: "Department to filter requisitions."
steps:
- name: get-open-reqs
type: call
call: "successfactors.get-requisitions"
with:
department: "{{department}}"
status: "OPEN"
- name: get-pipeline
type: call
call: "linkedin.get-pipeline"
with:
company: "airbus"
department: "{{department}}"
- name: post-summary
type: call
call: "msteams.send-message"
with:
channel_id: "hr-leadership"
message: "Talent Pipeline: {{department}} | Open reqs: {{get-open-reqs.count}} | Active candidates: {{get-pipeline.active_candidates}} | Interviews scheduled: {{get-pipeline.interviews_this_week}}"
consumes:
- type: http
namespace: successfactors
baseUri: "https://airbus.successfactors.com/odata/v2"
authentication:
type: bearer
token: "$secrets.successfactors_token"
resources:
- name: requisitions
path: "/JobRequisition?$filter=department eq '{{department}}' and status eq '{{status}}'"
inputParameters:
- name: department
in: query
- name: status
in: query
operations:
- name: get-requisitions
method: GET
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: pipeline
path: "/talentPipeline?company={{company}}&department={{department}}"
inputParameters:
- name: company
in: query
- name: department
in: query
operations:
- name: get-pipeline
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/hr-leadership/channels/general/messages"
operations:
- name: send-message
method: POST
Applies a Terraform Cloud workspace run to provision or update Airbus cloud infrastructure, then logs the run outcome to Datadog and notifies the platform engineering team. Automates infrastructure-as-code deployments for Airbus Azure and multi-cloud environments.
naftiko: "0.5"
info:
label: "Terraform Infrastructure Provisioning"
description: "Applies a Terraform Cloud workspace run to provision or update Airbus cloud infrastructure, then logs the run outcome to Datadog and notifies the platform engineering team. Automates infrastructure-as-code deployments for Airbus Azure and multi-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, poll for completion, 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 to run (e.g., ws-abc123)."
- name: environment
in: body
type: string
description: "The target environment (e.g., 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-event
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_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
Queries SAP PM for tooling assets with upcoming calibration due dates, creates ServiceNow work orders for the maintenance team, and sends a summary to the tooling Slack channel.
naftiko: "0.5"
info:
label: "Tooling Calibration Due Alert"
description: "Queries SAP PM for tooling assets with upcoming calibration due dates, creates ServiceNow work orders for the maintenance team, and sends a summary to the tooling Slack channel."
tags:
- manufacturing
- sap-s4hana
- servicenow
- slack
capability:
exposes:
- type: mcp
namespace: maintenance
port: 8080
tools:
- name: alert-calibration-due
description: "Given a facility code and date range, find tools due for calibration, create work orders, and notify the team."
inputParameters:
- name: facility_code
in: body
type: string
description: "The manufacturing facility code."
- name: days_ahead
in: body
type: string
description: "Number of days to look ahead for calibration due dates."
steps:
- name: get-due-tools
type: call
call: "sap-pm.get-calibration-due"
with:
Plant: "{{facility_code}}"
DaysAhead: "{{days_ahead}}"
- name: create-work-order
type: call
call: "servicenow.create-request"
with:
short_description: "Calibration batch: {{facility_code}} - {{get-due-tools.count}} tools due"
category: "maintenance"
priority: "3"
- name: notify-slack
type: call
call: "slack.post-message"
with:
channel: "tooling-maintenance"
text: "Calibration alert for {{facility_code}}: {{get-due-tools.count}} tools due in next {{days_ahead}} days. ServiceNow: {{create-work-order.number}}"
consumes:
- type: http
namespace: sap-pm
baseUri: "https://airbus-s4.sap.com/sap/opu/odata/sap/API_MAINTENANCEORDER"
authentication:
type: basic
username: "$secrets.sap_s4_user"
password: "$secrets.sap_s4_pass"
resources:
- name: calibration
path: "/MaintenanceOrder?$filter=Plant eq '{{Plant}}' and OrderType eq 'CALIB'"
inputParameters:
- name: Plant
in: query
operations:
- name: get-calibration-due
method: GET
- type: http
namespace: servicenow
baseUri: "https://airbus.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: 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
Pulls submitted travel expense reports from SAP Concur, validates against corporate policy thresholds in Snowflake, and flags non-compliant reports by creating ServiceNow audit tickets.
naftiko: "0.5"
info:
label: "Travel Expense Compliance Audit"
description: "Pulls submitted travel expense reports from SAP Concur, validates against corporate policy thresholds in Snowflake, and flags non-compliant reports by creating ServiceNow audit tickets."
tags:
- finance
- sap-concur
- snowflake
- servicenow
capability:
exposes:
- type: mcp
namespace: finance
port: 8080
tools:
- name: audit-travel-expenses
description: "Given a reporting period, pull expense reports, validate compliance, and flag violations."
inputParameters:
- name: period
in: body
type: string
description: "Reporting period (e.g., 2026-03)."
steps:
- name: get-expense-reports
type: call
call: "concur.get-reports"
with:
period: "{{period}}"
status: "APPROVED"
- name: check-compliance
type: call
call: "snowflake.run-query"
with:
query: "SELECT report_id, employee_name, total_amount, policy_limit, (total_amount - policy_limit) as excess FROM expense_reports WHERE period = '{{period}}' AND total_amount > policy_limit"
- name: flag-violations
type: call
call: "servicenow.create-incident"
with:
short_description: "Travel expense compliance violations: {{period}}"
description: "{{check-compliance.row_count}} reports exceed policy limits. Total approved reports: {{get-expense-reports.count}}"
category: "audit"
consumes:
- type: http
namespace: concur
baseUri: "https://us.api.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_token"
resources:
- name: reports
path: "/expense/reports?approvalStatus={{status}}&modifiedAfter={{period}}"
inputParameters:
- name: status
in: query
- name: period
in: query
operations:
- name: get-reports
method: GET
- type: http
namespace: snowflake
baseUri: "https://airbus.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://airbus.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 outstanding vendor invoices from SAP, cross-references payment records in the treasury system, and generates a reconciliation report posted to the finance SharePoint site.
naftiko: "0.5"
info:
label: "Vendor Payment Reconciliation Workflow"
description: "Retrieves outstanding vendor invoices from SAP, cross-references payment records in the treasury system, and generates a reconciliation report posted to the finance SharePoint site."
tags:
- finance
- sap-s4hana
- sharepoint
- accounts-payable
capability:
exposes:
- type: mcp
namespace: finance
port: 8080
tools:
- name: reconcile-vendor-payments
description: "Given a vendor ID and date range, pull invoices from SAP, check payment status, and upload reconciliation report to SharePoint."
inputParameters:
- name: vendor_id
in: body
type: string
description: "The SAP vendor ID."
- name: date_from
in: body
type: string
description: "Start date in YYYY-MM-DD format."
- name: date_to
in: body
type: string
description: "End date in YYYY-MM-DD format."
steps:
- name: get-invoices
type: call
call: "sap-s4.get-vendor-invoices"
with:
Supplier: "{{vendor_id}}"
PostingDateFrom: "{{date_from}}"
PostingDateTo: "{{date_to}}"
- name: get-payments
type: call
call: "sap-s4.get-payment-docs"
with:
Supplier: "{{vendor_id}}"
ClearingDateFrom: "{{date_from}}"
ClearingDateTo: "{{date_to}}"
- name: upload-report
type: call
call: "sharepoint.upload-file"
with:
folder: "Finance/Reconciliation"
filename: "recon_{{vendor_id}}_{{date_from}}_{{date_to}}.json"
content: "Invoices: {{get-invoices.count}}, Payments: {{get-payments.count}}, Unmatched: {{get-invoices.unmatched_count}}"
consumes:
- type: http
namespace: sap-s4
baseUri: "https://airbus-s4.sap.com/sap/opu/odata/sap/API_SUPPLIERINVOICE_PROCESS_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_user"
password: "$secrets.sap_s4_pass"
resources:
- name: invoices
path: "/A_SupplierInvoice?$filter=Supplier eq '{{Supplier}}' and PostingDate ge datetime'{{PostingDateFrom}}' and PostingDate le datetime'{{PostingDateTo}}'"
inputParameters:
- name: Supplier
in: query
- name: PostingDateFrom
in: query
- name: PostingDateTo
in: query
operations:
- name: get-vendor-invoices
method: GET
- name: payments
path: "/A_PaymentDocument?$filter=Supplier eq '{{Supplier}}'"
inputParameters:
- name: Supplier
in: query
operations:
- name: get-payment-docs
method: GET
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites/airbus.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
Compiles a vendor scorecard by pulling delivery performance from SAP, quality metrics from Snowflake, and updating the vendor record in Salesforce with the latest score.
naftiko: "0.5"
info:
label: "Vendor Scorecarding Workflow"
description: "Compiles a vendor scorecard by pulling delivery performance from SAP, quality metrics from Snowflake, and updating the vendor record in Salesforce with the latest score."
tags:
- procurement
- sap-s4hana
- snowflake
- salesforce
capability:
exposes:
- type: mcp
namespace: procurement
port: 8080
tools:
- name: generate-vendor-scorecard
description: "Given a vendor ID and period, compile delivery and quality metrics into a scorecard."
inputParameters:
- name: vendor_id
in: body
type: string
description: "The SAP vendor ID."
- name: period
in: body
type: string
description: "Scoring period (e.g., 2026-Q1)."
steps:
- name: get-delivery-performance
type: call
call: "sap-s4.get-vendor-deliveries"
with:
Supplier: "{{vendor_id}}"
Period: "{{period}}"
- name: get-quality-metrics
type: call
call: "snowflake.run-query"
with:
query: "SELECT defect_rate, acceptance_rate, avg_lead_time FROM vendor_quality WHERE vendor_id = '{{vendor_id}}' AND period = '{{period}}'"
- name: update-salesforce
type: call
call: "salesforce.update-vendor-score"
with:
vendor_id: "{{vendor_id}}"
delivery_score: "{{get-delivery-performance.on_time_pct}}"
quality_score: "{{get-quality-metrics.data[0].ACCEPTANCE_RATE}}"
period: "{{period}}"
consumes:
- type: http
namespace: sap-s4
baseUri: "https://airbus-s4.sap.com/sap/opu/odata/sap/API_PURCHASEORDER_PROCESS_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_user"
password: "$secrets.sap_s4_pass"
resources:
- name: vendor-deliveries
path: "/A_PurchaseOrder?$filter=Supplier eq '{{Supplier}}'"
inputParameters:
- name: Supplier
in: query
operations:
- name: get-vendor-deliveries
method: GET
- type: http
namespace: snowflake
baseUri: "https://airbus.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://airbus.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: vendor-scores
path: "/sobjects/Vendor_Scorecard__c"
operations:
- name: update-vendor-score
method: POST
When goods are received at a warehouse, posts the goods receipt in SAP, triggers a quality inspection lot, and notifies the receiving team via Slack with inspection requirements.
naftiko: "0.5"
info:
label: "Warehouse Receiving Inspection Workflow"
description: "When goods are received at a warehouse, posts the goods receipt in SAP, triggers a quality inspection lot, and notifies the receiving team via Slack with inspection requirements."
tags:
- supply-chain
- sap-s4hana
- slack
- quality
capability:
exposes:
- type: mcp
namespace: warehouse
port: 8080
tools:
- name: process-receiving
description: "Given a PO number and delivery note, post goods receipt, create inspection lot, and notify the team."
inputParameters:
- name: po_number
in: body
type: string
description: "The purchase order number."
- name: delivery_note
in: body
type: string
description: "The supplier delivery note number."
steps:
- name: post-goods-receipt
type: call
call: "sap-s4.post-goods-receipt"
with:
PurchaseOrder: "{{po_number}}"
DeliveryNote: "{{delivery_note}}"
- name: create-inspection
type: call
call: "sap-qm.create-inspection-lot"
with:
Material: "{{post-goods-receipt.Material}}"
Batch: "{{post-goods-receipt.Batch}}"
- name: notify-receiving
type: call
call: "slack.post-message"
with:
channel: "warehouse-receiving"
text: "GR posted for PO {{po_number}} | Material: {{post-goods-receipt.Material}} | Qty: {{post-goods-receipt.Quantity}} | Inspection lot: {{create-inspection.InspectionLot}} created"
consumes:
- type: http
namespace: sap-s4
baseUri: "https://airbus-s4.sap.com/sap/opu/odata/sap/API_GOODS_RECEIPT_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_user"
password: "$secrets.sap_s4_pass"
resources:
- name: goods-receipts
path: "/A_GoodsReceipt"
operations:
- name: post-goods-receipt
method: POST
- type: http
namespace: sap-qm
baseUri: "https://airbus-s4.sap.com/sap/opu/odata/sap/API_INSPECTIONLOT_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_user"
password: "$secrets.sap_s4_pass"
resources:
- name: inspection-lots
path: "/A_InspectionLot"
operations:
- name: create-inspection-lot
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a warranty claim is submitted, retrieves the part warranty terms from SAP, validates the claim against delivery records in Snowflake, and creates a Salesforce case for the customer support team.
naftiko: "0.5"
info:
label: "Warranty Claim Processing Workflow"
description: "When a warranty claim is submitted, retrieves the part warranty terms from SAP, validates the claim against delivery records in Snowflake, and creates a Salesforce case for the customer support team."
tags:
- customer-support
- sap-s4hana
- snowflake
- salesforce
capability:
exposes:
- type: mcp
namespace: support
port: 8080
tools:
- name: process-warranty-claim
description: "Given a part number, MSN, and claim description, validate warranty eligibility and create a support case."
inputParameters:
- name: part_number
in: body
type: string
description: "The affected part number."
- name: msn
in: body
type: string
description: "The aircraft MSN."
- name: claim_description
in: body
type: string
description: "Description of the warranty claim."
steps:
- name: get-warranty-terms
type: call
call: "sap-s4.get-warranty"
with:
Material: "{{part_number}}"
- name: validate-delivery
type: call
call: "snowflake.run-query"
with:
query: "SELECT delivery_date, warranty_end_date FROM part_deliveries WHERE part_number = '{{part_number}}' AND msn = '{{msn}}'"
- name: create-case
type: call
call: "salesforce.create-case"
with:
subject: "Warranty claim: {{part_number}} on MSN {{msn}}"
description: "{{claim_description}}. Warranty end: {{validate-delivery.data[0].WARRANTY_END_DATE}}"
type: "Warranty"
consumes:
- type: http
namespace: sap-s4
baseUri: "https://airbus-s4.sap.com/sap/opu/odata/sap/API_PRODUCT_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_user"
password: "$secrets.sap_s4_pass"
resources:
- name: warranty
path: "/A_Product('{{Material}}')/to_Warranty"
inputParameters:
- name: Material
in: path
operations:
- name: get-warranty
method: GET
- type: http
namespace: snowflake
baseUri: "https://airbus.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://airbus.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
Compiles a weekly engineering digest by pulling sprint data from Jira, build metrics from Azure DevOps, and posting the summary to the engineering leadership Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Weekly Engineering Progress Digest"
description: "Compiles a weekly engineering digest by pulling sprint data from Jira, build metrics from Azure DevOps, and posting the summary to the engineering leadership Microsoft Teams channel."
tags:
- engineering
- jira
- azure-devops
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: engineering
port: 8080
tools:
- name: generate-weekly-digest
description: "Given a sprint name, compile Jira velocity data, Azure DevOps build metrics, and post to the leadership channel."
inputParameters:
- name: sprint_name
in: body
type: string
description: "The Jira sprint name."
- name: project_key
in: body
type: string
description: "The Jira project key."
steps:
- name: get-sprint-data
type: call
call: "jira.get-sprint-report"
with:
project: "{{project_key}}"
sprint: "{{sprint_name}}"
- name: get-build-metrics
type: call
call: "azdo.get-build-summary"
with:
project: "aerospace"
period: "7d"
- name: post-digest
type: call
call: "msteams.send-message"
with:
channel_id: "engineering-leadership"
message: "Weekly Engineering Digest | Sprint: {{sprint_name}} | Completed: {{get-sprint-data.completed_points}} pts | Builds: {{get-build-metrics.total_builds}} ({{get-build-metrics.success_rate}}% pass)"
consumes:
- type: http
namespace: jira
baseUri: "https://airbus-engineering.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: sprint-reports
path: "/search?jql=project={{project}} AND sprint='{{sprint}}'"
inputParameters:
- name: project
in: query
- name: sprint
in: query
operations:
- name: get-sprint-report
method: GET
- type: http
namespace: azdo
baseUri: "https://dev.azure.com/airbus/{{project}}/_apis/build"
authentication:
type: basic
username: "$secrets.azdo_user"
password: "$secrets.azdo_pat"
resources:
- name: builds
path: "/builds?minTime={{period}}&api-version=7.0"
inputParameters:
- name: project
in: path
- name: period
in: query
operations:
- name: get-build-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/engineering-leadership/channels/general/messages"
operations:
- name: send-message
method: POST
Retrieves an employee profile from Workday by worker ID, returning name, department, job title, and manager information.
naftiko: "0.5"
info:
label: "Workday Employee Profile Lookup"
description: "Retrieves an employee profile from Workday by worker ID, returning name, department, job title, and manager information."
tags:
- hr
- workday
capability:
exposes:
- type: mcp
namespace: hr
port: 8080
tools:
- name: get-employee-profile
description: "Given a Workday worker ID, retrieve the employee profile including name, department, title, and manager."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID."
call: "workday.get-worker"
with:
worker_id: "{{worker_id}}"
outputParameters:
- name: full_name
type: string
mapping: "$.Worker.Worker_Data.Personal_Data.Name_Data.Legal_Name.Name_Detail_Data.Formatted_Name"
- name: department
type: string
mapping: "$.Worker.Worker_Data.Organization_Data.Organization_Name"
- name: job_title
type: string
mapping: "$.Worker.Worker_Data.Job_Data.Position_Data.Business_Title"
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: "/airbus/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET