Boeing Capabilities

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

Sort
Expand

Performs an aircraft configuration audit by comparing SAP BOM against engineering specifications in Confluence, creating a Jira discrepancy report, and alerting the configuration management team via Teams.

naftiko: "0.5"
info:
  label: "Aircraft Configuration Audit Workflow"
  description: "Performs an aircraft configuration audit by comparing SAP BOM against engineering specifications in Confluence, creating a Jira discrepancy report, and alerting the configuration management team via Teams."
  tags:
    - engineering
    - quality
    - sap
    - confluence
    - jira
    - microsoft-teams
    - aerospace
capability:
  exposes:
    - type: mcp
      namespace: engineering-ops
      port: 8080
      tools:
        - name: audit-aircraft-configuration
          description: "Given an aircraft serial number and BOM level, compare SAP BOM data against Confluence engineering specs, create a Jira discrepancy report, and notify the configuration management team via Teams. Use during configuration audits."
          inputParameters:
            - name: serial_number
              in: body
              type: string
              description: "Aircraft serial number, e.g. 'MSN-65432'."
            - name: bom_level
              in: body
              type: string
              description: "BOM level to audit, e.g. 'top-level' or 'sub-assembly'."
          steps:
            - name: get-sap-bom
              type: call
              call: "sap-s4.get-bom"
              with:
                serial_number: "{{serial_number}}"
                level: "{{bom_level}}"
            - name: get-eng-specs
              type: call
              call: "confluence.search-content"
              with:
                cql: "type=page AND space=CONFIG AND text~\"{{serial_number}}\""
            - name: create-discrepancy-report
              type: call
              call: "jira.create-issue"
              with:
                project_key: "CONFIG"
                issuetype: "Task"
                summary: "Config Audit: {{serial_number}} - {{bom_level}}"
                description: "SAP BOM items: {{get-sap-bom.item_count}} | Specs found: {{get-eng-specs.totalSize}}"
            - name: notify-config-mgmt
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_config_mgmt_channel_id"
                text: "CONFIG AUDIT: {{serial_number}} | Level: {{bom_level}} | BOM Items: {{get-sap-bom.item_count}} | Jira: {{create-discrepancy-report.key}}"
  consumes:
    - namespace: sap-s4
      type: http
      baseUri: "https://boeing-s4.sap.com/sap/opu/odata/sap/API_BILL_OF_MATERIAL_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_s4_username"
        password: "$secrets.sap_s4_password"
      resources:
        - name: bom
          path: "/A_BillOfMaterial"
          operations:
            - name: get-bom
              method: GET
    - namespace: confluence
      type: http
      baseUri: "https://boeing.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: search
          path: "/content/search"
          operations:
            - name: search-content
              method: GET
    - namespace: jira
      type: http
      baseUri: "https://boeing.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
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

Tracks aircraft delivery milestones by syncing SAP production order status to Salesforce, updating the Jira program board, and notifying stakeholders via Teams.

naftiko: "0.5"
info:
  label: "Aircraft Delivery Milestone Tracker"
  description: "Tracks aircraft delivery milestones by syncing SAP production order status to Salesforce, updating the Jira program board, and notifying stakeholders via Teams."
  tags:
    - production
    - sap
    - salesforce
    - jira
    - microsoft-teams
    - aerospace
capability:
  exposes:
    - type: mcp
      namespace: production-ops
      port: 8080
      tools:
        - name: track-delivery-milestone
          description: "Given an aircraft serial number and milestone name, update the SAP production order, sync to Salesforce delivery record, update the Jira program board, and notify stakeholders. Use when a delivery milestone is reached."
          inputParameters:
            - name: serial_number
              in: body
              type: string
              description: "Aircraft serial number, e.g. 'MSN-65432'."
            - name: milestone
              in: body
              type: string
              description: "Milestone name, e.g. 'Final Assembly Complete'."
            - name: program
              in: body
              type: string
              description: "Aircraft program, e.g. '787 Dreamliner'."
          steps:
            - name: update-sap-milestone
              type: call
              call: "sap-s4.update-milestone"
              with:
                serial_number: "{{serial_number}}"
                milestone: "{{milestone}}"
            - name: sync-to-salesforce
              type: call
              call: "salesforce.update-delivery"
              with:
                serial_number: "{{serial_number}}"
                milestone: "{{milestone}}"
                status: "Completed"
            - name: update-jira
              type: call
              call: "jira.transition-issue"
              with:
                issue_key: "{{program}}-{{serial_number}}"
                transition: "{{milestone}}"
            - name: notify-stakeholders
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_delivery_channel_id"
                text: "MILESTONE: {{program}} {{serial_number}} | {{milestone}} | SAP & Salesforce updated"
  consumes:
    - namespace: sap-s4
      type: http
      baseUri: "https://boeing-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_s4_username"
        password: "$secrets.sap_s4_password"
      resources:
        - name: milestones
          path: "/A_ProductionOrder_2"
          operations:
            - name: update-milestone
              method: PATCH
    - namespace: salesforce
      type: http
      baseUri: "https://boeing.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_access_token"
      resources:
        - name: deliveries
          path: "/sobjects/Aircraft_Delivery__c"
          operations:
            - name: update-delivery
              method: PATCH
    - namespace: jira
      type: http
      baseUri: "https://boeing.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: transitions
          path: "/issue/{{issue_key}}/transitions"
          inputParameters:
            - name: issue_key
              in: path
          operations:
            - name: transition-issue
              method: POST
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

When a quality inspector identifies a nonconforming part, creates a SAP quality notification, opens a Jira engineering review ticket, and alerts the quality team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Aircraft Part Nonconformance Workflow"
  description: "When a quality inspector identifies a nonconforming part, creates a SAP quality notification, opens a Jira engineering review ticket, and alerts the quality team via Microsoft Teams."
  tags:
    - quality
    - manufacturing
    - sap
    - jira
    - microsoft-teams
    - aerospace
capability:
  exposes:
    - type: mcp
      namespace: quality-ops
      port: 8080
      tools:
        - name: report-nonconformance
          description: "Given a part number, nonconformance description, inspector ID, and aircraft program, create a SAP quality notification, open a Jira engineering review ticket, and alert the quality team via Teams. Use when a nonconforming part is found during inspection."
          inputParameters:
            - name: part_number
              in: body
              type: string
              description: "Aircraft part number, e.g. 'P/N 747-400-SPAR-02'."
            - name: nonconformance_desc
              in: body
              type: string
              description: "Description of the nonconformance found."
            - name: inspector_id
              in: body
              type: string
              description: "Quality inspector employee ID."
            - name: aircraft_program
              in: body
              type: string
              description: "Aircraft program, e.g. '787 Dreamliner'."
          steps:
            - name: create-quality-notification
              type: call
              call: "sap-s4.create-qn"
              with:
                notification_type: "Q2"
                material: "{{part_number}}"
                description: "NCR: {{nonconformance_desc}}"
                reporter: "{{inspector_id}}"
            - name: create-eng-review
              type: call
              call: "jira.create-issue"
              with:
                project_key: "ENG"
                issuetype: "Task"
                summary: "NCR Review: {{part_number}} - {{aircraft_program}}"
                description: "QN: {{create-quality-notification.number}} | Part: {{part_number}} | {{nonconformance_desc}}"
            - name: notify-quality-team
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_quality_channel_id"
                text: "NCR ALERT: Part {{part_number}} | Program: {{aircraft_program}} | QN: {{create-quality-notification.number}} | Jira: {{create-eng-review.key}}"
  consumes:
    - namespace: sap-s4
      type: http
      baseUri: "https://boeing-s4.sap.com/sap/opu/odata/sap/API_QUALITYNOTIFICATION_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_s4_username"
        password: "$secrets.sap_s4_password"
      resources:
        - name: quality-notifications
          path: "/A_QualityNotification"
          operations:
            - name: create-qn
              method: POST
    - namespace: jira
      type: http
      baseUri: "https://boeing.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
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

Generates a Certificate of Conformance by pulling quality data from SAP QM, compiling the certificate in SharePoint, and notifying the customer program manager via Teams.

naftiko: "0.5"
info:
  label: "Automated Certificate of Conformance Generation"
  description: "Generates a Certificate of Conformance by pulling quality data from SAP QM, compiling the certificate in SharePoint, and notifying the customer program manager via Teams."
  tags:
    - quality
    - sap
    - sharepoint
    - microsoft-teams
    - manufacturing
    - aerospace
capability:
  exposes:
    - type: mcp
      namespace: quality-ops
      port: 8080
      tools:
        - name: generate-coc
          description: "Given a production order number and customer name, pull inspection data from SAP QM, generate a Certificate of Conformance in SharePoint, and notify the customer program manager via Teams. Use when a production order is complete and ready for delivery."
          inputParameters:
            - name: production_order
              in: body
              type: string
              description: "SAP production order number."
            - name: customer_name
              in: body
              type: string
              description: "Customer name for the CoC."
          steps:
            - name: get-quality-data
              type: call
              call: "sap-qm.get-inspection-results"
              with:
                production_order: "{{production_order}}"
            - name: create-coc-document
              type: call
              call: "sharepoint.create-document"
              with:
                library: "CertificatesOfConformance"
                title: "CoC: {{production_order}} - {{customer_name}}"
                content: "Production Order: {{production_order}} | Customer: {{customer_name}} | Results: {{get-quality-data.disposition}}"
            - name: notify-program-manager
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_delivery_channel_id"
                text: "CoC GENERATED: Order {{production_order}} | Customer: {{customer_name}} | Doc: {{create-coc-document.url}}"
  consumes:
    - namespace: sap-qm
      type: http
      baseUri: "https://boeing-s4.sap.com/sap/opu/odata/sap/API_INSPECTIONLOT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_s4_username"
        password: "$secrets.sap_s4_password"
      resources:
        - name: inspection-results
          path: "/A_InspectionLot"
          operations:
            - name: get-inspection-results
              method: GET
    - namespace: sharepoint
      type: http
      baseUri: "https://boeing.sharepoint.com/_api"
      authentication:
        type: bearer
        token: "$secrets.sharepoint_access_token"
      resources:
        - name: documents
          path: "/web/lists/getbytitle('CertificatesOfConformance')/items"
          operations:
            - name: create-document
              method: POST
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

Generates a First Article Inspection report by pulling inspection data from SAP QM, compiling it into a Confluence page, and notifying the quality engineer via Teams.

naftiko: "0.5"
info:
  label: "Automated First Article Inspection Report"
  description: "Generates a First Article Inspection report by pulling inspection data from SAP QM, compiling it into a Confluence page, and notifying the quality engineer via Teams."
  tags:
    - quality
    - sap
    - confluence
    - microsoft-teams
    - manufacturing
    - aerospace
capability:
  exposes:
    - type: mcp
      namespace: quality-ops
      port: 8080
      tools:
        - name: generate-fai-report
          description: "Given a part number and inspection lot, pull FAI data from SAP QM, create a Confluence report page, and notify the quality engineer via Teams. Use when a first article inspection is completed."
          inputParameters:
            - name: part_number
              in: body
              type: string
              description: "Part number for the FAI, e.g. 'P/N 787-BRACKET-04'."
            - name: inspection_lot
              in: body
              type: string
              description: "SAP inspection lot number."
          steps:
            - name: get-inspection-data
              type: call
              call: "sap-qm.get-inspection-results"
              with:
                InspectionLot: "{{inspection_lot}}"
            - name: create-fai-page
              type: call
              call: "confluence.create-page"
              with:
                space_key: "QA"
                title: "FAI Report: {{part_number}} - {{inspection_lot}}"
                body: "Part: {{part_number}} | Lot: {{inspection_lot}} | Results: {{get-inspection-data.results}}"
            - name: notify-quality-engineer
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_quality_channel_id"
                text: "FAI REPORT GENERATED: {{part_number}} | Lot: {{inspection_lot}} | Confluence: {{create-fai-page.url}}"
  consumes:
    - namespace: sap-qm
      type: http
      baseUri: "https://boeing-s4.sap.com/sap/opu/odata/sap/API_INSPECTIONLOT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_s4_username"
        password: "$secrets.sap_s4_password"
      resources:
        - name: inspection-lots
          path: "/A_InspectionLot('{InspectionLot}')/to_InspectionResult"
          inputParameters:
            - name: InspectionLot
              in: path
          operations:
            - name: get-inspection-results
              method: GET
    - namespace: confluence
      type: http
      baseUri: "https://boeing.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
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

Runs regression tests via Azure DevOps, collects results, publishes a Confluence report, and notifies the QA team via Teams.

naftiko: "0.5"
info:
  label: "Automated Regression Test Report"
  description: "Runs regression tests via Azure DevOps, collects results, publishes a Confluence report, and notifies the QA team via Teams."
  tags:
    - devops
    - azure-devops
    - confluence
    - microsoft-teams
    - testing
    - quality
capability:
  exposes:
    - type: mcp
      namespace: devops-ops
      port: 8080
      tools:
        - name: generate-regression-report
          description: "Given a pipeline ID and build number, trigger the regression test suite in Azure DevOps, publish results to Confluence, and notify the QA team via Teams. Use after major code merges."
          inputParameters:
            - name: pipeline_id
              in: body
              type: string
              description: "Azure DevOps pipeline ID."
            - name: build_number
              in: body
              type: string
              description: "Build number to test against."
          steps:
            - name: trigger-tests
              type: call
              call: "azure-devops.run-pipeline"
              with:
                pipelineId: "{{pipeline_id}}"
                templateParameters: "buildNumber={{build_number}}"
            - name: publish-report
              type: call
              call: "confluence.create-page"
              with:
                space_key: "QA"
                title: "Regression Report: Build {{build_number}}"
                body: "Pipeline: {{pipeline_id}} | Build: {{build_number}} | Run: {{trigger-tests.id}}"
            - name: notify-qa
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_qa_channel_id"
                text: "REGRESSION TESTS: Build {{build_number}} | Run: {{trigger-tests.id}} | Report: {{publish-report.url}}"
  consumes:
    - namespace: azure-devops
      type: http
      baseUri: "https://dev.azure.com/boeing"
      authentication:
        type: basic
        username: "$secrets.azure_devops_user"
        password: "$secrets.azure_devops_pat"
      resources:
        - name: pipelines
          path: "/_apis/pipelines/{{pipelineId}}/runs"
          inputParameters:
            - name: pipelineId
              in: path
          operations:
            - name: run-pipeline
              method: POST
    - namespace: confluence
      type: http
      baseUri: "https://boeing.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
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

Reconciles timecards by comparing Workday time entries against SAP project hours, flagging discrepancies in Jira, and notifying managers via Teams.

naftiko: "0.5"
info:
  label: "Automated Timecard Reconciliation"
  description: "Reconciles timecards by comparing Workday time entries against SAP project hours, flagging discrepancies in Jira, and notifying managers via Teams."
  tags:
    - hr
    - workday
    - sap
    - jira
    - microsoft-teams
    - finance
capability:
  exposes:
    - type: mcp
      namespace: hr-ops
      port: 8080
      tools:
        - name: reconcile-timecards
          description: "Given a cost center and pay period, compare Workday time entries against SAP project hours, create Jira tickets for discrepancies, and notify managers via Teams. Use during biweekly payroll processing."
          inputParameters:
            - name: cost_center
              in: body
              type: string
              description: "Cost center code, e.g. 'CC-787-ASSEMBLY'."
            - name: pay_period
              in: body
              type: string
              description: "Pay period identifier, e.g. '2026-PP06'."
          steps:
            - name: get-workday-hours
              type: call
              call: "workday.get-time-entries"
              with:
                cost_center: "{{cost_center}}"
                period: "{{pay_period}}"
            - name: get-sap-hours
              type: call
              call: "sap-s4.get-project-hours"
              with:
                CostCenter: "{{cost_center}}"
                Period: "{{pay_period}}"
            - name: create-discrepancy-ticket
              type: call
              call: "jira.create-issue"
              with:
                project_key: "HR"
                issuetype: "Task"
                summary: "Timecard Reconciliation: {{cost_center}} - {{pay_period}}"
                description: "Workday hours: {{get-workday-hours.total}} | SAP hours: {{get-sap-hours.total}} | Variance: {{get-workday-hours.variance}}"
            - name: notify-managers
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_hr_channel_id"
                text: "TIMECARD RECON: {{cost_center}} | {{pay_period}} | Workday: {{get-workday-hours.total}}h | SAP: {{get-sap-hours.total}}h | Jira: {{create-discrepancy-ticket.key}}"
  consumes:
    - namespace: workday
      type: http
      baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/boeing"
      authentication:
        type: bearer
        token: "$secrets.workday_bearer_token"
      resources:
        - name: time-entries
          path: "/workers/timeEntries"
          operations:
            - name: get-time-entries
              method: GET
    - namespace: sap-s4
      type: http
      baseUri: "https://boeing-s4.sap.com/sap/opu/odata/sap/API_COSTCENTER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_s4_username"
        password: "$secrets.sap_s4_password"
      resources:
        - name: project-hours
          path: "/A_CostCenterActivityType"
          operations:
            - name: get-project-hours
              method: GET
    - namespace: jira
      type: http
      baseUri: "https://boeing.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
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

Queries Microsoft Graph for all users currently assigned privileged Azure AD roles, exports the list to Snowflake, and posts a summary to the security Microsoft Teams channel for monthly review.

naftiko: "0.5"
info:
  label: "Azure AD Privileged Role Audit"
  description: "Queries Microsoft Graph for all users currently assigned privileged Azure AD roles, exports the list to Snowflake, and posts a summary to the security Microsoft Teams channel for monthly review."
  tags:
    - security
    - iam
    - microsoft-graph
    - snowflake
    - microsoft-teams
    - privileged-access
    - audit
capability:
  exposes:
    - type: mcp
      namespace: priv-access-audit
      port: 8080
      tools:
        - name: audit-privileged-roles
          description: "Given an Azure AD role definition name and audit date, retrieve all users assigned to that privileged role from Microsoft Graph, write the roster to Snowflake, and post a summary count to the security Microsoft Teams channel. Use monthly for privileged access management reviews."
          inputParameters:
            - name: role_display_name
              in: body
              type: string
              description: "The Azure AD role display name to audit, e.g. 'Global Administrator' or 'Privileged Role Administrator'."
            - name: audit_date
              in: body
              type: string
              description: "The audit date in ISO 8601 format."
          steps:
            - name: list-role-members
              type: call
              call: "msgraph.list-role-members"
              with:
                role_display_name: "{{role_display_name}}"
            - name: write-audit-record
              type: call
              call: "snowflake.insert-role-audit"
              with:
                role_name: "{{role_display_name}}"
                audit_date: "{{audit_date}}"
                member_count: "{{list-role-members.total_count}}"
            - name: notify-security
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_security_channel_id"
                text: "Privileged Role Audit: {{role_display_name}} | Members: {{list-role-members.total_count}} | Date: {{audit_date}} | Written to Snowflake."
  consumes:
    - namespace: msgraph
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: role-members
          path: "/directoryRoles"
          inputParameters:
            - name: role_display_name
              in: query
          operations:
            - name: list-role-members
              method: GET
    - namespace: snowflake
      type: http
      baseUri: "https://boeing.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_bearer_token"
      resources:
        - name: role-audits
          path: "/statements"
          operations:
            - name: insert-role-audit
              method: POST
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

Analyzes Azure spending anomalies, generates optimization recommendations, logs them in ServiceNow, and notifies the cloud governance team via Teams.

naftiko: "0.5"
info:
  label: "Azure Cost Optimization Recommendation"
  description: "Analyzes Azure spending anomalies, generates optimization recommendations, logs them in ServiceNow, and notifies the cloud governance team via Teams."
  tags:
    - cloud
    - microsoft-azure
    - servicenow
    - microsoft-teams
    - cost-optimization
    - devops
capability:
  exposes:
    - type: mcp
      namespace: cloud-ops
      port: 8080
      tools:
        - name: analyze-azure-costs
          description: "Given a subscription ID and reporting month, analyze Azure spending against budget, generate optimization recommendations, log them in ServiceNow, and notify the cloud governance team via Teams. Use for monthly cloud cost reviews."
          inputParameters:
            - name: subscription_id
              in: body
              type: string
              description: "Azure subscription ID."
            - name: reporting_month
              in: body
              type: string
              description: "Reporting month, e.g. '2026-03'."
          steps:
            - name: get-cost-analysis
              type: call
              call: "azure.get-cost-management"
              with:
                subscriptionId: "{{subscription_id}}"
                timeframe: "{{reporting_month}}"
            - name: log-recommendations
              type: call
              call: "servicenow.create-record"
              with:
                table: "u_cloud_cost_recommendations"
                subscription: "{{subscription_id}}"
                month: "{{reporting_month}}"
                savings_potential: "{{get-cost-analysis.savings_potential}}"
            - name: notify-governance
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_cloud_governance_channel_id"
                text: "AZURE COST REVIEW: Subscription {{subscription_id}} | {{reporting_month}} | Spend: {{get-cost-analysis.total_spend}} | Savings: {{get-cost-analysis.savings_potential}} | SNOW: {{log-recommendations.sys_id}}"
  consumes:
    - namespace: azure
      type: http
      baseUri: "https://management.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azure_management_token"
      resources:
        - name: cost-management
          path: "/subscriptions/{{subscriptionId}}/providers/Microsoft.CostManagement/query"
          inputParameters:
            - name: subscriptionId
              in: path
          operations:
            - name: get-cost-management
              method: POST
    - namespace: servicenow
      type: http
      baseUri: "https://boeing.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_username"
        password: "$secrets.servicenow_password"
      resources:
        - name: records
          path: "/table/{{table}}"
          inputParameters:
            - name: table
              in: path
          operations:
            - name: create-record
              method: POST
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

Retrieves the current build status for a pipeline in Azure DevOps by build ID.

naftiko: "0.5"
info:
  label: "Azure DevOps Build Status Lookup"
  description: "Retrieves the current build status for a pipeline in Azure DevOps by build ID."
  tags:
    - devops
    - azure-devops
    - ci-cd
    - lookup
capability:
  exposes:
    - type: mcp
      namespace: devops
      port: 8080
      tools:
        - name: get-build-status
          description: "Given an Azure DevOps build ID, retrieve the build status including result, start time, and source branch. Use when engineers need to check pipeline execution results."
          inputParameters:
            - name: build_id
              in: body
              type: string
              description: "Azure DevOps build ID, e.g. '48231'."
          call: "azure-devops.get-build"
          with:
            buildId: "{{build_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.result"
            - name: status
              type: string
              mapping: "$.status"
            - name: source_branch
              type: string
              mapping: "$.sourceBranch"
  consumes:
    - namespace: azure-devops
      type: http
      baseUri: "https://dev.azure.com/boeing"
      authentication:
        type: basic
        username: "$secrets.azure_devops_user"
        password: "$secrets.azure_devops_pat"
      resources:
        - name: builds
          path: "/_apis/build/builds/{{buildId}}"
          inputParameters:
            - name: buildId
              in: path
          operations:
            - name: get-build
              method: GET

Accepts an infrastructure provisioning request, validates the requester's identity in Okta, and deploys a tagged Azure resource group via the Azure Resource Manager API.

naftiko: "0.5"
info:
  label: "Azure Resource Provisioning Request"
  description: "Accepts an infrastructure provisioning request, validates the requester's identity in Okta, and deploys a tagged Azure resource group via the Azure Resource Manager API."
  tags:
    - cloud
    - infrastructure
    - azure
    - okta
    - provisioning
capability:
  exposes:
    - type: mcp
      namespace: cloud-provisioning
      port: 8080
      tools:
        - name: provision-azure-resource-group
          description: "Given a requester email, resource group name, Azure region, and cost center tag, verify the requester's Okta identity, then create a tagged Azure resource group in the specified subscription. Use when teams request new Azure environments for projects or workloads."
          inputParameters:
            - name: requester_email
              in: body
              type: string
              description: "The email of the person requesting the resource group."
            - name: resource_group_name
              in: body
              type: string
              description: "The desired Azure resource group name, following Boeing naming conventions."
            - name: azure_region
              in: body
              type: string
              description: "The Azure region, e.g. 'eastus2' or 'westus'."
            - name: cost_center
              in: body
              type: string
              description: "The Boeing cost center code for resource tagging, e.g. 'CC-1234'."
          steps:
            - name: verify-requester
              type: call
              call: "okta.get-user"
              with:
                login: "{{requester_email}}"
            - name: create-rg
              type: call
              call: "azure-arm.create-resource-group"
              with:
                resource_group_name: "{{resource_group_name}}"
                location: "{{azure_region}}"
                cost_center_tag: "{{cost_center}}"
                owner_tag: "{{requester_email}}"
  consumes:
    - namespace: okta
      type: http
      baseUri: "https://boeing.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: users
          path: "/users/{login}"
          inputParameters:
            - name: login
              in: path
          operations:
            - name: get-user
              method: GET
    - namespace: azure-arm
      type: http
      baseUri: "https://management.azure.com/subscriptions"
      authentication:
        type: bearer
        token: "$secrets.azure_bearer_token"
      resources:
        - name: resource-groups
          path: "/{subscriptionId}/resourcegroups/{resource_group_name}"
          inputParameters:
            - name: subscriptionId
              in: path
            - name: resource_group_name
              in: path
          operations:
            - name: create-resource-group
              method: PUT

Queries Azure Update Manager for all VMs in a subscription that are non-compliant with the latest patch baseline and writes a compliance summary to Snowflake.

naftiko: "0.5"
info:
  label: "Azure VM Patch Compliance Reporter"
  description: "Queries Azure Update Manager for all VMs in a subscription that are non-compliant with the latest patch baseline and writes a compliance summary to Snowflake."
  tags:
    - cloud
    - patch-management
    - azure
    - snowflake
    - compliance
    - security
capability:
  exposes:
    - type: mcp
      namespace: patch-compliance
      port: 8080
      tools:
        - name: report-vm-patch-compliance
          description: "Given an Azure subscription ID and a Snowflake target table name, query Azure Update Manager for all VMs with outstanding patches, and write the non-compliant VM list to Snowflake for security reporting. Use monthly or before compliance audit deadlines."
          inputParameters:
            - name: subscription_id
              in: body
              type: string
              description: "The Azure subscription ID to audit for patch compliance."
            - name: report_date
              in: body
              type: string
              description: "The compliance report date in ISO 8601 format."
          steps:
            - name: get-noncompliant-vms
              type: call
              call: "azure-policy.list-noncompliant-resources"
              with:
                subscription_id: "{{subscription_id}}"
                policy_definition: "patch-compliance"
            - name: write-compliance-report
              type: call
              call: "snowflake.insert-patch-report"
              with:
                subscription_id: "{{subscription_id}}"
                report_date: "{{report_date}}"
                noncompliant_count: "{{get-noncompliant-vms.total_count}}"
  consumes:
    - namespace: azure-policy
      type: http
      baseUri: "https://management.azure.com/subscriptions"
      authentication:
        type: bearer
        token: "$secrets.azure_bearer_token"
      resources:
        - name: policy-states
          path: "/{subscription_id}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults"
          inputParameters:
            - name: subscription_id
              in: path
            - name: policy_definition
              in: query
          operations:
            - name: list-noncompliant-resources
              method: POST
    - namespace: snowflake
      type: http
      baseUri: "https://boeing.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_bearer_token"
      resources:
        - name: patch-reports
          path: "/statements"
          operations:
            - name: insert-patch-report
              method: POST

When a GitHub Actions pipeline fails on a protected branch, opens a Jira bug, creates a Datadog event marker, and posts an alert to Microsoft Teams.

naftiko: "0.5"
info:
  label: "CI/CD Pipeline Failure Incident Chain"
  description: "When a GitHub Actions pipeline fails on a protected branch, opens a Jira bug, creates a Datadog event marker, and posts an alert to Microsoft Teams."
  tags:
    - devops
    - incident-response
    - github
    - jira
    - datadog
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: devops-ops
      port: 8080
      tools:
        - name: handle-pipeline-failure
          description: "Given a GitHub Actions workflow run ID, repository name, branch, and failing job name, open a Jira bug, create a Datadog event for observability, and alert the engineering Microsoft Teams channel. Invoke when a protected-branch pipeline fails."
          inputParameters:
            - name: repo_name
              in: body
              type: string
              description: "The GitHub repository full name, e.g. 'boeing/avionics-platform'."
            - name: run_id
              in: body
              type: string
              description: "The GitHub Actions workflow run ID."
            - name: branch
              in: body
              type: string
              description: "The branch on which the failure occurred."
            - name: job_name
              in: body
              type: string
              description: "The name of the failing job."
          steps:
            - name: create-bug
              type: call
              call: "jira.create-issue"
              with:
                project_key: "BENG"
                issuetype: "Bug"
                summary: "[CI Failure] {{repo_name}} / {{branch}} — {{job_name}}"
                description: "Workflow run: {{run_id}}\nBranch: {{branch}}\nJob: {{job_name}}"
            - name: create-dd-event
              type: call
              call: "datadog.create-event"
              with:
                title: "CI Failure: {{repo_name}} {{branch}}"
                text: "Job {{job_name}} failed. Jira: {{create-bug.key}}"
                alert_type: "error"
            - name: alert-teams
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_engineering_channel_id"
                text: "Pipeline failure: {{repo_name}} | Branch: {{branch}} | Job: {{job_name}} | Jira: {{create-bug.key}} | DD Event: {{create-dd-event.id}}"
  consumes:
    - namespace: jira
      type: http
      baseUri: "https://boeing.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_username"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - namespace: datadog
      type: http
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: events
          path: "/events"
          operations:
            - name: create-event
              method: POST
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

When Azure Cost Management detects a spending anomaly, retrieves the anomaly details, creates a Jira task for the cloud team, and posts a summary to Microsoft Teams.

naftiko: "0.5"
info:
  label: "Cloud Cost Anomaly Responder"
  description: "When Azure Cost Management detects a spending anomaly, retrieves the anomaly details, creates a Jira task for the cloud team, and posts a summary to Microsoft Teams."
  tags:
    - cloud
    - cost-management
    - azure
    - jira
    - microsoft-teams
    - finops
capability:
  exposes:
    - type: mcp
      namespace: cloud-finops
      port: 8080
      tools:
        - name: handle-cost-anomaly
          description: "Given an Azure subscription ID and anomaly alert name, retrieve cost anomaly details from Azure Cost Management, create a Jira task for the cloud engineering team, and post a budget alert to the Microsoft Teams FinOps channel. Use when Azure detects an unexpected spending spike."
          inputParameters:
            - name: subscription_id
              in: body
              type: string
              description: "The Azure subscription ID showing the cost anomaly."
            - name: alert_name
              in: body
              type: string
              description: "The Azure Cost Management alert name or rule that fired."
          steps:
            - name: get-alert
              type: call
              call: "azure-cost.get-alert"
              with:
                subscription_id: "{{subscription_id}}"
                alert_name: "{{alert_name}}"
            - name: create-task
              type: call
              call: "jira.create-issue"
              with:
                project_key: "CLOUD"
                issuetype: "Task"
                summary: "Cost Anomaly: {{alert_name}} in {{subscription_id}}"
                description: "Azure anomaly detected. Alert: {{alert_name}}. Subscription: {{subscription_id}}. Anomaly value: {{get-alert.amount}} {{get-alert.currency}}."
            - name: notify-finops
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_finops_channel_id"
                text: "Cost Anomaly Alert: {{alert_name}} | Subscription: {{subscription_id}} | Amount: {{get-alert.amount}} {{get-alert.currency}} | Jira: {{create-task.key}}"
  consumes:
    - namespace: azure-cost
      type: http
      baseUri: "https://management.azure.com/subscriptions"
      authentication:
        type: bearer
        token: "$secrets.azure_bearer_token"
      resources:
        - name: alerts
          path: "/{subscription_id}/providers/Microsoft.CostManagement/alerts/{alert_name}"
          inputParameters:
            - name: subscription_id
              in: path
            - name: alert_name
              in: path
          operations:
            - name: get-alert
              method: GET
    - namespace: jira
      type: http
      baseUri: "https://boeing.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_username"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

Initiates a compliance document review by pulling the document from SharePoint, creating a Jira review task, and notifying reviewers via Teams.

naftiko: "0.5"
info:
  label: "Compliance Document Review Cycle"
  description: "Initiates a compliance document review by pulling the document from SharePoint, creating a Jira review task, and notifying reviewers via Teams."
  tags:
    - compliance
    - sharepoint
    - jira
    - microsoft-teams
    - quality
capability:
  exposes:
    - type: mcp
      namespace: compliance-ops
      port: 8080
      tools:
        - name: initiate-document-review
          description: "Given a SharePoint document ID and review deadline, retrieve the document metadata, create a Jira review task, and notify designated reviewers via Teams. Use when a compliance document is due for periodic review."
          inputParameters:
            - name: document_id
              in: body
              type: string
              description: "SharePoint document ID for the compliance document."
            - name: review_deadline
              in: body
              type: string
              description: "Review deadline in ISO 8601 format."
            - name: reviewer_group
              in: body
              type: string
              description: "Teams channel or group to notify for the review."
          steps:
            - name: get-document
              type: call
              call: "sharepoint.get-document"
              with:
                item_id: "{{document_id}}"
            - name: create-review-task
              type: call
              call: "jira.create-issue"
              with:
                project_key: "COMP"
                issuetype: "Task"
                summary: "Document Review: {{get-document.Title}}"
                description: "Review deadline: {{review_deadline}} | Document: {{get-document.Title}} | Version: {{get-document.UIVersionLabel}}"
                duedate: "{{review_deadline}}"
            - name: notify-reviewers
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_compliance_channel_id"
                text: "REVIEW REQUIRED: {{get-document.Title}} | Deadline: {{review_deadline}} | Jira: {{create-review-task.key}}"
  consumes:
    - namespace: sharepoint
      type: http
      baseUri: "https://boeing.sharepoint.com/_api"
      authentication:
        type: bearer
        token: "$secrets.sharepoint_access_token"
      resources:
        - name: documents
          path: "/web/lists/getbytitle('ComplianceDocs')/items({{item_id}})"
          inputParameters:
            - name: item_id
              in: path
          operations:
            - name: get-document
              method: GET
    - namespace: jira
      type: http
      baseUri: "https://boeing.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
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

Monitors composite layup process parameters via Datadog, logs deviations in SAP QM, and alerts the manufacturing engineering team via Teams when process limits are exceeded.

naftiko: "0.5"
info:
  label: "Composite Layup Process Monitoring"
  description: "Monitors composite layup process parameters via Datadog, logs deviations in SAP QM, and alerts the manufacturing engineering team via Teams when process limits are exceeded."
  tags:
    - manufacturing
    - quality
    - datadog
    - sap
    - microsoft-teams
    - aerospace
capability:
  exposes:
    - type: mcp
      namespace: manufacturing-ops
      port: 8080
      tools:
        - name: monitor-composite-layup
          description: "Given a work center, part number, and layup operation, retrieve process parameters from Datadog, log any deviations in SAP QM, and alert manufacturing engineering via Teams. Use for real-time composite manufacturing process control."
          inputParameters:
            - name: work_center
              in: body
              type: string
              description: "Work center identifier, e.g. 'COMPOSITE-BAY-3'."
            - name: part_number
              in: body
              type: string
              description: "Part number being manufactured."
            - name: operation
              in: body
              type: string
              description: "Layup operation step, e.g. 'autoclave-cure-cycle-1'."
          steps:
            - name: get-process-params
              type: call
              call: "datadog.query-metrics"
              with:
                query: "avg:composite.{{operation}}{work_center:{{work_center}}}"
                from: "-2h"
            - name: log-deviation
              type: call
              call: "sap-qm.create-quality-record"
              with:
                work_center: "{{work_center}}"
                material: "{{part_number}}"
                operation: "{{operation}}"
                values: "{{get-process-params.series}}"
            - name: alert-engineering
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_mfg_eng_channel_id"
                text: "COMPOSITE PROCESS: {{work_center}} | Part: {{part_number}} | Op: {{operation}} | QM Record: {{log-deviation.number}}"
  consumes:
    - namespace: datadog
      type: http
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: metrics
          path: "/query"
          operations:
            - name: query-metrics
              method: GET
    - namespace: sap-qm
      type: http
      baseUri: "https://boeing-s4.sap.com/sap/opu/odata/sap/API_INSPECTIONLOT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_s4_username"
        password: "$secrets.sap_s4_password"
      resources:
        - name: quality-records
          path: "/A_InspectionLot"
          operations:
            - name: create-quality-record
              method: POST
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

Searches Confluence for engineering specifications by keyword, returning matching page titles and links.

naftiko: "0.5"
info:
  label: "Confluence Engineering Spec Search"
  description: "Searches Confluence for engineering specifications by keyword, returning matching page titles and links."
  tags:
    - engineering
    - confluence
    - documentation
    - search
capability:
  exposes:
    - type: mcp
      namespace: engineering
      port: 8080
      tools:
        - name: search-engineering-specs
          description: "Given a search keyword, query Confluence for engineering specification documents and return matching page titles, space keys, and links. Use when engineers need to find design or spec documents."
          inputParameters:
            - name: keyword
              in: body
              type: string
              description: "Search keyword for engineering specs, e.g. '787 wing spar'."
          call: "confluence.search-content"
          with:
            cql: "type=page AND space=ENG AND text~\"{{keyword}}\""
          outputParameters:
            - name: results
              type: array
              mapping: "$.results"
  consumes:
    - namespace: confluence
      type: http
      baseUri: "https://boeing.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: search
          path: "/content/search"
          inputParameters:
            - name: cql
              in: query
          operations:
            - name: search-content
              method: GET

When a program milestone is completed in Jira, creates a SAP billing document, updates the Salesforce contract record, and notifies finance via Teams.

naftiko: "0.5"
info:
  label: "Contract Milestone Billing Trigger"
  description: "When a program milestone is completed in Jira, creates a SAP billing document, updates the Salesforce contract record, and notifies finance via Teams."
  tags:
    - finance
    - jira
    - sap
    - salesforce
    - microsoft-teams
    - aerospace
capability:
  exposes:
    - type: mcp
      namespace: finance-ops
      port: 8080
      tools:
        - name: trigger-milestone-billing
          description: "Given a Jira milestone issue key and contract number, create a SAP billing document, update the Salesforce contract milestone status, and notify the finance team via Teams. Use when a billable program milestone is completed."
          inputParameters:
            - name: milestone_issue_key
              in: body
              type: string
              description: "Jira issue key for the completed milestone."
            - name: contract_number
              in: body
              type: string
              description: "Salesforce contract number."
            - name: billing_amount
              in: body
              type: string
              description: "Billing amount for the milestone."
          steps:
            - name: get-milestone-details
              type: call
              call: "jira.get-issue"
              with:
                issue_key: "{{milestone_issue_key}}"
            - name: create-billing-doc
              type: call
              call: "sap-s4.create-billing-document"
              with:
                contract: "{{contract_number}}"
                amount: "{{billing_amount}}"
                reference: "{{milestone_issue_key}}"
            - name: update-salesforce
              type: call
              call: "salesforce.update-contract-milestone"
              with:
                contract_number: "{{contract_number}}"
                milestone: "{{get-milestone-details.fields.summary}}"
                status: "Billed"
            - name: notify-finance
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_finance_channel_id"
                text: "MILESTONE BILLED: {{get-milestone-details.fields.summary}} | Contract: {{contract_number}} | Amount: {{billing_amount}} | SAP: {{create-billing-doc.BillingDocument}}"
  consumes:
    - namespace: jira
      type: http
      baseUri: "https://boeing.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
    - namespace: sap-s4
      type: http
      baseUri: "https://boeing-s4.sap.com/sap/opu/odata/sap/API_BILLING_DOCUMENT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_s4_username"
        password: "$secrets.sap_s4_password"
      resources:
        - name: billing-documents
          path: "/A_BillingDocument"
          operations:
            - name: create-billing-document
              method: POST
    - namespace: salesforce
      type: http
      baseUri: "https://boeing.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_access_token"
      resources:
        - name: contracts
          path: "/sobjects/Contract_Milestone__c"
          operations:
            - name: update-contract-milestone
              method: PATCH
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

When spare parts inventory drops below threshold in SAP, creates a purchase requisition, notifies procurement via Teams, and logs the event in ServiceNow.

naftiko: "0.5"
info:
  label: "Critical Spare Parts Reorder Workflow"
  description: "When spare parts inventory drops below threshold in SAP, creates a purchase requisition, notifies procurement via Teams, and logs the event in ServiceNow."
  tags:
    - supply-chain
    - sap
    - microsoft-teams
    - servicenow
    - procurement
    - manufacturing
capability:
  exposes:
    - type: mcp
      namespace: supply-chain-ops
      port: 8080
      tools:
        - name: reorder-critical-spare
          description: "Given a material number, plant code, and current stock level, create a SAP purchase requisition, log the reorder in ServiceNow, and notify procurement via Teams. Use when critical spare parts fall below safety stock."
          inputParameters:
            - name: material_number
              in: body
              type: string
              description: "SAP material number for the spare part."
            - name: plant_code
              in: body
              type: string
              description: "SAP plant code."
            - name: current_stock
              in: body
              type: string
              description: "Current stock quantity."
          steps:
            - name: create-purchase-req
              type: call
              call: "sap-s4.create-purchase-requisition"
              with:
                Material: "{{material_number}}"
                Plant: "{{plant_code}}"
                RequestedQuantity: "100"
            - name: log-in-servicenow
              type: call
              call: "servicenow.create-record"
              with:
                table: "u_reorder_log"
                material: "{{material_number}}"
                plant: "{{plant_code}}"
                pr_number: "{{create-purchase-req.PurchaseRequisition}}"
            - name: notify-procurement
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_procurement_channel_id"
                text: "REORDER: {{material_number}} at {{plant_code}} | Stock: {{current_stock}} | PR: {{create-purchase-req.PurchaseRequisition}}"
  consumes:
    - namespace: sap-s4
      type: http
      baseUri: "https://boeing-s4.sap.com/sap/opu/odata/sap/API_PURCHASEREQ_PROCESS_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_s4_username"
        password: "$secrets.sap_s4_password"
      resources:
        - name: purchase-requisitions
          path: "/A_PurchaseRequisitionHeader"
          operations:
            - name: create-purchase-requisition
              method: POST
    - namespace: servicenow
      type: http
      baseUri: "https://boeing.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_username"
        password: "$secrets.servicenow_password"
      resources:
        - name: records
          path: "/table/{{table}}"
          inputParameters:
            - name: table
              in: path
          operations:
            - name: create-record
              method: POST
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

Syncs program status across Jira, SAP, and Salesforce, then publishes a consolidated status report to Confluence and notifies leadership via Teams.

naftiko: "0.5"
info:
  label: "Cross-Functional Program Status Sync"
  description: "Syncs program status across Jira, SAP, and Salesforce, then publishes a consolidated status report to Confluence and notifies leadership via Teams."
  tags:
    - project-management
    - jira
    - sap
    - salesforce
    - confluence
    - microsoft-teams
    - aerospace
capability:
  exposes:
    - type: mcp
      namespace: program-ops
      port: 8080
      tools:
        - name: sync-program-status
          description: "Given an aircraft program name, pull status from Jira, SAP production orders, and Salesforce contracts, publish a Confluence status page, and notify leadership via Teams. Use for weekly program status reviews."
          inputParameters:
            - name: program_name
              in: body
              type: string
              description: "Aircraft program name, e.g. '787 Dreamliner'."
            - name: reporting_period
              in: body
              type: string
              description: "Reporting period, e.g. 'Week 13 2026'."
          steps:
            - name: get-jira-status
              type: call
              call: "jira.search-issues"
              with:
                jql: "project = '{{program_name}}' AND status != Done"
            - name: get-sap-production
              type: call
              call: "sap-s4.get-production-summary"
              with:
                program: "{{program_name}}"
            - name: publish-status-page
              type: call
              call: "confluence.create-page"
              with:
                space_key: "{{program_name}}"
                title: "Status Report: {{reporting_period}}"
                body: "Jira Open Issues: {{get-jira-status.total}} | Production: {{get-sap-production.summary}}"
            - name: notify-leadership
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_leadership_channel_id"
                text: "PROGRAM STATUS: {{program_name}} | {{reporting_period}} | Open Issues: {{get-jira-status.total}} | Report: {{publish-status-page.url}}"
  consumes:
    - namespace: jira
      type: http
      baseUri: "https://boeing.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: search
          path: "/search"
          operations:
            - name: search-issues
              method: POST
    - namespace: sap-s4
      type: http
      baseUri: "https://boeing-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_s4_username"
        password: "$secrets.sap_s4_password"
      resources:
        - name: production-summary
          path: "/A_ProductionOrder_2"
          operations:
            - name: get-production-summary
              method: GET
    - namespace: confluence
      type: http
      baseUri: "https://boeing.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
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

Processes a customer complaint from Salesforce by creating a SAP quality notification, opening a Jira investigation ticket, and alerting the customer support team via Teams.

naftiko: "0.5"
info:
  label: "Customer Complaint Resolution Workflow"
  description: "Processes a customer complaint from Salesforce by creating a SAP quality notification, opening a Jira investigation ticket, and alerting the customer support team via Teams."
  tags:
    - quality
    - salesforce
    - sap
    - jira
    - microsoft-teams
    - customer-support
capability:
  exposes:
    - type: mcp
      namespace: quality-ops
      port: 8080
      tools:
        - name: process-customer-complaint
          description: "Given a Salesforce case number and complaint description, create a SAP quality notification, open a Jira investigation ticket, and alert the customer support team via Teams. Use when a customer complaint is received."
          inputParameters:
            - name: case_number
              in: body
              type: string
              description: "Salesforce case number."
            - name: complaint_description
              in: body
              type: string
              description: "Description of the customer complaint."
            - name: customer_name
              in: body
              type: string
              description: "Customer name."
          steps:
            - name: create-quality-notification
              type: call
              call: "sap-s4.create-qn"
              with:
                notification_type: "Q3"
                description: "Customer complaint: {{complaint_description}}"
                reference: "{{case_number}}"
            - name: create-investigation
              type: call
              call: "jira.create-issue"
              with:
                project_key: "QA"
                issuetype: "Bug"
                summary: "Customer Complaint: {{customer_name}} - {{case_number}}"
                description: "SF Case: {{case_number}} | QN: {{create-quality-notification.number}} | {{complaint_description}}"
            - name: alert-support
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_customer_support_channel_id"
                text: "COMPLAINT: {{customer_name}} | Case: {{case_number}} | QN: {{create-quality-notification.number}} | Jira: {{create-investigation.key}}"
  consumes:
    - namespace: sap-s4
      type: http
      baseUri: "https://boeing-s4.sap.com/sap/opu/odata/sap/API_QUALITYNOTIFICATION_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_s4_username"
        password: "$secrets.sap_s4_password"
      resources:
        - name: quality-notifications
          path: "/A_QualityNotification"
          operations:
            - name: create-qn
              method: POST
    - namespace: jira
      type: http
      baseUri: "https://boeing.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
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

Responds to a cybersecurity alert from Splunk by creating a ServiceNow security incident, disabling the affected Okta account, and alerting the security team via Teams.

naftiko: "0.5"
info:
  label: "Cybersecurity Incident Response Chain"
  description: "Responds to a cybersecurity alert from Splunk by creating a ServiceNow security incident, disabling the affected Okta account, and alerting the security team via Teams."
  tags:
    - security
    - splunk
    - servicenow
    - okta
    - microsoft-teams
    - incident-response
capability:
  exposes:
    - type: mcp
      namespace: security-ops
      port: 8080
      tools:
        - name: handle-cyber-incident
          description: "Given a Splunk alert ID and affected user email, create a ServiceNow security incident, suspend the Okta account, and alert the security operations team via Teams. Use when a critical cybersecurity event is detected."
          inputParameters:
            - name: alert_id
              in: body
              type: string
              description: "Splunk alert identifier."
            - name: affected_user
              in: body
              type: string
              description: "Email of the affected user account."
            - name: threat_description
              in: body
              type: string
              description: "Description of the detected threat."
          steps:
            - name: create-security-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "SECURITY: {{threat_description}}"
                urgency: "1"
                impact: "1"
                category: "security"
                description: "Splunk Alert: {{alert_id}} | User: {{affected_user}} | {{threat_description}}"
            - name: suspend-okta-account
              type: call
              call: "okta.suspend-user"
              with:
                login: "{{affected_user}}"
            - name: alert-security-team
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_security_channel_id"
                text: "CYBER INCIDENT: {{threat_description}} | User: {{affected_user}} | INC: {{create-security-incident.number}} | Okta suspended"
  consumes:
    - namespace: servicenow
      type: http
      baseUri: "https://boeing.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_username"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - namespace: okta
      type: http
      baseUri: "https://boeing.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "SSWS $secrets.okta_api_token"
        placement: header
      resources:
        - name: users
          path: "/users/{{login}}/lifecycle/suspend"
          inputParameters:
            - name: login
              in: path
          operations:
            - name: suspend-user
              method: POST
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

Monitors Snowflake data ingestion quality, flags anomalies in Datadog, creates a Jira data quality ticket, and alerts the data engineering team via Teams.

naftiko: "0.5"
info:
  label: "Data Lake Ingestion Quality Monitor"
  description: "Monitors Snowflake data ingestion quality, flags anomalies in Datadog, creates a Jira data quality ticket, and alerts the data engineering team via Teams."
  tags:
    - data-engineering
    - snowflake
    - datadog
    - jira
    - microsoft-teams
    - analytics
capability:
  exposes:
    - type: mcp
      namespace: data-ops
      port: 8080
      tools:
        - name: monitor-ingestion-quality
          description: "Given a Snowflake database, schema, and table, check row counts and null rates, flag anomalies in Datadog, create a Jira ticket if issues are found, and notify the data engineering team. Use for daily data quality checks."
          inputParameters:
            - name: database_name
              in: body
              type: string
              description: "Snowflake database name."
            - name: schema_name
              in: body
              type: string
              description: "Snowflake schema name."
            - name: table_name
              in: body
              type: string
              description: "Snowflake table name."
          steps:
            - name: check-data-quality
              type: call
              call: "snowflake.execute-query"
              with:
                warehouse: "DATA_QUALITY_WH"
                query: "CALL sp_check_data_quality('{{database_name}}', '{{schema_name}}', '{{table_name}}');"
            - name: create-dq-ticket
              type: call
              call: "jira.create-issue"
              with:
                project_key: "DATA"
                issuetype: "Bug"
                summary: "DQ Issue: {{database_name}}.{{schema_name}}.{{table_name}}"
                description: "Quality check results: {{check-data-quality.results}}"
            - name: notify-data-team
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_data_eng_channel_id"
                text: "DATA QUALITY: {{database_name}}.{{schema_name}}.{{table_name}} | Jira: {{create-dq-ticket.key}} | {{check-data-quality.summary}}"
  consumes:
    - namespace: snowflake
      type: http
      baseUri: "https://boeing.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - namespace: jira
      type: http
      baseUri: "https://boeing.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
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

When Datadog detects an anomaly on a production metric, creates a Jira investigation task with full metric context and assigns it to the on-call engineer.

naftiko: "0.5"
info:
  label: "Datadog Anomaly Detection to Jira"
  description: "When Datadog detects an anomaly on a production metric, creates a Jira investigation task with full metric context and assigns it to the on-call engineer."
  tags:
    - observability
    - anomaly-detection
    - datadog
    - jira
    - incident-response
capability:
  exposes:
    - type: mcp
      namespace: anomaly-ops
      port: 8080
      tools:
        - name: handle-metric-anomaly
          description: "Given a Datadog alert ID, retrieve the anomaly details and impacted metric from Datadog, then create a Jira investigation task in the SRE project with full context including metric values, scope, and Datadog alert URL. Use when Datadog ML-based anomaly detection fires on a production KPI."
          inputParameters:
            - name: alert_id
              in: body
              type: string
              description: "The Datadog alert event ID for the anomaly, e.g. '5123456789012345678'."
            - name: metric_name
              in: body
              type: string
              description: "The name of the metric that triggered the anomaly, e.g. 'aws.ec2.cpuutilization'."
            - name: scope
              in: body
              type: string
              description: "The scope or tags of the impacted resources, e.g. 'env:prod,service:flight-data-api'."
          steps:
            - name: get-alert-details
              type: call
              call: "datadog.get-event"
              with:
                event_id: "{{alert_id}}"
            - name: create-investigation
              type: call
              call: "jira.create-issue"
              with:
                project_key: "SRE"
                issuetype: "Task"
                summary: "Metric Anomaly: {{metric_name}} | {{scope}}"
                description: "Datadog anomaly detected on {{metric_name}}.\nScope: {{scope}}\nAlert ID: {{alert_id}}\nTitle: {{get-alert-details.title}}\nTime: {{get-alert-details.date_happened}}"
  consumes:
    - namespace: datadog
      type: http
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: events
          path: "/events/{event_id}"
          inputParameters:
            - name: event_id
              in: path
          operations:
            - name: get-event
              method: GET
    - namespace: jira
      type: http
      baseUri: "https://boeing.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_username"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

When a Datadog monitor fires a critical infrastructure alert, automatically creates a P1 incident in ServiceNow and escalates via Microsoft Teams to the on-call engineer.

naftiko: "0.5"
info:
  label: "Datadog Infrastructure Alert to ServiceNow"
  description: "When a Datadog monitor fires a critical infrastructure alert, automatically creates a P1 incident in ServiceNow and escalates via Microsoft Teams to the on-call engineer."
  tags:
    - itsm
    - incident-response
    - datadog
    - servicenow
    - microsoft-teams
    - observability
capability:
  exposes:
    - type: mcp
      namespace: infra-ops
      port: 8080
      tools:
        - name: handle-infra-alert
          description: "Given a Datadog monitor ID, alert title, and severity, look up monitor details from Datadog, create a P1 or P2 ServiceNow incident with full context, and post an escalation message to the Microsoft Teams on-call channel. Use when Datadog fires a critical or high-severity alert against Boeing production infrastructure."
          inputParameters:
            - name: monitor_id
              in: body
              type: string
              description: "The Datadog monitor ID that fired, e.g. '123456789'."
            - name: alert_title
              in: body
              type: string
              description: "The human-readable alert title from Datadog."
            - name: severity
              in: body
              type: string
              description: "Alert severity: 'critical' or 'high'."
          steps:
            - name: get-monitor
              type: call
              call: "datadog.get-monitor"
              with:
                monitor_id: "{{monitor_id}}"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                urgency: "1"
                impact: "1"
                short_description: "INFRA ALERT: {{alert_title}}"
                description: "Datadog monitor {{monitor_id}} fired. Severity: {{severity}}. Monitor name: {{get-monitor.name}}. Query: {{get-monitor.query}}"
            - name: escalate-teams
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_oncall_channel_id"
                text: "P1 Incident created: {{create-incident.number}} — {{alert_title}} | Datadog Monitor: {{monitor_id}}"
  consumes:
    - namespace: datadog
      type: http
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: monitors
          path: "/monitor/{monitor_id}"
          inputParameters:
            - name: monitor_id
              in: path
          operations:
            - name: get-monitor
              method: GET
    - namespace: servicenow
      type: http
      baseUri: "https://boeing.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_username"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

Retrieves current health status of a monitored service from Datadog by service name.

naftiko: "0.5"
info:
  label: "Datadog Service Health Check"
  description: "Retrieves current health status of a monitored service from Datadog by service name."
  tags:
    - monitoring
    - datadog
    - health-check
    - operations
capability:
  exposes:
    - type: mcp
      namespace: monitoring
      port: 8080
      tools:
        - name: get-service-health
          description: "Given a Datadog service name, retrieve the current health status including uptime, error rate, and active alerts. Use for quick service health verification."
          inputParameters:
            - name: service_name
              in: body
              type: string
              description: "Datadog service name, e.g. 'flight-systems-api'."
          call: "datadog.get-service-summary"
          with:
            service: "{{service_name}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.data.attributes.status"
            - name: error_rate
              type: string
              mapping: "$.data.attributes.error_rate"
  consumes:
    - namespace: datadog
      type: http
      baseUri: "https://api.datadoghq.com/api/v2"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: services
          path: "/services/definitions/{{service}}"
          inputParameters:
            - name: service
              in: path
          operations:
            - name: get-service-summary
              method: GET

Retrieves current SLO status for all tagged Boeing production services from Datadog and posts a weekly compliance summary to a Snowflake reporting table.

naftiko: "0.5"
info:
  label: "Datadog SLO Compliance Report"
  description: "Retrieves current SLO status for all tagged Boeing production services from Datadog and posts a weekly compliance summary to a Snowflake reporting table."
  tags:
    - observability
    - slo
    - datadog
    - snowflake
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: slo-reporting
      port: 8080
      tools:
        - name: digest-slo-compliance
          description: "Given a Datadog SLO tag filter (e.g. 'env:production,team:platform') and a reporting period, retrieve all matching SLOs with their current status and error budget from Datadog, then write the compliance summary to Snowflake for BI reporting. Use for weekly SLO reviews."
          inputParameters:
            - name: tag_filter
              in: body
              type: string
              description: "Datadog tag filter string for scoping SLOs, e.g. 'env:production,team:avionics'."
            - name: report_date
              in: body
              type: string
              description: "The date for the compliance report in ISO 8601 format."
          steps:
            - name: get-slos
              type: call
              call: "datadog.list-slos"
              with:
                tags_query: "{{tag_filter}}"
            - name: write-report
              type: call
              call: "snowflake.insert-slo-report"
              with:
                report_date: "{{report_date}}"
                tag_filter: "{{tag_filter}}"
                slo_count: "{{get-slos.total_count}}"
  consumes:
    - namespace: datadog
      type: http
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: slos
          path: "/slo"
          inputParameters:
            - name: tags_query
              in: query
          operations:
            - name: list-slos
              method: GET
    - namespace: snowflake
      type: http
      baseUri: "https://boeing.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_bearer_token"
      resources:
        - name: slo-reports
          path: "/statements"
          operations:
            - name: insert-slo-report
              method: POST

Provisions building badge access by syncing employee data from Workday, creating an access request in ServiceNow, and confirming via Teams.

naftiko: "0.5"
info:
  label: "Employee Badge Access Provisioning"
  description: "Provisions building badge access by syncing employee data from Workday, creating an access request in ServiceNow, and confirming via Teams."
  tags:
    - security
    - workday
    - servicenow
    - microsoft-teams
    - access-management
capability:
  exposes:
    - type: mcp
      namespace: security-ops
      port: 8080
      tools:
        - name: provision-badge-access
          description: "Given an employee ID and requested facility, retrieve employee data from Workday, create a ServiceNow access request, and notify security via Teams. Use when new or transferred employees need building access."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "Workday employee ID."
            - name: facility_code
              in: body
              type: string
              description: "Facility code for badge access."
            - name: access_level
              in: body
              type: string
              description: "Access level, e.g. 'general', 'restricted', 'classified'."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{employee_id}}"
            - name: create-access-request
              type: call
              call: "servicenow.create-request"
              with:
                short_description: "Badge Access: {{get-employee.Name}} to {{facility_code}}"
                description: "Employee: {{get-employee.Name}} | Facility: {{facility_code}} | Level: {{access_level}} | Department: {{get-employee.Organization.Name}}"
                category: "access"
            - name: notify-security
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_security_channel_id"
                text: "BADGE ACCESS REQUEST: {{get-employee.Name}} | Facility: {{facility_code}} | Level: {{access_level}} | SNOW: {{create-access-request.number}}"
  consumes:
    - namespace: workday
      type: http
      baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/boeing"
      authentication:
        type: bearer
        token: "$secrets.workday_bearer_token"
      resources:
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - namespace: servicenow
      type: http
      baseUri: "https://boeing.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_username"
        password: "$secrets.servicenow_password"
      resources:
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

When an employee separation is recorded in Workday, disables the Microsoft 365 account, revokes Okta sessions, and creates a ServiceNow offboarding task to track hardware retrieval.

naftiko: "0.5"
info:
  label: "Employee Offboarding Workflow"
  description: "When an employee separation is recorded in Workday, disables the Microsoft 365 account, revokes Okta sessions, and creates a ServiceNow offboarding task to track hardware retrieval."
  tags:
    - hr
    - offboarding
    - workday
    - okta
    - microsoft-graph
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: hr-offboarding
      port: 8080
      tools:
        - name: trigger-offboarding
          description: "Given a Workday employee ID and termination date, disable the Microsoft 365 account, expire all Okta sessions, and open a ServiceNow offboarding task for hardware and badge retrieval. Invoke when HR records a separation in Workday."
          inputParameters:
            - name: workday_employee_id
              in: body
              type: string
              description: "The Workday worker ID for the departing employee."
            - name: termination_date
              in: body
              type: string
              description: "The effective termination date in ISO 8601 format."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{workday_employee_id}}"
            - name: disable-m365
              type: call
              call: "msgraph.disable-user"
              with:
                user_id: "{{get-employee.work_email}}"
            - name: revoke-okta
              type: call
              call: "okta.clear-user-sessions"
              with:
                login: "{{get-employee.work_email}}"
            - name: open-offboard-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                category: "hr_offboarding"
                short_description: "Offboarding: {{get-employee.full_name}} — term date {{termination_date}}"
                assigned_group: "IT_Offboarding"
  consumes:
    - namespace: workday
      type: http
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_bearer_token"
      resources:
        - name: workers
          path: "/boeing/workers/{worker_id}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - namespace: msgraph
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: users
          path: "/users/{user_id}"
          inputParameters:
            - name: user_id
              in: path
          operations:
            - name: disable-user
              method: PATCH
    - namespace: okta
      type: http
      baseUri: "https://boeing.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: user-sessions
          path: "/users/{login}/sessions"
          inputParameters:
            - name: login
              in: path
          operations:
            - name: clear-user-sessions
              method: DELETE
    - namespace: servicenow
      type: http
      baseUri: "https://boeing.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_username"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST

Checks safety training compliance by pulling training records from Workday, comparing against requirements in SAP EHS, and alerting managers via Teams for gaps.

naftiko: "0.5"
info:
  label: "Employee Safety Training Compliance Check"
  description: "Checks safety training compliance by pulling training records from Workday, comparing against requirements in SAP EHS, and alerting managers via Teams for gaps."
  tags:
    - safety
    - workday
    - sap
    - microsoft-teams
    - training
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: safety-ops
      port: 8080
      tools:
        - name: check-safety-training-compliance
          description: "Given a department code and training requirement ID, pull training records from Workday, compare against SAP EHS requirements, and alert managers via Teams for any gaps. Use for periodic safety compliance reviews."
          inputParameters:
            - name: department_code
              in: body
              type: string
              description: "Department code, e.g. 'MFG-EVERETT-787'."
            - name: training_requirement_id
              in: body
              type: string
              description: "SAP EHS training requirement identifier."
          steps:
            - name: get-training-records
              type: call
              call: "workday.get-training-completions"
              with:
                department: "{{department_code}}"
            - name: get-requirements
              type: call
              call: "sap-ehs.get-training-requirements"
              with:
                requirement_id: "{{training_requirement_id}}"
                department: "{{department_code}}"
            - name: notify-managers
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_safety_channel_id"
                text: "SAFETY TRAINING COMPLIANCE: {{department_code}} | Required: {{get-requirements.total}} | Completed: {{get-training-records.completed}} | Gaps: {{get-requirements.gaps}}"
  consumes:
    - namespace: workday
      type: http
      baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/boeing"
      authentication:
        type: bearer
        token: "$secrets.workday_bearer_token"
      resources:
        - name: training
          path: "/workers/training"
          operations:
            - name: get-training-completions
              method: GET
    - namespace: sap-ehs
      type: http
      baseUri: "https://boeing-s4.sap.com/sap/opu/odata/sap/API_EHS_TRAINING_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_s4_username"
        password: "$secrets.sap_s4_password"
      resources:
        - name: requirements
          path: "/A_TrainingRequirement"
          operations:
            - name: get-training-requirements
              method: GET
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

Processes an engineering change order by creating a Jira ECO ticket, updating the BOM in SAP, and notifying affected teams via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Engineering Change Order Process"
  description: "Processes an engineering change order by creating a Jira ECO ticket, updating the BOM in SAP, and notifying affected teams via Microsoft Teams."
  tags:
    - engineering
    - jira
    - sap
    - microsoft-teams
    - manufacturing
    - aerospace
capability:
  exposes:
    - type: mcp
      namespace: engineering-ops
      port: 8080
      tools:
        - name: process-engineering-change
          description: "Given a change description, affected part number, and aircraft program, create a Jira ECO ticket, update the SAP BOM, and notify affected teams via Teams. Use when an engineering change is approved."
          inputParameters:
            - name: change_description
              in: body
              type: string
              description: "Description of the engineering change."
            - name: affected_part
              in: body
              type: string
              description: "Part number affected by the change, e.g. 'P/N 787-FLAP-ASY-01'."
            - name: aircraft_program
              in: body
              type: string
              description: "Aircraft program, e.g. '787 Dreamliner'."
          steps:
            - name: create-eco-ticket
              type: call
              call: "jira.create-issue"
              with:
                project_key: "ECO"
                issuetype: "Story"
                summary: "ECO: {{affected_part}} - {{aircraft_program}}"
                description: "{{change_description}} | Part: {{affected_part}} | Program: {{aircraft_program}}"
            - name: update-sap-bom
              type: call
              call: "sap-s4.update-bom"
              with:
                material: "{{affected_part}}"
                change_number: "{{create-eco-ticket.key}}"
                description: "{{change_description}}"
            - name: notify-affected-teams
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_engineering_channel_id"
                text: "ECO ISSUED: {{create-eco-ticket.key}} | Part: {{affected_part}} | Program: {{aircraft_program}} | {{change_description}}"
  consumes:
    - namespace: jira
      type: http
      baseUri: "https://boeing.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
    - namespace: sap-s4
      type: http
      baseUri: "https://boeing-s4.sap.com/sap/opu/odata/sap/API_BILL_OF_MATERIAL_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_s4_username"
        password: "$secrets.sap_s4_password"
      resources:
        - name: bom
          path: "/A_BillOfMaterial"
          operations:
            - name: update-bom
              method: PATCH
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

Orchestrates an engineering design review by collecting documents from Confluence, scheduling the review via Teams, and creating a Jira tracking issue.

naftiko: "0.5"
info:
  label: "Engineering Design Review Orchestration"
  description: "Orchestrates an engineering design review by collecting documents from Confluence, scheduling the review via Teams, and creating a Jira tracking issue."
  tags:
    - engineering
    - confluence
    - microsoft-teams
    - jira
    - aerospace
    - design-review
capability:
  exposes:
    - type: mcp
      namespace: engineering-ops
      port: 8080
      tools:
        - name: orchestrate-design-review
          description: "Given a design document Confluence page ID, review date, and reviewers list, gather the design docs, create a Jira review task, and notify reviewers via Teams. Use when scheduling formal design reviews."
          inputParameters:
            - name: confluence_page_id
              in: body
              type: string
              description: "Confluence page ID of the design document."
            - name: review_date
              in: body
              type: string
              description: "Scheduled review date in ISO 8601 format."
            - name: reviewers
              in: body
              type: string
              description: "Comma-separated list of reviewer emails."
          steps:
            - name: get-design-doc
              type: call
              call: "confluence.get-page"
              with:
                page_id: "{{confluence_page_id}}"
            - name: create-review-task
              type: call
              call: "jira.create-issue"
              with:
                project_key: "ENG"
                issuetype: "Task"
                summary: "Design Review: {{get-design-doc.title}}"
                description: "Document: {{get-design-doc.title}} | Date: {{review_date}} | Reviewers: {{reviewers}}"
                duedate: "{{review_date}}"
            - name: notify-reviewers
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_engineering_channel_id"
                text: "DESIGN REVIEW: {{get-design-doc.title}} | Date: {{review_date}} | Jira: {{create-review-task.key}} | Reviewers: {{reviewers}}"
  consumes:
    - namespace: confluence
      type: http
      baseUri: "https://boeing.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: pages
          path: "/content/{{page_id}}"
          inputParameters:
            - name: page_id
              in: path
          operations:
            - name: get-page
              method: GET
    - namespace: jira
      type: http
      baseUri: "https://boeing.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
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

Collects environmental sensor data via Datadog, logs readings in ServiceNow, and alerts the EHS team via Teams when thresholds are exceeded.

naftiko: "0.5"
info:
  label: "Environmental Compliance Monitoring"
  description: "Collects environmental sensor data via Datadog, logs readings in ServiceNow, and alerts the EHS team via Teams when thresholds are exceeded."
  tags:
    - safety
    - ehs
    - datadog
    - servicenow
    - microsoft-teams
    - manufacturing
capability:
  exposes:
    - type: mcp
      namespace: ehs-ops
      port: 8080
      tools:
        - name: monitor-environmental-compliance
          description: "Given a facility code and sensor type, retrieve environmental readings from Datadog, log them in ServiceNow, and alert EHS if thresholds are exceeded. Use for continuous environmental compliance monitoring."
          inputParameters:
            - name: facility_code
              in: body
              type: string
              description: "Facility code, e.g. 'FAC-EVERETT-747'."
            - name: sensor_type
              in: body
              type: string
              description: "Sensor type, e.g. 'VOC', 'particulate', 'noise'."
          steps:
            - name: get-sensor-data
              type: call
              call: "datadog.query-metrics"
              with:
                query: "avg:env.{{sensor_type}}.level{facility:{{facility_code}}}"
                from: "-1h"
            - name: log-reading
              type: call
              call: "servicenow.create-record"
              with:
                table: "u_environmental_readings"
                facility: "{{facility_code}}"
                sensor_type: "{{sensor_type}}"
                value: "{{get-sensor-data.series[0].pointlist[-1][1]}}"
            - name: alert-ehs
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_ehs_channel_id"
                text: "ENV READING: {{facility_code}} | {{sensor_type}} | Value: {{get-sensor-data.series[0].pointlist[-1][1]}} | Record: {{log-reading.sys_id}}"
  consumes:
    - namespace: datadog
      type: http
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: metrics
          path: "/query"
          operations:
            - name: query-metrics
              method: GET
    - namespace: servicenow
      type: http
      baseUri: "https://boeing.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_username"
        password: "$secrets.servicenow_password"
      resources:
        - name: records
          path: "/table/{{table}}"
          inputParameters:
            - name: table
              in: path
          operations:
            - name: create-record
              method: POST
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

Verifies export control classification of a part by querying SAP, checking against a Salesforce compliance record, and logging the result in ServiceNow.

naftiko: "0.5"
info:
  label: "Export Control Classification Check"
  description: "Verifies export control classification of a part by querying SAP, checking against a Salesforce compliance record, and logging the result in ServiceNow."
  tags:
    - compliance
    - sap
    - salesforce
    - servicenow
    - export-control
    - aerospace
capability:
  exposes:
    - type: mcp
      namespace: compliance-ops
      port: 8080
      tools:
        - name: check-export-classification
          description: "Given a part number, retrieve the export control classification from SAP, verify against the Salesforce compliance database, and log the verification result in ServiceNow. Use before shipping parts internationally."
          inputParameters:
            - name: part_number
              in: body
              type: string
              description: "Part number to verify, e.g. 'P/N 787-ENGINE-MOUNT-01'."
            - name: destination_country
              in: body
              type: string
              description: "Destination country code, e.g. 'GB'."
          steps:
            - name: get-sap-classification
              type: call
              call: "sap-s4.get-material-classification"
              with:
                material: "{{part_number}}"
            - name: verify-compliance
              type: call
              call: "salesforce.check-export-compliance"
              with:
                part_number: "{{part_number}}"
                eccn: "{{get-sap-classification.ECCN}}"
                country: "{{destination_country}}"
            - name: log-verification
              type: call
              call: "servicenow.create-record"
              with:
                table: "u_export_control_log"
                part_number: "{{part_number}}"
                eccn: "{{get-sap-classification.ECCN}}"
                destination: "{{destination_country}}"
                result: "{{verify-compliance.status}}"
  consumes:
    - namespace: sap-s4
      type: http
      baseUri: "https://boeing-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_MASTER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_s4_username"
        password: "$secrets.sap_s4_password"
      resources:
        - name: materials
          path: "/A_Material('{material}')"
          inputParameters:
            - name: material
              in: path
          operations:
            - name: get-material-classification
              method: GET
    - namespace: salesforce
      type: http
      baseUri: "https://boeing.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_access_token"
      resources:
        - name: compliance
          path: "/query"
          operations:
            - name: check-export-compliance
              method: GET
    - namespace: servicenow
      type: http
      baseUri: "https://boeing.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_username"
        password: "$secrets.servicenow_password"
      resources:
        - name: records
          path: "/table/{{table}}"
          inputParameters:
            - name: table
              in: path
          operations:
            - name: create-record
              method: POST

Creates a facility maintenance work order in SAP PM, assigns a ServiceNow task, and alerts the facilities team via Teams.

naftiko: "0.5"
info:
  label: "Facility Maintenance Work Order Orchestration"
  description: "Creates a facility maintenance work order in SAP PM, assigns a ServiceNow task, and alerts the facilities team via Teams."
  tags:
    - manufacturing
    - sap
    - servicenow
    - microsoft-teams
    - maintenance
capability:
  exposes:
    - type: mcp
      namespace: facilities-ops
      port: 8080
      tools:
        - name: create-maintenance-work-order
          description: "Given an equipment ID, maintenance description, and priority, create a SAP PM work order, a ServiceNow assignment task, and notify the facilities team via Teams. Use for scheduled or unscheduled facility maintenance."
          inputParameters:
            - name: equipment_id
              in: body
              type: string
              description: "SAP equipment ID, e.g. 'HVAC-EVERETT-B40-02'."
            - name: maintenance_desc
              in: body
              type: string
              description: "Description of the maintenance needed."
            - name: priority
              in: body
              type: string
              description: "Priority: high, medium, or low."
          steps:
            - name: create-sap-wo
              type: call
              call: "sap-pm.create-work-order"
              with:
                equipment: "{{equipment_id}}"
                description: "{{maintenance_desc}}"
                priority: "{{priority}}"
            - name: create-snow-task
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "Maintenance: {{equipment_id}}"
                description: "SAP WO: {{create-sap-wo.MaintenanceOrder}} | {{maintenance_desc}}"
                priority: "{{priority}}"
            - name: notify-facilities
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_facilities_channel_id"
                text: "MAINTENANCE WO: {{equipment_id}} | SAP: {{create-sap-wo.MaintenanceOrder}} | SNOW: {{create-snow-task.number}} | Priority: {{priority}}"
  consumes:
    - namespace: sap-pm
      type: http
      baseUri: "https://boeing-s4.sap.com/sap/opu/odata/sap/API_MAINTORDER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_s4_username"
        password: "$secrets.sap_s4_password"
      resources:
        - name: work-orders
          path: "/MaintenanceOrder"
          operations:
            - name: create-work-order
              method: POST
    - namespace: servicenow
      type: http
      baseUri: "https://boeing.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_username"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/sc_task"
          operations:
            - name: create-task
              method: POST
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

When Datadog detects an IoT sensor anomaly on the factory floor, creates a ServiceNow incident, triggers a SAP PM work order, and alerts maintenance via Teams.

naftiko: "0.5"
info:
  label: "Factory Floor IoT Anomaly Response"
  description: "When Datadog detects an IoT sensor anomaly on the factory floor, creates a ServiceNow incident, triggers a SAP PM work order, and alerts maintenance via Teams."
  tags:
    - manufacturing
    - datadog
    - servicenow
    - sap
    - microsoft-teams
    - iot
capability:
  exposes:
    - type: mcp
      namespace: manufacturing-ops
      port: 8080
      tools:
        - name: handle-iot-anomaly
          description: "Given a Datadog alert ID, sensor ID, and anomaly type, create a ServiceNow incident, a SAP PM work order, and alert the maintenance team via Teams. Use when IoT sensors detect abnormal conditions."
          inputParameters:
            - name: alert_id
              in: body
              type: string
              description: "Datadog alert identifier."
            - name: sensor_id
              in: body
              type: string
              description: "IoT sensor identifier."
            - name: anomaly_type
              in: body
              type: string
              description: "Type of anomaly, e.g. 'temperature', 'vibration', 'pressure'."
          steps:
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "IoT Anomaly: {{anomaly_type}} on sensor {{sensor_id}}"
                urgency: "2"
                description: "Datadog Alert: {{alert_id}} | Sensor: {{sensor_id}} | Type: {{anomaly_type}}"
            - name: create-work-order
              type: call
              call: "sap-pm.create-work-order"
              with:
                equipment: "{{sensor_id}}"
                description: "IoT anomaly: {{anomaly_type}} | Alert: {{alert_id}}"
                priority: "high"
            - name: alert-maintenance
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_maintenance_channel_id"
                text: "IoT ANOMALY: {{anomaly_type}} | Sensor: {{sensor_id}} | INC: {{create-incident.number}} | WO: {{create-work-order.MaintenanceOrder}}"
  consumes:
    - namespace: servicenow
      type: http
      baseUri: "https://boeing.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_username"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - namespace: sap-pm
      type: http
      baseUri: "https://boeing-s4.sap.com/sap/opu/odata/sap/API_MAINTORDER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_s4_username"
        password: "$secrets.sap_s4_password"
      resources:
        - name: work-orders
          path: "/MaintenanceOrder"
          operations:
            - name: create-work-order
              method: POST
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

Ingests flight test data by triggering a Snowflake data load, refreshing a Tableau dashboard, and sending a summary to the test engineering team via Teams.

naftiko: "0.5"
info:
  label: "Flight Test Data Ingestion Pipeline"
  description: "Ingests flight test data by triggering a Snowflake data load, refreshing a Tableau dashboard, and sending a summary to the test engineering team via Teams."
  tags:
    - engineering
    - snowflake
    - tableau
    - microsoft-teams
    - aerospace
    - analytics
capability:
  exposes:
    - type: mcp
      namespace: engineering-ops
      port: 8080
      tools:
        - name: ingest-flight-test-data
          description: "Given a flight test ID and data source path, trigger the Snowflake data pipeline, refresh the Tableau flight test dashboard, and notify the test engineering team via Teams. Use after a flight test completes."
          inputParameters:
            - name: flight_test_id
              in: body
              type: string
              description: "Flight test identifier, e.g. 'FT-787-2026-0412'."
            - name: data_source
              in: body
              type: string
              description: "S3 path to flight test data, e.g. 's3://boeing-flight-data/FT-787-2026-0412/'."
          steps:
            - name: load-to-snowflake
              type: call
              call: "snowflake.execute-query"
              with:
                warehouse: "FLIGHT_TEST_WH"
                query: "CALL sp_ingest_flight_test('{{flight_test_id}}', '{{data_source}}');"
            - name: refresh-dashboard
              type: call
              call: "tableau.refresh-workbook"
              with:
                workbook_id: "$secrets.tableau_flight_test_workbook_id"
            - name: notify-test-team
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_flight_test_channel_id"
                text: "Flight test data ingested: {{flight_test_id}} | Snowflake load: {{load-to-snowflake.status}} | Dashboard refreshed"
  consumes:
    - namespace: snowflake
      type: http
      baseUri: "https://boeing.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - namespace: tableau
      type: http
      baseUri: "https://tableau.boeing.com/api/3.19"
      authentication:
        type: bearer
        token: "$secrets.tableau_access_token"
      resources:
        - name: workbooks
          path: "/sites/boeing/workbooks/{{workbook_id}}/refresh"
          inputParameters:
            - name: workbook_id
              in: path
          operations:
            - name: refresh-workbook
              method: POST
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

When FOD is reported on the factory floor, creates a ServiceNow incident, triggers a SAP quality notification, and sends an urgent alert via Teams.

naftiko: "0.5"
info:
  label: "Foreign Object Debris Incident Response"
  description: "When FOD is reported on the factory floor, creates a ServiceNow incident, triggers a SAP quality notification, and sends an urgent alert via Teams."
  tags:
    - safety
    - manufacturing
    - servicenow
    - sap
    - microsoft-teams
    - aerospace
capability:
  exposes:
    - type: mcp
      namespace: safety-ops
      port: 8080
      tools:
        - name: report-fod-incident
          description: "Given a facility code, location, and FOD description, create a ServiceNow safety incident, a SAP quality notification, and send an urgent alert to the FOD prevention team via Teams. Use when foreign object debris is found in a production area."
          inputParameters:
            - name: facility_code
              in: body
              type: string
              description: "Facility code where FOD was found."
            - name: location_detail
              in: body
              type: string
              description: "Specific location, e.g. 'Bay 40-2, Wing Assembly Station 3'."
            - name: fod_description
              in: body
              type: string
              description: "Description of the FOD found."
          steps:
            - name: create-safety-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "FOD Found: {{facility_code}} - {{location_detail}}"
                urgency: "1"
                impact: "2"
                category: "safety"
                description: "FOD: {{fod_description}} | Location: {{location_detail}} | Facility: {{facility_code}}"
            - name: create-quality-notification
              type: call
              call: "sap-s4.create-qn"
              with:
                notification_type: "Q1"
                description: "FOD: {{fod_description}} at {{location_detail}}"
                plant: "{{facility_code}}"
            - name: alert-fod-team
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_fod_channel_id"
                text: "FOD ALERT: {{facility_code}} | {{location_detail}} | {{fod_description}} | INC: {{create-safety-incident.number}} | QN: {{create-quality-notification.number}}"
  consumes:
    - namespace: servicenow
      type: http
      baseUri: "https://boeing.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_username"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - namespace: sap-s4
      type: http
      baseUri: "https://boeing-s4.sap.com/sap/opu/odata/sap/API_QUALITYNOTIFICATION_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_s4_username"
        password: "$secrets.sap_s4_password"
      resources:
        - name: quality-notifications
          path: "/A_QualityNotification"
          operations:
            - name: create-qn
              method: POST
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

Retrieves open Dependabot security alerts for a GitHub repository, filters by severity, and creates Jira security tasks for each critical or high vulnerability requiring remediation.

naftiko: "0.5"
info:
  label: "GitHub Dependabot Vulnerability Triage"
  description: "Retrieves open Dependabot security alerts for a GitHub repository, filters by severity, and creates Jira security tasks for each critical or high vulnerability requiring remediation."
  tags:
    - security
    - devops
    - github
    - jira
    - vulnerability-management
    - dependabot
capability:
  exposes:
    - type: mcp
      namespace: vuln-triage
      port: 8080
      tools:
        - name: triage-dependabot-alerts
          description: "Given a GitHub repository name and minimum severity level, retrieve all open Dependabot alerts at or above that severity from GitHub and create a Jira security task for each one in the SECSCAN project. Use during weekly security triage for Boeing software repositories."
          inputParameters:
            - name: repo_name
              in: body
              type: string
              description: "The GitHub repository full name to scan, e.g. 'boeing/ground-systems-api'."
            - name: min_severity
              in: body
              type: string
              description: "Minimum severity to triage: 'critical', 'high', 'medium', or 'low'."
          steps:
            - name: get-alerts
              type: call
              call: "github.list-dependabot-alerts"
              with:
                repo: "{{repo_name}}"
                severity: "{{min_severity}}"
            - name: create-security-task
              type: call
              call: "jira.create-issue"
              with:
                project_key: "SECSCAN"
                issuetype: "Task"
                summary: "Dependabot alerts in {{repo_name}}: {{get-alerts.total_count}} at {{min_severity}}+"
                description: "Repository: {{repo_name}}\nSeverity filter: {{min_severity}}\nOpen alerts: {{get-alerts.total_count}}\nCritical: {{get-alerts.critical_count}}\nHigh: {{get-alerts.high_count}}"
  consumes:
    - namespace: github
      type: http
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: dependabot-alerts
          path: "/repos/{repo}/dependabot/alerts"
          inputParameters:
            - name: repo
              in: path
            - name: severity
              in: query
          operations:
            - name: list-dependabot-alerts
              method: GET
    - namespace: jira
      type: http
      baseUri: "https://boeing.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_username"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

When a GitHub pull request is opened against a protected branch, triggers a Checkmarx SAST scan and posts the scan results as a PR comment.

naftiko: "0.5"
info:
  label: "GitHub Pull Request Security Scan Trigger"
  description: "When a GitHub pull request is opened against a protected branch, triggers a Checkmarx SAST scan and posts the scan results as a PR comment."
  tags:
    - devops
    - security
    - github
    - sast
    - code-quality
    - pull-request
capability:
  exposes:
    - type: mcp
      namespace: devsec
      port: 8080
      tools:
        - name: trigger-pr-scan
          description: "Given a GitHub repository name, pull request number, and branch name, submit a Checkmarx SAST security scan for the PR diff and post the scan result summary as a GitHub PR comment. Use when a pull request is opened or updated against a protected branch."
          inputParameters:
            - name: repo_name
              in: body
              type: string
              description: "The GitHub repository full name, e.g. 'boeing/flight-control-software'."
            - name: pr_number
              in: body
              type: integer
              description: "The pull request number to scan."
            - name: branch_name
              in: body
              type: string
              description: "The source branch name for the PR."
          steps:
            - name: start-scan
              type: call
              call: "checkmarx.create-scan"
              with:
                project_name: "{{repo_name}}"
                branch: "{{branch_name}}"
            - name: post-pr-comment
              type: call
              call: "github.create-pr-comment"
              with:
                repo: "{{repo_name}}"
                pr_number: "{{pr_number}}"
                body: "Security scan initiated. Checkmarx scan ID: {{start-scan.scan_id}}. Results will be posted when complete."
  consumes:
    - namespace: checkmarx
      type: http
      baseUri: "https://boeing.checkmarx.net/cxrestapi"
      authentication:
        type: bearer
        token: "$secrets.checkmarx_bearer_token"
      resources:
        - name: scans
          path: "/scans"
          operations:
            - name: create-scan
              method: POST
    - namespace: github
      type: http
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: pr-comments
          path: "/repos/{repo}/issues/{pr_number}/comments"
          inputParameters:
            - name: repo
              in: path
            - name: pr_number
              in: path
          operations:
            - name: create-pr-comment
              method: POST

When a GitHub release is published, creates a Datadog deployment marker and updates the corresponding Jira release version to Released status.

naftiko: "0.5"
info:
  label: "GitHub Release Deployment Marker"
  description: "When a GitHub release is published, creates a Datadog deployment marker and updates the corresponding Jira release version to Released status."
  tags:
    - devops
    - deployment
    - github
    - datadog
    - jira
    - release-management
capability:
  exposes:
    - type: mcp
      namespace: release-ops
      port: 8080
      tools:
        - name: mark-release-deployed
          description: "Given a GitHub repository name, release tag, and Jira project key, create a Datadog deployment marker for observability and update the matching Jira release version status to Released. Use when a GitHub release is published to production."
          inputParameters:
            - name: repo_name
              in: body
              type: string
              description: "The GitHub repository full name, e.g. 'boeing/avionics-display-firmware'."
            - name: release_tag
              in: body
              type: string
              description: "The Git release tag, e.g. 'v2.4.1'."
            - name: jira_project_key
              in: body
              type: string
              description: "The Jira project key associated with this repository, e.g. 'AVDIS'."
          steps:
            - name: create-dd-marker
              type: call
              call: "datadog.create-event"
              with:
                title: "Deployment: {{repo_name}} {{release_tag}}"
                text: "Production release {{release_tag}} deployed from {{repo_name}}"
                alert_type: "info"
            - name: update-jira-version
              type: call
              call: "jira.update-version"
              with:
                project_key: "{{jira_project_key}}"
                version_name: "{{release_tag}}"
                released: "true"
  consumes:
    - namespace: datadog
      type: http
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: events
          path: "/events"
          operations:
            - name: create-event
              method: POST
    - namespace: jira
      type: http
      baseUri: "https://boeing.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_username"
        password: "$secrets.jira_api_token"
      resources:
        - name: versions
          path: "/project/{project_key}/versions"
          inputParameters:
            - name: project_key
              in: path
          operations:
            - name: update-version
              method: PUT

Checks the branch protection rules for a GitHub repository main branch.

naftiko: "0.5"
info:
  label: "GitHub Repository Branch Protection Check"
  description: "Checks the branch protection rules for a GitHub repository main branch."
  tags:
    - devops
    - github
    - security
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: devops
      port: 8080
      tools:
        - name: check-branch-protection
          description: "Given a GitHub repository name, retrieve the branch protection rules for the main branch including required reviews, status checks, and admin enforcement. Use for compliance audits."
          inputParameters:
            - name: repo_name
              in: body
              type: string
              description: "GitHub repository name, e.g. 'boeing/flight-control-fw'."
          call: "github.get-branch-protection"
          with:
            repo: "{{repo_name}}"
          outputParameters:
            - name: required_reviews
              type: string
              mapping: "$.required_pull_request_reviews.required_approving_review_count"
            - name: enforce_admins
              type: string
              mapping: "$.enforce_admins.enabled"
  consumes:
    - namespace: github
      type: http
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: branch-protection
          path: "/repos/{{repo}}/branches/main/protection"
          inputParameters:
            - name: repo
              in: path
          operations:
            - name: get-branch-protection
              method: GET

Scans a GitHub organization's repositories for compliance violations such as missing branch protections or public visibility, and logs findings to Snowflake for audit reporting.

naftiko: "0.5"
info:
  label: "GitHub Repository Compliance Audit"
  description: "Scans a GitHub organization's repositories for compliance violations such as missing branch protections or public visibility, and logs findings to Snowflake for audit reporting."
  tags:
    - devops
    - compliance
    - github
    - snowflake
    - security
    - audit
capability:
  exposes:
    - type: mcp
      namespace: repo-compliance
      port: 8080
      tools:
        - name: audit-github-repo
          description: "Given a GitHub repository full name, retrieve branch protection rules and repository visibility settings from GitHub and write a compliance audit record to Snowflake. Use for periodic security compliance audits of Boeing's software repositories."
          inputParameters:
            - name: repo_name
              in: body
              type: string
              description: "GitHub repository full name, e.g. 'boeing/flight-management-system'."
            - name: branch
              in: body
              type: string
              description: "The branch to audit for protection rules, typically 'main'."
          steps:
            - name: get-repo
              type: call
              call: "github.get-repo"
              with:
                repo: "{{repo_name}}"
            - name: get-branch-protection
              type: call
              call: "github.get-branch-protection"
              with:
                repo: "{{repo_name}}"
                branch: "{{branch}}"
            - name: write-audit-record
              type: call
              call: "snowflake.insert-audit"
              with:
                repo: "{{repo_name}}"
                visibility: "{{get-repo.visibility}}"
                branch_protected: "{{get-branch-protection.enabled}}"
  consumes:
    - namespace: github
      type: http
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: repos
          path: "/repos/{repo}"
          inputParameters:
            - name: repo
              in: path
          operations:
            - name: get-repo
              method: GET
        - name: branch-protection
          path: "/repos/{repo}/branches/{branch}/protection"
          inputParameters:
            - name: repo
              in: path
            - name: branch
              in: path
          operations:
            - name: get-branch-protection
              method: GET
    - namespace: snowflake
      type: http
      baseUri: "https://boeing.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_bearer_token"
      resources:
        - name: audit-records
          path: "/statements"
          operations:
            - name: insert-audit
              method: POST

When a hazardous material is received, validates the SDS in SharePoint, creates a SAP EHS notification, and alerts the safety team via Teams.

naftiko: "0.5"
info:
  label: "Hazardous Material Handling Alert"
  description: "When a hazardous material is received, validates the SDS in SharePoint, creates a SAP EHS notification, and alerts the safety team via Teams."
  tags:
    - safety
    - ehs
    - sharepoint
    - sap
    - microsoft-teams
    - manufacturing
capability:
  exposes:
    - type: mcp
      namespace: ehs-ops
      port: 8080
      tools:
        - name: process-hazmat-receipt
          description: "Given a material number, SDS document ID, and receiving dock, validate the SDS in SharePoint, create a SAP EHS notification, and alert the safety team via Teams. Use when hazardous materials arrive at the facility."
          inputParameters:
            - name: material_number
              in: body
              type: string
              description: "SAP material number for the hazardous material."
            - name: sds_document_id
              in: body
              type: string
              description: "SharePoint document ID for the Safety Data Sheet."
            - name: receiving_dock
              in: body
              type: string
              description: "Receiving dock location, e.g. 'DOCK-B40-NORTH'."
          steps:
            - name: validate-sds
              type: call
              call: "sharepoint.get-document"
              with:
                item_id: "{{sds_document_id}}"
            - name: create-ehs-notification
              type: call
              call: "sap-ehs.create-notification"
              with:
                material: "{{material_number}}"
                notification_type: "EHS"
                description: "Hazmat received at {{receiving_dock}} | SDS: {{validate-sds.Title}}"
            - name: alert-safety-team
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_ehs_channel_id"
                text: "HAZMAT RECEIVED: {{material_number}} at {{receiving_dock}} | SDS: {{validate-sds.Title}} | EHS: {{create-ehs-notification.number}}"
  consumes:
    - namespace: sharepoint
      type: http
      baseUri: "https://boeing.sharepoint.com/_api"
      authentication:
        type: bearer
        token: "$secrets.sharepoint_access_token"
      resources:
        - name: documents
          path: "/web/lists/getbytitle('SafetyDataSheets')/items({{item_id}})"
          inputParameters:
            - name: item_id
              in: path
          operations:
            - name: get-document
              method: GET
    - namespace: sap-ehs
      type: http
      baseUri: "https://boeing-s4.sap.com/sap/opu/odata/sap/API_EHS_NOTIFICATION_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_s4_username"
        password: "$secrets.sap_s4_password"
      resources:
        - name: notifications
          path: "/A_EHSNotification"
          operations:
            - name: create-notification
              method: POST
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

Processes an IT infrastructure change by creating a ServiceNow change request, running a Terraform plan preview, and posting the results for CAB review via Teams.

naftiko: "0.5"
info:
  label: "IT Infrastructure Change Approval Workflow"
  description: "Processes an IT infrastructure change by creating a ServiceNow change request, running a Terraform plan preview, and posting the results for CAB review via Teams."
  tags:
    - devops
    - servicenow
    - microsoft-teams
    - infrastructure
    - change-management
capability:
  exposes:
    - type: mcp
      namespace: devops-ops
      port: 8080
      tools:
        - name: submit-infra-change
          description: "Given a change description, Terraform workspace, and requester, create a ServiceNow change request, trigger a Terraform plan, and post results for CAB review via Teams. Use for infrastructure change approvals."
          inputParameters:
            - name: change_description
              in: body
              type: string
              description: "Description of the infrastructure change."
            - name: terraform_workspace
              in: body
              type: string
              description: "Terraform Cloud workspace name."
            - name: requester
              in: body
              type: string
              description: "Requester email address."
          steps:
            - name: create-change-request
              type: call
              call: "servicenow.create-change"
              with:
                short_description: "Infra Change: {{change_description}}"
                description: "Workspace: {{terraform_workspace}} | Requester: {{requester}} | {{change_description}}"
                type: "standard"
            - name: trigger-terraform-plan
              type: call
              call: "terraform.create-run"
              with:
                workspace: "{{terraform_workspace}}"
                is_plan_only: "true"
                message: "CR: {{create-change-request.number}}"
            - name: post-for-cab-review
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_cab_channel_id"
                text: "CHANGE REQUEST: {{create-change-request.number}} | {{change_description}} | Terraform Plan: {{trigger-terraform-plan.id}} | Requester: {{requester}}"
  consumes:
    - namespace: servicenow
      type: http
      baseUri: "https://boeing.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_username"
        password: "$secrets.servicenow_password"
      resources:
        - name: changes
          path: "/table/change_request"
          operations:
            - name: create-change
              method: POST
    - namespace: terraform
      type: http
      baseUri: "https://app.terraform.io/api/v2"
      authentication:
        type: bearer
        token: "$secrets.terraform_token"
      resources:
        - name: runs
          path: "/runs"
          operations:
            - name: create-run
              method: POST
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

When GitHub Dependabot finds a critical vulnerability, creates a Jira security ticket, updates the ServiceNow CMDB, and alerts the security team via Teams.

naftiko: "0.5"
info:
  label: "IT Security Vulnerability Remediation"
  description: "When GitHub Dependabot finds a critical vulnerability, creates a Jira security ticket, updates the ServiceNow CMDB, and alerts the security team via Teams."
  tags:
    - security
    - github
    - jira
    - servicenow
    - microsoft-teams
    - vulnerability-management
capability:
  exposes:
    - type: mcp
      namespace: security-ops
      port: 8080
      tools:
        - name: remediate-vulnerability
          description: "Given a GitHub repository, vulnerability CVE, and severity, create a Jira security ticket, update the ServiceNow CMDB entry, and alert the security team via Teams. Use when a critical vulnerability is detected."
          inputParameters:
            - name: repository
              in: body
              type: string
              description: "GitHub repository name."
            - name: cve_id
              in: body
              type: string
              description: "CVE identifier, e.g. 'CVE-2026-12345'."
            - name: severity
              in: body
              type: string
              description: "Severity: critical, high, medium, low."
          steps:
            - name: create-security-ticket
              type: call
              call: "jira.create-issue"
              with:
                project_key: "SEC"
                issuetype: "Bug"
                summary: "[{{severity}}] {{cve_id}} in {{repository}}"
                description: "CVE: {{cve_id}} | Repo: {{repository}} | Severity: {{severity}}"
                priority: "{{severity}}"
            - name: update-cmdb
              type: call
              call: "servicenow.update-ci"
              with:
                ci_name: "{{repository}}"
                vulnerability: "{{cve_id}}"
                status: "Vulnerable"
            - name: alert-security
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_security_channel_id"
                text: "VULNERABILITY: [{{severity}}] {{cve_id}} in {{repository}} | Jira: {{create-security-ticket.key}} | CMDB updated"
  consumes:
    - namespace: jira
      type: http
      baseUri: "https://boeing.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
    - namespace: servicenow
      type: http
      baseUri: "https://boeing.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_username"
        password: "$secrets.servicenow_password"
      resources:
        - name: cmdb
          path: "/table/cmdb_ci"
          operations:
            - name: update-ci
              method: PATCH
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

Retrieves a Jira engineering issue by key, returning summary, status, assignee, and priority.

naftiko: "0.5"
info:
  label: "Jira Engineering Issue Lookup"
  description: "Retrieves a Jira engineering issue by key, returning summary, status, assignee, and priority."
  tags:
    - engineering
    - jira
    - lookup
    - project-management
capability:
  exposes:
    - type: mcp
      namespace: engineering
      port: 8080
      tools:
        - name: get-engineering-issue
          description: "Given a Jira issue key, retrieve the issue details including summary, status, assignee, priority, and component. Use for engineering task status checks."
          inputParameters:
            - name: issue_key
              in: body
              type: string
              description: "Jira issue key, e.g. 'ENG-4521'."
          call: "jira.get-issue"
          with:
            issue_key: "{{issue_key}}"
          outputParameters:
            - name: summary
              type: string
              mapping: "$.fields.summary"
            - name: status
              type: string
              mapping: "$.fields.status.name"
            - name: assignee
              type: string
              mapping: "$.fields.assignee.displayName"
  consumes:
    - namespace: jira
      type: http
      baseUri: "https://boeing.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

Creates a Jira issue in the appropriate Boeing engineering project and posts a notification to the relevant Microsoft Teams channel with the ticket link.

naftiko: "0.5"
info:
  label: "Jira Engineering Ticket Creator"
  description: "Creates a Jira issue in the appropriate Boeing engineering project and posts a notification to the relevant Microsoft Teams channel with the ticket link."
  tags:
    - devops
    - engineering
    - jira
    - microsoft-teams
    - ticketing
capability:
  exposes:
    - type: mcp
      namespace: eng-ticketing
      port: 8080
      tools:
        - name: create-eng-ticket
          description: "Given a project key, issue type, summary, and description, create a Jira issue in the Boeing engineering project and post the new ticket link to the designated Microsoft Teams channel. Use when engineers or automated systems need to log bugs, tasks, or improvement requests."
          inputParameters:
            - name: project_key
              in: body
              type: string
              description: "The Jira project key, e.g. 'BENG' or 'BDEF'."
            - name: issuetype
              in: body
              type: string
              description: "The Jira issue type: 'Bug', 'Task', 'Story', or 'Improvement'."
            - name: summary
              in: body
              type: string
              description: "A concise one-line summary of the issue."
            - name: description
              in: body
              type: string
              description: "Full description of the issue including steps to reproduce or acceptance criteria."
            - name: teams_channel
              in: body
              type: string
              description: "The Microsoft Teams channel ID to post the ticket notification to."
          steps:
            - name: create-issue
              type: call
              call: "jira.create-issue"
              with:
                project_key: "{{project_key}}"
                issuetype: "{{issuetype}}"
                summary: "{{summary}}"
                description: "{{description}}"
            - name: notify-team
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "{{teams_channel}}"
                text: "New Jira ticket created: [{{create-issue.key}}] {{summary}} — https://boeing.atlassian.net/browse/{{create-issue.key}}"
  consumes:
    - namespace: jira
      type: http
      baseUri: "https://boeing.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_username"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/{channel_id}/channels/{channel_id}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Aggregates completed story points and issue counts for all closed sprints in a Jira project over a rolling quarter, then posts the velocity trend to a Snowflake analytics table.

naftiko: "0.5"
info:
  label: "Jira Sprint Velocity Report"
  description: "Aggregates completed story points and issue counts for all closed sprints in a Jira project over a rolling quarter, then posts the velocity trend to a Snowflake analytics table."
  tags:
    - devops
    - agile
    - jira
    - snowflake
    - reporting
    - engineering
capability:
  exposes:
    - type: mcp
      namespace: agile-reporting
      port: 8080
      tools:
        - name: report-sprint-velocity
          description: "Given a Jira project key and number of sprints to analyze, retrieve completed sprints with story point totals from Jira and write the velocity trend data to Snowflake for engineering performance reporting. Use at the end of a PI or quarter for portfolio reporting."
          inputParameters:
            - name: project_key
              in: body
              type: string
              description: "The Jira project key to report on, e.g. 'BENG'."
            - name: sprint_count
              in: body
              type: integer
              description: "Number of recent closed sprints to include in the velocity calculation."
          steps:
            - name: get-sprints
              type: call
              call: "jira.list-sprints"
              with:
                project_key: "{{project_key}}"
                sprint_count: "{{sprint_count}}"
            - name: write-velocity
              type: call
              call: "snowflake.insert-velocity-report"
              with:
                project_key: "{{project_key}}"
                sprint_data: "{{get-sprints.results}}"
  consumes:
    - namespace: jira
      type: http
      baseUri: "https://boeing.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_username"
        password: "$secrets.jira_api_token"
      resources:
        - name: sprints
          path: "/project/{project_key}/versions"
          inputParameters:
            - name: project_key
              in: path
            - name: sprint_count
              in: query
          operations:
            - name: list-sprints
              method: GET
    - namespace: snowflake
      type: http
      baseUri: "https://boeing.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_bearer_token"
      resources:
        - name: velocity-reports
          path: "/statements"
          operations:
            - name: insert-velocity-report
              method: POST

Compiles daily manufacturing KPIs from SAP production data, refreshes the Tableau dashboard, and posts a summary to the plant leadership Teams channel.

naftiko: "0.5"
info:
  label: "Manufacturing KPI Daily Digest"
  description: "Compiles daily manufacturing KPIs from SAP production data, refreshes the Tableau dashboard, and posts a summary to the plant leadership Teams channel."
  tags:
    - production
    - sap
    - tableau
    - microsoft-teams
    - manufacturing
    - analytics
capability:
  exposes:
    - type: mcp
      namespace: production-ops
      port: 8080
      tools:
        - name: generate-daily-kpi-digest
          description: "Given a plant code and reporting date, pull production KPIs from SAP, refresh the Tableau manufacturing dashboard, and post a daily summary to the plant leadership Teams channel. Use for daily operations briefings."
          inputParameters:
            - name: plant_code
              in: body
              type: string
              description: "SAP plant code, e.g. 'EVERETT-1000'."
            - name: report_date
              in: body
              type: string
              description: "Reporting date in ISO 8601 format."
          steps:
            - name: get-production-kpis
              type: call
              call: "sap-s4.get-production-summary"
              with:
                Plant: "{{plant_code}}"
                Date: "{{report_date}}"
            - name: refresh-dashboard
              type: call
              call: "tableau.refresh-workbook"
              with:
                workbook_id: "$secrets.tableau_mfg_kpi_workbook_id"
            - name: post-digest
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_plant_leadership_channel_id"
                text: "DAILY MFG KPIs: {{plant_code}} | Date: {{report_date}} | Output: {{get-production-kpis.total_output}} | Yield: {{get-production-kpis.yield_rate}}% | Downtime: {{get-production-kpis.downtime_hours}}h"
  consumes:
    - namespace: sap-s4
      type: http
      baseUri: "https://boeing-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_s4_username"
        password: "$secrets.sap_s4_password"
      resources:
        - name: production-summary
          path: "/A_ProductionOrder_2"
          operations:
            - name: get-production-summary
              method: GET
    - namespace: tableau
      type: http
      baseUri: "https://tableau.boeing.com/api/3.19"
      authentication:
        type: bearer
        token: "$secrets.tableau_access_token"
      resources:
        - name: workbooks
          path: "/sites/boeing/workbooks/{{workbook_id}}/refresh"
          inputParameters:
            - name: workbook_id
              in: path
          operations:
            - name: refresh-workbook
              method: POST
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

Compiles a shift handoff report by pulling production data from SAP, open incidents from ServiceNow, and posting the summary to the manufacturing Teams channel.

naftiko: "0.5"
info:
  label: "Manufacturing Shift Handoff Report"
  description: "Compiles a shift handoff report by pulling production data from SAP, open incidents from ServiceNow, and posting the summary to the manufacturing Teams channel."
  tags:
    - production
    - sap
    - servicenow
    - microsoft-teams
    - manufacturing
capability:
  exposes:
    - type: mcp
      namespace: production-ops
      port: 8080
      tools:
        - name: generate-shift-handoff
          description: "Given a plant code, production line, and shift identifier, pull production output from SAP, open incidents from ServiceNow, and post a shift handoff summary to the manufacturing Teams channel. Use at shift transitions."
          inputParameters:
            - name: plant_code
              in: body
              type: string
              description: "SAP plant code."
            - name: production_line
              in: body
              type: string
              description: "Production line identifier."
            - name: shift_id
              in: body
              type: string
              description: "Shift identifier, e.g. 'DAY-2026-03-27'."
          steps:
            - name: get-production-output
              type: call
              call: "sap-s4.get-shift-output"
              with:
                Plant: "{{plant_code}}"
                Line: "{{production_line}}"
                Shift: "{{shift_id}}"
            - name: get-open-incidents
              type: call
              call: "servicenow.get-incidents"
              with:
                query: "assignment_group={{production_line}}^state!=6"
            - name: post-handoff
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_mfg_channel_id"
                text: "SHIFT HANDOFF: {{production_line}} | Shift: {{shift_id}} | Output: {{get-production-output.total_units}} | Open Incidents: {{get-open-incidents.count}}"
  consumes:
    - namespace: sap-s4
      type: http
      baseUri: "https://boeing-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_s4_username"
        password: "$secrets.sap_s4_password"
      resources:
        - name: production-output
          path: "/A_ProductionOrder_2"
          operations:
            - name: get-shift-output
              method: GET
    - namespace: servicenow
      type: http
      baseUri: "https://boeing.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_username"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: get-incidents
              method: GET
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

Creates a Microsoft 365 shared mailbox for a team or project via Graph API, adds the specified members, and records the provisioning in ServiceNow as a completed request.

naftiko: "0.5"
info:
  label: "Microsoft 365 Shared Mailbox Provisioning"
  description: "Creates a Microsoft 365 shared mailbox for a team or project via Graph API, adds the specified members, and records the provisioning in ServiceNow as a completed request."
  tags:
    - it-operations
    - microsoft-graph
    - microsoft-365
    - servicenow
    - provisioning
capability:
  exposes:
    - type: mcp
      namespace: mailbox-provisioning
      port: 8080
      tools:
        - name: provision-shared-mailbox
          description: "Given a mailbox display name, email alias, and list of member UPNs, create a Microsoft 365 shared mailbox via Graph API, add the specified members, and create a completed ServiceNow request record for audit. Use when teams request a shared project or department mailbox."
          inputParameters:
            - name: display_name
              in: body
              type: string
              description: "The display name for the shared mailbox, e.g. 'Boeing 737 MAX Program Team'."
            - name: email_alias
              in: body
              type: string
              description: "The email alias prefix, e.g. '737max-program'."
            - name: owner_upn
              in: body
              type: string
              description: "The UPN of the mailbox owner who will manage member access."
          steps:
            - name: create-mailbox
              type: call
              call: "msgraph.create-group"
              with:
                displayName: "{{display_name}}"
                mailNickname: "{{email_alias}}"
                mailEnabled: "true"
                groupTypes: "[]"
            - name: log-request
              type: call
              call: "servicenow.create-incident"
              with:
                category: "it_provisioning"
                state: "resolved"
                short_description: "Shared mailbox provisioned: {{email_alias}}@boeing.com"
                description: "Mailbox {{display_name}} ({{email_alias}}) created. Owner: {{owner_upn}}. M365 group ID: {{create-mailbox.id}}"
  consumes:
    - namespace: msgraph
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: groups
          path: "/groups"
          operations:
            - name: create-group
              method: POST
    - namespace: servicenow
      type: http
      baseUri: "https://boeing.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_username"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST

Provisions a new aircraft program workspace by creating a Jira project, a Confluence space, and a Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "New Aircraft Program Workspace Setup"
  description: "Provisions a new aircraft program workspace by creating a Jira project, a Confluence space, and a Microsoft Teams channel."
  tags:
    - engineering
    - jira
    - confluence
    - microsoft-teams
    - aerospace
    - project-management
capability:
  exposes:
    - type: mcp
      namespace: engineering-ops
      port: 8080
      tools:
        - name: setup-program-workspace
          description: "Given a program name and program lead, create a Jira project, a Confluence space, and a Teams channel for the new aircraft program. Use when a new aircraft program is initiated."
          inputParameters:
            - name: program_name
              in: body
              type: string
              description: "Aircraft program name, e.g. 'NMA-2026'."
            - name: program_lead
              in: body
              type: string
              description: "Email of the program lead."
          steps:
            - name: create-jira-project
              type: call
              call: "jira.create-project"
              with:
                name: "{{program_name}}"
                key: "{{program_name}}"
                lead: "{{program_lead}}"
                projectTypeKey: "software"
            - name: create-confluence-space
              type: call
              call: "confluence.create-space"
              with:
                key: "{{program_name}}"
                name: "{{program_name}} Program"
                description: "Collaboration space for the {{program_name}} aircraft program"
            - name: notify-team
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_engineering_channel_id"
                text: "NEW PROGRAM WORKSPACE: {{program_name}} | Jira: {{create-jira-project.key}} | Confluence: {{create-confluence-space.key}} | Lead: {{program_lead}}"
  consumes:
    - namespace: jira
      type: http
      baseUri: "https://boeing.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: projects
          path: "/project"
          operations:
            - name: create-project
              method: POST
    - namespace: confluence
      type: http
      baseUri: "https://boeing.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: spaces
          path: "/space"
          operations:
            - name: create-space
              method: POST
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

When a new employee record is created in Workday, opens a ServiceNow onboarding task, provisions a Microsoft 365 account via Graph API, and sends a Teams welcome message.

naftiko: "0.5"
info:
  label: "New Hire Onboarding Orchestrator"
  description: "When a new employee record is created in Workday, opens a ServiceNow onboarding task, provisions a Microsoft 365 account via Graph API, and sends a Teams welcome message."
  tags:
    - hr
    - onboarding
    - workday
    - servicenow
    - microsoft-graph
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-onboarding
      port: 8080
      tools:
        - name: trigger-onboarding
          description: "Given a Workday employee ID and start date, orchestrate the full new-hire onboarding sequence: look up employee details in Workday, open a ServiceNow onboarding ticket, provision the Microsoft 365 account, and send a Teams welcome message. Invoke when HR confirms a new hire is ready to activate."
          inputParameters:
            - name: workday_employee_id
              in: body
              type: string
              description: "The Workday worker ID for the new hire, e.g. 'WD-00042871'."
            - name: start_date
              in: body
              type: string
              description: "The employee start date in ISO 8601 format, e.g. '2026-04-01'."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{workday_employee_id}}"
            - name: open-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                category: "hr_onboarding"
                short_description: "New hire onboarding: {{get-employee.full_name}}"
                assigned_group: "IT_Onboarding"
            - name: provision-m365
              type: call
              call: "msgraph.create-user"
              with:
                displayName: "{{get-employee.full_name}}"
                mailNickname: "{{get-employee.username}}"
                userPrincipalName: "{{get-employee.work_email}}"
            - name: send-welcome
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-employee.work_email}}"
                text: "Welcome to Boeing, {{get-employee.first_name}}! Your IT onboarding ticket is {{open-ticket.number}}. Your start date is {{start_date}}."
  consumes:
    - namespace: workday
      type: http
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_bearer_token"
      resources:
        - name: workers
          path: "/boeing/workers/{worker_id}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - namespace: servicenow
      type: http
      baseUri: "https://boeing.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_username"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - namespace: msgraph
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: users
          path: "/users"
          operations:
            - name: create-user
              method: POST
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: chats
          path: "/chats"
          operations:
            - name: send-message
              method: POST

Queries Okta for all users in a security-sensitive group who do not have MFA enrolled and exports the non-compliant user list to Snowflake for security remediation tracking.

naftiko: "0.5"
info:
  label: "Okta MFA Policy Enforcement Check"
  description: "Queries Okta for all users in a security-sensitive group who do not have MFA enrolled and exports the non-compliant user list to Snowflake for security remediation tracking."
  tags:
    - security
    - iam
    - okta
    - snowflake
    - mfa
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: mfa-compliance
      port: 8080
      tools:
        - name: check-mfa-enrollment
          description: "Given an Okta group ID and compliance report date, retrieve all users in that group who do not have MFA enrolled from Okta and write the non-compliant list to Snowflake for security team remediation tracking. Use during monthly security posture reviews."
          inputParameters:
            - name: group_id
              in: body
              type: string
              description: "The Okta group ID to check for MFA enrollment, e.g. '00g1b2c3d4e5f6g7h'."
            - name: report_date
              in: body
              type: string
              description: "The compliance check date in ISO 8601 format."
          steps:
            - name: list-group-users
              type: call
              call: "okta.list-group-users"
              with:
                group_id: "{{group_id}}"
            - name: write-noncompliant
              type: call
              call: "snowflake.insert-mfa-report"
              with:
                group_id: "{{group_id}}"
                report_date: "{{report_date}}"
                user_count: "{{list-group-users.total_count}}"
  consumes:
    - namespace: okta
      type: http
      baseUri: "https://boeing.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: group-users
          path: "/groups/{group_id}/users"
          inputParameters:
            - name: group_id
              in: path
          operations:
            - name: list-group-users
              method: GET
    - namespace: snowflake
      type: http
      baseUri: "https://boeing.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_bearer_token"
      resources:
        - name: mfa-reports
          path: "/statements"
          operations:
            - name: insert-mfa-report
              method: POST

Lists all active Okta user-application assignments for a given application, exports the list to Snowflake for audit review, and flags dormant accounts.

naftiko: "0.5"
info:
  label: "Okta User Access Certification"
  description: "Lists all active Okta user-application assignments for a given application, exports the list to Snowflake for audit review, and flags dormant accounts."
  tags:
    - security
    - iam
    - okta
    - snowflake
    - access-certification
    - audit
capability:
  exposes:
    - type: mcp
      namespace: access-cert
      port: 8080
      tools:
        - name: certify-app-access
          description: "Given an Okta application ID and certification date, retrieve all user assignments for that application from Okta and write the access roster to Snowflake for quarterly access certification review. Use during semi-annual or quarterly access certification campaigns."
          inputParameters:
            - name: app_id
              in: body
              type: string
              description: "The Okta application ID to certify, e.g. '0oa1b2c3d4e5f6g7h'."
            - name: certification_date
              in: body
              type: string
              description: "The access certification period date in ISO 8601 format."
          steps:
            - name: list-assignments
              type: call
              call: "okta.list-app-users"
              with:
                app_id: "{{app_id}}"
            - name: write-roster
              type: call
              call: "snowflake.insert-access-roster"
              with:
                app_id: "{{app_id}}"
                certification_date: "{{certification_date}}"
  consumes:
    - namespace: okta
      type: http
      baseUri: "https://boeing.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: app-users
          path: "/apps/{app_id}/users"
          inputParameters:
            - name: app_id
              in: path
          operations:
            - name: list-app-users
              method: GET
    - namespace: snowflake
      type: http
      baseUri: "https://boeing.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_bearer_token"
      resources:
        - name: access-rosters
          path: "/statements"
          operations:
            - name: insert-access-roster
              method: POST

Retrieves the current account status of a user in Okta by email address.

naftiko: "0.5"
info:
  label: "Okta User Status Check"
  description: "Retrieves the current account status of a user in Okta by email address."
  tags:
    - identity
    - okta
    - security
    - lookup
capability:
  exposes:
    - type: mcp
      namespace: identity
      port: 8080
      tools:
        - name: get-user-status
          description: "Given a user email address, retrieve the Okta account status including activation state, last login, and MFA enrollment. Use for access verification and security checks."
          inputParameters:
            - name: email
              in: body
              type: string
              description: "User email address, e.g. 'jane.doe@boeing.com'."
          call: "okta.get-user"
          with:
            login: "{{email}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.status"
            - name: last_login
              type: string
              mapping: "$.lastLogin"
  consumes:
    - namespace: okta
      type: http
      baseUri: "https://boeing.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "SSWS $secrets.okta_api_token"
        placement: header
      resources:
        - name: users
          path: "/users/{{login}}"
          inputParameters:
            - name: login
              in: path
          operations:
            - name: get-user
              method: GET

When a production line goes down, creates a ServiceNow incident, notifies plant management via Teams, and logs downtime in SAP Plant Maintenance.

naftiko: "0.5"
info:
  label: "Production Line Downtime Escalation"
  description: "When a production line goes down, creates a ServiceNow incident, notifies plant management via Teams, and logs downtime in SAP Plant Maintenance."
  tags:
    - production
    - servicenow
    - microsoft-teams
    - sap
    - manufacturing
    - aerospace
capability:
  exposes:
    - type: mcp
      namespace: production-ops
      port: 8080
      tools:
        - name: escalate-line-downtime
          description: "Given a production line ID, downtime reason, and severity, create a ServiceNow incident, log a SAP PM notification, and alert plant management via Teams. Use when a production line stops unexpectedly."
          inputParameters:
            - name: line_id
              in: body
              type: string
              description: "Production line identifier, e.g. 'EVERETT-787-LINE-3'."
            - name: downtime_reason
              in: body
              type: string
              description: "Reason for the production line downtime."
            - name: severity
              in: body
              type: string
              description: "Severity level: P1, P2, or P3."
          steps:
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "[{{severity}}] Line down: {{line_id}}"
                urgency: "1"
                impact: "1"
                description: "Production line {{line_id}} is down. Reason: {{downtime_reason}}"
            - name: log-sap-notification
              type: call
              call: "sap-pm.create-notification"
              with:
                notification_type: "M2"
                equipment: "{{line_id}}"
                description: "Line downtime: {{downtime_reason}}"
            - name: alert-management
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_plant_mgmt_channel_id"
                text: "LINE DOWN: {{line_id}} | {{severity}} | INC: {{create-incident.number}} | SAP: {{log-sap-notification.number}} | Reason: {{downtime_reason}}"
  consumes:
    - namespace: servicenow
      type: http
      baseUri: "https://boeing.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_username"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - namespace: sap-pm
      type: http
      baseUri: "https://boeing-s4.sap.com/sap/opu/odata/sap/API_MAINTNOTIFICATION"
      authentication:
        type: basic
        username: "$secrets.sap_s4_username"
        password: "$secrets.sap_s4_password"
      resources:
        - name: notifications
          path: "/A_MaintenanceNotification"
          operations:
            - name: create-notification
              method: POST
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

Validates quality gate criteria by pulling inspection results from SAP QM, checking against Jira acceptance criteria, and posting the gate status to Teams.

naftiko: "0.5"
info:
  label: "Production Quality Gate Check"
  description: "Validates quality gate criteria by pulling inspection results from SAP QM, checking against Jira acceptance criteria, and posting the gate status to Teams."
  tags:
    - quality
    - manufacturing
    - sap
    - jira
    - microsoft-teams
    - production
capability:
  exposes:
    - type: mcp
      namespace: quality-ops
      port: 8080
      tools:
        - name: check-quality-gate
          description: "Given a production order and quality gate ID, pull inspection results from SAP QM, verify against Jira acceptance criteria, and post the pass/fail status to Teams. Use at each production quality gate."
          inputParameters:
            - name: production_order
              in: body
              type: string
              description: "SAP production order number."
            - name: quality_gate_id
              in: body
              type: string
              description: "Quality gate identifier, e.g. 'QG-3-FINAL-ASSEMBLY'."
          steps:
            - name: get-inspection-results
              type: call
              call: "sap-qm.get-results"
              with:
                production_order: "{{production_order}}"
                gate: "{{quality_gate_id}}"
            - name: check-acceptance
              type: call
              call: "jira.get-issue"
              with:
                issue_key: "{{quality_gate_id}}"
            - name: post-gate-status
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_quality_channel_id"
                text: "QUALITY GATE: {{quality_gate_id}} | Order: {{production_order}} | Result: {{get-inspection-results.disposition}} | Criteria: {{check-acceptance.fields.status.name}}"
  consumes:
    - namespace: sap-qm
      type: http
      baseUri: "https://boeing-s4.sap.com/sap/opu/odata/sap/API_INSPECTIONLOT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_s4_username"
        password: "$secrets.sap_s4_password"
      resources:
        - name: inspection-results
          path: "/A_InspectionLot"
          operations:
            - name: get-results
              method: GET
    - namespace: jira
      type: http
      baseUri: "https://boeing.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
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

Prepares for a regulatory audit by collecting documents from SharePoint, creating a Jira checklist, and scheduling prep meetings via Teams.

naftiko: "0.5"
info:
  label: "Regulatory Audit Preparation Workflow"
  description: "Prepares for a regulatory audit by collecting documents from SharePoint, creating a Jira checklist, and scheduling prep meetings via Teams."
  tags:
    - compliance
    - sharepoint
    - jira
    - microsoft-teams
    - audit
    - aerospace
capability:
  exposes:
    - type: mcp
      namespace: compliance-ops
      port: 8080
      tools:
        - name: prepare-regulatory-audit
          description: "Given an audit type, audit date, and regulatory body, collect required documents from SharePoint, create a Jira audit checklist, and notify the compliance team via Teams. Use when preparing for FAA, EASA, or other regulatory audits."
          inputParameters:
            - name: audit_type
              in: body
              type: string
              description: "Audit type, e.g. 'FAA Production Certificate Renewal'."
            - name: audit_date
              in: body
              type: string
              description: "Scheduled audit date in ISO 8601 format."
            - name: regulatory_body
              in: body
              type: string
              description: "Regulatory body, e.g. 'FAA', 'EASA'."
          steps:
            - name: collect-documents
              type: call
              call: "sharepoint.search-documents"
              with:
                query: "audit {{audit_type}} {{regulatory_body}}"
                library: "RegulatoryDocs"
            - name: create-audit-checklist
              type: call
              call: "jira.create-issue"
              with:
                project_key: "COMP"
                issuetype: "Epic"
                summary: "{{regulatory_body}} Audit: {{audit_type}} - {{audit_date}}"
                description: "Regulatory audit preparation | Documents: {{collect-documents.count}} found | Date: {{audit_date}}"
                duedate: "{{audit_date}}"
            - name: notify-compliance
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_compliance_channel_id"
                text: "AUDIT PREP: {{regulatory_body}} {{audit_type}} | Date: {{audit_date}} | Docs: {{collect-documents.count}} | Jira: {{create-audit-checklist.key}}"
  consumes:
    - namespace: sharepoint
      type: http
      baseUri: "https://boeing.sharepoint.com/_api"
      authentication:
        type: bearer
        token: "$secrets.sharepoint_access_token"
      resources:
        - name: search
          path: "/search/query"
          operations:
            - name: search-documents
              method: GET
    - namespace: jira
      type: http
      baseUri: "https://boeing.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
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

Accepts a workplace safety incident report, creates a high-priority ServiceNow safety incident ticket, and notifies the EHS manager via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Safety Incident Report to ServiceNow"
  description: "Accepts a workplace safety incident report, creates a high-priority ServiceNow safety incident ticket, and notifies the EHS manager via Microsoft Teams."
  tags:
    - safety
    - ehs
    - servicenow
    - microsoft-teams
    - incident-response
    - manufacturing
capability:
  exposes:
    - type: mcp
      namespace: safety-ops
      port: 8080
      tools:
        - name: report-safety-incident
          description: "Given a facility code, incident description, reporter name, and incident datetime, create a high-priority ServiceNow safety incident ticket and immediately notify the Environmental Health and Safety manager via Microsoft Teams. Use when a safety incident occurs on any Boeing manufacturing floor or facility."
          inputParameters:
            - name: facility_code
              in: body
              type: string
              description: "The Boeing facility code where the incident occurred, e.g. 'FAC-EVERETT-747'."
            - name: incident_description
              in: body
              type: string
              description: "A detailed description of the safety incident, including what happened and any injuries."
            - name: reporter_name
              in: body
              type: string
              description: "Full name of the person reporting the incident."
            - name: incident_datetime
              in: body
              type: string
              description: "ISO 8601 datetime when the incident occurred, e.g. '2026-03-20T14:30:00Z'."
          steps:
            - name: create-safety-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                category: "safety"
                urgency: "1"
                impact: "1"
                short_description: "Safety Incident at {{facility_code}}: {{incident_datetime}}"
                description: "Reporter: {{reporter_name}}\nFacility: {{facility_code}}\nDatetime: {{incident_datetime}}\nDescription: {{incident_description}}"
            - name: notify-ehs
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_ehs_channel_id"
                text: "SAFETY INCIDENT REPORTED: Facility {{facility_code}} | {{incident_datetime}} | Ticket: {{create-safety-ticket.number}} | Reporter: {{reporter_name}}"
  consumes:
    - namespace: servicenow
      type: http
      baseUri: "https://boeing.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_username"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

Retrieves open cases, recent activities, and renewal opportunities for a Salesforce account and compiles a summary digest delivered via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Salesforce Account Health Digest"
  description: "Retrieves open cases, recent activities, and renewal opportunities for a Salesforce account and compiles a summary digest delivered via Microsoft Teams."
  tags:
    - sales
    - crm
    - salesforce
    - microsoft-teams
    - reporting
    - account-management
capability:
  exposes:
    - type: mcp
      namespace: sales-reporting
      port: 8080
      tools:
        - name: digest-account-health
          description: "Given a Salesforce account ID and Teams channel ID, retrieve the account's open cases, last activity date, and renewal opportunities from Salesforce, then post a formatted health summary to the Microsoft Teams channel. Use for weekly account reviews or pre-meeting preparation."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "The Salesforce account ID, e.g. '0011500001AbCdEAAV'."
            - name: teams_channel_id
              in: body
              type: string
              description: "The Microsoft Teams channel ID to post the digest to."
          steps:
            - name: get-account
              type: call
              call: "salesforce.get-account"
              with:
                account_id: "{{account_id}}"
            - name: get-cases
              type: call
              call: "salesforce.list-cases"
              with:
                account_id: "{{account_id}}"
            - name: post-digest
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "{{teams_channel_id}}"
                text: "Account Health: {{get-account.name}} | Open Cases: {{get-cases.total_count}} | Last Activity: {{get-account.last_activity_date}}"
  consumes:
    - namespace: salesforce
      type: http
      baseUri: "https://boeing.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_bearer_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{account_id}"
          inputParameters:
            - name: account_id
              in: path
          operations:
            - name: get-account
              method: GET
        - name: cases
          path: "/sobjects/Case"
          inputParameters:
            - name: account_id
              in: query
          operations:
            - name: list-cases
              method: GET
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

Retrieves defense contract details from Salesforce by contract number, returning status, value, and program name.

naftiko: "0.5"
info:
  label: "Salesforce Defense Contract Lookup"
  description: "Retrieves defense contract details from Salesforce by contract number, returning status, value, and program name."
  tags:
    - sales
    - salesforce
    - defense
    - lookup
    - aerospace
capability:
  exposes:
    - type: mcp
      namespace: sales-ops
      port: 8080
      tools:
        - name: get-defense-contract
          description: "Given a Salesforce contract number, retrieve the defense contract record including program name, contract value, status, and contracting officer. Use for contract status inquiries."
          inputParameters:
            - name: contract_number
              in: body
              type: string
              description: "The Salesforce contract number, e.g. 'CTR-FA8620-22-C-2045'."
          call: "salesforce.get-contract"
          with:
            contract_number: "{{contract_number}}"
          outputParameters:
            - name: program_name
              type: string
              mapping: "$.records[0].Program_Name__c"
            - name: contract_value
              type: string
              mapping: "$.records[0].Contract_Value__c"
            - name: status
              type: string
              mapping: "$.records[0].Status"
  consumes:
    - namespace: salesforce
      type: http
      baseUri: "https://boeing.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_access_token"
      resources:
        - name: contracts
          path: "/query"
          inputParameters:
            - name: contract_number
              in: query
          operations:
            - name: get-contract
              method: GET

Retrieves newly created defense contract opportunities from Salesforce and syncs key fields to SAP S/4HANA as sales orders for Boeing's defense business unit.

naftiko: "0.5"
info:
  label: "Salesforce Government Contract Opportunity Sync"
  description: "Retrieves newly created defense contract opportunities from Salesforce and syncs key fields to SAP S/4HANA as sales orders for Boeing's defense business unit."
  tags:
    - sales
    - crm
    - salesforce
    - sap-s4hana
    - defense
    - sync
capability:
  exposes:
    - type: mcp
      namespace: sales-sync
      port: 8080
      tools:
        - name: sync-opportunity-to-sap
          description: "Given a Salesforce opportunity ID, retrieve the opportunity details from Salesforce CRM and create a corresponding preliminary sales order in SAP S/4HANA for the defense business unit. Use when a Salesforce opportunity reaches Closed-Won or Contract stage."
          inputParameters:
            - name: opportunity_id
              in: body
              type: string
              description: "The Salesforce opportunity ID, e.g. '0061500001ZsDpOAAV'."
          steps:
            - name: get-opportunity
              type: call
              call: "salesforce.get-opportunity"
              with:
                opportunity_id: "{{opportunity_id}}"
            - name: create-sales-order
              type: call
              call: "sap-s4.create-sales-order"
              with:
                customer: "{{get-opportunity.account_name}}"
                amount: "{{get-opportunity.amount}}"
                currency: "{{get-opportunity.currency_iso_code}}"
                description: "{{get-opportunity.name}}"
  consumes:
    - namespace: salesforce
      type: http
      baseUri: "https://boeing.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_bearer_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity/{opportunity_id}"
          inputParameters:
            - name: opportunity_id
              in: path
          operations:
            - name: get-opportunity
              method: GET
    - namespace: sap-s4
      type: http
      baseUri: "https://boeing-s4.sap.com/sap/opu/odata/sap/API_SALES_ORDER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_s4_username"
        password: "$secrets.sap_s4_password"
      resources:
        - name: sales-orders
          path: "/A_SalesOrder"
          operations:
            - name: create-sales-order
              method: POST

Scans SAP Ariba for supplier contracts expiring within a configurable number of days and notifies the procurement team in Microsoft Teams with a renewal action list.

naftiko: "0.5"
info:
  label: "SAP Ariba Contract Expiry Alert"
  description: "Scans SAP Ariba for supplier contracts expiring within a configurable number of days and notifies the procurement team in Microsoft Teams with a renewal action list."
  tags:
    - procurement
    - contract-management
    - sap-ariba
    - microsoft-teams
    - alerts
capability:
  exposes:
    - type: mcp
      namespace: contract-alerts
      port: 8080
      tools:
        - name: alert-expiring-contracts
          description: "Given a number of days to look ahead, query SAP Ariba for all supplier contracts expiring within that window and post a formatted expiry alert with renewal links to the procurement Microsoft Teams channel. Use for weekly contract hygiene monitoring."
          inputParameters:
            - name: days_ahead
              in: body
              type: integer
              description: "Number of days from today to look ahead for contract expiration, e.g. 30."
            - name: teams_channel_id
              in: body
              type: string
              description: "The Microsoft Teams channel ID for the procurement team."
          steps:
            - name: list-expiring
              type: call
              call: "ariba.list-expiring-contracts"
              with:
                days_ahead: "{{days_ahead}}"
            - name: notify-procurement
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "{{teams_channel_id}}"
                text: "Contract Expiry Alert: {{list-expiring.total_count}} contracts expiring within {{days_ahead}} days. Top expiring: {{list-expiring.summary}}"
  consumes:
    - namespace: ariba
      type: http
      baseUri: "https://openapi.ariba.com/api/contract-management/v1"
      authentication:
        type: apikey
        key: "apiKey"
        value: "$secrets.ariba_api_key"
        placement: query
      resources:
        - name: contracts
          path: "/contracts"
          inputParameters:
            - name: days_ahead
              in: query
          operations:
            - name: list-expiring-contracts
              method: GET
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

Retrieves contract status and key terms from SAP Ariba by contract ID.

naftiko: "0.5"
info:
  label: "SAP Ariba Contract Status Lookup"
  description: "Retrieves contract status and key terms from SAP Ariba by contract ID."
  tags:
    - procurement
    - sap-ariba
    - contracts
    - lookup
capability:
  exposes:
    - type: mcp
      namespace: procurement
      port: 8080
      tools:
        - name: get-ariba-contract
          description: "Given a SAP Ariba contract ID, retrieve the contract status, effective dates, and total value. Use for procurement contract inquiries."
          inputParameters:
            - name: contract_id
              in: body
              type: string
              description: "SAP Ariba contract ID, e.g. 'CW12345'."
          call: "ariba.get-contract"
          with:
            contractId: "{{contract_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.Status"
            - name: effective_date
              type: string
              mapping: "$.EffectiveDate"
            - name: expiration_date
              type: string
              mapping: "$.ExpirationDate"
  consumes:
    - namespace: ariba
      type: http
      baseUri: "https://openapi.ariba.com/api/contract-management/v1"
      authentication:
        type: bearer
        token: "$secrets.ariba_access_token"
      resources:
        - name: contracts
          path: "/contracts/{{contractId}}"
          inputParameters:
            - name: contractId
              in: path
          operations:
            - name: get-contract
              method: GET

Retrieves the current status and supplier responses for an active SAP Ariba sourcing event, allowing procurement agents to monitor bid progress.

naftiko: "0.5"
info:
  label: "SAP Ariba Sourcing Event Status"
  description: "Retrieves the current status and supplier responses for an active SAP Ariba sourcing event, allowing procurement agents to monitor bid progress."
  tags:
    - procurement
    - sourcing
    - sap-ariba
    - lookup
capability:
  exposes:
    - type: mcp
      namespace: sourcing
      port: 8080
      tools:
        - name: get-sourcing-event
          description: "Given a SAP Ariba sourcing event ID, retrieve the event title, status, bid deadline, and list of invited suppliers with their response status. Use when procurement needs to check bidding progress on an active RFQ or RFP."
          inputParameters:
            - name: event_id
              in: body
              type: string
              description: "The Ariba sourcing event ID, e.g. 'Doc10123456789'."
          call: "ariba.get-event"
          with:
            eventId: "{{event_id}}"
          outputParameters:
            - name: event_title
              type: string
              mapping: "$.title"
            - name: status
              type: string
              mapping: "$.status"
            - name: bid_deadline
              type: string
              mapping: "$.bidDeadline"
  consumes:
    - namespace: ariba
      type: http
      baseUri: "https://openapi.ariba.com/api/sourcing-projects/v1"
      authentication:
        type: apikey
        key: "apiKey"
        value: "$secrets.ariba_api_key"
        placement: query
      resources:
        - name: events
          path: "/events/{eventId}"
          inputParameters:
            - name: eventId
              in: path
          operations:
            - name: get-event
              method: GET

Retrieves a pending employee expense report from SAP Concur, verifies the submitter's cost center in Workday, and posts the approval decision back to Concur.

naftiko: "0.5"
info:
  label: "SAP Concur Expense Report Approval"
  description: "Retrieves a pending employee expense report from SAP Concur, verifies the submitter's cost center in Workday, and posts the approval decision back to Concur."
  tags:
    - finance
    - expense-management
    - sap-concur
    - workday
    - approval
capability:
  exposes:
    - type: mcp
      namespace: expense-approval
      port: 8080
      tools:
        - name: approve-expense-report
          description: "Given an SAP Concur expense report ID and approver employee ID, fetch the expense report from Concur, validate the submitter's cost center via Workday, and approve the report in Concur. Use when a manager or finance agent needs to review and approve an employee's expense report."
          inputParameters:
            - name: report_id
              in: body
              type: string
              description: "The SAP Concur expense report ID, e.g. 'gWurnt3wk8Nq2v6'."
            - name: approver_employee_id
              in: body
              type: string
              description: "The Workday employee ID of the approving manager."
          steps:
            - name: get-report
              type: call
              call: "concur.get-expense-report"
              with:
                report_id: "{{report_id}}"
            - name: validate-cost-center
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{approver_employee_id}}"
            - name: approve-report
              type: call
              call: "concur.approve-expense-report"
              with:
                report_id: "{{report_id}}"
                approver_id: "{{validate-cost-center.employee_id}}"
  consumes:
    - namespace: concur
      type: http
      baseUri: "https://www.concursolutions.com/api/v3.0"
      authentication:
        type: bearer
        token: "$secrets.concur_bearer_token"
      resources:
        - name: expense-reports
          path: "/expense/reports/{report_id}"
          inputParameters:
            - name: report_id
              in: path
          operations:
            - name: get-expense-report
              method: GET
            - name: approve-expense-report
              method: PATCH
    - namespace: workday
      type: http
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_bearer_token"
      resources:
        - name: workers
          path: "/boeing/workers/{worker_id}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET

Retrieves actual-vs-planned budget figures from SAP S/4HANA for an active project or WBS element and posts a variance alert to Microsoft Teams when thresholds are exceeded.

naftiko: "0.5"
info:
  label: "SAP Contract Budget Variance Report"
  description: "Retrieves actual-vs-planned budget figures from SAP S/4HANA for an active project or WBS element and posts a variance alert to Microsoft Teams when thresholds are exceeded."
  tags:
    - finance
    - project-controls
    - sap-s4hana
    - microsoft-teams
    - reporting
    - defense
capability:
  exposes:
    - type: mcp
      namespace: project-finance
      port: 8080
      tools:
        - name: report-budget-variance
          description: "Given an SAP WBS element ID and variance threshold percentage, retrieve the planned versus actual cost figures for that project element from SAP S/4HANA and post a Teams alert if actual spend exceeds the threshold. Use for weekly earned value management checks on defense contracts."
          inputParameters:
            - name: wbs_element
              in: body
              type: string
              description: "The SAP WBS element ID for the contract or project, e.g. 'D-USAF-2026-F15'."
            - name: variance_threshold_pct
              in: body
              type: number
              description: "The variance percentage above which to trigger an alert, e.g. 10.0 for 10%."
          steps:
            - name: get-budget-actuals
              type: call
              call: "sap-s4-co.get-wbs-actuals"
              with:
                WBSElement: "{{wbs_element}}"
            - name: post-variance-alert
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_finance_channel_id"
                text: "Budget Variance Alert: WBS {{wbs_element}} | Planned: {{get-budget-actuals.planned_cost}} | Actual: {{get-budget-actuals.actual_cost}} | Threshold: {{variance_threshold_pct}}%"
  consumes:
    - namespace: sap-s4-co
      type: http
      baseUri: "https://boeing-s4.sap.com/sap/opu/odata/sap/API_COPROJECTELMT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_s4_username"
        password: "$secrets.sap_s4_password"
      resources:
        - name: wbs-elements
          path: "/A_EnterpriseProjectElement(ProjectElement='{WBSElement}')"
          inputParameters:
            - name: WBSElement
              in: path
          operations:
            - name: get-wbs-actuals
              method: GET
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

Processes a goods receipt in SAP, triggers a quality inspection lot, and notifies the receiving team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "SAP Goods Receipt and Quality Inspection"
  description: "Processes a goods receipt in SAP, triggers a quality inspection lot, and notifies the receiving team via Microsoft Teams."
  tags:
    - supply-chain
    - sap
    - sap-s4hana
    - quality
    - microsoft-teams
    - manufacturing
capability:
  exposes:
    - type: mcp
      namespace: supply-chain-ops
      port: 8080
      tools:
        - name: process-goods-receipt
          description: "Given a purchase order number and delivery note, post the goods receipt in SAP, trigger a quality inspection lot, and notify the receiving dock team via Teams. Use when materials arrive at the receiving dock."
          inputParameters:
            - name: po_number
              in: body
              type: string
              description: "SAP purchase order number, e.g. '4500012345'."
            - name: delivery_note
              in: body
              type: string
              description: "Vendor delivery note number."
            - name: plant_code
              in: body
              type: string
              description: "Receiving plant code, e.g. 'EVERETT-1000'."
          steps:
            - name: post-goods-receipt
              type: call
              call: "sap-s4.create-goods-receipt"
              with:
                PurchaseOrder: "{{po_number}}"
                DeliveryNote: "{{delivery_note}}"
                Plant: "{{plant_code}}"
            - name: create-inspection-lot
              type: call
              call: "sap-s4.create-inspection-lot"
              with:
                material_document: "{{post-goods-receipt.MaterialDocument}}"
                inspection_type: "01"
            - name: notify-receiving
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_receiving_channel_id"
                text: "GOODS RECEIVED: PO {{po_number}} | Plant: {{plant_code}} | GR: {{post-goods-receipt.MaterialDocument}} | QI Lot: {{create-inspection-lot.InspectionLot}}"
  consumes:
    - namespace: sap-s4
      type: http
      baseUri: "https://boeing-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_DOCUMENT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_s4_username"
        password: "$secrets.sap_s4_password"
      resources:
        - name: goods-receipts
          path: "/A_MaterialDocumentHeader"
          operations:
            - name: create-goods-receipt
              method: POST
        - name: inspection-lots
          path: "/A_InspectionLot"
          operations:
            - name: create-inspection-lot
              method: POST
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

Checks current inventory stock levels for a given material at a specified plant in SAP S/4HANA.

naftiko: "0.5"
info:
  label: "SAP Inventory Stock Level Check"
  description: "Checks current inventory stock levels for a given material at a specified plant in SAP S/4HANA."
  tags:
    - supply-chain
    - sap
    - sap-s4hana
    - inventory
    - manufacturing
capability:
  exposes:
    - type: mcp
      namespace: supply-chain
      port: 8080
      tools:
        - name: check-stock-level
          description: "Given a material number and plant code, retrieve current unrestricted, in-quality, and blocked stock quantities from SAP S/4HANA. Use when planners or production managers need to verify parts availability."
          inputParameters:
            - name: material_number
              in: body
              type: string
              description: "SAP material number, e.g. 'MAT-7478832'."
            - name: plant_code
              in: body
              type: string
              description: "SAP plant code, e.g. 'EVERETT-1000'."
          call: "sap-s4.get-stock"
          with:
            Material: "{{material_number}}"
            Plant: "{{plant_code}}"
          outputParameters:
            - name: unrestricted_stock
              type: string
              mapping: "$.d.MatlWrhsStkQtyInMatlBaseUnit"
            - name: quality_stock
              type: string
              mapping: "$.d.QualityInspectionStockQty"
  consumes:
    - namespace: sap-s4
      type: http
      baseUri: "https://boeing-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_s4_username"
        password: "$secrets.sap_s4_password"
      resources:
        - name: stock
          path: "/A_MatlStkInAcctMod"
          inputParameters:
            - name: Material
              in: query
            - name: Plant
              in: query
          operations:
            - name: get-stock
              method: GET

Retrieves a pending vendor invoice from SAP S/4HANA, validates it against the corresponding purchase order, and posts the approval decision back to SAP.

naftiko: "0.5"
info:
  label: "SAP Invoice Processing and Approval"
  description: "Retrieves a pending vendor invoice from SAP S/4HANA, validates it against the corresponding purchase order, and posts the approval decision back to SAP."
  tags:
    - finance
    - accounts-payable
    - sap
    - sap-s4hana
    - approval
capability:
  exposes:
    - type: mcp
      namespace: finance-ap
      port: 8080
      tools:
        - name: approve-invoice
          description: "Given an SAP invoice document number and fiscal year, fetch the invoice from SAP S/4HANA, look up the matching purchase order to verify amounts, and post the approval back to SAP. Use when an AP agent or approver needs to validate and approve a vendor invoice."
          inputParameters:
            - name: invoice_document
              in: body
              type: string
              description: "The SAP invoice document number, e.g. '5100001234'."
            - name: fiscal_year
              in: body
              type: string
              description: "The fiscal year of the invoice, e.g. '2026'."
          steps:
            - name: get-invoice
              type: call
              call: "sap-s4-fi.get-invoice"
              with:
                InvoiceDocument: "{{invoice_document}}"
                FiscalYear: "{{fiscal_year}}"
            - name: post-approval
              type: call
              call: "sap-s4-fi.approve-invoice"
              with:
                InvoiceDocument: "{{invoice_document}}"
                FiscalYear: "{{fiscal_year}}"
  consumes:
    - namespace: sap-s4-fi
      type: http
      baseUri: "https://boeing-s4.sap.com/sap/opu/odata/sap/API_SUPPLIER_INVOICE_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_s4_username"
        password: "$secrets.sap_s4_password"
      resources:
        - name: supplier-invoices
          path: "/A_SupplierInvoice(InvoiceDocument='{InvoiceDocument}',FiscalYear='{FiscalYear}')"
          inputParameters:
            - name: InvoiceDocument
              in: path
            - name: FiscalYear
              in: path
          operations:
            - name: get-invoice
              method: GET
            - name: approve-invoice
              method: POST

Retrieves material master data from SAP S/4HANA by material number, returning description, unit of measure, and procurement type.

naftiko: "0.5"
info:
  label: "SAP Material Master Lookup"
  description: "Retrieves material master data from SAP S/4HANA by material number, returning description, unit of measure, and procurement type."
  tags:
    - procurement
    - sap
    - sap-s4hana
    - lookup
    - manufacturing
capability:
  exposes:
    - type: mcp
      namespace: procurement
      port: 8080
      tools:
        - name: get-material-master
          description: "Given a SAP material number, retrieve material master data including description, base unit of measure, material group, and procurement type from SAP S/4HANA. Use when an engineer or planner needs material specifications."
          inputParameters:
            - name: material_number
              in: body
              type: string
              description: "The SAP material number, e.g. 'MAT-7478832'."
          call: "sap-s4.get-material"
          with:
            MaterialNumber: "{{material_number}}"
          outputParameters:
            - name: material_description
              type: string
              mapping: "$.d.MaterialDescription"
            - name: base_unit
              type: string
              mapping: "$.d.BaseUnit"
            - name: material_group
              type: string
              mapping: "$.d.MaterialGroup"
  consumes:
    - namespace: sap-s4
      type: http
      baseUri: "https://boeing-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_MASTER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_s4_username"
        password: "$secrets.sap_s4_password"
      resources:
        - name: materials
          path: "/A_Material('{MaterialNumber}')"
          inputParameters:
            - name: MaterialNumber
              in: path
          operations:
            - name: get-material
              method: GET

Runs MRP exception analysis in SAP, identifies critical shortages, creates Jira procurement tasks, and alerts the supply chain team via Teams.

naftiko: "0.5"
info:
  label: "SAP Material Requirements Planning Alert"
  description: "Runs MRP exception analysis in SAP, identifies critical shortages, creates Jira procurement tasks, and alerts the supply chain team via Teams."
  tags:
    - supply-chain
    - sap
    - jira
    - microsoft-teams
    - manufacturing
    - procurement
capability:
  exposes:
    - type: mcp
      namespace: supply-chain-ops
      port: 8080
      tools:
        - name: analyze-mrp-exceptions
          description: "Given a plant code and MRP controller, run MRP exception analysis in SAP, create Jira tasks for critical shortages, and alert the supply chain team via Teams. Use for daily MRP review."
          inputParameters:
            - name: plant_code
              in: body
              type: string
              description: "SAP plant code, e.g. 'EVERETT-1000'."
            - name: mrp_controller
              in: body
              type: string
              description: "MRP controller code."
          steps:
            - name: get-mrp-exceptions
              type: call
              call: "sap-s4.get-mrp-exceptions"
              with:
                Plant: "{{plant_code}}"
                MRPController: "{{mrp_controller}}"
            - name: create-procurement-tasks
              type: call
              call: "jira.create-issue"
              with:
                project_key: "SCM"
                issuetype: "Task"
                summary: "MRP Shortages: {{plant_code}} - {{mrp_controller}}"
                description: "Critical shortages: {{get-mrp-exceptions.critical_count}} items | Plant: {{plant_code}}"
            - name: alert-supply-chain
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_supply_chain_channel_id"
                text: "MRP ALERT: {{plant_code}} | Controller: {{mrp_controller}} | Critical: {{get-mrp-exceptions.critical_count}} | Jira: {{create-procurement-tasks.key}}"
  consumes:
    - namespace: sap-s4
      type: http
      baseUri: "https://boeing-s4.sap.com/sap/opu/odata/sap/API_MRP_MATERIALS_SRV_01"
      authentication:
        type: basic
        username: "$secrets.sap_s4_username"
        password: "$secrets.sap_s4_password"
      resources:
        - name: mrp-exceptions
          path: "/A_MRPMaterial"
          operations:
            - name: get-mrp-exceptions
              method: GET
    - namespace: jira
      type: http
      baseUri: "https://boeing.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
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

Retrieves an SAP plant maintenance work order with its status, assigned technician, and estimated completion from SAP S/4HANA for manufacturing operations inquiries.

naftiko: "0.5"
info:
  label: "SAP Plant Maintenance Work Order Lookup"
  description: "Retrieves an SAP plant maintenance work order with its status, assigned technician, and estimated completion from SAP S/4HANA for manufacturing operations inquiries."
  tags:
    - manufacturing
    - plant-maintenance
    - sap
    - sap-s4hana
    - lookup
capability:
  exposes:
    - type: mcp
      namespace: plant-maintenance
      port: 8080
      tools:
        - name: get-work-order
          description: "Given an SAP plant maintenance work order number, retrieve the order's current status, assigned maintenance technician, priority, and planned completion date from SAP S/4HANA. Use when maintenance supervisors or manufacturing agents need to check work order progress."
          inputParameters:
            - name: order_number
              in: body
              type: string
              description: "The SAP maintenance work order number, e.g. '10000123'."
          call: "sap-pm.get-work-order"
          with:
            MaintenanceOrder: "{{order_number}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.d.SystemStatus"
            - name: assigned_technician
              type: string
              mapping: "$.d.PersonResponsible"
            - name: planned_finish_date
              type: string
              mapping: "$.d.LatestAcceptableCompletionDate"
            - name: priority
              type: string
              mapping: "$.d.OrderPriority"
  consumes:
    - namespace: sap-pm
      type: http
      baseUri: "https://boeing-s4.sap.com/sap/opu/odata/sap/API_MAINTORDER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_s4_username"
        password: "$secrets.sap_s4_password"
      resources:
        - name: maintenance-orders
          path: "/MaintenanceOrder('{MaintenanceOrder}')"
          inputParameters:
            - name: MaintenanceOrder
              in: path
          operations:
            - name: get-work-order
              method: GET

Plans a plant shutdown by creating SAP PM maintenance orders, scheduling resources in Workday, and notifying affected teams via Teams.

naftiko: "0.5"
info:
  label: "SAP Plant Shutdown Planning Workflow"
  description: "Plans a plant shutdown by creating SAP PM maintenance orders, scheduling resources in Workday, and notifying affected teams via Teams."
  tags:
    - manufacturing
    - sap
    - workday
    - microsoft-teams
    - maintenance
    - planning
capability:
  exposes:
    - type: mcp
      namespace: manufacturing-ops
      port: 8080
      tools:
        - name: plan-plant-shutdown
          description: "Given a plant code, shutdown dates, and maintenance scope, create SAP PM maintenance orders, check Workday resource availability, and notify affected teams via Teams. Use when planning scheduled plant shutdowns."
          inputParameters:
            - name: plant_code
              in: body
              type: string
              description: "SAP plant code."
            - name: start_date
              in: body
              type: string
              description: "Shutdown start date in ISO 8601 format."
            - name: end_date
              in: body
              type: string
              description: "Shutdown end date in ISO 8601 format."
            - name: maintenance_scope
              in: body
              type: string
              description: "Scope of maintenance activities."
          steps:
            - name: create-maintenance-orders
              type: call
              call: "sap-pm.create-shutdown-orders"
              with:
                Plant: "{{plant_code}}"
                StartDate: "{{start_date}}"
                EndDate: "{{end_date}}"
                Scope: "{{maintenance_scope}}"
            - name: check-resource-availability
              type: call
              call: "workday.get-availability"
              with:
                department: "MAINTENANCE-{{plant_code}}"
                start_date: "{{start_date}}"
                end_date: "{{end_date}}"
            - name: notify-teams
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_plant_mgmt_channel_id"
                text: "PLANT SHUTDOWN: {{plant_code}} | {{start_date}} to {{end_date}} | Scope: {{maintenance_scope}} | SAP Orders: {{create-maintenance-orders.count}} | Available Staff: {{check-resource-availability.count}}"
  consumes:
    - namespace: sap-pm
      type: http
      baseUri: "https://boeing-s4.sap.com/sap/opu/odata/sap/API_MAINTORDER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_s4_username"
        password: "$secrets.sap_s4_password"
      resources:
        - name: maintenance-orders
          path: "/MaintenanceOrder"
          operations:
            - name: create-shutdown-orders
              method: POST
    - namespace: workday
      type: http
      baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/boeing"
      authentication:
        type: bearer
        token: "$secrets.workday_bearer_token"
      resources:
        - name: availability
          path: "/workers/availability"
          operations:
            - name: get-availability
              method: GET
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

Retrieves the status and progress of a production order from SAP S/4HANA by order number.

naftiko: "0.5"
info:
  label: "SAP Production Order Status"
  description: "Retrieves the status and progress of a production order from SAP S/4HANA by order number."
  tags:
    - production
    - sap
    - sap-s4hana
    - manufacturing
    - lookup
capability:
  exposes:
    - type: mcp
      namespace: production
      port: 8080
      tools:
        - name: get-production-order
          description: "Given a SAP production order number, retrieve the order status, planned vs actual quantities, and scheduled dates. Use when production managers need to check manufacturing order progress."
          inputParameters:
            - name: order_number
              in: body
              type: string
              description: "SAP production order number, e.g. 'PRD-1000234'."
          call: "sap-s4.get-prod-order"
          with:
            ManufacturingOrder: "{{order_number}}"
          outputParameters:
            - name: planned_qty
              type: string
              mapping: "$.d.MfgOrderPlannedTotalQty"
            - name: actual_qty
              type: string
              mapping: "$.d.MfgOrderConfirmedYieldQty"
            - name: status
              type: string
              mapping: "$.d.ManufacturingOrderStatus"
  consumes:
    - namespace: sap-s4
      type: http
      baseUri: "https://boeing-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_s4_username"
        password: "$secrets.sap_s4_password"
      resources:
        - name: production-orders
          path: "/A_ProductionOrder_2('{ManufacturingOrder}')"
          inputParameters:
            - name: ManufacturingOrder
              in: path
          operations:
            - name: get-prod-order
              method: GET

Retrieves a purchase order and its line items from SAP S/4HANA by PO number, returning vendor, amount, and approval status for agent or employee queries.

naftiko: "0.5"
info:
  label: "SAP Purchase Order Lookup"
  description: "Retrieves a purchase order and its line items from SAP S/4HANA by PO number, returning vendor, amount, and approval status for agent or employee queries."
  tags:
    - finance
    - procurement
    - sap
    - sap-s4hana
    - lookup
capability:
  exposes:
    - type: mcp
      namespace: procurement
      port: 8080
      tools:
        - name: get-purchase-order
          description: "Given a SAP purchase order number, retrieve the PO header and line items including vendor name, total amount, currency, and current approval status from SAP S/4HANA. Use this when an employee or agent needs to check PO details, approval state, or vendor information."
          inputParameters:
            - name: po_number
              in: body
              type: string
              description: "The SAP purchase order number, e.g. '4500012345'."
          call: "sap-s4.get-po"
          with:
            PurchaseOrder: "{{po_number}}"
          outputParameters:
            - name: vendor_name
              type: string
              mapping: "$.d.Supplier"
            - name: net_amount
              type: string
              mapping: "$.d.NetAmount"
            - name: currency
              type: string
              mapping: "$.d.DocumentCurrency"
            - name: status
              type: string
              mapping: "$.d.ProcessingStatus"
  consumes:
    - namespace: sap-s4
      type: http
      baseUri: "https://boeing-s4.sap.com/sap/opu/odata/sap/API_PURCHASEORDER_PROCESS_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_s4_username"
        password: "$secrets.sap_s4_password"
      resources:
        - name: purchase-orders
          path: "/A_PurchaseOrder('{PurchaseOrder}')"
          inputParameters:
            - name: PurchaseOrder
              in: path
          operations:
            - name: get-po
              method: GET

Retrieves vendor master data from SAP by vendor number, returning name, address, and payment terms.

naftiko: "0.5"
info:
  label: "SAP Vendor Master Lookup"
  description: "Retrieves vendor master data from SAP by vendor number, returning name, address, and payment terms."
  tags:
    - procurement
    - sap
    - sap-s4hana
    - vendor
    - lookup
capability:
  exposes:
    - type: mcp
      namespace: procurement
      port: 8080
      tools:
        - name: get-vendor
          description: "Given a SAP vendor number, retrieve vendor master data including company name, address, payment terms, and status. Use for supplier verification and procurement inquiries."
          inputParameters:
            - name: vendor_number
              in: body
              type: string
              description: "SAP vendor number, e.g. '0001000234'."
          call: "sap-s4.get-vendor"
          with:
            Supplier: "{{vendor_number}}"
          outputParameters:
            - name: vendor_name
              type: string
              mapping: "$.d.SupplierName"
            - name: payment_terms
              type: string
              mapping: "$.d.PaymentTerms"
            - name: country
              type: string
              mapping: "$.d.Country"
  consumes:
    - namespace: sap-s4
      type: http
      baseUri: "https://boeing-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
      authentication:
        type: basic
        username: "$secrets.sap_s4_username"
        password: "$secrets.sap_s4_password"
      resources:
        - name: suppliers
          path: "/A_Supplier('{Supplier}')"
          inputParameters:
            - name: Supplier
              in: path
          operations:
            - name: get-vendor
              method: GET

Retrieves IT asset details from ServiceNow CMDB by asset tag, returning owner, location, and lifecycle status.

naftiko: "0.5"
info:
  label: "ServiceNow IT Asset Lookup"
  description: "Retrieves IT asset details from ServiceNow CMDB by asset tag, returning owner, location, and lifecycle status."
  tags:
    - it-operations
    - servicenow
    - cmdb
    - lookup
capability:
  exposes:
    - type: mcp
      namespace: it-ops
      port: 8080
      tools:
        - name: get-asset
          description: "Given an IT asset tag, retrieve the asset record from ServiceNow CMDB including owner, location, model, and lifecycle status. Use when support staff need to verify asset details."
          inputParameters:
            - name: asset_tag
              in: body
              type: string
              description: "The IT asset tag, e.g. 'BOE-LAP-00412'."
          call: "servicenow.get-asset"
          with:
            asset_tag: "{{asset_tag}}"
          outputParameters:
            - name: owner
              type: string
              mapping: "$.result.assigned_to.display_value"
            - name: location
              type: string
              mapping: "$.result.location.display_value"
            - name: status
              type: string
              mapping: "$.result.install_status"
  consumes:
    - namespace: servicenow
      type: http
      baseUri: "https://boeing.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_username"
        password: "$secrets.servicenow_password"
      resources:
        - name: assets
          path: "/table/alm_hardware"
          inputParameters:
            - name: asset_tag
              in: query
          operations:
            - name: get-asset
              method: GET

Queries ServiceNow for the latest backup job execution records for a given configuration item and alerts via Microsoft Teams if the most recent backup is older than the defined threshold.

naftiko: "0.5"
info:
  label: "ServiceNow Backup Verification Check"
  description: "Queries ServiceNow for the latest backup job execution records for a given configuration item and alerts via Microsoft Teams if the most recent backup is older than the defined threshold."
  tags:
    - itsm
    - backup
    - servicenow
    - microsoft-teams
    - operations
capability:
  exposes:
    - type: mcp
      namespace: backup-ops
      port: 8080
      tools:
        - name: verify-backup-status
          description: "Given a ServiceNow configuration item name and maximum acceptable backup age in hours, retrieve the most recent backup job record for that CI from ServiceNow and post a Teams alert if the backup is stale or failed. Use for daily backup verification across Boeing's critical IT systems."
          inputParameters:
            - name: ci_name
              in: body
              type: string
              description: "The ServiceNow configuration item name to check, e.g. 'PROD-SAP-DB-01'."
            - name: max_age_hours
              in: body
              type: integer
              description: "Maximum acceptable age of the last successful backup in hours, e.g. 24."
          steps:
            - name: get-backup-record
              type: call
              call: "servicenow.get-backup-job"
              with:
                ci_name: "{{ci_name}}"
            - name: alert-if-stale
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_ops_channel_id"
                text: "Backup Check: {{ci_name}} | Last successful backup: {{get-backup-record.last_success}} | Status: {{get-backup-record.status}} | Max age threshold: {{max_age_hours}}h"
  consumes:
    - namespace: servicenow
      type: http
      baseUri: "https://boeing.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_username"
        password: "$secrets.servicenow_password"
      resources:
        - name: backup-jobs
          path: "/table/u_backup_job"
          inputParameters:
            - name: ci_name
              in: query
          operations:
            - name: get-backup-job
              method: GET
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

Retrieves a pending ServiceNow change request, looks up the approver's profile from Microsoft Graph, and records the approval decision back to ServiceNow.

naftiko: "0.5"
info:
  label: "ServiceNow Change Request Approval"
  description: "Retrieves a pending ServiceNow change request, looks up the approver's profile from Microsoft Graph, and records the approval decision back to ServiceNow."
  tags:
    - itsm
    - change-management
    - servicenow
    - microsoft-graph
    - approval
capability:
  exposes:
    - type: mcp
      namespace: change-mgmt
      port: 8080
      tools:
        - name: approve-change-request
          description: "Given a ServiceNow change request number and approver email, fetch the change request details, verify the approver is authorized via Microsoft Graph, and post the approval to ServiceNow. Use when an ITSM agent or approver needs to authorize a production change."
          inputParameters:
            - name: change_number
              in: body
              type: string
              description: "The ServiceNow change request number, e.g. 'CHG0012345'."
            - name: approver_email
              in: body
              type: string
              description: "The email address of the approving manager."
          steps:
            - name: get-change
              type: call
              call: "servicenow.get-change"
              with:
                number: "{{change_number}}"
            - name: get-approver
              type: call
              call: "msgraph.get-user"
              with:
                user_id: "{{approver_email}}"
            - name: post-approval
              type: call
              call: "servicenow.approve-change"
              with:
                sys_id: "{{get-change.sys_id}}"
                approver_id: "{{get-approver.id}}"
                state: "approved"
  consumes:
    - namespace: servicenow
      type: http
      baseUri: "https://boeing.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_username"
        password: "$secrets.servicenow_password"
      resources:
        - name: change-requests
          path: "/table/change_request"
          inputParameters:
            - name: number
              in: query
          operations:
            - name: get-change
              method: GET
            - name: approve-change
              method: PATCH
    - namespace: msgraph
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: users
          path: "/users/{user_id}"
          inputParameters:
            - name: user_id
              in: path
          operations:
            - name: get-user
              method: GET

Retrieves a quality document from SharePoint by document ID, returning content, version, and approval status.

naftiko: "0.5"
info:
  label: "SharePoint Quality Document Retrieval"
  description: "Retrieves a quality document from SharePoint by document ID, returning content, version, and approval status."
  tags:
    - quality
    - sharepoint
    - document-management
    - manufacturing
capability:
  exposes:
    - type: mcp
      namespace: quality
      port: 8080
      tools:
        - name: get-quality-document
          description: "Given a SharePoint document ID, retrieve the quality assurance document including title, version, approval status, and download link. Use for quality audits and inspections."
          inputParameters:
            - name: document_id
              in: body
              type: string
              description: "SharePoint document ID, e.g. 'QA-DOC-2026-0412'."
          call: "sharepoint.get-document"
          with:
            item_id: "{{document_id}}"
          outputParameters:
            - name: title
              type: string
              mapping: "$.d.Title"
            - name: version
              type: string
              mapping: "$.d.UIVersionLabel"
            - name: approval_status
              type: string
              mapping: "$.d.OData__ModerationStatus"
  consumes:
    - namespace: sharepoint
      type: http
      baseUri: "https://boeing.sharepoint.com/_api"
      authentication:
        type: bearer
        token: "$secrets.sharepoint_access_token"
      resources:
        - name: documents
          path: "/web/lists/getbytitle('QualityDocs')/items({{item_id}})"
          inputParameters:
            - name: item_id
              in: path
          operations:
            - name: get-document
              method: GET

Triggers a Snowflake stored procedure to refresh Boeing's executive financial dashboard materialized views and notifies the analytics team in Microsoft Teams when complete.

naftiko: "0.5"
info:
  label: "Snowflake BI Refresh Trigger"
  description: "Triggers a Snowflake stored procedure to refresh Boeing's executive financial dashboard materialized views and notifies the analytics team in Microsoft Teams when complete."
  tags:
    - data
    - analytics
    - snowflake
    - microsoft-teams
    - bi
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: bi-refresh
      port: 8080
      tools:
        - name: refresh-executive-dashboard
          description: "Given a Snowflake warehouse name and dashboard name, execute the materialized view refresh procedure in Snowflake and post a completion notification to the analytics Microsoft Teams channel. Use at period close or when the CFO dashboard requires fresh data."
          inputParameters:
            - name: warehouse_name
              in: body
              type: string
              description: "The Snowflake warehouse to use for the refresh, e.g. 'BOEING_BI_WH'."
            - name: dashboard_name
              in: body
              type: string
              description: "The name of the dashboard to refresh, e.g. 'EXECUTIVE_FINANCIAL_SUMMARY'."
          steps:
            - name: run-refresh
              type: call
              call: "snowflake.execute-refresh"
              with:
                warehouse: "{{warehouse_name}}"
                procedure: "REFRESH_{{dashboard_name}}"
            - name: notify-analytics
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_analytics_channel_id"
                text: "Dashboard refresh complete: {{dashboard_name}} | Warehouse: {{warehouse_name}} | Duration: {{run-refresh.elapsed_seconds}}s"
  consumes:
    - namespace: snowflake
      type: http
      baseUri: "https://boeing.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_bearer_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-refresh
              method: POST
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

Queries Snowflake query history to detect failed or long-running pipeline jobs and creates a Datadog alert if thresholds are exceeded.

naftiko: "0.5"
info:
  label: "Snowflake Data Pipeline Health Check"
  description: "Queries Snowflake query history to detect failed or long-running pipeline jobs and creates a Datadog alert if thresholds are exceeded."
  tags:
    - data
    - analytics
    - snowflake
    - datadog
    - pipeline-monitoring
capability:
  exposes:
    - type: mcp
      namespace: data-ops
      port: 8080
      tools:
        - name: check-pipeline-health
          description: "Given a Snowflake warehouse name and time window, query the Snowflake query history for failed or slow-running jobs, and if failures are found, create a Datadog event to surface the issue to the data engineering team. Use for scheduled data pipeline health monitoring."
          inputParameters:
            - name: warehouse_name
              in: body
              type: string
              description: "The Snowflake virtual warehouse name to inspect, e.g. 'BOEING_ETL_WH'."
            - name: lookback_minutes
              in: body
              type: integer
              description: "Number of minutes to look back in query history, e.g. 60."
          steps:
            - name: query-history
              type: call
              call: "snowflake.get-query-history"
              with:
                warehouse: "{{warehouse_name}}"
                lookback_minutes: "{{lookback_minutes}}"
            - name: flag-failure
              type: call
              call: "datadog.create-event"
              with:
                title: "Snowflake pipeline failures in {{warehouse_name}}"
                text: "Failed queries detected in last {{lookback_minutes}} minutes. Count: {{query-history.failure_count}}"
                alert_type: "warning"
  consumes:
    - namespace: snowflake
      type: http
      baseUri: "https://boeing.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_bearer_token"
      resources:
        - name: query-history
          path: "/statements"
          inputParameters:
            - name: warehouse
              in: query
            - name: lookback_minutes
              in: query
          operations:
            - name: get-query-history
              method: POST
    - namespace: datadog
      type: http
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: events
          path: "/events"
          operations:
            - name: create-event
              method: POST

Searches Splunk for security events matching a given query within a specified time range.

naftiko: "0.5"
info:
  label: "Splunk Security Event Search"
  description: "Searches Splunk for security events matching a given query within a specified time range."
  tags:
    - security
    - splunk
    - search
    - monitoring
capability:
  exposes:
    - type: mcp
      namespace: security
      port: 8080
      tools:
        - name: search-security-events
          description: "Given a Splunk search query and time range, execute the search and return matching security events. Use for incident investigation and security audits."
          inputParameters:
            - name: search_query
              in: body
              type: string
              description: "Splunk SPL search query, e.g. 'index=security sourcetype=firewall action=blocked'."
            - name: time_range
              in: body
              type: string
              description: "Time range for the search, e.g. '-24h'."
          call: "splunk.create-search"
          with:
            search: "{{search_query}}"
            earliest_time: "{{time_range}}"
          outputParameters:
            - name: sid
              type: string
              mapping: "$.sid"
  consumes:
    - namespace: splunk
      type: http
      baseUri: "https://splunk.boeing.com:8089/services"
      authentication:
        type: bearer
        token: "$secrets.splunk_token"
      resources:
        - name: searches
          path: "/search/jobs"
          operations:
            - name: create-search
              method: POST

Onboards a new supplier by creating a vendor master record in SAP, a Salesforce account, and a ServiceNow onboarding task, then notifying procurement via Teams.

naftiko: "0.5"
info:
  label: "Supplier Onboarding Orchestration"
  description: "Onboards a new supplier by creating a vendor master record in SAP, a Salesforce account, and a ServiceNow onboarding task, then notifying procurement via Teams."
  tags:
    - procurement
    - sap
    - salesforce
    - servicenow
    - microsoft-teams
    - supply-chain
capability:
  exposes:
    - type: mcp
      namespace: procurement-ops
      port: 8080
      tools:
        - name: onboard-supplier
          description: "Given a supplier name, DUNS number, and primary contact, create a SAP vendor master record, a Salesforce account, a ServiceNow onboarding task, and notify procurement via Teams. Use when a new supplier is approved for onboarding."
          inputParameters:
            - name: supplier_name
              in: body
              type: string
              description: "Name of the new supplier."
            - name: duns_number
              in: body
              type: string
              description: "DUNS number for the supplier."
            - name: primary_contact
              in: body
              type: string
              description: "Primary contact email for the supplier."
          steps:
            - name: create-sap-vendor
              type: call
              call: "sap-s4.create-vendor"
              with:
                SupplierName: "{{supplier_name}}"
                DUNSNumber: "{{duns_number}}"
            - name: create-sf-account
              type: call
              call: "salesforce.create-account"
              with:
                Name: "{{supplier_name}}"
                Type: "Vendor"
                DUNS: "{{duns_number}}"
            - name: create-onboarding-task
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "Supplier Onboarding: {{supplier_name}}"
                description: "SAP Vendor: {{create-sap-vendor.Supplier}} | SF Account: {{create-sf-account.id}} | Contact: {{primary_contact}}"
            - name: notify-procurement
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_procurement_channel_id"
                text: "NEW SUPPLIER: {{supplier_name}} | SAP: {{create-sap-vendor.Supplier}} | SNOW: {{create-onboarding-task.number}}"
  consumes:
    - namespace: sap-s4
      type: http
      baseUri: "https://boeing-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
      authentication:
        type: basic
        username: "$secrets.sap_s4_username"
        password: "$secrets.sap_s4_password"
      resources:
        - name: suppliers
          path: "/A_Supplier"
          operations:
            - name: create-vendor
              method: POST
    - namespace: salesforce
      type: http
      baseUri: "https://boeing.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_access_token"
      resources:
        - name: accounts
          path: "/sobjects/Account"
          operations:
            - name: create-account
              method: POST
    - namespace: servicenow
      type: http
      baseUri: "https://boeing.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_username"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/sc_task"
          operations:
            - name: create-task
              method: POST
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

Initiates a supplier quality audit by pulling vendor data from SAP, creating a Jira audit task, and scheduling a review meeting via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Supplier Quality Audit Workflow"
  description: "Initiates a supplier quality audit by pulling vendor data from SAP, creating a Jira audit task, and scheduling a review meeting via Microsoft Teams."
  tags:
    - quality
    - supply-chain
    - sap
    - jira
    - microsoft-teams
    - procurement
capability:
  exposes:
    - type: mcp
      namespace: quality-ops
      port: 8080
      tools:
        - name: initiate-supplier-audit
          description: "Given a vendor number and audit scope, pull vendor data from SAP, create a Jira audit task, and schedule a review meeting via Teams. Use when a supplier quality audit is required."
          inputParameters:
            - name: vendor_number
              in: body
              type: string
              description: "SAP vendor number, e.g. '0001000234'."
            - name: audit_scope
              in: body
              type: string
              description: "Scope of the audit, e.g. 'Annual quality system review'."
          steps:
            - name: get-vendor-data
              type: call
              call: "sap-s4.get-vendor"
              with:
                Supplier: "{{vendor_number}}"
            - name: create-audit-task
              type: call
              call: "jira.create-issue"
              with:
                project_key: "QA"
                issuetype: "Task"
                summary: "Supplier Audit: {{get-vendor-data.SupplierName}} ({{vendor_number}})"
                description: "Scope: {{audit_scope}} | Vendor: {{get-vendor-data.SupplierName}}"
            - name: notify-audit-team
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_quality_channel_id"
                text: "SUPPLIER AUDIT INITIATED: {{get-vendor-data.SupplierName}} | Scope: {{audit_scope}} | Jira: {{create-audit-task.key}}"
  consumes:
    - namespace: sap-s4
      type: http
      baseUri: "https://boeing-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
      authentication:
        type: basic
        username: "$secrets.sap_s4_username"
        password: "$secrets.sap_s4_password"
      resources:
        - name: suppliers
          path: "/A_Supplier('{Supplier}')"
          inputParameters:
            - name: Supplier
              in: path
          operations:
            - name: get-vendor
              method: GET
    - namespace: jira
      type: http
      baseUri: "https://boeing.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
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

When a supply chain disruption is detected, creates a Jira incident, updates affected SAP purchase orders, and notifies procurement via Teams.

naftiko: "0.5"
info:
  label: "Supply Chain Disruption Alert"
  description: "When a supply chain disruption is detected, creates a Jira incident, updates affected SAP purchase orders, and notifies procurement via Teams."
  tags:
    - supply-chain
    - jira
    - sap
    - microsoft-teams
    - procurement
    - aerospace
capability:
  exposes:
    - type: mcp
      namespace: supply-chain-ops
      port: 8080
      tools:
        - name: handle-supply-disruption
          description: "Given a supplier ID, disruption description, and affected PO numbers, create a Jira incident, flag the SAP purchase orders, and notify procurement via Teams. Use when a supply chain disruption impacts Boeing operations."
          inputParameters:
            - name: supplier_id
              in: body
              type: string
              description: "SAP supplier ID affected by the disruption."
            - name: disruption_desc
              in: body
              type: string
              description: "Description of the supply chain disruption."
            - name: affected_pos
              in: body
              type: string
              description: "Comma-separated list of affected PO numbers."
          steps:
            - name: create-disruption-ticket
              type: call
              call: "jira.create-issue"
              with:
                project_key: "SCM"
                issuetype: "Bug"
                summary: "Supply Disruption: Supplier {{supplier_id}}"
                description: "{{disruption_desc}} | Affected POs: {{affected_pos}}"
            - name: flag-purchase-orders
              type: call
              call: "sap-s4.update-po-status"
              with:
                po_numbers: "{{affected_pos}}"
                status_note: "Supply disruption: {{create-disruption-ticket.key}}"
            - name: notify-procurement
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_procurement_channel_id"
                text: "SUPPLY DISRUPTION: Supplier {{supplier_id}} | {{disruption_desc}} | POs: {{affected_pos}} | Jira: {{create-disruption-ticket.key}}"
  consumes:
    - namespace: jira
      type: http
      baseUri: "https://boeing.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
    - namespace: sap-s4
      type: http
      baseUri: "https://boeing-s4.sap.com/sap/opu/odata/sap/API_PURCHASEORDER_PROCESS_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_s4_username"
        password: "$secrets.sap_s4_password"
      resources:
        - name: purchase-orders
          path: "/A_PurchaseOrder"
          operations:
            - name: update-po-status
              method: PATCH
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

Triggers a refresh of a Tableau manufacturing analytics dashboard by workbook ID.

naftiko: "0.5"
info:
  label: "Tableau Manufacturing Dashboard Refresh"
  description: "Triggers a refresh of a Tableau manufacturing analytics dashboard by workbook ID."
  tags:
    - analytics
    - tableau
    - manufacturing
    - dashboard
capability:
  exposes:
    - type: mcp
      namespace: analytics
      port: 8080
      tools:
        - name: refresh-dashboard
          description: "Given a Tableau workbook ID, trigger an extract refresh for the manufacturing analytics dashboard. Use to ensure dashboards reflect latest production data."
          inputParameters:
            - name: workbook_id
              in: body
              type: string
              description: "Tableau workbook ID, e.g. 'wb-mfg-quality-2026'."
          call: "tableau.refresh-workbook"
          with:
            workbook_id: "{{workbook_id}}"
          outputParameters:
            - name: job_id
              type: string
              mapping: "$.job.id"
            - name: status
              type: string
              mapping: "$.job.status"
  consumes:
    - namespace: tableau
      type: http
      baseUri: "https://tableau.boeing.com/api/3.19"
      authentication:
        type: bearer
        token: "$secrets.tableau_access_token"
      resources:
        - name: workbooks
          path: "/sites/boeing/workbooks/{{workbook_id}}/refresh"
          inputParameters:
            - name: workbook_id
              in: path
          operations:
            - name: refresh-workbook
              method: POST

Checks SAP PM for tooling calibration due dates, creates ServiceNow reminders, and alerts tool crib managers via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Tooling Calibration Due Alert"
  description: "Checks SAP PM for tooling calibration due dates, creates ServiceNow reminders, and alerts tool crib managers via Microsoft Teams."
  tags:
    - manufacturing
    - sap
    - servicenow
    - microsoft-teams
    - quality
    - tooling
capability:
  exposes:
    - type: mcp
      namespace: quality-ops
      port: 8080
      tools:
        - name: check-calibration-due
          description: "Given a tool category and plant code, query SAP PM for tools with calibration due within the next 30 days, create ServiceNow reminder tasks, and alert tool crib managers via Teams. Use for proactive calibration management."
          inputParameters:
            - name: tool_category
              in: body
              type: string
              description: "Tool category, e.g. 'torque-wrenches'."
            - name: plant_code
              in: body
              type: string
              description: "Plant code, e.g. 'EVERETT-1000'."
          steps:
            - name: query-calibration-due
              type: call
              call: "sap-pm.get-calibration-due"
              with:
                category: "{{tool_category}}"
                plant: "{{plant_code}}"
            - name: create-reminder
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "Calibration Due: {{tool_category}} at {{plant_code}}"
                description: "Tools due for calibration: {{query-calibration-due.count}} items"
            - name: alert-tool-crib
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_toolcrib_channel_id"
                text: "CALIBRATION DUE: {{query-calibration-due.count}} {{tool_category}} tools at {{plant_code}} | SNOW: {{create-reminder.number}}"
  consumes:
    - namespace: sap-pm
      type: http
      baseUri: "https://boeing-s4.sap.com/sap/opu/odata/sap/API_MAINTORDER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_s4_username"
        password: "$secrets.sap_s4_password"
      resources:
        - name: calibration
          path: "/MaintenanceOrder"
          operations:
            - name: get-calibration-due
              method: GET
    - namespace: servicenow
      type: http
      baseUri: "https://boeing.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_username"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/sc_task"
          operations:
            - name: create-task
              method: POST
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

Compiles a vendor performance scorecard by pulling delivery and quality data from SAP, aggregating in Snowflake, and publishing to Tableau.

naftiko: "0.5"
info:
  label: "Vendor Performance Scorecard Generation"
  description: "Compiles a vendor performance scorecard by pulling delivery and quality data from SAP, aggregating in Snowflake, and publishing to Tableau."
  tags:
    - supply-chain
    - sap
    - snowflake
    - tableau
    - procurement
    - analytics
capability:
  exposes:
    - type: mcp
      namespace: procurement-ops
      port: 8080
      tools:
        - name: generate-vendor-scorecard
          description: "Given a vendor number and reporting period, pull delivery and quality metrics from SAP, aggregate in Snowflake, and refresh the Tableau vendor scorecard. Use for quarterly vendor performance reviews."
          inputParameters:
            - name: vendor_number
              in: body
              type: string
              description: "SAP vendor number, e.g. '0001000234'."
            - name: period
              in: body
              type: string
              description: "Reporting period, e.g. '2026-Q1'."
          steps:
            - name: extract-sap-data
              type: call
              call: "sap-s4.get-vendor-metrics"
              with:
                Supplier: "{{vendor_number}}"
                Period: "{{period}}"
            - name: aggregate-in-snowflake
              type: call
              call: "snowflake.execute-query"
              with:
                warehouse: "PROCUREMENT_WH"
                query: "CALL sp_vendor_scorecard('{{vendor_number}}', '{{period}}');"
            - name: refresh-scorecard
              type: call
              call: "tableau.refresh-workbook"
              with:
                workbook_id: "$secrets.tableau_vendor_scorecard_id"
  consumes:
    - namespace: sap-s4
      type: http
      baseUri: "https://boeing-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
      authentication:
        type: basic
        username: "$secrets.sap_s4_username"
        password: "$secrets.sap_s4_password"
      resources:
        - name: vendor-metrics
          path: "/A_Supplier('{Supplier}')/to_SupplierEvaluation"
          inputParameters:
            - name: Supplier
              in: path
          operations:
            - name: get-vendor-metrics
              method: GET
    - namespace: snowflake
      type: http
      baseUri: "https://boeing.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - namespace: tableau
      type: http
      baseUri: "https://tableau.boeing.com/api/3.19"
      authentication:
        type: bearer
        token: "$secrets.tableau_access_token"
      resources:
        - name: workbooks
          path: "/sites/boeing/workbooks/{{workbook_id}}/refresh"
          inputParameters:
            - name: workbook_id
              in: path
          operations:
            - name: refresh-workbook
              method: POST

Retrieves an employee profile from Workday by employee ID, returning name, title, department, and manager.

naftiko: "0.5"
info:
  label: "Workday Employee Profile Lookup"
  description: "Retrieves an employee profile from Workday by employee ID, returning name, title, department, and manager."
  tags:
    - hr
    - workday
    - lookup
    - employee
capability:
  exposes:
    - type: mcp
      namespace: hr-ops
      port: 8080
      tools:
        - name: get-employee-profile
          description: "Given a Workday employee ID, retrieve the employee profile including full name, job title, department, cost center, and direct manager. Use for HR inquiries or onboarding verification."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday employee ID, e.g. 'EMP-204817'."
          call: "workday.get-worker"
          with:
            worker_id: "{{employee_id}}"
          outputParameters:
            - name: full_name
              type: string
              mapping: "$.Worker.Name"
            - name: job_title
              type: string
              mapping: "$.Worker.Position.Title"
            - name: department
              type: string
              mapping: "$.Worker.Organization.Name"
  consumes:
    - namespace: workday
      type: http
      baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/boeing"
      authentication:
        type: bearer
        token: "$secrets.workday_bearer_token"
      resources:
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET

Queries Workday for current active headcount by business unit and exports the summary to a Snowflake table for downstream analytics and reporting.

naftiko: "0.5"
info:
  label: "Workday Headcount Snapshot"
  description: "Queries Workday for current active headcount by business unit and exports the summary to a Snowflake table for downstream analytics and reporting."
  tags:
    - hr
    - analytics
    - headcount
    - workday
    - snowflake
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: hr-reporting
      port: 8080
      tools:
        - name: snapshot-headcount
          description: "Given a Workday organization ID, retrieve all active worker records for that org from Workday and write the aggregated headcount record to the Snowflake HR analytics table. Use at period close or on-demand when headcount data is needed for workforce planning."
          inputParameters:
            - name: org_id
              in: body
              type: string
              description: "The Workday organization reference ID, e.g. 'ORG-COMMERCIAL-AIRPLANES'."
            - name: as_of_date
              in: body
              type: string
              description: "The snapshot date in ISO 8601 format, e.g. '2026-03-31'."
          steps:
            - name: get-workers
              type: call
              call: "workday.list-workers"
              with:
                org_id: "{{org_id}}"
                effective_date: "{{as_of_date}}"
            - name: write-snapshot
              type: call
              call: "snowflake.insert-headcount"
              with:
                org_id: "{{org_id}}"
                as_of_date: "{{as_of_date}}"
                headcount: "{{get-workers.total_count}}"
  consumes:
    - namespace: workday
      type: http
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_bearer_token"
      resources:
        - name: workers
          path: "/boeing/workers"
          inputParameters:
            - name: org_id
              in: query
            - name: effective_date
              in: query
          operations:
            - name: list-workers
              method: GET
    - namespace: snowflake
      type: http
      baseUri: "https://boeing.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_bearer_token"
      resources:
        - name: headcount-records
          path: "/statements"
          operations:
            - name: insert-headcount
              method: POST

Retrieves all open job requisitions from Workday for a given business unit and posts a weekly hiring digest to the recruiting Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Workday Open Requisition Digest"
  description: "Retrieves all open job requisitions from Workday for a given business unit and posts a weekly hiring digest to the recruiting Microsoft Teams channel."
  tags:
    - hr
    - recruiting
    - workday
    - microsoft-teams
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: recruiting-reporting
      port: 8080
      tools:
        - name: digest-open-requisitions
          description: "Given a Workday organization ID and Teams channel ID, retrieve all open job requisitions for that business unit from Workday and post a formatted weekly recruiting digest to the Microsoft Teams recruiting channel. Use every Monday for the weekly recruiting standup."
          inputParameters:
            - name: org_id
              in: body
              type: string
              description: "The Workday organization ID to scope requisitions, e.g. 'ORG-DEFENSE-SPACE'."
            - name: teams_channel_id
              in: body
              type: string
              description: "The Microsoft Teams channel ID for the recruiting team."
          steps:
            - name: list-requisitions
              type: call
              call: "workday.list-job-requisitions"
              with:
                org_id: "{{org_id}}"
                status: "Open"
            - name: post-digest
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "{{teams_channel_id}}"
                text: "Weekly Recruiting Digest — {{org_id}}: {{list-requisitions.total_count}} open requisitions. Top roles: {{list-requisitions.top_titles}}"
  consumes:
    - namespace: workday
      type: http
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_bearer_token"
      resources:
        - name: job-requisitions
          path: "/boeing/jobRequisitions"
          inputParameters:
            - name: org_id
              in: query
            - name: status
              in: query
          operations:
            - name: list-job-requisitions
              method: GET
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

Queries Workday for the latest payroll run results, compares gross pay totals against the prior period baseline, and alerts the payroll team in Microsoft Teams if variance exceeds the defined threshold.

naftiko: "0.5"
info:
  label: "Workday Payroll Variance Check"
  description: "Queries Workday for the latest payroll run results, compares gross pay totals against the prior period baseline, and alerts the payroll team in Microsoft Teams if variance exceeds the defined threshold."
  tags:
    - hr
    - payroll
    - workday
    - microsoft-teams
    - finance
capability:
  exposes:
    - type: mcp
      namespace: payroll-ops
      port: 8080
      tools:
        - name: check-payroll-variance
          description: "Given a Workday pay group ID, pay period end date, and variance threshold percentage, retrieve the current payroll run totals from Workday and post a Teams alert if gross pay has deviated from the prior period by more than the threshold. Use before payroll finalization to catch data entry errors or anomalies."
          inputParameters:
            - name: pay_group_id
              in: body
              type: string
              description: "The Workday pay group ID, e.g. 'PG-BOEING-US-BIWEEKLY'."
            - name: pay_period_end
              in: body
              type: string
              description: "The pay period end date in ISO 8601 format, e.g. '2026-03-28'."
            - name: variance_threshold_pct
              in: body
              type: number
              description: "Variance percentage above which to alert, e.g. 5.0 for 5%."
          steps:
            - name: get-payroll-results
              type: call
              call: "workday.get-payroll-results"
              with:
                pay_group_id: "{{pay_group_id}}"
                pay_period_end: "{{pay_period_end}}"
            - name: alert-payroll-team
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_payroll_channel_id"
                text: "Payroll Variance Check: Pay Group {{pay_group_id}} | Period: {{pay_period_end}} | Gross Pay: {{get-payroll-results.gross_pay}} | Prior Period: {{get-payroll-results.prior_gross_pay}} | Threshold: {{variance_threshold_pct}}%"
  consumes:
    - namespace: workday
      type: http
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_bearer_token"
      resources:
        - name: payroll-results
          path: "/boeing/payrollResults"
          inputParameters:
            - name: pay_group_id
              in: query
            - name: pay_period_end
              in: query
          operations:
            - name: get-payroll-results
              method: GET
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

Initiates an annual performance review cycle in Workday for a business unit, creates tracking tasks in Jira for HR operations, and notifies managers via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Workday Performance Review Cycle Launch"
  description: "Initiates an annual performance review cycle in Workday for a business unit, creates tracking tasks in Jira for HR operations, and notifies managers via Microsoft Teams."
  tags:
    - hr
    - performance-management
    - workday
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: perf-review
      port: 8080
      tools:
        - name: launch-review-cycle
          description: "Given a Workday organization ID, review cycle name, and deadline date, initiate the performance review cycle in Workday, create a Jira tracking epic for HR operations to monitor progress, and broadcast the cycle launch announcement to the management Microsoft Teams channel. Use when HR kicks off annual or mid-year performance reviews."
          inputParameters:
            - name: org_id
              in: body
              type: string
              description: "The Workday organization ID for the review cycle scope."
            - name: cycle_name
              in: body
              type: string
              description: "The name of the review cycle, e.g. '2026 Annual Performance Review'."
            - name: deadline_date
              in: body
              type: string
              description: "The review submission deadline in ISO 8601 format."
          steps:
            - name: create-review-cycle
              type: call
              call: "workday.create-review-cycle"
              with:
                org_id: "{{org_id}}"
                cycle_name: "{{cycle_name}}"
                deadline: "{{deadline_date}}"
            - name: create-jira-epic
              type: call
              call: "jira.create-issue"
              with:
                project_key: "HR"
                issuetype: "Epic"
                summary: "{{cycle_name}} — {{org_id}}"
                description: "Performance review cycle launched for org {{org_id}}. Deadline: {{deadline_date}}. Workday cycle ID: {{create-review-cycle.cycle_id}}"
            - name: notify-managers
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.teams_hr_channel_id"
                text: "Performance review cycle launched: {{cycle_name}} | Org: {{org_id}} | Deadline: {{deadline_date}} | Jira Epic: {{create-jira-epic.key}}"
  consumes:
    - namespace: workday
      type: http
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_bearer_token"
      resources:
        - name: review-cycles
          path: "/boeing/performanceReviewCycles"
          operations:
            - name: create-review-cycle
              method: POST
    - namespace: jira
      type: http
      baseUri: "https://boeing.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_username"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - namespace: msteams
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: channel-messages
          path: "/teams/messages"
          operations:
            - name: post-message
              method: POST

When a job role change is recorded in Workday, updates the employee's Okta group memberships and Microsoft 365 license assignment to match their new role profile.

naftiko: "0.5"
info:
  label: "Workday Role Change Access Sync"
  description: "When a job role change is recorded in Workday, updates the employee's Okta group memberships and Microsoft 365 license assignment to match their new role profile."
  tags:
    - hr
    - iam
    - workday
    - okta
    - microsoft-graph
    - access-management
capability:
  exposes:
    - type: mcp
      namespace: iam-sync
      port: 8080
      tools:
        - name: sync-role-change
          description: "Given a Workday employee ID and new job profile ID, fetch the updated employee record from Workday, update the employee's Okta group memberships to reflect the new role, and update their Microsoft 365 license assignment. Use when HR records a promotion, transfer, or job reclassification in Workday."
          inputParameters:
            - name: workday_employee_id
              in: body
              type: string
              description: "The Workday worker ID for the employee whose role changed."
            - name: new_job_profile_id
              in: body
              type: string
              description: "The Workday job profile ID of the new role, e.g. 'JP-SE-AVIONICS-SR'."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{workday_employee_id}}"
            - name: update-okta-groups
              type: call
              call: "okta.update-user-groups"
              with:
                login: "{{get-employee.work_email}}"
                job_profile: "{{new_job_profile_id}}"
            - name: update-m365-license
              type: call
              call: "msgraph.assign-license"
              with:
                user_id: "{{get-employee.work_email}}"
                sku_id: "$secrets.m365_e3_sku_id"
  consumes:
    - namespace: workday
      type: http
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_bearer_token"
      resources:
        - name: workers
          path: "/boeing/workers/{worker_id}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - namespace: okta
      type: http
      baseUri: "https://boeing.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
    - namespace: msgraph
      type: http
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_bearer_token"
      resources:
        - name: license-assignments
          path: "/users/{user_id}/assignLicense"
          inputParameters:
            - name: user_id
              in: path
          operations:
            - name: assign-license
              method: POST

Retrieves the current time-off balance for an employee from Workday by employee ID.

naftiko: "0.5"
info:
  label: "Workday Time Off Balance Check"
  description: "Retrieves the current time-off balance for an employee from Workday by employee ID."
  tags:
    - hr
    - workday
    - time-off
    - lookup
capability:
  exposes:
    - type: mcp
      namespace: hr-ops
      port: 8080
      tools:
        - name: get-time-off-balance
          description: "Given a Workday employee ID, retrieve current time-off balances including vacation, sick, and personal days. Use for HR and employee self-service inquiries."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "Workday employee ID, e.g. 'EMP-204817'."
          call: "workday.get-time-off"
          with:
            worker_id: "{{employee_id}}"
          outputParameters:
            - name: vacation_balance
              type: string
              mapping: "$.TimeOffBalance.Vacation"
            - name: sick_balance
              type: string
              mapping: "$.TimeOffBalance.Sick"
  consumes:
    - namespace: workday
      type: http
      baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/boeing"
      authentication:
        type: bearer
        token: "$secrets.workday_bearer_token"
      resources:
        - name: time-off
          path: "/workers/{{worker_id}}/timeOffBalances"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-time-off
              method: GET

Generates a workforce capacity report by pulling headcount from Workday, comparing against project demand in Jira, and publishing insights to Tableau.

naftiko: "0.5"
info:
  label: "Workforce Capacity Planning Report"
  description: "Generates a workforce capacity report by pulling headcount from Workday, comparing against project demand in Jira, and publishing insights to Tableau."
  tags:
    - hr
    - workday
    - jira
    - tableau
    - analytics
    - manufacturing
capability:
  exposes:
    - type: mcp
      namespace: hr-ops
      port: 8080
      tools:
        - name: generate-capacity-report
          description: "Given a department code and planning horizon, pull headcount from Workday, assess demand from Jira project backlogs, and refresh the Tableau capacity dashboard. Use for monthly workforce planning."
          inputParameters:
            - name: department_code
              in: body
              type: string
              description: "Department code, e.g. 'MFG-EVERETT'."
            - name: planning_horizon
              in: body
              type: string
              description: "Planning horizon, e.g. 'Q2-2026'."
          steps:
            - name: get-headcount
              type: call
              call: "workday.get-headcount"
              with:
                department: "{{department_code}}"
            - name: get-project-demand
              type: call
              call: "jira.search-issues"
              with:
                jql: "project in (ENG, MFG) AND department = '{{department_code}}' AND duedate <= '{{planning_horizon}}'"
            - name: refresh-capacity-dashboard
              type: call
              call: "tableau.refresh-workbook"
              with:
                workbook_id: "$secrets.tableau_capacity_workbook_id"
  consumes:
    - namespace: workday
      type: http
      baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/boeing"
      authentication:
        type: bearer
        token: "$secrets.workday_bearer_token"
      resources:
        - name: headcount
          path: "/workers/headcount"
          operations:
            - name: get-headcount
              method: GET
    - namespace: jira
      type: http
      baseUri: "https://boeing.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: search
          path: "/search"
          operations:
            - name: search-issues
              method: POST
    - namespace: tableau
      type: http
      baseUri: "https://tableau.boeing.com/api/3.19"
      authentication:
        type: bearer
        token: "$secrets.tableau_access_token"
      resources:
        - name: workbooks
          path: "/sites/boeing/workbooks/{{workbook_id}}/refresh"
          inputParameters:
            - name: workbook_id
              in: path
          operations:
            - name: refresh-workbook
              method: POST