Norwegian Cruise Line Holdings Capabilities

Naftiko 0.5 capability definitions for Norwegian Cruise Line Holdings - 100 capabilities showing integration workflows and service orchestrations.

Sort
Expand

Pulls crew payroll summary from ADP for a pay period, reconciles against the crew management system hours, and stores variances in Snowflake for finance review.

naftiko: "0.5"
info:
  label: "ADP Payroll Data Sync"
  description: "Pulls crew payroll summary from ADP for a pay period, reconciles against the crew management system hours, and stores variances in Snowflake for finance review."
  tags:
    - hr
    - finance
    - adp
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: payroll-ops
      port: 8080
      tools:
        - name: sync-payroll-data
          description: "Sync ADP payroll data and reconcile with crew management hours."
          inputParameters:
            - name: pay_period_end
              in: body
              type: string
              description: "The pay period end date in YYYY-MM-DD format."
            - name: ship_code
              in: body
              type: string
              description: "The ship identifier code."
          steps:
            - name: get-payroll
              type: call
              call: "adp.get-payroll-summary"
              with:
                pay_period_end: "{{pay_period_end}}"
                organization: "{{ship_code}}"
            - name: get-crew-hours
              type: call
              call: "crew-api.get-hours-summary"
              with:
                ship_code: "{{ship_code}}"
                period_end: "{{pay_period_end}}"
            - name: store-reconciliation
              type: call
              call: "snowflake.execute-query"
              with:
                query: "CALL reconcile_payroll('{{ship_code}}', '{{pay_period_end}}')"
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_token"
      resources:
        - name: payroll
          path: "/payroll-summaries"
          operations:
            - name: get-payroll-summary
              method: GET
    - type: http
      namespace: crew-api
      baseUri: "https://api.ncl.com/crew/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_crew_token"
      resources:
        - name: hours
          path: "/ships/{{ship_code}}/hours"
          inputParameters:
            - name: ship_code
              in: path
          operations:
            - name: get-hours-summary
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://ncl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST

Queries Azure DevOps for the latest build status of a pipeline. Returns build number, status, and commit details.

naftiko: "0.5"
info:
  label: "Azure DevOps Build Status Checker"
  description: "Queries Azure DevOps for the latest build status of a pipeline. Returns build number, status, and commit details."
  tags:
    - development
    - azure-devops
capability:
  exposes:
    - type: mcp
      namespace: cicd-ops
      port: 8080
      tools:
        - name: get-build-status
          description: "Look up the latest build status for an Azure DevOps pipeline."
          inputParameters:
            - name: pipeline_id
              in: body
              type: string
              description: "The Azure DevOps pipeline identifier."
          call: "azdo.get-latest-build"
          with:
            pipeline_id: "{{pipeline_id}}"
          outputParameters:
            - name: build_number
              type: string
              mapping: "$.value[0].buildNumber"
            - name: status
              type: string
              mapping: "$.value[0].status"
            - name: result
              type: string
              mapping: "$.value[0].result"
  consumes:
    - type: http
      namespace: azdo
      baseUri: "https://dev.azure.com/ncl/ncl-digital/_apis/build"
      authentication:
        type: basic
        username: ""
        password: "$secrets.azdo_pat"
      resources:
        - name: builds
          path: "/builds?definitions={{pipeline_id}}&$top=1&api-version=7.0"
          inputParameters:
            - name: pipeline_id
              in: query
          operations:
            - name: get-latest-build
              method: GET

Queries onboard POS data for beverage package usage by ship, aggregates in Snowflake, and generates a Tableau report for F&B management.

naftiko: "0.5"
info:
  label: "Beverage Package Utilization Report"
  description: "Queries onboard POS data for beverage package usage by ship, aggregates in Snowflake, and generates a Tableau report for F&B management."
  tags:
    - revenue
    - onboard-ops
    - snowflake
    - tableau
capability:
  exposes:
    - type: mcp
      namespace: fb-analytics
      port: 8080
      tools:
        - name: generate-beverage-report
          description: "Generate a beverage package utilization report for a ship and date range."
          inputParameters:
            - name: ship_code
              in: body
              type: string
              description: "The ship identifier code."
            - name: start_date
              in: body
              type: string
              description: "Report start date in YYYY-MM-DD format."
            - name: end_date
              in: body
              type: string
              description: "Report end date in YYYY-MM-DD format."
          steps:
            - name: pull-pos-data
              type: call
              call: "pos-system.get-beverage-data"
              with:
                ship_code: "{{ship_code}}"
                start_date: "{{start_date}}"
                end_date: "{{end_date}}"
            - name: aggregate-data
              type: call
              call: "snowflake.execute-query"
              with:
                query: "CALL aggregate_beverage_usage('{{ship_code}}', '{{start_date}}', '{{end_date}}')"
            - name: refresh-report
              type: call
              call: "tableau.refresh-extract"
              with:
                datasource_id: "beverage_utilization_ds"
  consumes:
    - type: http
      namespace: pos-system
      baseUri: "https://api.ncl.com/pos/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_pos_token"
      resources:
        - name: beverages
          path: "/ships/{{ship_code}}/beverages"
          inputParameters:
            - name: ship_code
              in: path
          operations:
            - name: get-beverage-data
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://ncl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: tableau
      baseUri: "https://tableau.ncl.com/api/3.21"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: datasources
          path: "/sites/ncl/datasources/{{datasource_id}}/refresh"
          inputParameters:
            - name: datasource_id
              in: path
          operations:
            - name: refresh-extract
              method: POST

Uploads a document to a specific Box folder, creates a shared link, and posts the link to a Microsoft Teams channel for team access.

naftiko: "0.5"
info:
  label: "Box File Upload Orchestrator"
  description: "Uploads a document to a specific Box folder, creates a shared link, and posts the link to a Microsoft Teams channel for team access."
  tags:
    - document-management
    - box
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: file-sharing
      port: 8080
      tools:
        - name: upload-and-share
          description: "Upload a file to Box and share the link in Microsoft Teams."
          inputParameters:
            - name: folder_id
              in: body
              type: string
              description: "The Box folder identifier."
            - name: file_name
              in: body
              type: string
              description: "The name for the uploaded file."
            - name: teams_channel_id
              in: body
              type: string
              description: "The Microsoft Teams channel to share the link."
          steps:
            - name: upload-file
              type: call
              call: "box.upload-file"
              with:
                folder_id: "{{folder_id}}"
                file_name: "{{file_name}}"
            - name: create-link
              type: call
              call: "box.create-shared-link"
              with:
                file_id: "{{upload-file.id}}"
            - name: share-in-teams
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "{{teams_channel_id}}"
                text: "New file uploaded: {{file_name}} - {{create-link.shared_link.url}}"
  consumes:
    - type: http
      namespace: box
      baseUri: "https://api.box.com/2.0"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: files
          path: "/files/content"
          operations:
            - name: upload-file
              method: POST
        - name: shared-links
          path: "/files/{{file_id}}?fields=shared_link"
          inputParameters:
            - name: file_id
              in: path
          operations:
            - name: create-shared-link
              method: PUT
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Queries the reservation system for real-time cabin inventory counts by class and ship. Returns available, occupied, and blocked cabin counts.

naftiko: "0.5"
info:
  label: "Cabin Inventory Status"
  description: "Queries the reservation system for real-time cabin inventory counts by class and ship. Returns available, occupied, and blocked cabin counts."
  tags:
    - reservations
    - revenue
    - inventory
capability:
  exposes:
    - type: mcp
      namespace: cabin-inventory
      port: 8080
      tools:
        - name: get-cabin-inventory
          description: "Get real-time cabin inventory counts for a ship by cabin class."
          inputParameters:
            - name: ship_code
              in: body
              type: string
              description: "The ship identifier code."
            - name: sailing_date
              in: body
              type: string
              description: "The sailing date in YYYY-MM-DD format."
          call: "reservation-system.get-inventory"
          with:
            ship_code: "{{ship_code}}"
            sailing_date: "{{sailing_date}}"
          outputParameters:
            - name: available_cabins
              type: object
              mapping: "$.data.available"
            - name: total_capacity
              type: integer
              mapping: "$.data.total_capacity"
            - name: occupancy_rate
              type: number
              mapping: "$.data.occupancy_rate"
  consumes:
    - type: http
      namespace: reservation-system
      baseUri: "https://api.ncl.com/reservations/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_reservation_token"
      resources:
        - name: inventory
          path: "/ships/{{ship_code}}/inventory?date={{sailing_date}}"
          inputParameters:
            - name: ship_code
              in: path
            - name: sailing_date
              in: query
          operations:
            - name: get-inventory
              method: GET

Searches Confluence for knowledge base articles matching a query. Returns article titles, URLs, and last updated dates.

naftiko: "0.5"
info:
  label: "Confluence Knowledge Base Search"
  description: "Searches Confluence for knowledge base articles matching a query. Returns article titles, URLs, and last updated dates."
  tags:
    - operations
    - knowledge-management
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: knowledge-base
      port: 8080
      tools:
        - name: search-kb-articles
          description: "Search Confluence for knowledge base articles matching a query."
          inputParameters:
            - name: search_query
              in: body
              type: string
              description: "The search query string."
          call: "confluence.search"
          with:
            query: "{{search_query}}"
          outputParameters:
            - name: results
              type: array
              mapping: "$.results"
            - name: total_count
              type: integer
              mapping: "$.totalSize"
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://ncl.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: search
          path: "/search?cql=text~'{{query}}'"
          inputParameters:
            - name: query
              in: query
          operations:
            - name: search
              method: GET

Queries the crew management system for scheduling conflicts on a given ship and date range, logs findings in ServiceNow, and notifies the HR manager via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Crew Scheduling Conflict Detector"
  description: "Queries the crew management system for scheduling conflicts on a given ship and date range, logs findings in ServiceNow, and notifies the HR manager via Microsoft Teams."
  tags:
    - onboard-ops
    - hr
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: crew-management
      port: 8080
      tools:
        - name: detect-scheduling-conflicts
          description: "Check crew schedules for conflicts on a ship within a date range and escalate issues."
          inputParameters:
            - name: ship_code
              in: body
              type: string
              description: "The ship identifier code."
            - name: start_date
              in: body
              type: string
              description: "Start of the date range in YYYY-MM-DD format."
            - name: end_date
              in: body
              type: string
              description: "End of the date range in YYYY-MM-DD format."
          steps:
            - name: check-conflicts
              type: call
              call: "crew-api.get-conflicts"
              with:
                ship_code: "{{ship_code}}"
                start_date: "{{start_date}}"
                end_date: "{{end_date}}"
            - name: log-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Crew scheduling conflicts on {{ship_code}}"
                category: "crew_operations"
                description: "Found {{check-conflicts.conflict_count}} conflicts between {{start_date}} and {{end_date}}."
            - name: notify-manager
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "crew-ops-alerts"
                text: "Scheduling alert: {{check-conflicts.conflict_count}} conflicts found on {{ship_code}}. ServiceNow ticket: {{log-incident.number}}"
  consumes:
    - type: http
      namespace: crew-api
      baseUri: "https://api.ncl.com/crew/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_crew_token"
      resources:
        - name: conflicts
          path: "/ships/{{ship_code}}/conflicts"
          inputParameters:
            - name: ship_code
              in: path
          operations:
            - name: get-conflicts
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://ncl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Workflow 1"
  description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
  tags:
    - cruise
    - operations
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: cruise
      port: 8080
      tools:
        - name: norwegian-cruise-line-workflow-1
          description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "norwegiancruiseline-ops.run-workflow-1"
              with:
                identifier: "{{identifier}}"
            - name: create
              type: call
              call: "salesforce.create-account"
              with:
                data: "{{process.result}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-ops
      baseUri: "https://api.ncl.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-1
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://norwegiancruiseline.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/accounts"
          operations:
            - name: create-account
              method: POST

Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Workflow 10"
  description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
  tags:
    - cruise
    - operations
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: cruise
      port: 8080
      tools:
        - name: norwegian-cruise-line-workflow-10
          description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "norwegiancruiseline-ops.run-workflow-10"
              with:
                identifier: "{{identifier}}"
            - name: upload
              type: call
              call: "sharepoint.upload-document"
              with:
                content: "{{process.document}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-ops
      baseUri: "https://api.ncl.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-10
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://norwegiancruiseline.sharepoint.com/_api/v2.0"
      authentication:
        type: bearer
        token: "$secrets.sharepoint_token"
      resources:
        - name: documents
          path: "/documents"
          operations:
            - name: upload-document
              method: POST

Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Workflow 11"
  description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
  tags:
    - cruise
    - operations
    - hubspot
capability:
  exposes:
    - type: mcp
      namespace: cruise
      port: 8080
      tools:
        - name: norwegian-cruise-line-workflow-11
          description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "norwegiancruiseline-ops.run-workflow-11"
              with:
                identifier: "{{identifier}}"
            - name: notify
              type: call
              call: "hubspot.send-email"
              with:
                to: "{{process.email}}"
                subject: "Workflow 11 Complete"
                body: "{{process.summary}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-ops
      baseUri: "https://api.ncl.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-11
              method: POST
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com/crm/v3"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: contacts
          path: "/contacts"
          operations:
            - name: send-email
              method: POST

Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Workflow 12"
  description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
  tags:
    - cruise
    - operations
    - datadog
capability:
  exposes:
    - type: mcp
      namespace: cruise
      port: 8080
      tools:
        - name: norwegian-cruise-line-workflow-12
          description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "norwegiancruiseline-ops.run-workflow-12"
              with:
                identifier: "{{identifier}}"
            - name: push
              type: call
              call: "datadog.submit-metrics"
              with:
                metric_name: "cruise.workflow_12"
                data: "{{process.metrics}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-ops
      baseUri: "https://api.ncl.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-12
              method: POST
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.datadog_token"
      resources:
        - name: metrics
          path: "/metrics"
          operations:
            - name: submit-metrics
              method: POST

Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Workflow 13"
  description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
  tags:
    - cruise
    - operations
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: cruise
      port: 8080
      tools:
        - name: norwegian-cruise-line-workflow-13
          description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "norwegiancruiseline-ops.run-workflow-13"
              with:
                identifier: "{{identifier}}"
            - name: create
              type: call
              call: "salesforce.create-account"
              with:
                data: "{{process.result}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-ops
      baseUri: "https://api.ncl.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-13
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://norwegiancruiseline.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/accounts"
          operations:
            - name: create-account
              method: POST

Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Workflow 14"
  description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
  tags:
    - cruise
    - operations
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: cruise
      port: 8080
      tools:
        - name: norwegian-cruise-line-workflow-14
          description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "norwegiancruiseline-ops.run-workflow-14"
              with:
                identifier: "{{identifier}}"
            - name: create
              type: call
              call: "servicenow.create-incident"
              with:
                data: "{{process.result}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-ops
      baseUri: "https://api.ncl.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-14
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://norwegiancruiseline.service-now.com/api/now/v1"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: create-incident
              method: POST

Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Workflow 15"
  description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
  tags:
    - cruise
    - operations
    - slack
capability:
  exposes:
    - type: mcp
      namespace: cruise
      port: 8080
      tools:
        - name: norwegian-cruise-line-workflow-15
          description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "norwegiancruiseline-ops.run-workflow-15"
              with:
                identifier: "{{identifier}}"
            - name: notify
              type: call
              call: "slack.post-message"
              with:
                channel: "#cruise"
                text: "Completed workflow 15: {{process.summary}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-ops
      baseUri: "https://api.ncl.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-15
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/messages"
          operations:
            - name: post-message
              method: POST

Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Workflow 16"
  description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
  tags:
    - cruise
    - operations
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: cruise
      port: 8080
      tools:
        - name: norwegian-cruise-line-workflow-16
          description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "norwegiancruiseline-ops.run-workflow-16"
              with:
                identifier: "{{identifier}}"
            - name: publish
              type: call
              call: "confluence.create-page"
              with:
                space: "CRUISE"
                title: "Report 16"
                content: "{{process.report}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-ops
      baseUri: "https://api.ncl.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-16
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://norwegiancruiseline.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: pages
          path: "/pages"
          operations:
            - name: create-page
              method: POST

Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Workflow 17"
  description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
  tags:
    - cruise
    - operations
    - powerbi
capability:
  exposes:
    - type: mcp
      namespace: cruise
      port: 8080
      tools:
        - name: norwegian-cruise-line-workflow-17
          description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "norwegiancruiseline-ops.run-workflow-17"
              with:
                identifier: "{{identifier}}"
            - name: refresh
              type: call
              call: "powerbi.refresh-dataset"
              with:
                dataset_id: "workflow_17"
                data: "{{process.metrics}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-ops
      baseUri: "https://api.ncl.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-17
              method: POST
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets"
          operations:
            - name: refresh-dataset
              method: POST

Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Workflow 18"
  description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
  tags:
    - cruise
    - operations
    - jira
capability:
  exposes:
    - type: mcp
      namespace: cruise
      port: 8080
      tools:
        - name: norwegian-cruise-line-workflow-18
          description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "norwegiancruiseline-ops.run-workflow-18"
              with:
                identifier: "{{identifier}}"
            - name: create-ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "CRUI"
                summary: "Task from workflow 18"
                description: "{{process.details}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-ops
      baseUri: "https://api.ncl.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-18
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://norwegiancruiseline.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issues"
          operations:
            - name: create-issue
              method: POST

Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Workflow 19"
  description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
  tags:
    - cruise
    - operations
    - teams
capability:
  exposes:
    - type: mcp
      namespace: cruise
      port: 8080
      tools:
        - name: norwegian-cruise-line-workflow-19
          description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "norwegiancruiseline-ops.run-workflow-19"
              with:
                identifier: "{{identifier}}"
            - name: notify
              type: call
              call: "teams.send-message"
              with:
                channel_id: "cruise"
                message: "Workflow 19 complete: {{process.summary}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-ops
      baseUri: "https://api.ncl.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-19
              method: POST
    - type: http
      namespace: teams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.teams_token"
      resources:
        - name: messages
          path: "/messages"
          operations:
            - name: send-message
              method: POST

Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Workflow 2"
  description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
  tags:
    - cruise
    - operations
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: cruise
      port: 8080
      tools:
        - name: norwegian-cruise-line-workflow-2
          description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "norwegiancruiseline-ops.run-workflow-2"
              with:
                identifier: "{{identifier}}"
            - name: create
              type: call
              call: "servicenow.create-incident"
              with:
                data: "{{process.result}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-ops
      baseUri: "https://api.ncl.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-2
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://norwegiancruiseline.service-now.com/api/now/v1"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: create-incident
              method: POST

Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Workflow 20"
  description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
  tags:
    - cruise
    - operations
    - tableau
capability:
  exposes:
    - type: mcp
      namespace: cruise
      port: 8080
      tools:
        - name: norwegian-cruise-line-workflow-20
          description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "norwegiancruiseline-ops.run-workflow-20"
              with:
                identifier: "{{identifier}}"
            - name: refresh
              type: call
              call: "tableau.publish-datasource"
              with:
                dataset_id: "workflow_20"
                data: "{{process.metrics}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-ops
      baseUri: "https://api.ncl.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-20
              method: POST
    - type: http
      namespace: tableau
      baseUri: "https://norwegiancruiseline-tableau.online.tableau.com/api/3.19"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: datasources
          path: "/datasources"
          operations:
            - name: publish-datasource
              method: POST

Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Workflow 21"
  description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
  tags:
    - cruise
    - operations
    - box
capability:
  exposes:
    - type: mcp
      namespace: cruise
      port: 8080
      tools:
        - name: norwegian-cruise-line-workflow-21
          description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "norwegiancruiseline-ops.run-workflow-21"
              with:
                identifier: "{{identifier}}"
            - name: upload
              type: call
              call: "box.upload-file"
              with:
                content: "{{process.document}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-ops
      baseUri: "https://api.ncl.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-21
              method: POST
    - type: http
      namespace: box
      baseUri: "https://api.box.com/2.0"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: files
          path: "/files"
          operations:
            - name: upload-file
              method: POST

Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Workflow 22"
  description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
  tags:
    - cruise
    - operations
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: cruise
      port: 8080
      tools:
        - name: norwegian-cruise-line-workflow-22
          description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "norwegiancruiseline-ops.run-workflow-22"
              with:
                identifier: "{{identifier}}"
            - name: upload
              type: call
              call: "sharepoint.upload-document"
              with:
                content: "{{process.document}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-ops
      baseUri: "https://api.ncl.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-22
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://norwegiancruiseline.sharepoint.com/_api/v2.0"
      authentication:
        type: bearer
        token: "$secrets.sharepoint_token"
      resources:
        - name: documents
          path: "/documents"
          operations:
            - name: upload-document
              method: POST

Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Workflow 23"
  description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
  tags:
    - cruise
    - operations
    - hubspot
capability:
  exposes:
    - type: mcp
      namespace: cruise
      port: 8080
      tools:
        - name: norwegian-cruise-line-workflow-23
          description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "norwegiancruiseline-ops.run-workflow-23"
              with:
                identifier: "{{identifier}}"
            - name: notify
              type: call
              call: "hubspot.send-email"
              with:
                to: "{{process.email}}"
                subject: "Workflow 23 Complete"
                body: "{{process.summary}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-ops
      baseUri: "https://api.ncl.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-23
              method: POST
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com/crm/v3"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: contacts
          path: "/contacts"
          operations:
            - name: send-email
              method: POST

Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Workflow 24"
  description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
  tags:
    - cruise
    - operations
    - datadog
capability:
  exposes:
    - type: mcp
      namespace: cruise
      port: 8080
      tools:
        - name: norwegian-cruise-line-workflow-24
          description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "norwegiancruiseline-ops.run-workflow-24"
              with:
                identifier: "{{identifier}}"
            - name: push
              type: call
              call: "datadog.submit-metrics"
              with:
                metric_name: "cruise.workflow_24"
                data: "{{process.metrics}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-ops
      baseUri: "https://api.ncl.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-24
              method: POST
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.datadog_token"
      resources:
        - name: metrics
          path: "/metrics"
          operations:
            - name: submit-metrics
              method: POST

Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Workflow 25"
  description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
  tags:
    - cruise
    - operations
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: cruise
      port: 8080
      tools:
        - name: norwegian-cruise-line-workflow-25
          description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "norwegiancruiseline-ops.run-workflow-25"
              with:
                identifier: "{{identifier}}"
            - name: create
              type: call
              call: "salesforce.create-account"
              with:
                data: "{{process.result}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-ops
      baseUri: "https://api.ncl.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-25
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://norwegiancruiseline.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/accounts"
          operations:
            - name: create-account
              method: POST

Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Workflow 26"
  description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
  tags:
    - cruise
    - operations
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: cruise
      port: 8080
      tools:
        - name: norwegian-cruise-line-workflow-26
          description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "norwegiancruiseline-ops.run-workflow-26"
              with:
                identifier: "{{identifier}}"
            - name: create
              type: call
              call: "servicenow.create-incident"
              with:
                data: "{{process.result}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-ops
      baseUri: "https://api.ncl.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-26
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://norwegiancruiseline.service-now.com/api/now/v1"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: create-incident
              method: POST

Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Workflow 27"
  description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
  tags:
    - cruise
    - operations
    - slack
capability:
  exposes:
    - type: mcp
      namespace: cruise
      port: 8080
      tools:
        - name: norwegian-cruise-line-workflow-27
          description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "norwegiancruiseline-ops.run-workflow-27"
              with:
                identifier: "{{identifier}}"
            - name: notify
              type: call
              call: "slack.post-message"
              with:
                channel: "#cruise"
                text: "Completed workflow 27: {{process.summary}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-ops
      baseUri: "https://api.ncl.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-27
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/messages"
          operations:
            - name: post-message
              method: POST

Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Workflow 28"
  description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
  tags:
    - cruise
    - operations
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: cruise
      port: 8080
      tools:
        - name: norwegian-cruise-line-workflow-28
          description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "norwegiancruiseline-ops.run-workflow-28"
              with:
                identifier: "{{identifier}}"
            - name: publish
              type: call
              call: "confluence.create-page"
              with:
                space: "CRUISE"
                title: "Report 28"
                content: "{{process.report}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-ops
      baseUri: "https://api.ncl.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-28
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://norwegiancruiseline.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: pages
          path: "/pages"
          operations:
            - name: create-page
              method: POST

Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Workflow 29"
  description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
  tags:
    - cruise
    - operations
    - powerbi
capability:
  exposes:
    - type: mcp
      namespace: cruise
      port: 8080
      tools:
        - name: norwegian-cruise-line-workflow-29
          description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "norwegiancruiseline-ops.run-workflow-29"
              with:
                identifier: "{{identifier}}"
            - name: refresh
              type: call
              call: "powerbi.refresh-dataset"
              with:
                dataset_id: "workflow_29"
                data: "{{process.metrics}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-ops
      baseUri: "https://api.ncl.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-29
              method: POST
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets"
          operations:
            - name: refresh-dataset
              method: POST

Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Workflow 3"
  description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
  tags:
    - cruise
    - operations
    - slack
capability:
  exposes:
    - type: mcp
      namespace: cruise
      port: 8080
      tools:
        - name: norwegian-cruise-line-workflow-3
          description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "norwegiancruiseline-ops.run-workflow-3"
              with:
                identifier: "{{identifier}}"
            - name: notify
              type: call
              call: "slack.post-message"
              with:
                channel: "#cruise"
                text: "Completed workflow 3: {{process.summary}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-ops
      baseUri: "https://api.ncl.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-3
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/messages"
          operations:
            - name: post-message
              method: POST

Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Workflow 30"
  description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
  tags:
    - cruise
    - operations
    - jira
capability:
  exposes:
    - type: mcp
      namespace: cruise
      port: 8080
      tools:
        - name: norwegian-cruise-line-workflow-30
          description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "norwegiancruiseline-ops.run-workflow-30"
              with:
                identifier: "{{identifier}}"
            - name: create-ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "CRUI"
                summary: "Task from workflow 30"
                description: "{{process.details}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-ops
      baseUri: "https://api.ncl.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-30
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://norwegiancruiseline.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issues"
          operations:
            - name: create-issue
              method: POST

Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Workflow 31"
  description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
  tags:
    - cruise
    - operations
    - teams
capability:
  exposes:
    - type: mcp
      namespace: cruise
      port: 8080
      tools:
        - name: norwegian-cruise-line-workflow-31
          description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "norwegiancruiseline-ops.run-workflow-31"
              with:
                identifier: "{{identifier}}"
            - name: notify
              type: call
              call: "teams.send-message"
              with:
                channel_id: "cruise"
                message: "Workflow 31 complete: {{process.summary}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-ops
      baseUri: "https://api.ncl.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-31
              method: POST
    - type: http
      namespace: teams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.teams_token"
      resources:
        - name: messages
          path: "/messages"
          operations:
            - name: send-message
              method: POST

Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Workflow 32"
  description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
  tags:
    - cruise
    - operations
    - tableau
capability:
  exposes:
    - type: mcp
      namespace: cruise
      port: 8080
      tools:
        - name: norwegian-cruise-line-workflow-32
          description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "norwegiancruiseline-ops.run-workflow-32"
              with:
                identifier: "{{identifier}}"
            - name: refresh
              type: call
              call: "tableau.publish-datasource"
              with:
                dataset_id: "workflow_32"
                data: "{{process.metrics}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-ops
      baseUri: "https://api.ncl.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-32
              method: POST
    - type: http
      namespace: tableau
      baseUri: "https://norwegiancruiseline-tableau.online.tableau.com/api/3.19"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: datasources
          path: "/datasources"
          operations:
            - name: publish-datasource
              method: POST

Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Workflow 33"
  description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
  tags:
    - cruise
    - operations
    - box
capability:
  exposes:
    - type: mcp
      namespace: cruise
      port: 8080
      tools:
        - name: norwegian-cruise-line-workflow-33
          description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "norwegiancruiseline-ops.run-workflow-33"
              with:
                identifier: "{{identifier}}"
            - name: upload
              type: call
              call: "box.upload-file"
              with:
                content: "{{process.document}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-ops
      baseUri: "https://api.ncl.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-33
              method: POST
    - type: http
      namespace: box
      baseUri: "https://api.box.com/2.0"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: files
          path: "/files"
          operations:
            - name: upload-file
              method: POST

Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Workflow 34"
  description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
  tags:
    - cruise
    - operations
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: cruise
      port: 8080
      tools:
        - name: norwegian-cruise-line-workflow-34
          description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "norwegiancruiseline-ops.run-workflow-34"
              with:
                identifier: "{{identifier}}"
            - name: upload
              type: call
              call: "sharepoint.upload-document"
              with:
                content: "{{process.document}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-ops
      baseUri: "https://api.ncl.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-34
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://norwegiancruiseline.sharepoint.com/_api/v2.0"
      authentication:
        type: bearer
        token: "$secrets.sharepoint_token"
      resources:
        - name: documents
          path: "/documents"
          operations:
            - name: upload-document
              method: POST

Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Workflow 35"
  description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
  tags:
    - cruise
    - operations
    - hubspot
capability:
  exposes:
    - type: mcp
      namespace: cruise
      port: 8080
      tools:
        - name: norwegian-cruise-line-workflow-35
          description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "norwegiancruiseline-ops.run-workflow-35"
              with:
                identifier: "{{identifier}}"
            - name: notify
              type: call
              call: "hubspot.send-email"
              with:
                to: "{{process.email}}"
                subject: "Workflow 35 Complete"
                body: "{{process.summary}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-ops
      baseUri: "https://api.ncl.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-35
              method: POST
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com/crm/v3"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: contacts
          path: "/contacts"
          operations:
            - name: send-email
              method: POST

Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Workflow 4"
  description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
  tags:
    - cruise
    - operations
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: cruise
      port: 8080
      tools:
        - name: norwegian-cruise-line-workflow-4
          description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "norwegiancruiseline-ops.run-workflow-4"
              with:
                identifier: "{{identifier}}"
            - name: publish
              type: call
              call: "confluence.create-page"
              with:
                space: "CRUISE"
                title: "Report 4"
                content: "{{process.report}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-ops
      baseUri: "https://api.ncl.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-4
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://norwegiancruiseline.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: pages
          path: "/pages"
          operations:
            - name: create-page
              method: POST

Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Workflow 5"
  description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
  tags:
    - cruise
    - operations
    - powerbi
capability:
  exposes:
    - type: mcp
      namespace: cruise
      port: 8080
      tools:
        - name: norwegian-cruise-line-workflow-5
          description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "norwegiancruiseline-ops.run-workflow-5"
              with:
                identifier: "{{identifier}}"
            - name: refresh
              type: call
              call: "powerbi.refresh-dataset"
              with:
                dataset_id: "workflow_5"
                data: "{{process.metrics}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-ops
      baseUri: "https://api.ncl.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-5
              method: POST
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets"
          operations:
            - name: refresh-dataset
              method: POST

Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Workflow 6"
  description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
  tags:
    - cruise
    - operations
    - jira
capability:
  exposes:
    - type: mcp
      namespace: cruise
      port: 8080
      tools:
        - name: norwegian-cruise-line-workflow-6
          description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "norwegiancruiseline-ops.run-workflow-6"
              with:
                identifier: "{{identifier}}"
            - name: create-ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "CRUI"
                summary: "Task from workflow 6"
                description: "{{process.details}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-ops
      baseUri: "https://api.ncl.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-6
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://norwegiancruiseline.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issues"
          operations:
            - name: create-issue
              method: POST

Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Workflow 7"
  description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
  tags:
    - cruise
    - operations
    - teams
capability:
  exposes:
    - type: mcp
      namespace: cruise
      port: 8080
      tools:
        - name: norwegian-cruise-line-workflow-7
          description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "norwegiancruiseline-ops.run-workflow-7"
              with:
                identifier: "{{identifier}}"
            - name: notify
              type: call
              call: "teams.send-message"
              with:
                channel_id: "cruise"
                message: "Workflow 7 complete: {{process.summary}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-ops
      baseUri: "https://api.ncl.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-7
              method: POST
    - type: http
      namespace: teams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.teams_token"
      resources:
        - name: messages
          path: "/messages"
          operations:
            - name: send-message
              method: POST

Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Workflow 8"
  description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
  tags:
    - cruise
    - operations
    - tableau
capability:
  exposes:
    - type: mcp
      namespace: cruise
      port: 8080
      tools:
        - name: norwegian-cruise-line-workflow-8
          description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "norwegiancruiseline-ops.run-workflow-8"
              with:
                identifier: "{{identifier}}"
            - name: refresh
              type: call
              call: "tableau.publish-datasource"
              with:
                dataset_id: "workflow_8"
                data: "{{process.metrics}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-ops
      baseUri: "https://api.ncl.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-8
              method: POST
    - type: http
      namespace: tableau
      baseUri: "https://norwegiancruiseline-tableau.online.tableau.com/api/3.19"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: datasources
          path: "/datasources"
          operations:
            - name: publish-datasource
              method: POST

Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Workflow 9"
  description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
  tags:
    - cruise
    - operations
    - box
capability:
  exposes:
    - type: mcp
      namespace: cruise
      port: 8080
      tools:
        - name: norwegian-cruise-line-workflow-9
          description: "Orchestrates cruise operations including data retrieval, processing, and automated notification for Norwegian Cruise Line."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "norwegiancruiseline-ops.run-workflow-9"
              with:
                identifier: "{{identifier}}"
            - name: upload
              type: call
              call: "box.upload-file"
              with:
                content: "{{process.document}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-ops
      baseUri: "https://api.ncl.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-9
              method: POST
    - type: http
      namespace: box
      baseUri: "https://api.box.com/2.0"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: files
          path: "/files"
          operations:
            - name: upload-file
              method: POST

When a new cruise booking is created in Salesforce, provisions a cabin assignment in the reservation system, sends a confirmation email via SendGrid, and logs the booking in Snowflake for revenue tracking.

naftiko: "0.5"
info:
  label: "Cruise Reservation Orchestrator"
  description: "When a new cruise booking is created in Salesforce, provisions a cabin assignment in the reservation system, sends a confirmation email via SendGrid, and logs the booking in Snowflake for revenue tracking."
  tags:
    - reservations
    - revenue
    - salesforce
    - sendgrid
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: cruise-reservations
      port: 8080
      tools:
        - name: process-new-booking
          description: "Given a Salesforce opportunity ID, orchestrate cabin assignment, confirmation email, and revenue logging for a new cruise reservation."
          inputParameters:
            - name: opportunity_id
              in: body
              type: string
              description: "The Salesforce opportunity ID for the cruise booking."
            - name: sailing_date
              in: body
              type: string
              description: "The sailing departure date in YYYY-MM-DD format."
            - name: cabin_class
              in: body
              type: string
              description: "The cabin class requested (inside, oceanview, balcony, suite)."
          steps:
            - name: get-booking
              type: call
              call: "salesforce.get-opportunity"
              with:
                opportunity_id: "{{opportunity_id}}"
            - name: assign-cabin
              type: call
              call: "reservation-system.assign-cabin"
              with:
                sailing_date: "{{sailing_date}}"
                cabin_class: "{{cabin_class}}"
                guest_name: "{{get-booking.contact_name}}"
            - name: send-confirmation
              type: call
              call: "sendgrid.send-email"
              with:
                to: "{{get-booking.contact_email}}"
                subject: "Your NCL Cruise Confirmation - {{sailing_date}}"
                body: "Dear {{get-booking.contact_name}}, your cabin {{assign-cabin.cabin_number}} is confirmed for {{sailing_date}}."
            - name: log-revenue
              type: call
              call: "snowflake.insert-record"
              with:
                table: "cruise_bookings"
                data:
                  booking_id: "{{get-booking.id}}"
                  cabin: "{{assign-cabin.cabin_number}}"
                  revenue: "{{get-booking.amount}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://ncl.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity/{{opportunity_id}}"
          inputParameters:
            - name: opportunity_id
              in: path
          operations:
            - name: get-opportunity
              method: GET
    - type: http
      namespace: reservation-system
      baseUri: "https://api.ncl.com/reservations/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_reservation_token"
      resources:
        - name: cabins
          path: "/cabins/assign"
          operations:
            - name: assign-cabin
              method: POST
    - type: http
      namespace: sendgrid
      baseUri: "https://api.sendgrid.com/v3"
      authentication:
        type: bearer
        token: "$secrets.sendgrid_api_key"
      resources:
        - name: mail
          path: "/mail/send"
          operations:
            - name: send-email
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://ncl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: insert-record
              method: POST

Retrieves operational data for Norwegian Cruise Line cruise workflows.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Data Lookup 1"
  description: "Retrieves operational data for Norwegian Cruise Line cruise workflows."
  tags:
    - cruise
    - operations
capability:
  exposes:
    - type: mcp
      namespace: norwegiancruiseline-data
      port: 8080
      tools:
        - name: get-data-1
          description: "Retrieves operational data for Norwegian Cruise Line cruise workflows."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Resource identifier"
          call: "norwegiancruiseline-data.get-data-1"
          with:
            identifier: "{{identifier}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-data
      baseUri: "https://api.ncl.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: data-1
          path: "/data-1/{{identifier}}"
          inputParameters:
            - name: identifier
              in: path
          operations:
            - name: get-data-1
              method: GET

Retrieves operational data for Norwegian Cruise Line cruise workflows.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Data Lookup 10"
  description: "Retrieves operational data for Norwegian Cruise Line cruise workflows."
  tags:
    - cruise
    - operations
capability:
  exposes:
    - type: mcp
      namespace: norwegiancruiseline-data
      port: 8080
      tools:
        - name: get-data-10
          description: "Retrieves operational data for Norwegian Cruise Line cruise workflows."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Resource identifier"
          call: "norwegiancruiseline-data.get-data-10"
          with:
            identifier: "{{identifier}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-data
      baseUri: "https://api.ncl.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: data-10
          path: "/data-10/{{identifier}}"
          inputParameters:
            - name: identifier
              in: path
          operations:
            - name: get-data-10
              method: GET

Retrieves operational data for Norwegian Cruise Line cruise workflows.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Data Lookup 11"
  description: "Retrieves operational data for Norwegian Cruise Line cruise workflows."
  tags:
    - cruise
    - operations
capability:
  exposes:
    - type: mcp
      namespace: norwegiancruiseline-data
      port: 8080
      tools:
        - name: get-data-11
          description: "Retrieves operational data for Norwegian Cruise Line cruise workflows."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Resource identifier"
          call: "norwegiancruiseline-data.get-data-11"
          with:
            identifier: "{{identifier}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-data
      baseUri: "https://api.ncl.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: data-11
          path: "/data-11/{{identifier}}"
          inputParameters:
            - name: identifier
              in: path
          operations:
            - name: get-data-11
              method: GET

Retrieves operational data for Norwegian Cruise Line cruise workflows.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Data Lookup 12"
  description: "Retrieves operational data for Norwegian Cruise Line cruise workflows."
  tags:
    - cruise
    - operations
capability:
  exposes:
    - type: mcp
      namespace: norwegiancruiseline-data
      port: 8080
      tools:
        - name: get-data-12
          description: "Retrieves operational data for Norwegian Cruise Line cruise workflows."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Resource identifier"
          call: "norwegiancruiseline-data.get-data-12"
          with:
            identifier: "{{identifier}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-data
      baseUri: "https://api.ncl.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: data-12
          path: "/data-12/{{identifier}}"
          inputParameters:
            - name: identifier
              in: path
          operations:
            - name: get-data-12
              method: GET

Retrieves operational data for Norwegian Cruise Line cruise workflows.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Data Lookup 13"
  description: "Retrieves operational data for Norwegian Cruise Line cruise workflows."
  tags:
    - cruise
    - operations
capability:
  exposes:
    - type: mcp
      namespace: norwegiancruiseline-data
      port: 8080
      tools:
        - name: get-data-13
          description: "Retrieves operational data for Norwegian Cruise Line cruise workflows."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Resource identifier"
          call: "norwegiancruiseline-data.get-data-13"
          with:
            identifier: "{{identifier}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-data
      baseUri: "https://api.ncl.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: data-13
          path: "/data-13/{{identifier}}"
          inputParameters:
            - name: identifier
              in: path
          operations:
            - name: get-data-13
              method: GET

Retrieves operational data for Norwegian Cruise Line cruise workflows.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Data Lookup 14"
  description: "Retrieves operational data for Norwegian Cruise Line cruise workflows."
  tags:
    - cruise
    - operations
capability:
  exposes:
    - type: mcp
      namespace: norwegiancruiseline-data
      port: 8080
      tools:
        - name: get-data-14
          description: "Retrieves operational data for Norwegian Cruise Line cruise workflows."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Resource identifier"
          call: "norwegiancruiseline-data.get-data-14"
          with:
            identifier: "{{identifier}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-data
      baseUri: "https://api.ncl.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: data-14
          path: "/data-14/{{identifier}}"
          inputParameters:
            - name: identifier
              in: path
          operations:
            - name: get-data-14
              method: GET

Retrieves operational data for Norwegian Cruise Line cruise workflows.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Data Lookup 15"
  description: "Retrieves operational data for Norwegian Cruise Line cruise workflows."
  tags:
    - cruise
    - operations
capability:
  exposes:
    - type: mcp
      namespace: norwegiancruiseline-data
      port: 8080
      tools:
        - name: get-data-15
          description: "Retrieves operational data for Norwegian Cruise Line cruise workflows."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Resource identifier"
          call: "norwegiancruiseline-data.get-data-15"
          with:
            identifier: "{{identifier}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-data
      baseUri: "https://api.ncl.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: data-15
          path: "/data-15/{{identifier}}"
          inputParameters:
            - name: identifier
              in: path
          operations:
            - name: get-data-15
              method: GET

Retrieves operational data for Norwegian Cruise Line cruise workflows.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Data Lookup 2"
  description: "Retrieves operational data for Norwegian Cruise Line cruise workflows."
  tags:
    - cruise
    - operations
capability:
  exposes:
    - type: mcp
      namespace: norwegiancruiseline-data
      port: 8080
      tools:
        - name: get-data-2
          description: "Retrieves operational data for Norwegian Cruise Line cruise workflows."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Resource identifier"
          call: "norwegiancruiseline-data.get-data-2"
          with:
            identifier: "{{identifier}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-data
      baseUri: "https://api.ncl.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: data-2
          path: "/data-2/{{identifier}}"
          inputParameters:
            - name: identifier
              in: path
          operations:
            - name: get-data-2
              method: GET

Retrieves operational data for Norwegian Cruise Line cruise workflows.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Data Lookup 3"
  description: "Retrieves operational data for Norwegian Cruise Line cruise workflows."
  tags:
    - cruise
    - operations
capability:
  exposes:
    - type: mcp
      namespace: norwegiancruiseline-data
      port: 8080
      tools:
        - name: get-data-3
          description: "Retrieves operational data for Norwegian Cruise Line cruise workflows."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Resource identifier"
          call: "norwegiancruiseline-data.get-data-3"
          with:
            identifier: "{{identifier}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-data
      baseUri: "https://api.ncl.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: data-3
          path: "/data-3/{{identifier}}"
          inputParameters:
            - name: identifier
              in: path
          operations:
            - name: get-data-3
              method: GET

Retrieves operational data for Norwegian Cruise Line cruise workflows.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Data Lookup 4"
  description: "Retrieves operational data for Norwegian Cruise Line cruise workflows."
  tags:
    - cruise
    - operations
capability:
  exposes:
    - type: mcp
      namespace: norwegiancruiseline-data
      port: 8080
      tools:
        - name: get-data-4
          description: "Retrieves operational data for Norwegian Cruise Line cruise workflows."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Resource identifier"
          call: "norwegiancruiseline-data.get-data-4"
          with:
            identifier: "{{identifier}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-data
      baseUri: "https://api.ncl.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: data-4
          path: "/data-4/{{identifier}}"
          inputParameters:
            - name: identifier
              in: path
          operations:
            - name: get-data-4
              method: GET

Retrieves operational data for Norwegian Cruise Line cruise workflows.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Data Lookup 5"
  description: "Retrieves operational data for Norwegian Cruise Line cruise workflows."
  tags:
    - cruise
    - operations
capability:
  exposes:
    - type: mcp
      namespace: norwegiancruiseline-data
      port: 8080
      tools:
        - name: get-data-5
          description: "Retrieves operational data for Norwegian Cruise Line cruise workflows."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Resource identifier"
          call: "norwegiancruiseline-data.get-data-5"
          with:
            identifier: "{{identifier}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-data
      baseUri: "https://api.ncl.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: data-5
          path: "/data-5/{{identifier}}"
          inputParameters:
            - name: identifier
              in: path
          operations:
            - name: get-data-5
              method: GET

Retrieves operational data for Norwegian Cruise Line cruise workflows.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Data Lookup 6"
  description: "Retrieves operational data for Norwegian Cruise Line cruise workflows."
  tags:
    - cruise
    - operations
capability:
  exposes:
    - type: mcp
      namespace: norwegiancruiseline-data
      port: 8080
      tools:
        - name: get-data-6
          description: "Retrieves operational data for Norwegian Cruise Line cruise workflows."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Resource identifier"
          call: "norwegiancruiseline-data.get-data-6"
          with:
            identifier: "{{identifier}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-data
      baseUri: "https://api.ncl.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: data-6
          path: "/data-6/{{identifier}}"
          inputParameters:
            - name: identifier
              in: path
          operations:
            - name: get-data-6
              method: GET

Retrieves operational data for Norwegian Cruise Line cruise workflows.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Data Lookup 7"
  description: "Retrieves operational data for Norwegian Cruise Line cruise workflows."
  tags:
    - cruise
    - operations
capability:
  exposes:
    - type: mcp
      namespace: norwegiancruiseline-data
      port: 8080
      tools:
        - name: get-data-7
          description: "Retrieves operational data for Norwegian Cruise Line cruise workflows."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Resource identifier"
          call: "norwegiancruiseline-data.get-data-7"
          with:
            identifier: "{{identifier}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-data
      baseUri: "https://api.ncl.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: data-7
          path: "/data-7/{{identifier}}"
          inputParameters:
            - name: identifier
              in: path
          operations:
            - name: get-data-7
              method: GET

Retrieves operational data for Norwegian Cruise Line cruise workflows.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Data Lookup 8"
  description: "Retrieves operational data for Norwegian Cruise Line cruise workflows."
  tags:
    - cruise
    - operations
capability:
  exposes:
    - type: mcp
      namespace: norwegiancruiseline-data
      port: 8080
      tools:
        - name: get-data-8
          description: "Retrieves operational data for Norwegian Cruise Line cruise workflows."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Resource identifier"
          call: "norwegiancruiseline-data.get-data-8"
          with:
            identifier: "{{identifier}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-data
      baseUri: "https://api.ncl.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: data-8
          path: "/data-8/{{identifier}}"
          inputParameters:
            - name: identifier
              in: path
          operations:
            - name: get-data-8
              method: GET

Retrieves operational data for Norwegian Cruise Line cruise workflows.

naftiko: "0.5"
info:
  label: "Norwegian Cruise Line Data Lookup 9"
  description: "Retrieves operational data for Norwegian Cruise Line cruise workflows."
  tags:
    - cruise
    - operations
capability:
  exposes:
    - type: mcp
      namespace: norwegiancruiseline-data
      port: 8080
      tools:
        - name: get-data-9
          description: "Retrieves operational data for Norwegian Cruise Line cruise workflows."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Resource identifier"
          call: "norwegiancruiseline-data.get-data-9"
          with:
            identifier: "{{identifier}}"
  consumes:
    - type: http
      namespace: norwegiancruiseline-data
      baseUri: "https://api.ncl.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_api_token"
      resources:
        - name: data-9
          path: "/data-9/{{identifier}}"
          inputParameters:
            - name: identifier
              in: path
          operations:
            - name: get-data-9
              method: GET

Retrieves the current status of Datadog monitors for NCL's digital infrastructure. Returns monitor name, status, and last triggered time.

naftiko: "0.5"
info:
  label: "Datadog Alert Status Lookup"
  description: "Retrieves the current status of Datadog monitors for NCL's digital infrastructure. Returns monitor name, status, and last triggered time."
  tags:
    - operations
    - monitoring
    - datadog
capability:
  exposes:
    - type: mcp
      namespace: infra-monitoring
      port: 8080
      tools:
        - name: get-monitor-status
          description: "Look up the current status of a Datadog monitor by ID."
          inputParameters:
            - name: monitor_id
              in: body
              type: string
              description: "The Datadog monitor identifier."
          call: "datadog.get-monitor"
          with:
            monitor_id: "{{monitor_id}}"
          outputParameters:
            - name: name
              type: string
              mapping: "$.name"
            - name: status
              type: string
              mapping: "$.overall_state"
            - name: last_triggered
              type: string
              mapping: "$.state.last_triggered_ts"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.datadog_api_key"
        header: "DD-API-KEY"
      resources:
        - name: monitors
          path: "/monitor/{{monitor_id}}"
          inputParameters:
            - name: monitor_id
              in: path
          operations:
            - name: get-monitor
              method: GET

Looks up dining reservation availability for a guest on a specific ship and evening. Returns available restaurants, time slots, and party size capacity.

naftiko: "0.5"
info:
  label: "Dining Reservation Lookup"
  description: "Looks up dining reservation availability for a guest on a specific ship and evening. Returns available restaurants, time slots, and party size capacity."
  tags:
    - onboard-ops
    - dining
    - guest-services
capability:
  exposes:
    - type: mcp
      namespace: dining-services
      port: 8080
      tools:
        - name: get-dining-availability
          description: "Check dining availability on a ship for a specific date and party size."
          inputParameters:
            - name: ship_code
              in: body
              type: string
              description: "The ship identifier code."
            - name: date
              in: body
              type: string
              description: "The dining date in YYYY-MM-DD format."
            - name: party_size
              in: body
              type: integer
              description: "Number of guests in the dining party."
          call: "dining-api.get-availability"
          with:
            ship_code: "{{ship_code}}"
            date: "{{date}}"
            party_size: "{{party_size}}"
          outputParameters:
            - name: restaurants
              type: array
              mapping: "$.data.available_restaurants"
            - name: time_slots
              type: array
              mapping: "$.data.time_slots"
  consumes:
    - type: http
      namespace: dining-api
      baseUri: "https://api.ncl.com/dining/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_dining_token"
      resources:
        - name: availability
          path: "/ships/{{ship_code}}/availability"
          inputParameters:
            - name: ship_code
              in: path
          operations:
            - name: get-availability
              method: GET

Retrieves a guest segment from Salesforce Marketing Cloud, personalizes content, and dispatches email campaigns via SendGrid with tracking enabled.

naftiko: "0.5"
info:
  label: "Email Campaign Sender"
  description: "Retrieves a guest segment from Salesforce Marketing Cloud, personalizes content, and dispatches email campaigns via SendGrid with tracking enabled."
  tags:
    - marketing
    - email
    - salesforce-marketing-cloud
    - sendgrid
capability:
  exposes:
    - type: mcp
      namespace: email-campaigns
      port: 8080
      tools:
        - name: send-targeted-campaign
          description: "Send a personalized email campaign to a specific guest segment."
          inputParameters:
            - name: segment_id
              in: body
              type: string
              description: "The SFMC audience segment identifier."
            - name: template_id
              in: body
              type: string
              description: "The email template identifier."
            - name: campaign_name
              in: body
              type: string
              description: "Name of the campaign for tracking."
          steps:
            - name: get-segment
              type: call
              call: "sfmc.get-data-extension"
              with:
                data_extension: "{{segment_id}}"
            - name: send-emails
              type: call
              call: "sendgrid.send-batch"
              with:
                recipients: "{{get-segment.rows}}"
                template_id: "{{template_id}}"
                campaign_name: "{{campaign_name}}"
  consumes:
    - type: http
      namespace: sfmc
      baseUri: "https://ncl.rest.marketingcloudapis.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.sfmc_token"
      resources:
        - name: data-extensions
          path: "/customobjectdata/key/{{data_extension}}/rowset"
          inputParameters:
            - name: data_extension
              in: path
          operations:
            - name: get-data-extension
              method: GET
    - type: http
      namespace: sendgrid
      baseUri: "https://api.sendgrid.com/v3"
      authentication:
        type: bearer
        token: "$secrets.sendgrid_api_key"
      resources:
        - name: mail
          path: "/mail/send"
          operations:
            - name: send-batch
              method: POST

Checks crew training completion in the LMS, flags overdue certifications in ServiceNow, and notifies department heads via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Employee Training Compliance Tracker"
  description: "Checks crew training completion in the LMS, flags overdue certifications in ServiceNow, and notifies department heads via Microsoft Teams."
  tags:
    - hr
    - onboard-ops
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: training-compliance
      port: 8080
      tools:
        - name: check-training-compliance
          description: "Check crew training status and escalate overdue certifications."
          inputParameters:
            - name: ship_code
              in: body
              type: string
              description: "The ship identifier code."
            - name: department
              in: body
              type: string
              description: "The department to check compliance for."
          steps:
            - name: get-training-status
              type: call
              call: "lms-api.get-compliance-report"
              with:
                ship_code: "{{ship_code}}"
                department: "{{department}}"
            - name: create-overdue-tickets
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Overdue training: {{department}} on {{ship_code}}"
                category: "training_compliance"
                description: "{{get-training-status.overdue_count}} crew members have overdue certifications."
            - name: notify-dept-head
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "training-alerts"
                text: "Training alert: {{get-training-status.overdue_count}} overdue in {{department}} on {{ship_code}}. Ticket: {{create-overdue-tickets.number}}"
  consumes:
    - type: http
      namespace: lms-api
      baseUri: "https://api.ncl.com/lms/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_lms_token"
      resources:
        - name: compliance
          path: "/ships/{{ship_code}}/departments/{{department}}/compliance"
          inputParameters:
            - name: ship_code
              in: path
            - name: department
              in: path
          operations:
            - name: get-compliance-report
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://ncl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Records ship environmental metrics (fuel consumption, waste, emissions) from onboard sensors, stores in Snowflake for sustainability reporting, and generates compliance reports in SharePoint.

naftiko: "0.5"
info:
  label: "Environmental Compliance Logger"
  description: "Records ship environmental metrics (fuel consumption, waste, emissions) from onboard sensors, stores in Snowflake for sustainability reporting, and generates compliance reports in SharePoint."
  tags:
    - onboard-ops
    - compliance
    - sustainability
    - snowflake
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: environmental-ops
      port: 8080
      tools:
        - name: log-environmental-metrics
          description: "Log ship environmental metrics and generate sustainability compliance reports."
          inputParameters:
            - name: ship_code
              in: body
              type: string
              description: "The ship identifier code."
            - name: date
              in: body
              type: string
              description: "The reporting date in YYYY-MM-DD format."
          steps:
            - name: get-sensor-data
              type: call
              call: "iot-platform.get-environmental-data"
              with:
                ship_code: "{{ship_code}}"
                date: "{{date}}"
            - name: store-metrics
              type: call
              call: "snowflake.insert-record"
              with:
                table: "environmental_metrics"
                data:
                  ship_code: "{{ship_code}}"
                  date: "{{date}}"
                  fuel_consumption: "{{get-sensor-data.fuel_consumption}}"
                  emissions: "{{get-sensor-data.co2_emissions}}"
                  waste_volume: "{{get-sensor-data.waste_volume}}"
            - name: generate-report
              type: call
              call: "sharepoint.upload-file"
              with:
                site_id: "sustainability-reports"
                file_path: "Environmental/{{ship_code}}_{{date}}.pdf"
  consumes:
    - type: http
      namespace: iot-platform
      baseUri: "https://api.ncl.com/iot/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_iot_token"
      resources:
        - name: environmental
          path: "/ships/{{ship_code}}/environmental/{{date}}"
          inputParameters:
            - name: ship_code
              in: path
            - name: date
              in: path
          operations:
            - name: get-environmental-data
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://ncl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: insert-record
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: files
          path: "/{{site_id}}/drive/root:/{{file_path}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: file_path
              in: path
          operations:
            - name: upload-file
              method: PUT

Records food safety inspection results from the galley management system, creates compliance records in ServiceNow, and notifies the F&B director via Microsoft Teams if violations are found.

naftiko: "0.5"
info:
  label: "Food Safety Inspection Tracker"
  description: "Records food safety inspection results from the galley management system, creates compliance records in ServiceNow, and notifies the F&B director via Microsoft Teams if violations are found."
  tags:
    - onboard-ops
    - safety
    - compliance
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: food-safety
      port: 8080
      tools:
        - name: record-inspection
          description: "Record a food safety inspection and escalate violations."
          inputParameters:
            - name: ship_code
              in: body
              type: string
              description: "The ship identifier code."
            - name: inspection_area
              in: body
              type: string
              description: "The galley or food service area inspected."
            - name: score
              in: body
              type: integer
              description: "The inspection score (0-100)."
            - name: violations
              in: body
              type: array
              description: "List of violation descriptions."
          steps:
            - name: log-inspection
              type: call
              call: "galley-api.record-inspection"
              with:
                ship_code: "{{ship_code}}"
                area: "{{inspection_area}}"
                score: "{{score}}"
                violations: "{{violations}}"
            - name: create-compliance-record
              type: call
              call: "servicenow.create-record"
              with:
                table: "food_safety_inspections"
                data:
                  ship: "{{ship_code}}"
                  area: "{{inspection_area}}"
                  score: "{{score}}"
            - name: alert-if-violations
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "food-safety-alerts"
                text: "Food safety inspection on {{ship_code}} ({{inspection_area}}): Score {{score}}/100. Violations: {{violations}}"
  consumes:
    - type: http
      namespace: galley-api
      baseUri: "https://api.ncl.com/galley/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_galley_token"
      resources:
        - name: inspections
          path: "/inspections"
          operations:
            - name: record-inspection
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://ncl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: records
          path: "/table/{{table}}"
          inputParameters:
            - name: table
              in: path
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves Google Ads campaign spending and performance data by campaign ID. Returns total spend, impressions, clicks, and cost-per-click.

naftiko: "0.5"
info:
  label: "Google Ads Campaign Spend Lookup"
  description: "Retrieves Google Ads campaign spending and performance data by campaign ID. Returns total spend, impressions, clicks, and cost-per-click."
  tags:
    - marketing
    - google-ads
capability:
  exposes:
    - type: mcp
      namespace: ad-spending
      port: 8080
      tools:
        - name: get-campaign-spend
          description: "Look up Google Ads campaign spend metrics."
          inputParameters:
            - name: campaign_id
              in: body
              type: string
              description: "The Google Ads campaign identifier."
          call: "google-ads.get-spend"
          with:
            campaign_id: "{{campaign_id}}"
          outputParameters:
            - name: total_spend
              type: number
              mapping: "$.data.cost_micros"
            - name: impressions
              type: integer
              mapping: "$.data.impressions"
            - name: clicks
              type: integer
              mapping: "$.data.clicks"
  consumes:
    - type: http
      namespace: google-ads
      baseUri: "https://googleads.googleapis.com/v14"
      authentication:
        type: bearer
        token: "$secrets.google_ads_token"
      resources:
        - name: campaigns
          path: "/customers/ncl/campaigns/{{campaign_id}}/metrics"
          inputParameters:
            - name: campaign_id
              in: path
          operations:
            - name: get-spend
              method: GET

Pulls website session and conversion data from Google Analytics for a date range. Returns sessions, bounce rate, and booking conversion rate for the NCL website.

naftiko: "0.5"
info:
  label: "Google Analytics Session Report"
  description: "Pulls website session and conversion data from Google Analytics for a date range. Returns sessions, bounce rate, and booking conversion rate for the NCL website."
  tags:
    - marketing
    - analytics
    - google-analytics
capability:
  exposes:
    - type: mcp
      namespace: web-analytics
      port: 8080
      tools:
        - name: get-session-report
          description: "Get Google Analytics session and conversion metrics for the NCL website."
          inputParameters:
            - name: start_date
              in: body
              type: string
              description: "Report start date in YYYY-MM-DD format."
            - name: end_date
              in: body
              type: string
              description: "Report end date in YYYY-MM-DD format."
          call: "google-analytics.run-report"
          with:
            start_date: "{{start_date}}"
            end_date: "{{end_date}}"
          outputParameters:
            - name: sessions
              type: integer
              mapping: "$.rows[0].metricValues[0].value"
            - name: bounce_rate
              type: number
              mapping: "$.rows[0].metricValues[1].value"
            - name: conversion_rate
              type: number
              mapping: "$.rows[0].metricValues[2].value"
  consumes:
    - type: http
      namespace: google-analytics
      baseUri: "https://analyticsdata.googleapis.com/v1beta"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: reports
          path: "/properties/ncl/runReport"
          operations:
            - name: run-report
              method: POST

Retrieves tag configuration and firing rules from Google Tag Manager for the NCL website container. Used by the marketing ops team to audit tracking pixels.

naftiko: "0.5"
info:
  label: "Google Tag Manager Event Lookup"
  description: "Retrieves tag configuration and firing rules from Google Tag Manager for the NCL website container. Used by the marketing ops team to audit tracking pixels."
  tags:
    - marketing
    - google-tag-manager
capability:
  exposes:
    - type: mcp
      namespace: gtm-ops
      port: 8080
      tools:
        - name: get-tag-config
          description: "Look up a GTM tag configuration and its firing triggers."
          inputParameters:
            - name: tag_id
              in: body
              type: string
              description: "The GTM tag identifier."
          call: "gtm.get-tag"
          with:
            tag_id: "{{tag_id}}"
          outputParameters:
            - name: tag_name
              type: string
              mapping: "$.tag.name"
            - name: firing_triggers
              type: array
              mapping: "$.tag.firingTriggerId"
            - name: tag_type
              type: string
              mapping: "$.tag.type"
  consumes:
    - type: http
      namespace: gtm
      baseUri: "https://www.googleapis.com/tagmanager/v2"
      authentication:
        type: bearer
        token: "$secrets.google_tagmanager_token"
      resources:
        - name: tags
          path: "/accounts/ncl/containers/web/workspaces/default/tags/{{tag_id}}"
          inputParameters:
            - name: tag_id
              in: path
          operations:
            - name: get-tag
              method: GET

Pulls group booking records from Salesforce, reconciles payments against Oracle financials, and generates a variance report in Snowflake for the revenue management team.

naftiko: "0.5"
info:
  label: "Group Booking Revenue Reconciler"
  description: "Pulls group booking records from Salesforce, reconciles payments against Oracle financials, and generates a variance report in Snowflake for the revenue management team."
  tags:
    - revenue
    - finance
    - salesforce
    - oracle
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: revenue-reconciliation
      port: 8080
      tools:
        - name: reconcile-group-bookings
          description: "Reconcile group booking revenue between Salesforce and Oracle financials."
          inputParameters:
            - name: period_start
              in: body
              type: string
              description: "Reconciliation period start date in YYYY-MM-DD format."
            - name: period_end
              in: body
              type: string
              description: "Reconciliation period end date in YYYY-MM-DD format."
          steps:
            - name: get-sf-bookings
              type: call
              call: "salesforce.query-group-bookings"
              with:
                start_date: "{{period_start}}"
                end_date: "{{period_end}}"
            - name: get-oracle-payments
              type: call
              call: "oracle.get-receivables"
              with:
                start_date: "{{period_start}}"
                end_date: "{{period_end}}"
            - name: store-variance
              type: call
              call: "snowflake.execute-query"
              with:
                query: "CALL reconcile_group_revenue('{{period_start}}', '{{period_end}}')"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://ncl.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: group-bookings
          path: "/query?q=SELECT+Id,Amount,CloseDate+FROM+Opportunity+WHERE+Type='Group'+AND+CloseDate>=CAST('{{start_date}}'+AS+DATE)"
          inputParameters:
            - name: start_date
              in: query
            - name: end_date
              in: query
          operations:
            - name: query-group-bookings
              method: GET
    - type: http
      namespace: oracle
      baseUri: "https://ncl.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_token"
      resources:
        - name: receivables
          path: "/receivablesInvoices"
          operations:
            - name: get-receivables
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://ncl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST

Looks up a guest check-in status by reservation ID from the NCL reservation system. Returns embarkation status, cabin assignment, and muster drill completion.

naftiko: "0.5"
info:
  label: "Guest Check-In Status Lookup"
  description: "Looks up a guest check-in status by reservation ID from the NCL reservation system. Returns embarkation status, cabin assignment, and muster drill completion."
  tags:
    - reservations
    - onboard-ops
    - guest-services
capability:
  exposes:
    - type: mcp
      namespace: guest-services
      port: 8080
      tools:
        - name: get-checkin-status
          description: "Look up guest check-in and embarkation status by reservation ID."
          inputParameters:
            - name: reservation_id
              in: body
              type: string
              description: "The NCL reservation confirmation number."
          call: "reservation-system.get-checkin"
          with:
            reservation_id: "{{reservation_id}}"
          outputParameters:
            - name: embarkation_status
              type: string
              mapping: "$.data.embarkation_status"
            - name: cabin_number
              type: string
              mapping: "$.data.cabin_number"
            - name: muster_complete
              type: boolean
              mapping: "$.data.muster_drill_complete"
  consumes:
    - type: http
      namespace: reservation-system
      baseUri: "https://api.ncl.com/reservations/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_reservation_token"
      resources:
        - name: checkin
          path: "/guests/{{reservation_id}}/checkin"
          inputParameters:
            - name: reservation_id
              in: path
          operations:
            - name: get-checkin
              method: GET

Collects post-cruise survey responses, stores them in Snowflake, runs sentiment analysis, and creates a Salesforce case if the satisfaction score falls below threshold.

naftiko: "0.5"
info:
  label: "Guest Feedback Aggregator"
  description: "Collects post-cruise survey responses, stores them in Snowflake, runs sentiment analysis, and creates a Salesforce case if the satisfaction score falls below threshold."
  tags:
    - marketing
    - guest-services
    - snowflake
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: guest-feedback
      port: 8080
      tools:
        - name: process-survey-response
          description: "Process a post-cruise survey, run sentiment analysis, and escalate poor feedback to Salesforce."
          inputParameters:
            - name: reservation_id
              in: body
              type: string
              description: "The reservation ID associated with the survey."
            - name: survey_data
              in: body
              type: object
              description: "The survey response payload."
          steps:
            - name: store-survey
              type: call
              call: "snowflake.insert-record"
              with:
                table: "guest_surveys"
                data:
                  reservation_id: "{{reservation_id}}"
                  responses: "{{survey_data}}"
            - name: analyze-sentiment
              type: call
              call: "snowflake.execute-query"
              with:
                query: "SELECT sentiment_score FROM TABLE(analyze_sentiment('{{reservation_id}}'))"
            - name: escalate-if-needed
              type: call
              call: "salesforce.create-case"
              with:
                subject: "Low satisfaction: Reservation {{reservation_id}}"
                description: "Sentiment score: {{analyze-sentiment.sentiment_score}}. Requires follow-up."
                priority: "High"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://ncl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: insert-record
              method: POST
            - name: execute-query
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://ncl.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: cases
          path: "/sobjects/Case"
          operations:
            - name: create-case
              method: POST

When a cruise is completed, pulls the guest folio from the reservation system, calculates loyalty points in Snowflake, updates the Salesforce contact with new tier status, and sends a thank-you email via SendGrid.

naftiko: "0.5"
info:
  label: "Guest Loyalty Program Sync"
  description: "When a cruise is completed, pulls the guest folio from the reservation system, calculates loyalty points in Snowflake, updates the Salesforce contact with new tier status, and sends a thank-you email via SendGrid."
  tags:
    - marketing
    - loyalty
    - salesforce
    - snowflake
    - sendgrid
capability:
  exposes:
    - type: mcp
      namespace: loyalty-program
      port: 8080
      tools:
        - name: process-post-cruise-loyalty
          description: "After a cruise completes, calculate loyalty points and update guest tier status across systems."
          inputParameters:
            - name: reservation_id
              in: body
              type: string
              description: "The reservation ID for the completed cruise."
            - name: guest_email
              in: body
              type: string
              description: "The guest email address."
          steps:
            - name: get-folio
              type: call
              call: "reservation-system.get-folio"
              with:
                reservation_id: "{{reservation_id}}"
            - name: calculate-points
              type: call
              call: "snowflake.execute-query"
              with:
                query: "CALL calculate_loyalty_points('{{reservation_id}}', {{get-folio.total_spend}})"
            - name: update-salesforce
              type: call
              call: "salesforce.update-contact"
              with:
                email: "{{guest_email}}"
                loyalty_points: "{{calculate-points.new_balance}}"
                tier: "{{calculate-points.new_tier}}"
            - name: send-thankyou
              type: call
              call: "sendgrid.send-email"
              with:
                to: "{{guest_email}}"
                subject: "Thank You for Sailing with NCL!"
                body: "You earned {{calculate-points.points_earned}} points! Your new tier: {{calculate-points.new_tier}}."
  consumes:
    - type: http
      namespace: reservation-system
      baseUri: "https://api.ncl.com/reservations/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_reservation_token"
      resources:
        - name: folios
          path: "/reservations/{{reservation_id}}/folio"
          inputParameters:
            - name: reservation_id
              in: path
          operations:
            - name: get-folio
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://ncl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://ncl.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: contacts
          path: "/sobjects/Contact"
          operations:
            - name: update-contact
              method: PATCH
    - type: http
      namespace: sendgrid
      baseUri: "https://api.sendgrid.com/v3"
      authentication:
        type: bearer
        token: "$secrets.sendgrid_api_key"
      resources:
        - name: mail
          path: "/mail/send"
          operations:
            - name: send-email
              method: POST

When a medical incident occurs onboard, creates an incident in ServiceNow, logs the event in the ship safety database, and notifies the ship doctor and captain via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Guest Medical Incident Logger"
  description: "When a medical incident occurs onboard, creates an incident in ServiceNow, logs the event in the ship safety database, and notifies the ship doctor and captain via Microsoft Teams."
  tags:
    - onboard-ops
    - safety
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: medical-ops
      port: 8080
      tools:
        - name: log-medical-incident
          description: "Log a medical incident with proper escalation and notification."
          inputParameters:
            - name: ship_code
              in: body
              type: string
              description: "The ship identifier code."
            - name: incident_type
              in: body
              type: string
              description: "Type of medical incident."
            - name: severity
              in: body
              type: string
              description: "Severity level (low, medium, high, critical)."
            - name: description
              in: body
              type: string
              description: "Description of the medical incident."
          steps:
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Medical: {{incident_type}} on {{ship_code}}"
                category: "medical"
                priority: "{{severity}}"
                description: "{{description}}"
            - name: log-safety-event
              type: call
              call: "safety-api.log-event"
              with:
                ship_code: "{{ship_code}}"
                event_type: "medical"
                description: "{{description}}"
            - name: notify-bridge
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "bridge-medical-alerts"
                text: "MEDICAL ALERT on {{ship_code}}: {{incident_type}} ({{severity}}). Incident: {{create-incident.number}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://ncl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: safety-api
      baseUri: "https://api.ncl.com/safety/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_safety_token"
      resources:
        - name: events
          path: "/ships/{{ship_code}}/events"
          inputParameters:
            - name: ship_code
              in: path
          operations:
            - name: log-event
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Syncs new travel agent contacts from HubSpot to Salesforce when they reach the marketing qualified stage. Creates the contact in Salesforce and notifies the sales team in Microsoft Teams.

naftiko: "0.5"
info:
  label: "HubSpot Contact Sync"
  description: "Syncs new travel agent contacts from HubSpot to Salesforce when they reach the marketing qualified stage. Creates the contact in Salesforce and notifies the sales team in Microsoft Teams."
  tags:
    - sales
    - marketing
    - hubspot
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: lead-sync
      port: 8080
      tools:
        - name: sync-hubspot-to-salesforce
          description: "Sync a marketing qualified HubSpot contact to Salesforce and notify sales."
          inputParameters:
            - name: hubspot_contact_id
              in: body
              type: string
              description: "The HubSpot contact identifier."
          steps:
            - name: get-hubspot-contact
              type: call
              call: "hubspot.get-contact"
              with:
                contact_id: "{{hubspot_contact_id}}"
            - name: create-sf-lead
              type: call
              call: "salesforce.create-lead"
              with:
                first_name: "{{get-hubspot-contact.firstname}}"
                last_name: "{{get-hubspot-contact.lastname}}"
                email: "{{get-hubspot-contact.email}}"
                company: "{{get-hubspot-contact.company}}"
                lead_source: "HubSpot"
            - name: notify-sales
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "sales-leads"
                text: "New MQL from HubSpot: {{get-hubspot-contact.firstname}} {{get-hubspot-contact.lastname}} at {{get-hubspot-contact.company}}. SF Lead: {{create-sf-lead.id}}"
  consumes:
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com/crm/v3"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: contacts
          path: "/objects/contacts/{{contact_id}}"
          inputParameters:
            - name: contact_id
              in: path
          operations:
            - name: get-contact
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://ncl.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: leads
          path: "/sobjects/Lead"
          operations:
            - name: create-lead
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

When a sailing itinerary is modified, retrieves affected bookings from Salesforce, sends change notification emails via SendGrid, and updates the guest app via push notification API.

naftiko: "0.5"
info:
  label: "Itinerary Change Notifier"
  description: "When a sailing itinerary is modified, retrieves affected bookings from Salesforce, sends change notification emails via SendGrid, and updates the guest app via push notification API."
  tags:
    - reservations
    - marketing
    - salesforce
    - sendgrid
capability:
  exposes:
    - type: mcp
      namespace: itinerary-ops
      port: 8080
      tools:
        - name: notify-itinerary-change
          description: "Notify all affected guests when a sailing itinerary changes."
          inputParameters:
            - name: sailing_id
              in: body
              type: string
              description: "The sailing identifier."
            - name: change_summary
              in: body
              type: string
              description: "Summary of the itinerary change."
          steps:
            - name: get-affected-guests
              type: call
              call: "salesforce.query-bookings"
              with:
                sailing_id: "{{sailing_id}}"
            - name: send-notifications
              type: call
              call: "sendgrid.send-batch"
              with:
                recipients: "{{get-affected-guests.emails}}"
                subject: "Itinerary Update for Your NCL Cruise"
                body: "{{change_summary}}"
            - name: push-app-notification
              type: call
              call: "guest-app.send-push"
              with:
                sailing_id: "{{sailing_id}}"
                message: "{{change_summary}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://ncl.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: bookings
          path: "/query?q=SELECT+Email+FROM+Booking__c+WHERE+Sailing__c='{{sailing_id}}'"
          inputParameters:
            - name: sailing_id
              in: query
          operations:
            - name: query-bookings
              method: GET
    - type: http
      namespace: sendgrid
      baseUri: "https://api.sendgrid.com/v3"
      authentication:
        type: bearer
        token: "$secrets.sendgrid_api_key"
      resources:
        - name: mail
          path: "/mail/send"
          operations:
            - name: send-batch
              method: POST
    - type: http
      namespace: guest-app
      baseUri: "https://api.ncl.com/mobile/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_mobile_token"
      resources:
        - name: push
          path: "/notifications/push"
          operations:
            - name: send-push
              method: POST

Pulls current sprint metrics from Jira, formats a summary, and posts the daily standup report to a Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Jira Sprint Progress Reporter"
  description: "Pulls current sprint metrics from Jira, formats a summary, and posts the daily standup report to a Microsoft Teams channel."
  tags:
    - development
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: dev-reporting
      port: 8080
      tools:
        - name: report-sprint-progress
          description: "Generate and post a sprint progress summary from Jira to Microsoft Teams."
          inputParameters:
            - name: board_id
              in: body
              type: string
              description: "The Jira board identifier."
            - name: teams_channel_id
              in: body
              type: string
              description: "The Microsoft Teams channel to post to."
          steps:
            - name: get-sprint
              type: call
              call: "jira.get-active-sprint"
              with:
                board_id: "{{board_id}}"
            - name: get-sprint-issues
              type: call
              call: "jira.get-sprint-issues"
              with:
                sprint_id: "{{get-sprint.id}}"
            - name: post-report
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "{{teams_channel_id}}"
                text: "Sprint {{get-sprint.name}}: {{get-sprint-issues.done_count}}/{{get-sprint-issues.total_count}} done. {{get-sprint-issues.in_progress_count}} in progress."
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://ncl.atlassian.net/rest/agile/1.0"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: sprints
          path: "/board/{{board_id}}/sprint?state=active"
          inputParameters:
            - name: board_id
              in: path
          operations:
            - name: get-active-sprint
              method: GET
        - name: sprint-issues
          path: "/sprint/{{sprint_id}}/issue"
          inputParameters:
            - name: sprint_id
              in: path
          operations:
            - name: get-sprint-issues
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Pulls LinkedIn advertising campaign metrics, joins with Salesforce lead attribution data, and stores the combined report in Snowflake for B2B marketing analysis.

naftiko: "0.5"
info:
  label: "LinkedIn Ad Campaign Reporter"
  description: "Pulls LinkedIn advertising campaign metrics, joins with Salesforce lead attribution data, and stores the combined report in Snowflake for B2B marketing analysis."
  tags:
    - marketing
    - linkedin
    - salesforce
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: b2b-marketing
      port: 8080
      tools:
        - name: report-linkedin-performance
          description: "Generate a LinkedIn ad campaign performance report with Salesforce lead attribution."
          inputParameters:
            - name: campaign_id
              in: body
              type: string
              description: "The LinkedIn campaign identifier."
            - name: date_start
              in: body
              type: string
              description: "Report start date."
            - name: date_end
              in: body
              type: string
              description: "Report end date."
          steps:
            - name: get-linkedin-metrics
              type: call
              call: "linkedin.get-campaign-analytics"
              with:
                campaign_id: "{{campaign_id}}"
                start_date: "{{date_start}}"
                end_date: "{{date_end}}"
            - name: get-lead-attribution
              type: call
              call: "salesforce.query-linkedin-leads"
              with:
                campaign_id: "{{campaign_id}}"
            - name: store-report
              type: call
              call: "snowflake.insert-record"
              with:
                table: "linkedin_campaign_reports"
                data:
                  campaign_id: "{{campaign_id}}"
                  impressions: "{{get-linkedin-metrics.impressions}}"
                  clicks: "{{get-linkedin-metrics.clicks}}"
                  leads: "{{get-lead-attribution.total}}"
  consumes:
    - type: http
      namespace: linkedin
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: analytics
          path: "/adAnalyticsV2?q=analytics&campaigns=urn:li:sponsoredCampaign:{{campaign_id}}"
          inputParameters:
            - name: campaign_id
              in: path
          operations:
            - name: get-campaign-analytics
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://ncl.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: leads
          path: "/query?q=SELECT+COUNT(Id)+FROM+Lead+WHERE+LinkedIn_Campaign__c='{{campaign_id}}'"
          inputParameters:
            - name: campaign_id
              in: query
          operations:
            - name: query-linkedin-leads
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://ncl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: insert-record
              method: POST

Retrieves newsletter subscriber data from MailChimp by audience segment and syncs it to the Salesforce Marketing Cloud data extension for unified campaign targeting.

naftiko: "0.5"
info:
  label: "MailChimp Subscriber Sync"
  description: "Retrieves newsletter subscriber data from MailChimp by audience segment and syncs it to the Salesforce Marketing Cloud data extension for unified campaign targeting."
  tags:
    - marketing
    - mailchimp
    - salesforce-marketing-cloud
capability:
  exposes:
    - type: mcp
      namespace: subscriber-sync
      port: 8080
      tools:
        - name: sync-mailchimp-to-sfmc
          description: "Sync MailChimp subscribers to Salesforce Marketing Cloud."
          inputParameters:
            - name: list_id
              in: body
              type: string
              description: "The MailChimp audience list identifier."
            - name: segment_id
              in: body
              type: string
              description: "The MailChimp segment identifier."
          steps:
            - name: get-subscribers
              type: call
              call: "mailchimp.get-segment-members"
              with:
                list_id: "{{list_id}}"
                segment_id: "{{segment_id}}"
            - name: upsert-to-sfmc
              type: call
              call: "sfmc.upsert-data-extension"
              with:
                data_extension: "mailchimp_subscribers"
                rows: "{{get-subscribers.members}}"
  consumes:
    - type: http
      namespace: mailchimp
      baseUri: "https://us1.api.mailchimp.com/3.0"
      authentication:
        type: basic
        username: "anystring"
        password: "$secrets.mailchimp_api_key"
      resources:
        - name: segments
          path: "/lists/{{list_id}}/segments/{{segment_id}}/members"
          inputParameters:
            - name: list_id
              in: path
            - name: segment_id
              in: path
          operations:
            - name: get-segment-members
              method: GET
    - type: http
      namespace: sfmc
      baseUri: "https://ncl.rest.marketingcloudapis.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.sfmc_token"
      resources:
        - name: data-extensions
          path: "/customobjectdata/key/{{data_extension}}/rowset"
          inputParameters:
            - name: data_extension
              in: path
          operations:
            - name: upsert-data-extension
              method: POST

Pulls campaign metrics from Google Analytics and Google Ads, joins with booking conversions from Salesforce, and stores the unified report in Snowflake for marketing analytics.

naftiko: "0.5"
info:
  label: "Marketing Campaign Performance Tracker"
  description: "Pulls campaign metrics from Google Analytics and Google Ads, joins with booking conversions from Salesforce, and stores the unified report in Snowflake for marketing analytics."
  tags:
    - marketing
    - google-analytics
    - google-ads
    - salesforce
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: marketing-analytics
      port: 8080
      tools:
        - name: track-campaign-performance
          description: "Aggregate marketing campaign data from Google Analytics, Google Ads, and Salesforce into a unified Snowflake report."
          inputParameters:
            - name: campaign_id
              in: body
              type: string
              description: "The marketing campaign identifier."
            - name: date_range_start
              in: body
              type: string
              description: "Report start date in YYYY-MM-DD format."
            - name: date_range_end
              in: body
              type: string
              description: "Report end date in YYYY-MM-DD format."
          steps:
            - name: get-ga-metrics
              type: call
              call: "google-analytics.get-report"
              with:
                campaign_id: "{{campaign_id}}"
                start_date: "{{date_range_start}}"
                end_date: "{{date_range_end}}"
            - name: get-ads-metrics
              type: call
              call: "google-ads.get-campaign-stats"
              with:
                campaign_id: "{{campaign_id}}"
                start_date: "{{date_range_start}}"
                end_date: "{{date_range_end}}"
            - name: get-conversions
              type: call
              call: "salesforce.get-campaign-conversions"
              with:
                campaign_id: "{{campaign_id}}"
            - name: store-report
              type: call
              call: "snowflake.insert-record"
              with:
                table: "campaign_performance"
                data:
                  campaign_id: "{{campaign_id}}"
                  impressions: "{{get-ads-metrics.impressions}}"
                  clicks: "{{get-ads-metrics.clicks}}"
                  sessions: "{{get-ga-metrics.sessions}}"
                  bookings: "{{get-conversions.total_conversions}}"
  consumes:
    - type: http
      namespace: google-analytics
      baseUri: "https://analyticsdata.googleapis.com/v1beta"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: reports
          path: "/properties/ncl/runReport"
          operations:
            - name: get-report
              method: POST
    - type: http
      namespace: google-ads
      baseUri: "https://googleads.googleapis.com/v14"
      authentication:
        type: bearer
        token: "$secrets.google_ads_token"
      resources:
        - name: campaigns
          path: "/customers/ncl/campaigns/{{campaign_id}}/stats"
          inputParameters:
            - name: campaign_id
              in: path
          operations:
            - name: get-campaign-stats
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://ncl.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: campaigns
          path: "/sobjects/Campaign/{{campaign_id}}/conversions"
          inputParameters:
            - name: campaign_id
              in: path
          operations:
            - name: get-campaign-conversions
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://ncl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: insert-record
              method: POST

Sends a formatted message to a specified Microsoft Teams channel. Used as a reusable notification primitive across NCL workflows.

naftiko: "0.5"
info:
  label: "Microsoft Teams Channel Notifier"
  description: "Sends a formatted message to a specified Microsoft Teams channel. Used as a reusable notification primitive across NCL workflows."
  tags:
    - communications
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: team-notifications
      port: 8080
      tools:
        - name: send-teams-notification
          description: "Send a message to a Microsoft Teams channel."
          inputParameters:
            - name: channel_id
              in: body
              type: string
              description: "The Teams channel identifier."
            - name: message
              in: body
              type: string
              description: "The message text to send."
          call: "msteams.send-message"
          with:
            channel_id: "{{channel_id}}"
            text: "{{message}}"
  consumes:
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves application performance metrics from New Relic for NCL's booking platform. Returns response time, throughput, and error rate.

naftiko: "0.5"
info:
  label: "New Relic Performance Snapshot"
  description: "Retrieves application performance metrics from New Relic for NCL's booking platform. Returns response time, throughput, and error rate."
  tags:
    - operations
    - monitoring
    - new-relic
capability:
  exposes:
    - type: mcp
      namespace: apm-monitoring
      port: 8080
      tools:
        - name: get-app-performance
          description: "Get current performance metrics for an application from New Relic."
          inputParameters:
            - name: app_id
              in: body
              type: string
              description: "The New Relic application identifier."
          call: "newrelic.get-app-metrics"
          with:
            app_id: "{{app_id}}"
          outputParameters:
            - name: response_time
              type: number
              mapping: "$.application.application_summary.response_time"
            - name: throughput
              type: number
              mapping: "$.application.application_summary.throughput"
            - name: error_rate
              type: number
              mapping: "$.application.application_summary.error_rate"
  consumes:
    - type: http
      namespace: newrelic
      baseUri: "https://api.newrelic.com/v2"
      authentication:
        type: apiKey
        key: "$secrets.newrelic_api_key"
        header: "X-Api-Key"
      resources:
        - name: applications
          path: "/applications/{{app_id}}.json"
          inputParameters:
            - name: app_id
              in: path
          operations:
            - name: get-app-metrics
              method: GET

Pulls the entertainment schedule from the event management system, formats it for the guest app, and publishes updates via the mobile API and digital signage system.

naftiko: "0.5"
info:
  label: "Onboard Entertainment Schedule Publisher"
  description: "Pulls the entertainment schedule from the event management system, formats it for the guest app, and publishes updates via the mobile API and digital signage system."
  tags:
    - onboard-ops
    - entertainment
    - guest-services
capability:
  exposes:
    - type: mcp
      namespace: entertainment-ops
      port: 8080
      tools:
        - name: publish-entertainment-schedule
          description: "Publish the daily entertainment schedule to the guest app and digital signage."
          inputParameters:
            - name: ship_code
              in: body
              type: string
              description: "The ship identifier code."
            - name: date
              in: body
              type: string
              description: "The schedule date in YYYY-MM-DD format."
          steps:
            - name: get-schedule
              type: call
              call: "events-api.get-daily-schedule"
              with:
                ship_code: "{{ship_code}}"
                date: "{{date}}"
            - name: publish-to-app
              type: call
              call: "guest-app.update-schedule"
              with:
                ship_code: "{{ship_code}}"
                schedule: "{{get-schedule.events}}"
            - name: update-signage
              type: call
              call: "signage-api.update-display"
              with:
                ship_code: "{{ship_code}}"
                content: "{{get-schedule.events}}"
  consumes:
    - type: http
      namespace: events-api
      baseUri: "https://api.ncl.com/events/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_events_token"
      resources:
        - name: schedules
          path: "/ships/{{ship_code}}/schedule/{{date}}"
          inputParameters:
            - name: ship_code
              in: path
            - name: date
              in: path
          operations:
            - name: get-daily-schedule
              method: GET
    - type: http
      namespace: guest-app
      baseUri: "https://api.ncl.com/mobile/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_mobile_token"
      resources:
        - name: schedules
          path: "/ships/{{ship_code}}/entertainment"
          inputParameters:
            - name: ship_code
              in: path
          operations:
            - name: update-schedule
              method: PUT
    - type: http
      namespace: signage-api
      baseUri: "https://api.ncl.com/signage/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_signage_token"
      resources:
        - name: displays
          path: "/ships/{{ship_code}}/displays"
          inputParameters:
            - name: ship_code
              in: path
          operations:
            - name: update-display
              method: PUT

Pulls daily onboard spend data from the POS system, aggregates by category in Snowflake, and pushes a summary dashboard update to Tableau for ship management review.

naftiko: "0.5"
info:
  label: "Onboard Revenue Dashboard Sync"
  description: "Pulls daily onboard spend data from the POS system, aggregates by category in Snowflake, and pushes a summary dashboard update to Tableau for ship management review."
  tags:
    - revenue
    - onboard-ops
    - snowflake
    - tableau
capability:
  exposes:
    - type: mcp
      namespace: revenue-analytics
      port: 8080
      tools:
        - name: sync-onboard-revenue
          description: "Pull daily onboard revenue from POS, aggregate in Snowflake, and refresh the Tableau dashboard."
          inputParameters:
            - name: ship_code
              in: body
              type: string
              description: "The ship identifier code."
            - name: report_date
              in: body
              type: string
              description: "The date to pull revenue data for in YYYY-MM-DD format."
          steps:
            - name: pull-pos-data
              type: call
              call: "pos-system.get-daily-revenue"
              with:
                ship_code: "{{ship_code}}"
                date: "{{report_date}}"
            - name: aggregate-revenue
              type: call
              call: "snowflake.execute-query"
              with:
                query: "INSERT INTO onboard_revenue SELECT * FROM staging WHERE ship_code='{{ship_code}}' AND date='{{report_date}}'"
            - name: refresh-dashboard
              type: call
              call: "tableau.refresh-extract"
              with:
                datasource_id: "onboard_revenue_ds"
  consumes:
    - type: http
      namespace: pos-system
      baseUri: "https://api.ncl.com/pos/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_pos_token"
      resources:
        - name: revenue
          path: "/ships/{{ship_code}}/revenue/{{date}}"
          inputParameters:
            - name: ship_code
              in: path
            - name: date
              in: path
          operations:
            - name: get-daily-revenue
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://ncl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: tableau
      baseUri: "https://tableau.ncl.com/api/3.21"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: datasources
          path: "/sites/ncl/datasources/{{datasource_id}}/refresh"
          inputParameters:
            - name: datasource_id
              in: path
          operations:
            - name: refresh-extract
              method: POST

On approach to a port, pulls manifest data from the reservation system, submits customs declarations via the port authority API, and notifies shore operations via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Port Arrival Logistics Coordinator"
  description: "On approach to a port, pulls manifest data from the reservation system, submits customs declarations via the port authority API, and notifies shore operations via Microsoft Teams."
  tags:
    - onboard-ops
    - logistics
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: port-logistics
      port: 8080
      tools:
        - name: coordinate-port-arrival
          description: "Coordinate port arrival logistics including manifest submission and customs clearance."
          inputParameters:
            - name: sailing_id
              in: body
              type: string
              description: "The sailing identifier."
            - name: port_code
              in: body
              type: string
              description: "The destination port code."
          steps:
            - name: get-manifest
              type: call
              call: "reservation-system.get-manifest"
              with:
                sailing_id: "{{sailing_id}}"
            - name: submit-customs
              type: call
              call: "port-authority.submit-declaration"
              with:
                port_code: "{{port_code}}"
                passenger_count: "{{get-manifest.passenger_count}}"
                crew_count: "{{get-manifest.crew_count}}"
            - name: notify-shore-ops
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "shore-operations"
                text: "Arrival at {{port_code}}: {{get-manifest.passenger_count}} pax, customs ref {{submit-customs.reference_number}}"
  consumes:
    - type: http
      namespace: reservation-system
      baseUri: "https://api.ncl.com/reservations/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_reservation_token"
      resources:
        - name: manifests
          path: "/sailings/{{sailing_id}}/manifest"
          inputParameters:
            - name: sailing_id
              in: path
          operations:
            - name: get-manifest
              method: GET
    - type: http
      namespace: port-authority
      baseUri: "https://api.ncl.com/ports/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_port_token"
      resources:
        - name: declarations
          path: "/ports/{{port_code}}/customs"
          inputParameters:
            - name: port_code
              in: path
          operations:
            - name: submit-declaration
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

When a procurement request is submitted in SAP Ariba, validates budget in Oracle, creates a ServiceNow approval ticket, and notifies the procurement manager in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Procurement Request Workflow"
  description: "When a procurement request is submitted in SAP Ariba, validates budget in Oracle, creates a ServiceNow approval ticket, and notifies the procurement manager in Microsoft Teams."
  tags:
    - procurement
    - sap-ariba
    - oracle
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: procurement-ops
      port: 8080
      tools:
        - name: process-procurement-request
          description: "Process a procurement request with budget validation, approval, and notification."
          inputParameters:
            - name: requisition_id
              in: body
              type: string
              description: "The SAP Ariba requisition identifier."
            - name: amount
              in: body
              type: number
              description: "The total requisition amount."
            - name: cost_center
              in: body
              type: string
              description: "The cost center for budget validation."
          steps:
            - name: get-requisition
              type: call
              call: "ariba.get-requisition"
              with:
                requisition_id: "{{requisition_id}}"
            - name: validate-budget
              type: call
              call: "oracle.check-budget"
              with:
                cost_center: "{{cost_center}}"
                amount: "{{amount}}"
            - name: create-approval
              type: call
              call: "servicenow.create-request"
              with:
                short_description: "Procurement approval: {{requisition_id}}"
                description: "Amount: ${{amount}}. Budget status: {{validate-budget.status}}. Vendor: {{get-requisition.vendor_name}}"
            - name: notify-manager
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "procurement-approvals"
                text: "New procurement request {{requisition_id}} for ${{amount}}. Budget: {{validate-budget.status}}. Approval: {{create-approval.number}}"
  consumes:
    - type: http
      namespace: ariba
      baseUri: "https://openapi.ariba.com/api/procurement/v1"
      authentication:
        type: bearer
        token: "$secrets.ariba_token"
      resources:
        - name: requisitions
          path: "/requisitions/{{requisition_id}}"
          inputParameters:
            - name: requisition_id
              in: path
          operations:
            - name: get-requisition
              method: GET
    - type: http
      namespace: oracle
      baseUri: "https://ncl.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_token"
      resources:
        - name: budgets
          path: "/budgets/{{cost_center}}/check"
          inputParameters:
            - name: cost_center
              in: path
          operations:
            - name: check-budget
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://ncl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Pulls current booking pace from Snowflake, compares against historical yield curves, adjusts dynamic pricing in the reservation system, and logs pricing changes for audit in ServiceNow.

naftiko: "0.5"
info:
  label: "Revenue Yield Optimizer"
  description: "Pulls current booking pace from Snowflake, compares against historical yield curves, adjusts dynamic pricing in the reservation system, and logs pricing changes for audit in ServiceNow."
  tags:
    - revenue
    - pricing
    - snowflake
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: yield-management
      port: 8080
      tools:
        - name: optimize-cabin-pricing
          description: "Adjust cabin pricing based on booking pace and yield optimization models."
          inputParameters:
            - name: sailing_id
              in: body
              type: string
              description: "The sailing identifier."
            - name: cabin_class
              in: body
              type: string
              description: "The cabin class to optimize pricing for."
          steps:
            - name: get-booking-pace
              type: call
              call: "snowflake.execute-query"
              with:
                query: "SELECT * FROM booking_pace WHERE sailing_id='{{sailing_id}}' AND cabin_class='{{cabin_class}}'"
            - name: calculate-optimal-price
              type: call
              call: "snowflake.execute-query"
              with:
                query: "CALL yield_optimizer('{{sailing_id}}', '{{cabin_class}}', {{get-booking-pace.current_pace}})"
            - name: update-pricing
              type: call
              call: "reservation-system.update-pricing"
              with:
                sailing_id: "{{sailing_id}}"
                cabin_class: "{{cabin_class}}"
                new_price: "{{calculate-optimal-price.recommended_price}}"
            - name: log-change
              type: call
              call: "servicenow.create-record"
              with:
                table: "pricing_audit"
                data:
                  sailing_id: "{{sailing_id}}"
                  old_price: "{{get-booking-pace.current_price}}"
                  new_price: "{{calculate-optimal-price.recommended_price}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://ncl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: reservation-system
      baseUri: "https://api.ncl.com/reservations/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_reservation_token"
      resources:
        - name: pricing
          path: "/sailings/{{sailing_id}}/pricing"
          inputParameters:
            - name: sailing_id
              in: path
          operations:
            - name: update-pricing
              method: PUT
    - type: http
      namespace: servicenow
      baseUri: "https://ncl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: records
          path: "/table/{{table}}"
          inputParameters:
            - name: table
              in: path
          operations:
            - name: create-record
              method: POST

Queries the safety management system for muster drill completion rates by ship, and pushes the data to a Tableau dashboard for USCG compliance reporting.

naftiko: "0.5"
info:
  label: "Safety Drill Completion Tracker"
  description: "Queries the safety management system for muster drill completion rates by ship, and pushes the data to a Tableau dashboard for USCG compliance reporting."
  tags:
    - onboard-ops
    - safety
    - compliance
    - tableau
capability:
  exposes:
    - type: mcp
      namespace: safety-compliance
      port: 8080
      tools:
        - name: track-muster-completion
          description: "Track muster drill completion rates and update compliance dashboard."
          inputParameters:
            - name: ship_code
              in: body
              type: string
              description: "The ship identifier code."
            - name: sailing_date
              in: body
              type: string
              description: "The sailing date in YYYY-MM-DD format."
          steps:
            - name: get-drill-data
              type: call
              call: "safety-api.get-muster-status"
              with:
                ship_code: "{{ship_code}}"
                date: "{{sailing_date}}"
            - name: store-compliance
              type: call
              call: "snowflake.insert-record"
              with:
                table: "muster_compliance"
                data:
                  ship_code: "{{ship_code}}"
                  date: "{{sailing_date}}"
                  completion_rate: "{{get-drill-data.completion_rate}}"
            - name: refresh-dashboard
              type: call
              call: "tableau.refresh-extract"
              with:
                datasource_id: "safety_compliance_ds"
  consumes:
    - type: http
      namespace: safety-api
      baseUri: "https://api.ncl.com/safety/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_safety_token"
      resources:
        - name: muster
          path: "/ships/{{ship_code}}/muster"
          inputParameters:
            - name: ship_code
              in: path
          operations:
            - name: get-muster-status
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://ncl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: insert-record
              method: POST
    - type: http
      namespace: tableau
      baseUri: "https://tableau.ncl.com/api/3.21"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: datasources
          path: "/sites/ncl/datasources/{{datasource_id}}/refresh"
          inputParameters:
            - name: datasource_id
              in: path
          operations:
            - name: refresh-extract
              method: POST

Looks up a Salesforce lead by email address. Returns lead status, source, and assigned owner for the NCL sales team.

naftiko: "0.5"
info:
  label: "Salesforce Lead Lookup"
  description: "Looks up a Salesforce lead by email address. Returns lead status, source, and assigned owner for the NCL sales team."
  tags:
    - sales
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: sales-ops
      port: 8080
      tools:
        - name: get-lead-by-email
          description: "Look up a Salesforce lead by email address."
          inputParameters:
            - name: email
              in: body
              type: string
              description: "The lead email address to look up."
          call: "salesforce.query-lead"
          with:
            email: "{{email}}"
          outputParameters:
            - name: lead_status
              type: string
              mapping: "$.records[0].Status"
            - name: lead_source
              type: string
              mapping: "$.records[0].LeadSource"
            - name: owner_name
              type: string
              mapping: "$.records[0].Owner.Name"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://ncl.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: leads
          path: "/query?q=SELECT+Id,Status,LeadSource,Owner.Name+FROM+Lead+WHERE+Email='{{email}}'"
          inputParameters:
            - name: email
              in: query
          operations:
            - name: query-lead
              method: GET

Looks up a ServiceNow incident by number. Returns incident state, priority, assigned group, and short description.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Lookup"
  description: "Looks up a ServiceNow incident by number. Returns incident state, priority, assigned group, and short description."
  tags:
    - operations
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: itsm-ops
      port: 8080
      tools:
        - name: get-incident
          description: "Look up a ServiceNow incident by number."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "The ServiceNow incident number (e.g., INC0012345)."
          call: "servicenow.get-incident"
          with:
            incident_number: "{{incident_number}}"
          outputParameters:
            - name: state
              type: string
              mapping: "$.result.state"
            - name: priority
              type: string
              mapping: "$.result.priority"
            - name: assigned_group
              type: string
              mapping: "$.result.assignment_group.display_value"
            - name: description
              type: string
              mapping: "$.result.short_description"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://ncl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident?sysparm_query=number={{incident_number}}"
          inputParameters:
            - name: incident_number
              in: query
          operations:
            - name: get-incident
              method: GET

Retrieves a document from SharePoint by site and file path. Returns the document URL, last modified date, and author.

naftiko: "0.5"
info:
  label: "SharePoint Document Retrieval"
  description: "Retrieves a document from SharePoint by site and file path. Returns the document URL, last modified date, and author."
  tags:
    - operations
    - document-management
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: doc-management
      port: 8080
      tools:
        - name: get-sharepoint-document
          description: "Retrieve a document's metadata and download URL from SharePoint."
          inputParameters:
            - name: site_id
              in: body
              type: string
              description: "The SharePoint site identifier."
            - name: file_path
              in: body
              type: string
              description: "The path to the file within the document library."
          call: "sharepoint.get-file"
          with:
            site_id: "{{site_id}}"
            file_path: "{{file_path}}"
          outputParameters:
            - name: download_url
              type: string
              mapping: "$.@microsoft.graph.downloadUrl"
            - name: last_modified
              type: string
              mapping: "$.lastModifiedDateTime"
            - name: author
              type: string
              mapping: "$.lastModifiedBy.user.displayName"
  consumes:
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: files
          path: "/{{site_id}}/drive/root:/{{file_path}}"
          inputParameters:
            - name: site_id
              in: path
            - name: file_path
              in: path
          operations:
            - name: get-file
              method: GET

Creates a maintenance work order in ServiceNow for a ship system issue, attaches diagnostic data from the IoT monitoring platform, and notifies the chief engineer via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Ship Maintenance Work Order Creator"
  description: "Creates a maintenance work order in ServiceNow for a ship system issue, attaches diagnostic data from the IoT monitoring platform, and notifies the chief engineer via Microsoft Teams."
  tags:
    - onboard-ops
    - maintenance
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: ship-maintenance
      port: 8080
      tools:
        - name: create-maintenance-order
          description: "Create a maintenance work order with IoT diagnostics and engineer notification."
          inputParameters:
            - name: ship_code
              in: body
              type: string
              description: "The ship identifier code."
            - name: system_id
              in: body
              type: string
              description: "The ship system or equipment identifier."
            - name: issue_description
              in: body
              type: string
              description: "Description of the maintenance issue."
          steps:
            - name: get-diagnostics
              type: call
              call: "iot-platform.get-system-status"
              with:
                ship_code: "{{ship_code}}"
                system_id: "{{system_id}}"
            - name: create-work-order
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Maintenance: {{system_id}} on {{ship_code}}"
                category: "ship_maintenance"
                description: "{{issue_description}}. Diagnostics: {{get-diagnostics.summary}}"
                priority: "{{get-diagnostics.severity}}"
            - name: notify-engineer
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "engineering-alerts"
                text: "Maintenance order {{create-work-order.number}} created for {{system_id}} on {{ship_code}}. Severity: {{get-diagnostics.severity}}"
  consumes:
    - type: http
      namespace: iot-platform
      baseUri: "https://api.ncl.com/iot/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_iot_token"
      resources:
        - name: systems
          path: "/ships/{{ship_code}}/systems/{{system_id}}/status"
          inputParameters:
            - name: ship_code
              in: path
            - name: system_id
              in: path
          operations:
            - name: get-system-status
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://ncl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Queries the shore excursion catalog for available tours at a given port on a specific date. Returns tour name, available spots, and pricing.

naftiko: "0.5"
info:
  label: "Shore Excursion Availability Lookup"
  description: "Queries the shore excursion catalog for available tours at a given port on a specific date. Returns tour name, available spots, and pricing."
  tags:
    - reservations
    - shore-excursions
    - guest-services
capability:
  exposes:
    - type: mcp
      namespace: excursions
      port: 8080
      tools:
        - name: get-excursion-availability
          description: "Look up available shore excursions by port code and date."
          inputParameters:
            - name: port_code
              in: body
              type: string
              description: "The port of call code."
            - name: date
              in: body
              type: string
              description: "The port visit date in YYYY-MM-DD format."
          call: "excursion-api.list-available"
          with:
            port_code: "{{port_code}}"
            date: "{{date}}"
          outputParameters:
            - name: excursions
              type: array
              mapping: "$.data.tours"
            - name: total_available
              type: integer
              mapping: "$.data.total_count"
  consumes:
    - type: http
      namespace: excursion-api
      baseUri: "https://api.ncl.com/excursions/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_excursion_token"
      resources:
        - name: tours
          path: "/ports/{{port_code}}/tours?date={{date}}"
          inputParameters:
            - name: port_code
              in: path
            - name: date
              in: query
          operations:
            - name: list-available
              method: GET

Posts a message to a specified Slack channel. Used for cross-platform notifications when teams use both Slack and Teams.

naftiko: "0.5"
info:
  label: "Slack Channel Message Poster"
  description: "Posts a message to a specified Slack channel. Used for cross-platform notifications when teams use both Slack and Teams."
  tags:
    - communications
    - slack
capability:
  exposes:
    - type: mcp
      namespace: slack-notifications
      port: 8080
      tools:
        - name: post-slack-message
          description: "Post a message to a Slack channel."
          inputParameters:
            - name: channel
              in: body
              type: string
              description: "The Slack channel name or ID."
            - name: text
              in: body
              type: string
              description: "The message text to post."
          call: "slack.post-message"
          with:
            channel: "{{channel}}"
            text: "{{text}}"
  consumes:
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Executes an arbitrary SQL query against NCL's Snowflake data warehouse and returns results. Used by analysts and downstream capabilities.

naftiko: "0.5"
info:
  label: "Snowflake Query Runner"
  description: "Executes an arbitrary SQL query against NCL's Snowflake data warehouse and returns results. Used by analysts and downstream capabilities."
  tags:
    - analytics
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: data-warehouse
      port: 8080
      tools:
        - name: run-snowflake-query
          description: "Execute a SQL query against the NCL Snowflake warehouse."
          inputParameters:
            - name: query
              in: body
              type: string
              description: "The SQL query to execute."
            - name: warehouse
              in: body
              type: string
              description: "The Snowflake warehouse to use."
          call: "snowflake.execute-query"
          with:
            statement: "{{query}}"
            warehouse: "{{warehouse}}"
          outputParameters:
            - name: rows
              type: array
              mapping: "$.data"
            - name: row_count
              type: integer
              mapping: "$.resultSetMetaData.numRows"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://ncl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST

Pulls brand mentions from Instagram and Facebook via Meta APIs, scores sentiment, and logs high-engagement posts in Salesforce Marketing Cloud for follow-up.

naftiko: "0.5"
info:
  label: "Social Media Engagement Monitor"
  description: "Pulls brand mentions from Instagram and Facebook via Meta APIs, scores sentiment, and logs high-engagement posts in Salesforce Marketing Cloud for follow-up."
  tags:
    - marketing
    - social-media
    - instagram
    - facebook
    - salesforce-marketing-cloud
capability:
  exposes:
    - type: mcp
      namespace: social-monitoring
      port: 8080
      tools:
        - name: monitor-social-engagement
          description: "Monitor brand mentions across Instagram and Facebook and log high-engagement posts."
          inputParameters:
            - name: date
              in: body
              type: string
              description: "The date to monitor in YYYY-MM-DD format."
            - name: engagement_threshold
              in: body
              type: integer
              description: "Minimum engagement count to trigger logging."
          steps:
            - name: get-instagram-mentions
              type: call
              call: "meta-api.get-mentions"
              with:
                platform: "instagram"
                date: "{{date}}"
            - name: get-facebook-mentions
              type: call
              call: "meta-api.get-mentions"
              with:
                platform: "facebook"
                date: "{{date}}"
            - name: log-high-engagement
              type: call
              call: "sfmc.create-data-extension-row"
              with:
                data_extension: "social_mentions"
                data:
                  date: "{{date}}"
                  instagram_count: "{{get-instagram-mentions.total}}"
                  facebook_count: "{{get-facebook-mentions.total}}"
  consumes:
    - type: http
      namespace: meta-api
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.meta_access_token"
      resources:
        - name: mentions
          path: "/ncl/mentions"
          operations:
            - name: get-mentions
              method: GET
    - type: http
      namespace: sfmc
      baseUri: "https://ncl.rest.marketingcloudapis.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.sfmc_token"
      resources:
        - name: data-extensions
          path: "/customobjectdata/key/{{data_extension}}/rowset"
          inputParameters:
            - name: data_extension
              in: path
          operations:
            - name: create-data-extension-row
              method: POST

Books a spa appointment for a guest on a specific ship. Checks availability, creates the booking, and adds a charge to the guest folio.

naftiko: "0.5"
info:
  label: "Spa Appointment Booking"
  description: "Books a spa appointment for a guest on a specific ship. Checks availability, creates the booking, and adds a charge to the guest folio."
  tags:
    - onboard-ops
    - spa
    - revenue
capability:
  exposes:
    - type: mcp
      namespace: spa-services
      port: 8080
      tools:
        - name: book-spa-appointment
          description: "Book a spa service for a guest, checking availability and charging the folio."
          inputParameters:
            - name: reservation_id
              in: body
              type: string
              description: "The guest reservation ID."
            - name: service_type
              in: body
              type: string
              description: "The spa service type (massage, facial, etc.)."
            - name: preferred_time
              in: body
              type: string
              description: "Preferred appointment time in HH:MM format."
          steps:
            - name: check-availability
              type: call
              call: "spa-api.get-availability"
              with:
                reservation_id: "{{reservation_id}}"
                service_type: "{{service_type}}"
                time: "{{preferred_time}}"
            - name: create-booking
              type: call
              call: "spa-api.book-appointment"
              with:
                reservation_id: "{{reservation_id}}"
                slot_id: "{{check-availability.slot_id}}"
            - name: charge-folio
              type: call
              call: "reservation-system.add-folio-charge"
              with:
                reservation_id: "{{reservation_id}}"
                amount: "{{check-availability.price}}"
                description: "Spa: {{service_type}}"
  consumes:
    - type: http
      namespace: spa-api
      baseUri: "https://api.ncl.com/spa/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_spa_token"
      resources:
        - name: availability
          path: "/availability"
          operations:
            - name: get-availability
              method: GET
        - name: bookings
          path: "/bookings"
          operations:
            - name: book-appointment
              method: POST
    - type: http
      namespace: reservation-system
      baseUri: "https://api.ncl.com/reservations/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_reservation_token"
      resources:
        - name: folio
          path: "/reservations/{{reservation_id}}/folio/charges"
          inputParameters:
            - name: reservation_id
              in: path
          operations:
            - name: add-folio-charge
              method: POST

Queries SAP for a supply chain purchase order status for ship provisioning. Returns delivery status, expected arrival, and vendor details.

naftiko: "0.5"
info:
  label: "Supply Chain Order Status Checker"
  description: "Queries SAP for a supply chain purchase order status for ship provisioning. Returns delivery status, expected arrival, and vendor details."
  tags:
    - procurement
    - supply-chain
    - sap
capability:
  exposes:
    - type: mcp
      namespace: supply-chain
      port: 8080
      tools:
        - name: get-supply-order-status
          description: "Check the status of a supply chain order for ship provisioning."
          inputParameters:
            - name: po_number
              in: body
              type: string
              description: "The SAP purchase order number."
          call: "sap.get-po-status"
          with:
            po_number: "{{po_number}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.d.OverallStatus"
            - name: expected_delivery
              type: string
              mapping: "$.d.DeliveryDate"
            - name: vendor_name
              type: string
              mapping: "$.d.Supplier.Name"
            - name: ship_destination
              type: string
              mapping: "$.d.DeliveryAddress"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ncl.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: purchase-orders
          path: "/A_PurchaseOrder('{{po_number}}')"
          inputParameters:
            - name: po_number
              in: path
          operations:
            - name: get-po-status
              method: GET

Pulls completed bookings from Salesforce for a travel agency, calculates commissions in Snowflake, and generates a payout report stored in SharePoint.

naftiko: "0.5"
info:
  label: "Travel Agent Commission Calculator"
  description: "Pulls completed bookings from Salesforce for a travel agency, calculates commissions in Snowflake, and generates a payout report stored in SharePoint."
  tags:
    - revenue
    - sales
    - salesforce
    - snowflake
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: agent-commissions
      port: 8080
      tools:
        - name: calculate-agent-commissions
          description: "Calculate travel agent commissions for a period and generate the payout report."
          inputParameters:
            - name: agency_id
              in: body
              type: string
              description: "The travel agency Salesforce account ID."
            - name: period_start
              in: body
              type: string
              description: "Commission period start date."
            - name: period_end
              in: body
              type: string
              description: "Commission period end date."
          steps:
            - name: get-bookings
              type: call
              call: "salesforce.query-agency-bookings"
              with:
                agency_id: "{{agency_id}}"
                start_date: "{{period_start}}"
                end_date: "{{period_end}}"
            - name: calculate-commissions
              type: call
              call: "snowflake.execute-query"
              with:
                query: "CALL calculate_commissions('{{agency_id}}', '{{period_start}}', '{{period_end}}')"
            - name: store-report
              type: call
              call: "sharepoint.upload-file"
              with:
                site_id: "finance-reports"
                file_path: "Commissions/{{agency_id}}_{{period_end}}.xlsx"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://ncl.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: agency-bookings
          path: "/query?q=SELECT+Id,Amount+FROM+Opportunity+WHERE+AccountId='{{agency_id}}'"
          inputParameters:
            - name: agency_id
              in: query
            - name: start_date
              in: query
            - name: end_date
              in: query
          operations:
            - name: query-agency-bookings
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://ncl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: files
          path: "/{{site_id}}/drive/root:/{{file_path}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: file_path
              in: path
          operations:
            - name: upload-file
              method: PUT

When a vendor invoice arrives, validates it against the SAP purchase order, creates a payment request in Oracle, and notifies the finance team in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Vendor Invoice Processor"
  description: "When a vendor invoice arrives, validates it against the SAP purchase order, creates a payment request in Oracle, and notifies the finance team in Microsoft Teams."
  tags:
    - procurement
    - finance
    - sap
    - oracle
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: vendor-payments
      port: 8080
      tools:
        - name: process-vendor-invoice
          description: "Validate a vendor invoice against the PO and create a payment request."
          inputParameters:
            - name: invoice_number
              in: body
              type: string
              description: "The vendor invoice number."
            - name: po_number
              in: body
              type: string
              description: "The associated SAP purchase order number."
            - name: amount
              in: body
              type: number
              description: "The invoice amount."
          steps:
            - name: validate-po
              type: call
              call: "sap.get-po"
              with:
                po_number: "{{po_number}}"
            - name: create-payment
              type: call
              call: "oracle.create-payment-request"
              with:
                invoice_number: "{{invoice_number}}"
                po_number: "{{po_number}}"
                amount: "{{amount}}"
                vendor: "{{validate-po.vendor_name}}"
            - name: notify-finance
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "finance-approvals"
                text: "Payment request {{create-payment.request_id}} for ${{amount}} from {{validate-po.vendor_name}}. PO: {{po_number}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ncl.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: purchase-orders
          path: "/A_PurchaseOrder('{{po_number}}')"
          inputParameters:
            - name: po_number
              in: path
          operations:
            - name: get-po
              method: GET
    - type: http
      namespace: oracle
      baseUri: "https://ncl.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_token"
      resources:
        - name: payments
          path: "/payablesInvoices"
          operations:
            - name: create-payment-request
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Processes onboard WiFi package purchases by creating the charge on the guest folio and provisioning network access via the connectivity API.

naftiko: "0.5"
info:
  label: "WiFi Package Purchase Processor"
  description: "Processes onboard WiFi package purchases by creating the charge on the guest folio and provisioning network access via the connectivity API."
  tags:
    - onboard-ops
    - revenue
    - connectivity
capability:
  exposes:
    - type: mcp
      namespace: wifi-services
      port: 8080
      tools:
        - name: purchase-wifi-package
          description: "Process a WiFi package purchase and provision network access for a guest."
          inputParameters:
            - name: reservation_id
              in: body
              type: string
              description: "The guest reservation ID."
            - name: package_type
              in: body
              type: string
              description: "WiFi package tier (basic, premium, unlimited)."
          steps:
            - name: get-package-pricing
              type: call
              call: "wifi-api.get-packages"
              with:
                package_type: "{{package_type}}"
            - name: charge-folio
              type: call
              call: "reservation-system.add-folio-charge"
              with:
                reservation_id: "{{reservation_id}}"
                amount: "{{get-package-pricing.price}}"
                description: "WiFi: {{package_type}}"
            - name: provision-access
              type: call
              call: "wifi-api.provision-access"
              with:
                reservation_id: "{{reservation_id}}"
                package_id: "{{get-package-pricing.package_id}}"
  consumes:
    - type: http
      namespace: wifi-api
      baseUri: "https://api.ncl.com/connectivity/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_wifi_token"
      resources:
        - name: packages
          path: "/packages"
          operations:
            - name: get-packages
              method: GET
        - name: provisioning
          path: "/access/provision"
          operations:
            - name: provision-access
              method: POST
    - type: http
      namespace: reservation-system
      baseUri: "https://api.ncl.com/reservations/v1"
      authentication:
        type: bearer
        token: "$secrets.ncl_reservation_token"
      resources:
        - name: folio
          path: "/reservations/{{reservation_id}}/folio/charges"
          inputParameters:
            - name: reservation_id
              in: path
          operations:
            - name: add-folio-charge
              method: POST

Creates a Zoom meeting for NCL's shore-side team meetings and posts the join link to a Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Zoom Meeting Scheduler"
  description: "Creates a Zoom meeting for NCL's shore-side team meetings and posts the join link to a Microsoft Teams channel."
  tags:
    - communications
    - zoom
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: meeting-ops
      port: 8080
      tools:
        - name: schedule-zoom-meeting
          description: "Schedule a Zoom meeting and share the link in Teams."
          inputParameters:
            - name: topic
              in: body
              type: string
              description: "The meeting topic."
            - name: start_time
              in: body
              type: string
              description: "Meeting start time in ISO 8601 format."
            - name: duration
              in: body
              type: integer
              description: "Meeting duration in minutes."
            - name: teams_channel_id
              in: body
              type: string
              description: "The Teams channel to post the meeting link."
          steps:
            - name: create-meeting
              type: call
              call: "zoom.create-meeting"
              with:
                topic: "{{topic}}"
                start_time: "{{start_time}}"
                duration: "{{duration}}"
            - name: post-link
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "{{teams_channel_id}}"
                text: "Zoom meeting scheduled: {{topic}} at {{start_time}}. Join: {{create-meeting.join_url}}"
  consumes:
    - type: http
      namespace: zoom
      baseUri: "https://api.zoom.us/v2"
      authentication:
        type: bearer
        token: "$secrets.zoom_token"
      resources:
        - name: meetings
          path: "/users/me/meetings"
          operations:
            - name: create-meeting
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST