Royal Caribbean Group Capabilities

Naftiko 0.5 capability definitions for Royal Caribbean Group - 100 capabilities showing integration workflows and service orchestrations.

Sort
Expand

Retrieves the latest build status for an Azure DevOps pipeline.

naftiko: "0.5"
info:
  label: "Azure DevOps Build Status"
  description: "Retrieves the latest build status for an Azure DevOps pipeline."
  tags:
    - ci-cd
    - engineering
    - azure-devops
capability:
  exposes:
    - type: mcp
      namespace: devops-ci
      port: 8080
      tools:
        - name: get-build-status
          description: "Look up the latest build for an Azure DevOps pipeline."
          inputParameters:
            - name: project
              in: body
              type: string
              description: "The Azure DevOps project name."
            - name: pipeline_id
              in: body
              type: string
              description: "The pipeline definition ID."
          call: "azdevops.get-latest-build"
          with:
            project: "{{project}}"
            pipeline_id: "{{pipeline_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.value[0].result"
            - name: status
              type: string
              mapping: "$.value[0].status"
  consumes:
    - type: http
      namespace: azdevops
      baseUri: "https://dev.azure.com/royalcaribbean"
      authentication:
        type: basic
        username: "$secrets.azdevops_user"
        password: "$secrets.azdevops_pat"
      resources:
        - name: builds
          path: "/{{project}}/_apis/build/builds?definitions={{pipeline_id}}&$top=1&api-version=7.0"
          inputParameters:
            - name: project
              in: path
            - name: pipeline_id
              in: path
          operations:
            - name: get-latest-build
              method: GET

Retrieves beverage package status check data from the Royal Caribbean cruise line and hospitality systems.

naftiko: "0.5"
info:
  label: "Beverage Package Status Check"
  description: "Retrieves beverage package status check data from the Royal Caribbean cruise line and hospitality systems."
  tags:
    - beverage
    - royal-caribbean
    - check
capability:
  exposes:
    - type: mcp
      namespace: beverage
      port: 8080
      tools:
        - name: beverage-package-status-check
          description: "Retrieves beverage package status check data from the Royal Caribbean cruise line and hospitality systems."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The input id."
          call: "royal-caribbean.beverage-package-status-check"
          with:
            input_id: "{{input_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: royal-caribbean
      baseUri: "https://api.royalcaribbean.com/v2"
      authentication:
        type: bearer
        token: "$secrets.rc_api_token"
      resources:
        - name: resource
          path: "/beverage/package/status/check/{{input_id}}"
          inputParameters:
            - name: input_id
              in: path
          operations:
            - name: beverage-package-status-check
              method: GET

Orchestrates casino operations pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders.

naftiko: "0.5"
info:
  label: "Casino Operations Pipeline"
  description: "Orchestrates casino operations pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
  tags:
    - casino
    - royal-caribbean
    - slack
    - jira
    - teams
capability:
  exposes:
    - type: mcp
      namespace: casino
      port: 8080
      tools:
        - name: casino-operations-pipeline
          description: "Orchestrates casino operations pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
          steps:
            - name: step-1
              type: call
              call: "slack.execute-1"
              with:
                input: "{{input_id}}"
            - name: step-2
              type: call
              call: "jira.execute-2"
              with:
                input: "{{input_id}}"
            - name: step-3
              type: call
              call: "teams.execute-3"
              with:
                input: "{{input_id}}"
  consumes:
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: slack-resource
          path: "/api/casino"
          operations:
            - name: execute-1
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://royalcaribbean.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: jira-resource
          path: "/api/casino"
          operations:
            - name: execute-2
              method: POST
    - type: http
      namespace: teams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.teams_token"
      resources:
        - name: teams-resource
          path: "/api/casino"
          operations:
            - name: execute-3
              method: POST

Queries Cloudflare for CDN performance metrics for Royal Caribbean web properties.

naftiko: "0.5"
info:
  label: "Cloudflare CDN Performance"
  description: "Queries Cloudflare for CDN performance metrics for Royal Caribbean web properties."
  tags:
    - infrastructure
    - cdn
    - cloudflare
capability:
  exposes:
    - type: mcp
      namespace: cdn
      port: 8080
      tools:
        - name: get-cdn-performance
          description: "Retrieve Cloudflare zone analytics."
          inputParameters:
            - name: zone_id
              in: body
              type: string
              description: "The Cloudflare zone ID."
          call: "cloudflare.get-zone-analytics"
          with:
            zone_id: "{{zone_id}}"
  consumes:
    - type: http
      namespace: cloudflare
      baseUri: "https://api.cloudflare.com/client/v4"
      authentication:
        type: bearer
        token: "$secrets.cloudflare_token"
      resources:
        - name: analytics
          path: "/zones/{{zone_id}}/analytics/dashboard"
          inputParameters:
            - name: zone_id
              in: path
          operations:
            - name: get-zone-analytics
              method: GET

Searches Confluence for ship operations documentation by keyword and returns matching page titles and URLs.

naftiko: "0.5"
info:
  label: "Confluence Ship Operations Wiki Search"
  description: "Searches Confluence for ship operations documentation by keyword and returns matching page titles and URLs."
  tags:
    - documentation
    - knowledge-management
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: knowledge
      port: 8080
      tools:
        - name: search-ship-docs
          description: "Search Confluence for ship operations documentation."
          inputParameters:
            - name: query
              in: body
              type: string
              description: "The search keyword."
          call: "confluence.search"
          with:
            query: "{{query}}"
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://royalcaribbean.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: search
          path: "/search?cql=type=page AND text~\"{{query}}\""
          inputParameters:
            - name: query
              in: path
          operations:
            - name: search
              method: GET

Retrieves crew certification status data from the Royal Caribbean cruise line and hospitality systems.

naftiko: "0.5"
info:
  label: "Crew Certification Status"
  description: "Retrieves crew certification status data from the Royal Caribbean cruise line and hospitality systems."
  tags:
    - crew
    - royal-caribbean
    - status
capability:
  exposes:
    - type: mcp
      namespace: crew
      port: 8080
      tools:
        - name: crew-certification-status
          description: "Retrieves crew certification status data from the Royal Caribbean cruise line and hospitality systems."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The input id."
          call: "royal-caribbean.crew-certification-status"
          with:
            input_id: "{{input_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: royal-caribbean
      baseUri: "https://api.royalcaribbean.com/v2"
      authentication:
        type: bearer
        token: "$secrets.rc_api_token"
      resources:
        - name: resource
          path: "/crew/certification/status/{{input_id}}"
          inputParameters:
            - name: input_id
              in: path
          operations:
            - name: crew-certification-status
              method: GET

Orchestrates crew payroll processing pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders.

naftiko: "0.5"
info:
  label: "Crew Payroll Processing Pipeline"
  description: "Orchestrates crew payroll processing pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
  tags:
    - crew
    - royal-caribbean
    - servicenow
    - snowflake
    - slack
capability:
  exposes:
    - type: mcp
      namespace: crew
      port: 8080
      tools:
        - name: crew-payroll-processing-pipeline
          description: "Orchestrates crew payroll processing pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
          steps:
            - name: step-1
              type: call
              call: "servicenow.execute-1"
              with:
                input: "{{input_id}}"
            - name: step-2
              type: call
              call: "snowflake.execute-2"
              with:
                input: "{{input_id}}"
            - name: step-3
              type: call
              call: "slack.execute-3"
              with:
                input: "{{input_id}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://royalcaribbean.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: servicenow-resource
          path: "/api/crew"
          operations:
            - name: execute-1
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://royalcaribbean.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: snowflake-resource
          path: "/api/crew"
          operations:
            - name: execute-2
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: slack-resource
          path: "/api/crew"
          operations:
            - name: execute-3
              method: POST

When a crew scheduling conflict is detected in Workday, creates a ServiceNow task for the scheduling manager, and notifies the affected crew members via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Crew Scheduling Conflict Resolver"
  description: "When a crew scheduling conflict is detected in Workday, creates a ServiceNow task for the scheduling manager, and notifies the affected crew members via Microsoft Teams."
  tags:
    - hr
    - scheduling
    - workday
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: crew-scheduling
      port: 8080
      tools:
        - name: resolve-schedule-conflict
          description: "Given two conflicting crew member IDs and shift details, create a ServiceNow task and notify via Teams."
          inputParameters:
            - name: crew_member_1
              in: body
              type: string
              description: "First crew member Workday ID."
            - name: crew_member_2
              in: body
              type: string
              description: "Second crew member Workday ID."
            - name: conflict_date
              in: body
              type: string
              description: "The date of the scheduling conflict."
            - name: ship_code
              in: body
              type: string
              description: "The ship code."
          steps:
            - name: get-crew-1
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{crew_member_1}}"
            - name: get-crew-2
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{crew_member_2}}"
            - name: create-task
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "Crew schedule conflict: {{get-crew-1.full_name}} / {{get-crew-2.full_name}} — {{conflict_date}}"
                assigned_group: "Crew_Scheduling_{{ship_code}}"
                description: "Schedule conflict on {{conflict_date}} between {{get-crew-1.full_name}} ({{get-crew-1.job_title}}) and {{get-crew-2.full_name}} ({{get-crew-2.job_title}})."
            - name: notify-scheduling
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "crew_scheduling_{{ship_code}}"
                text: "Schedule Conflict on {{conflict_date}}: {{get-crew-1.full_name}} vs {{get-crew-2.full_name}}. Task: {{create-task.number}}."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://royalcaribbean.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Orchestrates crew scheduling optimization pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders.

naftiko: "0.5"
info:
  label: "Crew Scheduling Optimization Pipeline"
  description: "Orchestrates crew scheduling optimization pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
  tags:
    - crew
    - royal-caribbean
    - snowflake
    - slack
    - jira
capability:
  exposes:
    - type: mcp
      namespace: crew
      port: 8080
      tools:
        - name: crew-scheduling-optimization-pipeline
          description: "Orchestrates crew scheduling optimization pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
          steps:
            - name: step-1
              type: call
              call: "snowflake.execute-1"
              with:
                input: "{{input_id}}"
            - name: step-2
              type: call
              call: "slack.execute-2"
              with:
                input: "{{input_id}}"
            - name: step-3
              type: call
              call: "jira.execute-3"
              with:
                input: "{{input_id}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://royalcaribbean.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: snowflake-resource
          path: "/api/crew"
          operations:
            - name: execute-1
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: slack-resource
          path: "/api/crew"
          operations:
            - name: execute-2
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://royalcaribbean.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: jira-resource
          path: "/api/crew"
          operations:
            - name: execute-3
              method: POST

Orchestrates crew training compliance pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders.

naftiko: "0.5"
info:
  label: "Crew Training Compliance Pipeline"
  description: "Orchestrates crew training compliance pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
  tags:
    - crew
    - royal-caribbean
    - slack
    - jira
    - teams
capability:
  exposes:
    - type: mcp
      namespace: crew
      port: 8080
      tools:
        - name: crew-training-compliance-pipeline
          description: "Orchestrates crew training compliance pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
          steps:
            - name: step-1
              type: call
              call: "slack.execute-1"
              with:
                input: "{{input_id}}"
            - name: step-2
              type: call
              call: "jira.execute-2"
              with:
                input: "{{input_id}}"
            - name: step-3
              type: call
              call: "teams.execute-3"
              with:
                input: "{{input_id}}"
  consumes:
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: slack-resource
          path: "/api/crew"
          operations:
            - name: execute-1
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://royalcaribbean.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: jira-resource
          path: "/api/crew"
          operations:
            - name: execute-2
              method: POST
    - type: http
      namespace: teams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.teams_token"
      resources:
        - name: teams-resource
          path: "/api/crew"
          operations:
            - name: execute-3
              method: POST

Orchestrates cruise pricing optimization pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders.

naftiko: "0.5"
info:
  label: "Cruise Pricing Optimization Pipeline"
  description: "Orchestrates cruise pricing optimization pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
  tags:
    - cruise
    - royal-caribbean
    - royal-caribbean
    - salesforce
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: cruise
      port: 8080
      tools:
        - name: cruise-pricing-optimization-pipeline
          description: "Orchestrates cruise pricing optimization pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
          steps:
            - name: step-1
              type: call
              call: "royal-caribbean.execute-1"
              with:
                input: "{{input_id}}"
            - name: step-2
              type: call
              call: "salesforce.execute-2"
              with:
                input: "{{input_id}}"
            - name: step-3
              type: call
              call: "servicenow.execute-3"
              with:
                input: "{{input_id}}"
  consumes:
    - type: http
      namespace: royal-caribbean
      baseUri: "https://api.royalcaribbean.com/v2"
      authentication:
        type: bearer
        token: "$secrets.rc_api_token"
      resources:
        - name: royal-caribbean-resource
          path: "/api/cruise"
          operations:
            - name: execute-1
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://royalcaribbean.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_access_token"
      resources:
        - name: salesforce-resource
          path: "/api/cruise"
          operations:
            - name: execute-2
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://royalcaribbean.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: servicenow-resource
          path: "/api/cruise"
          operations:
            - name: execute-3
              method: POST

Queries Datadog for the health of a ship's onboard IT infrastructure, returning server status, network latency, and active alerts.

naftiko: "0.5"
info:
  label: "Datadog Ship IT Infrastructure Monitor"
  description: "Queries Datadog for the health of a ship's onboard IT infrastructure, returning server status, network latency, and active alerts."
  tags:
    - monitoring
    - infrastructure
    - datadog
capability:
  exposes:
    - type: mcp
      namespace: ship-infra
      port: 8080
      tools:
        - name: get-ship-infra-health
          description: "Query Datadog for a ship's IT infrastructure health."
          inputParameters:
            - name: ship_code
              in: body
              type: string
              description: "The ship identifier code."
          call: "datadog.get-hosts"
          with:
            filter: "ship:{{ship_code}}"
          outputParameters:
            - name: host_count
              type: number
              mapping: "$.total_matching"
            - name: hosts
              type: array
              mapping: "$.host_list"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.datadog_api_key"
      resources:
        - name: hosts
          path: "/hosts?filter={{filter}}"
          inputParameters:
            - name: filter
              in: path
          operations:
            - name: get-hosts
              method: GET

Retrieves dining reservation lookup data from the Royal Caribbean cruise line and hospitality systems.

naftiko: "0.5"
info:
  label: "Dining Reservation Lookup"
  description: "Retrieves dining reservation lookup data from the Royal Caribbean cruise line and hospitality systems."
  tags:
    - dining
    - royal-caribbean
    - lookup
capability:
  exposes:
    - type: mcp
      namespace: dining
      port: 8080
      tools:
        - name: dining-reservation-lookup
          description: "Retrieves dining reservation lookup data from the Royal Caribbean cruise line and hospitality systems."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The input id."
          call: "royal-caribbean.dining-reservation-lookup"
          with:
            input_id: "{{input_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: royal-caribbean
      baseUri: "https://api.royalcaribbean.com/v2"
      authentication:
        type: bearer
        token: "$secrets.rc_api_token"
      resources:
        - name: resource
          path: "/dining/reservation/lookup/{{input_id}}"
          inputParameters:
            - name: input_id
              in: path
          operations:
            - name: dining-reservation-lookup
              method: GET

Queries the pricing engine for current cabin pricing by ship, sailing date, and cabin category, returning base price, dynamic adjustment, and availability count.

naftiko: "0.5"
info:
  label: "Dynamic Pricing Engine Query"
  description: "Queries the pricing engine for current cabin pricing by ship, sailing date, and cabin category, returning base price, dynamic adjustment, and availability count."
  tags:
    - revenue
    - pricing
    - dynamic-pricing
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: pricing
      port: 8080
      tools:
        - name: get-cabin-pricing
          description: "Query current cabin pricing for a ship and sailing date."
          inputParameters:
            - name: ship_code
              in: body
              type: string
              description: "The ship identifier code."
            - name: sailing_date
              in: body
              type: string
              description: "The sailing date."
            - name: cabin_category
              in: body
              type: string
              description: "The cabin category (e.g., interior, ocean_view, balcony, suite)."
          call: "salesforce.get-pricing"
          with:
            ship_code: "{{ship_code}}"
            sailing_date: "{{sailing_date}}"
            cabin_category: "{{cabin_category}}"
          outputParameters:
            - name: base_price
              type: number
              mapping: "$.Base_Price__c"
            - name: dynamic_adjustment
              type: number
              mapping: "$.Dynamic_Adjustment__c"
            - name: availability
              type: number
              mapping: "$.Available_Cabins__c"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://royalcaribbean.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: pricing
          path: "/sobjects/Cabin_Pricing__c?ship={{ship_code}}&sailing={{sailing_date}}&category={{cabin_category}}"
          inputParameters:
            - name: ship_code
              in: path
            - name: sailing_date
              in: path
            - name: cabin_category
              in: path
          operations:
            - name: get-pricing
              method: GET

Queries the embarkation system for check-in progress by ship and sailing date, returning total checked-in guests, pending, and VIP arrivals.

naftiko: "0.5"
info:
  label: "Embarkation Day Check-in Status"
  description: "Queries the embarkation system for check-in progress by ship and sailing date, returning total checked-in guests, pending, and VIP arrivals."
  tags:
    - operations
    - embarkation
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: embarkation
      port: 8080
      tools:
        - name: get-checkin-status
          description: "Query embarkation check-in progress for a ship and sailing date."
          inputParameters:
            - name: ship_code
              in: body
              type: string
              description: "The ship identifier code."
            - name: sailing_date
              in: body
              type: string
              description: "The sailing departure date."
          call: "salesforce.get-checkin-status"
          with:
            ship_code: "{{ship_code}}"
            sailing_date: "{{sailing_date}}"
          outputParameters:
            - name: total_expected
              type: number
              mapping: "$.Total_Expected__c"
            - name: checked_in
              type: number
              mapping: "$.Checked_In__c"
            - name: vip_arrivals
              type: number
              mapping: "$.VIP_Arrivals__c"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://royalcaribbean.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: embarkation
          path: "/sobjects/Embarkation__c?ship={{ship_code}}&sailing={{sailing_date}}"
          inputParameters:
            - name: ship_code
              in: path
            - name: sailing_date
              in: path
          operations:
            - name: get-checkin-status
              method: GET

On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint folder for crew documents, and sends a Microsoft Teams welcome message.

naftiko: "0.5"
info:
  label: "Employee Onboarding Orchestrator"
  description: "On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint folder for crew documents, and sends a Microsoft Teams welcome message."
  tags:
    - hr
    - onboarding
    - workday
    - servicenow
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-onboarding
      port: 8080
      tools:
        - name: trigger-onboarding
          description: "Given a Workday employee ID and start date, orchestrate the full onboarding sequence across ServiceNow, SharePoint, and Microsoft Teams."
          inputParameters:
            - name: workday_employee_id
              in: body
              type: string
              description: "The Workday worker ID for the new hire."
            - name: start_date
              in: body
              type: string
              description: "The employee start date in YYYY-MM-DD format."
            - name: department
              in: body
              type: string
              description: "The department the new hire is joining."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{workday_employee_id}}"
            - name: open-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "New hire onboarding: {{get-employee.full_name}}"
                category: "hr_onboarding"
                assigned_group: "IT_Onboarding"
                description: "Onboarding for {{get-employee.full_name}} starting {{start_date}} in {{department}}."
            - name: provision-folder
              type: call
              call: "sharepoint.create-folder"
              with:
                site_id: "hr_onboarding_site"
                folder_path: "CrewDocs/{{get-employee.full_name}}_{{start_date}}"
            - name: send-welcome
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "new_hires"
                text: "Welcome to Royal Caribbean, {{get-employee.first_name}}! Your onboarding ticket is {{open-ticket.number}}. Documents: {{provision-folder.url}}."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://royalcaribbean.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: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-items
          path: "/{{site_id}}/drive/root:/{{folder_path}}"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
          operations:
            - name: create-folder
              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 entertainment booking pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders.

naftiko: "0.5"
info:
  label: "Entertainment Booking Pipeline"
  description: "Orchestrates entertainment booking pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
  tags:
    - entertainment
    - royal-caribbean
    - royal-caribbean
    - salesforce
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: entertainment
      port: 8080
      tools:
        - name: entertainment-booking-pipeline
          description: "Orchestrates entertainment booking pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
          steps:
            - name: step-1
              type: call
              call: "royal-caribbean.execute-1"
              with:
                input: "{{input_id}}"
            - name: step-2
              type: call
              call: "salesforce.execute-2"
              with:
                input: "{{input_id}}"
            - name: step-3
              type: call
              call: "servicenow.execute-3"
              with:
                input: "{{input_id}}"
  consumes:
    - type: http
      namespace: royal-caribbean
      baseUri: "https://api.royalcaribbean.com/v2"
      authentication:
        type: bearer
        token: "$secrets.rc_api_token"
      resources:
        - name: royal-caribbean-resource
          path: "/api/entertainment"
          operations:
            - name: execute-1
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://royalcaribbean.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_access_token"
      resources:
        - name: salesforce-resource
          path: "/api/entertainment"
          operations:
            - name: execute-2
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://royalcaribbean.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: servicenow-resource
          path: "/api/entertainment"
          operations:
            - name: execute-3
              method: POST

When an entertainment schedule is finalized in SharePoint, publishes it to the digital signage system and notifies the entertainment director via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Entertainment Schedule Publisher"
  description: "When an entertainment schedule is finalized in SharePoint, publishes it to the digital signage system and notifies the entertainment director via Microsoft Teams."
  tags:
    - entertainment
    - onboard-operations
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: entertainment
      port: 8080
      tools:
        - name: publish-entertainment-schedule
          description: "Given a ship code and schedule date, publish the entertainment schedule and notify the director."
          inputParameters:
            - name: ship_code
              in: body
              type: string
              description: "The ship identifier code."
            - name: schedule_date
              in: body
              type: string
              description: "The schedule date."
          steps:
            - name: get-schedule
              type: call
              call: "sharepoint.get-file"
              with:
                site_id: "entertainment_schedules"
                file_path: "{{ship_code}}/{{schedule_date}}_schedule.pdf"
            - name: notify-director
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "entertainment_{{ship_code}}"
                text: "Entertainment schedule published for {{ship_code}} on {{schedule_date}}. Document: {{get-schedule.url}}."
  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
    - 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 entertainment venue capacity data from the Royal Caribbean cruise line and hospitality systems.

naftiko: "0.5"
info:
  label: "Entertainment Venue Capacity"
  description: "Retrieves entertainment venue capacity data from the Royal Caribbean cruise line and hospitality systems."
  tags:
    - entertainment
    - royal-caribbean
    - capacity
capability:
  exposes:
    - type: mcp
      namespace: entertainment
      port: 8080
      tools:
        - name: entertainment-venue-capacity
          description: "Retrieves entertainment venue capacity data from the Royal Caribbean cruise line and hospitality systems."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The input id."
          call: "royal-caribbean.entertainment-venue-capacity"
          with:
            input_id: "{{input_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: royal-caribbean
      baseUri: "https://api.royalcaribbean.com/v2"
      authentication:
        type: bearer
        token: "$secrets.rc_api_token"
      resources:
        - name: resource
          path: "/entertainment/venue/capacity/{{input_id}}"
          inputParameters:
            - name: input_id
              in: path
          operations:
            - name: entertainment-venue-capacity
              method: GET

Retrieves expense reports from SAP Concur, validates against Workday cost center data, and opens a ServiceNow task for finance review when exceptions are detected.

naftiko: "0.5"
info:
  label: "Expense Report Review Pipeline"
  description: "Retrieves expense reports from SAP Concur, validates against Workday cost center data, and opens a ServiceNow task for finance review when exceptions are detected."
  tags:
    - finance
    - expense
    - sap-concur
    - workday
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: expense-review
      port: 8080
      tools:
        - name: review-expense-report
          description: "Given a Concur report ID and employee ID, fetch details, validate cost center, and flag policy exceptions."
          inputParameters:
            - name: expense_report_id
              in: body
              type: string
              description: "The SAP Concur expense report ID."
            - name: employee_id
              in: body
              type: string
              description: "The Workday employee ID."
          steps:
            - name: get-expense-report
              type: call
              call: "concur.get-expense-report"
              with:
                report_id: "{{expense_report_id}}"
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{employee_id}}"
            - name: open-review-task
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "Expense review: {{get-expense-report.report_name}} — {{get-employee.full_name}}"
                description: "Report {{expense_report_id}} total: {{get-expense-report.total_amount}}. Cost center: {{get-employee.cost_center}}."
                assigned_group: "Finance_Audit"
  consumes:
    - type: http
      namespace: concur
      baseUri: "https://www.concursolutions.com/api/v3.0"
      authentication:
        type: bearer
        token: "$secrets.concur_token"
      resources:
        - name: expense-reports
          path: "/expense/reports/{{report_id}}"
          inputParameters:
            - name: report_id
              in: path
          operations:
            - name: get-expense-report
              method: GET
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://royalcaribbean.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/task"
          operations:
            - name: create-task
              method: POST

When a ship maintenance window approaches, creates a SAP PM work order, opens a ServiceNow change request, notifies the fleet operations team in Microsoft Teams, and updates the Confluence maintenance calendar.

naftiko: "0.5"
info:
  label: "Fleet Maintenance Scheduling Pipeline"
  description: "When a ship maintenance window approaches, creates a SAP PM work order, opens a ServiceNow change request, notifies the fleet operations team in Microsoft Teams, and updates the Confluence maintenance calendar."
  tags:
    - fleet-management
    - maintenance
    - sap
    - servicenow
    - microsoft-teams
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: fleet-maintenance
      port: 8080
      tools:
        - name: schedule-ship-maintenance
          description: "Given a ship code and maintenance type, create a SAP work order, open a change request, update Confluence, and notify the fleet team."
          inputParameters:
            - name: ship_code
              in: body
              type: string
              description: "The ship identifier code."
            - name: maintenance_type
              in: body
              type: string
              description: "The type of maintenance (e.g., dry_dock, engine_service, hull_inspection)."
            - name: scheduled_date
              in: body
              type: string
              description: "The scheduled maintenance date."
          steps:
            - name: create-work-order
              type: call
              call: "sap.create-work-order"
              with:
                equipment_id: "{{ship_code}}"
                order_type: "{{maintenance_type}}"
                scheduled_date: "{{scheduled_date}}"
            - name: create-change-request
              type: call
              call: "servicenow.create-change"
              with:
                short_description: "Ship maintenance: {{ship_code}} — {{maintenance_type}}"
                description: "Scheduled {{maintenance_type}} for {{ship_code}} on {{scheduled_date}}. SAP order: {{create-work-order.order_number}}."
                assigned_group: "Fleet_Operations"
            - name: update-calendar
              type: call
              call: "confluence.update-page"
              with:
                page_id: "fleet_maintenance_calendar"
                body: "{{ship_code}} — {{maintenance_type}} — {{scheduled_date}} — SAP: {{create-work-order.order_number}} — CR: {{create-change-request.number}}"
            - name: notify-fleet
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "fleet_operations"
                text: "Ship Maintenance Scheduled: {{ship_code}} — {{maintenance_type}} on {{scheduled_date}}. SAP: {{create-work-order.order_number}}. CR: {{create-change-request.number}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://royalcaribbean-s4.sap.com/sap/opu/odata/sap/PM_WORKORDER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: work-orders
          path: "/WorkOrders"
          operations:
            - name: create-work-order
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://royalcaribbean.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: changes
          path: "/table/change_request"
          operations:
            - name: create-change
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://royalcaribbean.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: content
          path: "/content/{{page_id}}"
          inputParameters:
            - name: page_id
              in: path
          operations:
            - name: update-page
              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

Retrieves the status of a GitHub pull request including review state and merge readiness.

naftiko: "0.5"
info:
  label: "GitHub Pull Request Status"
  description: "Retrieves the status of a GitHub pull request including review state and merge readiness."
  tags:
    - engineering
    - ci-cd
    - github
capability:
  exposes:
    - type: mcp
      namespace: engineering-ci
      port: 8080
      tools:
        - name: get-pr-status
          description: "Look up a GitHub pull request by repo and PR number."
          inputParameters:
            - name: repo
              in: body
              type: string
              description: "The GitHub repository in owner/repo format."
            - name: pr_number
              in: body
              type: string
              description: "The pull request number."
          call: "github.get-pull-request"
          with:
            repo: "{{repo}}"
            pr_number: "{{pr_number}}"
          outputParameters:
            - name: state
              type: string
              mapping: "$.state"
            - name: mergeable
              type: boolean
              mapping: "$.mergeable"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com/repos"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: pull-requests
          path: "/{{repo}}/pulls/{{pr_number}}"
          inputParameters:
            - name: repo
              in: path
            - name: pr_number
              in: path
          operations:
            - name: get-pull-request
              method: GET

Retrieves booking funnel metrics from Google Analytics for the Royal Caribbean website, returning session counts, conversion rates, and drop-off points.

naftiko: "0.5"
info:
  label: "Google Analytics Web Booking Funnel"
  description: "Retrieves booking funnel metrics from Google Analytics for the Royal Caribbean website, returning session counts, conversion rates, and drop-off points."
  tags:
    - marketing
    - analytics
    - google-analytics
capability:
  exposes:
    - type: mcp
      namespace: web-analytics
      port: 8080
      tools:
        - name: get-booking-funnel
          description: "Retrieve booking funnel metrics from Google Analytics."
          inputParameters:
            - name: property_id
              in: body
              type: string
              description: "The Google Analytics property ID."
            - name: start_date
              in: body
              type: string
              description: "Start date in YYYY-MM-DD format."
            - name: end_date
              in: body
              type: string
              description: "End date in YYYY-MM-DD format."
          call: "ga.run-report"
          with:
            property_id: "{{property_id}}"
            start_date: "{{start_date}}"
            end_date: "{{end_date}}"
  consumes:
    - type: http
      namespace: ga
      baseUri: "https://analyticsdata.googleapis.com/v1beta"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: reports
          path: "/properties/{{property_id}}:runReport"
          inputParameters:
            - name: property_id
              in: path
          operations:
            - name: run-report
              method: POST

Retrieves port-of-call location details from Google Maps including coordinates, nearby amenities, and place photos for guest information displays.

naftiko: "0.5"
info:
  label: "Google Maps Port Information Lookup"
  description: "Retrieves port-of-call location details from Google Maps including coordinates, nearby amenities, and place photos for guest information displays."
  tags:
    - operations
    - navigation
    - google-maps
capability:
  exposes:
    - type: mcp
      namespace: port-info
      port: 8080
      tools:
        - name: get-port-details
          description: "Look up a port location and amenities using Google Maps Places API."
          inputParameters:
            - name: port_name
              in: body
              type: string
              description: "The port name to search."
          call: "gmaps.find-place"
          with:
            port_name: "{{port_name}}"
  consumes:
    - type: http
      namespace: gmaps
      baseUri: "https://maps.googleapis.com/maps/api/place"
      authentication:
        type: apiKey
        key: "$secrets.google_maps_key"
      resources:
        - name: places
          path: "/findplacefromtext/json?input={{port_name}}&inputtype=textquery&fields=name,geometry,formatted_address,photos"
          inputParameters:
            - name: port_name
              in: path
          operations:
            - name: find-place
              method: GET

Orchestrates group booking coordination pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders.

naftiko: "0.5"
info:
  label: "Group Booking Coordination Pipeline"
  description: "Orchestrates group booking coordination pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
  tags:
    - group
    - royal-caribbean
    - sendgrid
    - datadog
    - royal-caribbean
capability:
  exposes:
    - type: mcp
      namespace: group
      port: 8080
      tools:
        - name: group-booking-coordination-pipeline
          description: "Orchestrates group booking coordination pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
          steps:
            - name: step-1
              type: call
              call: "sendgrid.execute-1"
              with:
                input: "{{input_id}}"
            - name: step-2
              type: call
              call: "datadog.execute-2"
              with:
                input: "{{input_id}}"
            - name: step-3
              type: call
              call: "royal-caribbean.execute-3"
              with:
                input: "{{input_id}}"
  consumes:
    - type: http
      namespace: sendgrid
      baseUri: "https://api.sendgrid.com/v3"
      authentication:
        type: bearer
        token: "$secrets.sendgrid_api_key"
      resources:
        - name: sendgrid-resource
          path: "/api/group"
          operations:
            - name: execute-1
              method: POST
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: datadog-resource
          path: "/api/group"
          operations:
            - name: execute-2
              method: POST
    - type: http
      namespace: royal-caribbean
      baseUri: "https://api.royalcaribbean.com/v2"
      authentication:
        type: bearer
        token: "$secrets.rc_api_token"
      resources:
        - name: royal-caribbean-resource
          path: "/api/group"
          operations:
            - name: execute-3
              method: POST

Orchestrates guest accessibility accommodation pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders.

naftiko: "0.5"
info:
  label: "Guest Accessibility Accommodation Pipeline"
  description: "Orchestrates guest accessibility accommodation pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
  tags:
    - guest
    - royal-caribbean
    - teams
    - sap
    - sendgrid
capability:
  exposes:
    - type: mcp
      namespace: guest
      port: 8080
      tools:
        - name: guest-accessibility-accommodation-pipeline
          description: "Orchestrates guest accessibility accommodation pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
          steps:
            - name: step-1
              type: call
              call: "teams.execute-1"
              with:
                input: "{{input_id}}"
            - name: step-2
              type: call
              call: "sap.execute-2"
              with:
                input: "{{input_id}}"
            - name: step-3
              type: call
              call: "sendgrid.execute-3"
              with:
                input: "{{input_id}}"
  consumes:
    - type: http
      namespace: teams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.teams_token"
      resources:
        - name: teams-resource
          path: "/api/guest"
          operations:
            - name: execute-1
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://rc-erp.s4hana.ondemand.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: sap-resource
          path: "/api/guest"
          operations:
            - name: execute-2
              method: POST
    - type: http
      namespace: sendgrid
      baseUri: "https://api.sendgrid.com/v3"
      authentication:
        type: bearer
        token: "$secrets.sendgrid_api_key"
      resources:
        - name: sendgrid-resource
          path: "/api/guest"
          operations:
            - name: execute-3
              method: POST

When a guest complaint is received, creates a ServiceNow case, enriches with guest loyalty data from Salesforce, notifies the guest relations manager via Microsoft Teams, and sends a follow-up email via MailChimp.

naftiko: "0.5"
info:
  label: "Guest Complaint Resolution Pipeline"
  description: "When a guest complaint is received, creates a ServiceNow case, enriches with guest loyalty data from Salesforce, notifies the guest relations manager via Microsoft Teams, and sends a follow-up email via MailChimp."
  tags:
    - guest-services
    - complaint-management
    - servicenow
    - salesforce
    - microsoft-teams
    - mailchimp
capability:
  exposes:
    - type: mcp
      namespace: guest-complaints
      port: 8080
      tools:
        - name: process-guest-complaint
          description: "Given a guest ID and complaint description, create a ServiceNow case, enrich with loyalty data, notify the manager, and send follow-up."
          inputParameters:
            - name: guest_id
              in: body
              type: string
              description: "The Salesforce guest record ID."
            - name: complaint_category
              in: body
              type: string
              description: "The complaint category (e.g., dining, cabin, entertainment)."
            - name: complaint_description
              in: body
              type: string
              description: "The complaint description."
            - name: ship_code
              in: body
              type: string
              description: "The ship code."
          steps:
            - name: get-guest
              type: call
              call: "salesforce.get-guest"
              with:
                guest_id: "{{guest_id}}"
            - name: create-case
              type: call
              call: "servicenow.create-case"
              with:
                short_description: "Guest Complaint: {{complaint_category}} — {{get-guest.name}}"
                category: "guest_complaint"
                description: "Guest: {{get-guest.name}} ({{get-guest.loyalty_tier}}). Ship: {{ship_code}}. Category: {{complaint_category}}. Details: {{complaint_description}}"
                assigned_group: "Guest_Relations_{{ship_code}}"
            - name: notify-manager
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "guest_relations_{{ship_code}}"
                text: "Guest Complaint: {{get-guest.name}} ({{get-guest.loyalty_tier}}) — {{complaint_category}}. Case: {{create-case.number}}. {{complaint_description}}"
            - name: send-acknowledgment
              type: call
              call: "mailchimp.send-transactional"
              with:
                template_id: "complaint_acknowledgment"
                recipient_email: "{{get-guest.email}}"
                merge_vars: "guest_name={{get-guest.name}},case_number={{create-case.number}},category={{complaint_category}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://royalcaribbean.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: guests
          path: "/sobjects/Guest__c/{{guest_id}}"
          inputParameters:
            - name: guest_id
              in: path
          operations:
            - name: get-guest
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://royalcaribbean.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: cases
          path: "/table/sn_customerservice_case"
          operations:
            - name: create-case
              method: POST
    - type: http
      namespace: 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
    - type: http
      namespace: mailchimp
      baseUri: "https://mandrillapp.com/api/1.0"
      authentication:
        type: apiKey
        key: "$secrets.mailchimp_api_key"
      resources:
        - name: transactional
          path: "/messages/send-template"
          operations:
            - name: send-transactional
              method: POST

Orchestrates guest dining preference pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders.

naftiko: "0.5"
info:
  label: "Guest Dining Preference Pipeline"
  description: "Orchestrates guest dining preference pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
  tags:
    - guest
    - royal-caribbean
    - sendgrid
    - datadog
    - royal-caribbean
capability:
  exposes:
    - type: mcp
      namespace: guest
      port: 8080
      tools:
        - name: guest-dining-preference-pipeline
          description: "Orchestrates guest dining preference pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
          steps:
            - name: step-1
              type: call
              call: "sendgrid.execute-1"
              with:
                input: "{{input_id}}"
            - name: step-2
              type: call
              call: "datadog.execute-2"
              with:
                input: "{{input_id}}"
            - name: step-3
              type: call
              call: "royal-caribbean.execute-3"
              with:
                input: "{{input_id}}"
  consumes:
    - type: http
      namespace: sendgrid
      baseUri: "https://api.sendgrid.com/v3"
      authentication:
        type: bearer
        token: "$secrets.sendgrid_api_key"
      resources:
        - name: sendgrid-resource
          path: "/api/guest"
          operations:
            - name: execute-1
              method: POST
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: datadog-resource
          path: "/api/guest"
          operations:
            - name: execute-2
              method: POST
    - type: http
      namespace: royal-caribbean
      baseUri: "https://api.royalcaribbean.com/v2"
      authentication:
        type: bearer
        token: "$secrets.rc_api_token"
      resources:
        - name: royal-caribbean-resource
          path: "/api/guest"
          operations:
            - name: execute-3
              method: POST

Orchestrates guest disembarkation pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders.

naftiko: "0.5"
info:
  label: "Guest Disembarkation Pipeline"
  description: "Orchestrates guest disembarkation pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
  tags:
    - guest
    - royal-caribbean
    - snowflake
    - slack
    - jira
capability:
  exposes:
    - type: mcp
      namespace: guest
      port: 8080
      tools:
        - name: guest-disembarkation-pipeline
          description: "Orchestrates guest disembarkation pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
          steps:
            - name: step-1
              type: call
              call: "snowflake.execute-1"
              with:
                input: "{{input_id}}"
            - name: step-2
              type: call
              call: "slack.execute-2"
              with:
                input: "{{input_id}}"
            - name: step-3
              type: call
              call: "jira.execute-3"
              with:
                input: "{{input_id}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://royalcaribbean.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: snowflake-resource
          path: "/api/guest"
          operations:
            - name: execute-1
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: slack-resource
          path: "/api/guest"
          operations:
            - name: execute-2
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://royalcaribbean.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: jira-resource
          path: "/api/guest"
          operations:
            - name: execute-3
              method: POST

Orchestrates guest embarkation optimization pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders.

naftiko: "0.5"
info:
  label: "Guest Embarkation Optimization Pipeline"
  description: "Orchestrates guest embarkation optimization pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
  tags:
    - guest
    - royal-caribbean
    - jira
    - teams
    - sap
capability:
  exposes:
    - type: mcp
      namespace: guest
      port: 8080
      tools:
        - name: guest-embarkation-optimization-pipeline
          description: "Orchestrates guest embarkation optimization pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
          steps:
            - name: step-1
              type: call
              call: "jira.execute-1"
              with:
                input: "{{input_id}}"
            - name: step-2
              type: call
              call: "teams.execute-2"
              with:
                input: "{{input_id}}"
            - name: step-3
              type: call
              call: "sap.execute-3"
              with:
                input: "{{input_id}}"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://royalcaribbean.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: jira-resource
          path: "/api/guest"
          operations:
            - name: execute-1
              method: POST
    - type: http
      namespace: teams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.teams_token"
      resources:
        - name: teams-resource
          path: "/api/guest"
          operations:
            - name: execute-2
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://rc-erp.s4hana.ondemand.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: sap-resource
          path: "/api/guest"
          operations:
            - name: execute-3
              method: POST

Orchestrates guest experience personalization pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders.

naftiko: "0.5"
info:
  label: "Guest Experience Personalization Pipeline"
  description: "Orchestrates guest experience personalization pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
  tags:
    - guest
    - royal-caribbean
    - salesforce
    - servicenow
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: guest
      port: 8080
      tools:
        - name: guest-experience-personalization-pipeline
          description: "Orchestrates guest experience personalization pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
          steps:
            - name: step-1
              type: call
              call: "salesforce.execute-1"
              with:
                input: "{{input_id}}"
            - name: step-2
              type: call
              call: "servicenow.execute-2"
              with:
                input: "{{input_id}}"
            - name: step-3
              type: call
              call: "snowflake.execute-3"
              with:
                input: "{{input_id}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://royalcaribbean.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_access_token"
      resources:
        - name: salesforce-resource
          path: "/api/guest"
          operations:
            - name: execute-1
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://royalcaribbean.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: servicenow-resource
          path: "/api/guest"
          operations:
            - name: execute-2
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://royalcaribbean.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: snowflake-resource
          path: "/api/guest"
          operations:
            - name: execute-3
              method: POST

Retrieves guest folio balance check data from the Royal Caribbean cruise line and hospitality systems.

naftiko: "0.5"
info:
  label: "Guest Folio Balance Check"
  description: "Retrieves guest folio balance check data from the Royal Caribbean cruise line and hospitality systems."
  tags:
    - guest
    - royal-caribbean
    - check
capability:
  exposes:
    - type: mcp
      namespace: guest
      port: 8080
      tools:
        - name: guest-folio-balance-check
          description: "Retrieves guest folio balance check data from the Royal Caribbean cruise line and hospitality systems."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The input id."
          call: "royal-caribbean.guest-folio-balance-check"
          with:
            input_id: "{{input_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: royal-caribbean
      baseUri: "https://api.royalcaribbean.com/v2"
      authentication:
        type: bearer
        token: "$secrets.rc_api_token"
      resources:
        - name: resource
          path: "/guest/folio/balance/check/{{input_id}}"
          inputParameters:
            - name: input_id
              in: path
          operations:
            - name: guest-folio-balance-check
              method: GET

Orchestrates guest health screening pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders.

naftiko: "0.5"
info:
  label: "Guest Health Screening Pipeline"
  description: "Orchestrates guest health screening pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
  tags:
    - guest
    - royal-caribbean
    - sendgrid
    - datadog
    - royal-caribbean
capability:
  exposes:
    - type: mcp
      namespace: guest
      port: 8080
      tools:
        - name: guest-health-screening-pipeline
          description: "Orchestrates guest health screening pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
          steps:
            - name: step-1
              type: call
              call: "sendgrid.execute-1"
              with:
                input: "{{input_id}}"
            - name: step-2
              type: call
              call: "datadog.execute-2"
              with:
                input: "{{input_id}}"
            - name: step-3
              type: call
              call: "royal-caribbean.execute-3"
              with:
                input: "{{input_id}}"
  consumes:
    - type: http
      namespace: sendgrid
      baseUri: "https://api.sendgrid.com/v3"
      authentication:
        type: bearer
        token: "$secrets.sendgrid_api_key"
      resources:
        - name: sendgrid-resource
          path: "/api/guest"
          operations:
            - name: execute-1
              method: POST
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: datadog-resource
          path: "/api/guest"
          operations:
            - name: execute-2
              method: POST
    - type: http
      namespace: royal-caribbean
      baseUri: "https://api.royalcaribbean.com/v2"
      authentication:
        type: bearer
        token: "$secrets.rc_api_token"
      resources:
        - name: royal-caribbean-resource
          path: "/api/guest"
          operations:
            - name: execute-3
              method: POST

Orchestrates guest loyalty engagement pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders.

naftiko: "0.5"
info:
  label: "Guest Loyalty Engagement Pipeline"
  description: "Orchestrates guest loyalty engagement pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
  tags:
    - guest
    - royal-caribbean
    - servicenow
    - snowflake
    - slack
capability:
  exposes:
    - type: mcp
      namespace: guest
      port: 8080
      tools:
        - name: guest-loyalty-engagement-pipeline
          description: "Orchestrates guest loyalty engagement pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
          steps:
            - name: step-1
              type: call
              call: "servicenow.execute-1"
              with:
                input: "{{input_id}}"
            - name: step-2
              type: call
              call: "snowflake.execute-2"
              with:
                input: "{{input_id}}"
            - name: step-3
              type: call
              call: "slack.execute-3"
              with:
                input: "{{input_id}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://royalcaribbean.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: servicenow-resource
          path: "/api/guest"
          operations:
            - name: execute-1
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://royalcaribbean.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: snowflake-resource
          path: "/api/guest"
          operations:
            - name: execute-2
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: slack-resource
          path: "/api/guest"
          operations:
            - name: execute-3
              method: POST

Retrieves guest loyalty tier lookup data from the Royal Caribbean cruise line and hospitality systems.

naftiko: "0.5"
info:
  label: "Guest Loyalty Tier Lookup"
  description: "Retrieves guest loyalty tier lookup data from the Royal Caribbean cruise line and hospitality systems."
  tags:
    - guest
    - royal-caribbean
    - lookup
capability:
  exposes:
    - type: mcp
      namespace: guest
      port: 8080
      tools:
        - name: guest-loyalty-tier-lookup
          description: "Retrieves guest loyalty tier lookup data from the Royal Caribbean cruise line and hospitality systems."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The input id."
          call: "royal-caribbean.guest-loyalty-tier-lookup"
          with:
            input_id: "{{input_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: royal-caribbean
      baseUri: "https://api.royalcaribbean.com/v2"
      authentication:
        type: bearer
        token: "$secrets.rc_api_token"
      resources:
        - name: resource
          path: "/guest/loyalty/tier/lookup/{{input_id}}"
          inputParameters:
            - name: input_id
              in: path
          operations:
            - name: guest-loyalty-tier-lookup
              method: GET

Retrieves guest medical record lookup data from the Royal Caribbean cruise line and hospitality systems.

naftiko: "0.5"
info:
  label: "Guest Medical Record Lookup"
  description: "Retrieves guest medical record lookup data from the Royal Caribbean cruise line and hospitality systems."
  tags:
    - guest
    - royal-caribbean
    - lookup
capability:
  exposes:
    - type: mcp
      namespace: guest
      port: 8080
      tools:
        - name: guest-medical-record-lookup
          description: "Retrieves guest medical record lookup data from the Royal Caribbean cruise line and hospitality systems."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The input id."
          call: "royal-caribbean.guest-medical-record-lookup"
          with:
            input_id: "{{input_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: royal-caribbean
      baseUri: "https://api.royalcaribbean.com/v2"
      authentication:
        type: bearer
        token: "$secrets.rc_api_token"
      resources:
        - name: resource
          path: "/guest/medical/record/lookup/{{input_id}}"
          inputParameters:
            - name: input_id
              in: path
          operations:
            - name: guest-medical-record-lookup
              method: GET

Orchestrates guest photo package pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders.

naftiko: "0.5"
info:
  label: "Guest Photo Package Pipeline"
  description: "Orchestrates guest photo package pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
  tags:
    - guest
    - royal-caribbean
    - salesforce
    - servicenow
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: guest
      port: 8080
      tools:
        - name: guest-photo-package-pipeline
          description: "Orchestrates guest photo package pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
          steps:
            - name: step-1
              type: call
              call: "salesforce.execute-1"
              with:
                input: "{{input_id}}"
            - name: step-2
              type: call
              call: "servicenow.execute-2"
              with:
                input: "{{input_id}}"
            - name: step-3
              type: call
              call: "snowflake.execute-3"
              with:
                input: "{{input_id}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://royalcaribbean.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_access_token"
      resources:
        - name: salesforce-resource
          path: "/api/guest"
          operations:
            - name: execute-1
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://royalcaribbean.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: servicenow-resource
          path: "/api/guest"
          operations:
            - name: execute-2
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://royalcaribbean.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: snowflake-resource
          path: "/api/guest"
          operations:
            - name: execute-3
              method: POST

When a new cruise reservation is created in Salesforce, provisions a guest profile in the onboard systems, creates a ServiceNow setup ticket for cabin configuration, and sends a confirmation via Microsoft Teams to the guest services team.

naftiko: "0.5"
info:
  label: "Guest Reservation Orchestrator"
  description: "When a new cruise reservation is created in Salesforce, provisions a guest profile in the onboard systems, creates a ServiceNow setup ticket for cabin configuration, and sends a confirmation via Microsoft Teams to the guest services team."
  tags:
    - reservations
    - guest-services
    - salesforce
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: reservations
      port: 8080
      tools:
        - name: orchestrate-reservation
          description: "Given a Salesforce reservation ID, provision the guest profile, create a cabin setup ticket, and notify guest services."
          inputParameters:
            - name: reservation_id
              in: body
              type: string
              description: "The Salesforce reservation record ID."
            - name: ship_code
              in: body
              type: string
              description: "The ship identifier code."
            - name: sailing_date
              in: body
              type: string
              description: "The sailing departure date in YYYY-MM-DD format."
          steps:
            - name: get-reservation
              type: call
              call: "salesforce.get-reservation"
              with:
                reservation_id: "{{reservation_id}}"
            - name: create-setup-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Cabin setup: {{get-reservation.guest_name}} — {{ship_code}} {{sailing_date}}"
                category: "guest_services"
                assigned_group: "Cabin_Setup_{{ship_code}}"
                description: "Reservation {{reservation_id}} for {{get-reservation.guest_name}}. Cabin: {{get-reservation.cabin_number}}. Package: {{get-reservation.package_type}}."
            - name: notify-guest-services
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "guest_services_{{ship_code}}"
                text: "New reservation: {{get-reservation.guest_name}} — Cabin {{get-reservation.cabin_number}} on {{ship_code}} sailing {{sailing_date}}. Setup ticket: {{create-setup-ticket.number}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://royalcaribbean.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: reservations
          path: "/sobjects/Reservation__c/{{reservation_id}}"
          inputParameters:
            - name: reservation_id
              in: path
          operations:
            - name: get-reservation
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://royalcaribbean.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

Retrieves guest special needs record data from the Royal Caribbean cruise line and hospitality systems.

naftiko: "0.5"
info:
  label: "Guest Special Needs Record"
  description: "Retrieves guest special needs record data from the Royal Caribbean cruise line and hospitality systems."
  tags:
    - guest
    - royal-caribbean
    - record
capability:
  exposes:
    - type: mcp
      namespace: guest
      port: 8080
      tools:
        - name: guest-special-needs-record
          description: "Retrieves guest special needs record data from the Royal Caribbean cruise line and hospitality systems."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The input id."
          call: "royal-caribbean.guest-special-needs-record"
          with:
            input_id: "{{input_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: royal-caribbean
      baseUri: "https://api.royalcaribbean.com/v2"
      authentication:
        type: bearer
        token: "$secrets.rc_api_token"
      resources:
        - name: resource
          path: "/guest/special/needs/record/{{input_id}}"
          inputParameters:
            - name: input_id
              in: path
          operations:
            - name: guest-special-needs-record
              method: GET

Coordinates special occasion celebrations onboard by arranging amenities, dining upgrades, and personalized experiences.

naftiko: "0.5"
info:
  label: "Guest Special Occasion Pipeline"
  description: "Coordinates special occasion celebrations onboard by arranging amenities, dining upgrades, and personalized experiences."
  tags:
    - guest-experience
    - royal-caribbean
    - salesforce
    - sendgrid
capability:
  exposes:
    - type: mcp
      namespace: guest
      port: 8080
      tools:
        - name: guest-special-occasion-pipeline
          description: "Coordinates special occasion celebrations onboard by arranging amenities, dining upgrades, and personalized experiences."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
          steps:
            - name: get-guest
              type: call
              call: "salesforce.get-contact"
              with:
                input: "{{input_id}}"
            - name: arrange-amenities
              type: call
              call: "royal-caribbean.create-amenity"
              with:
                input: "{{input_id}}"
            - name: send-confirmation
              type: call
              call: "sendgrid.send-email"
              with:
                input: "{{input_id}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://royalcaribbean.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_access_token"
      resources:
        - name: salesforce-resource
          path: "/sobjects/Contact"
          operations:
            - name: get-contact
              method: GET
    - type: http
      namespace: royal-caribbean
      baseUri: "https://api.royalcaribbean.com/v2"
      authentication:
        type: bearer
        token: "$secrets.rc_api_token"
      resources:
        - name: royal-caribbean-resource
          path: "/amenities"
          operations:
            - name: create-amenity
              method: POST
    - type: http
      namespace: sendgrid
      baseUri: "https://api.sendgrid.com/v3"
      authentication:
        type: bearer
        token: "$secrets.sendgrid_api_key"
      resources:
        - name: sendgrid-resource
          path: "/mail/send"
          operations:
            - name: send-email
              method: POST

Orchestrates guest travel document verification pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders.

naftiko: "0.5"
info:
  label: "Guest Travel Document Verification Pipeline"
  description: "Orchestrates guest travel document verification pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
  tags:
    - guest
    - royal-caribbean
    - servicenow
    - snowflake
    - slack
capability:
  exposes:
    - type: mcp
      namespace: guest
      port: 8080
      tools:
        - name: guest-travel-document-verification-pipeline
          description: "Orchestrates guest travel document verification pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
          steps:
            - name: step-1
              type: call
              call: "servicenow.execute-1"
              with:
                input: "{{input_id}}"
            - name: step-2
              type: call
              call: "snowflake.execute-2"
              with:
                input: "{{input_id}}"
            - name: step-3
              type: call
              call: "slack.execute-3"
              with:
                input: "{{input_id}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://royalcaribbean.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: servicenow-resource
          path: "/api/guest"
          operations:
            - name: execute-1
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://royalcaribbean.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: snowflake-resource
          path: "/api/guest"
          operations:
            - name: execute-2
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: slack-resource
          path: "/api/guest"
          operations:
            - name: execute-3
              method: POST

Orchestrates guest wedding event pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders.

naftiko: "0.5"
info:
  label: "Guest Wedding Event Pipeline"
  description: "Orchestrates guest wedding event pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
  tags:
    - guest
    - royal-caribbean
    - datadog
    - royal-caribbean
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: guest
      port: 8080
      tools:
        - name: guest-wedding-event-pipeline
          description: "Orchestrates guest wedding event pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
          steps:
            - name: step-1
              type: call
              call: "datadog.execute-1"
              with:
                input: "{{input_id}}"
            - name: step-2
              type: call
              call: "royal-caribbean.execute-2"
              with:
                input: "{{input_id}}"
            - name: step-3
              type: call
              call: "salesforce.execute-3"
              with:
                input: "{{input_id}}"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: datadog-resource
          path: "/api/guest"
          operations:
            - name: execute-1
              method: POST
    - type: http
      namespace: royal-caribbean
      baseUri: "https://api.royalcaribbean.com/v2"
      authentication:
        type: bearer
        token: "$secrets.rc_api_token"
      resources:
        - name: royal-caribbean-resource
          path: "/api/guest"
          operations:
            - name: execute-2
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://royalcaribbean.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_access_token"
      resources:
        - name: salesforce-resource
          path: "/api/guest"
          operations:
            - name: execute-3
              method: POST

Retrieves a HubSpot contact by email for the marketing team.

naftiko: "0.5"
info:
  label: "HubSpot Contact Lookup"
  description: "Retrieves a HubSpot contact by email for the marketing team."
  tags:
    - marketing
    - crm
    - hubspot
capability:
  exposes:
    - type: mcp
      namespace: marketing-crm
      port: 8080
      tools:
        - name: get-hubspot-contact
          description: "Look up a HubSpot contact by email."
          inputParameters:
            - name: email
              in: body
              type: string
              description: "The contact email."
          call: "hubspot.get-contact"
          with:
            email: "{{email}}"
  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/{{email}}?idProperty=email"
          inputParameters:
            - name: email
              in: path
          operations:
            - name: get-contact
              method: GET

Retrieves new leads from HubSpot and syncs them to Salesforce for the sales team to follow up on cruise package inquiries.

naftiko: "0.5"
info:
  label: "HubSpot Lead Capture Integration"
  description: "Retrieves new leads from HubSpot and syncs them to Salesforce for the sales team to follow up on cruise package inquiries."
  tags:
    - sales
    - crm
    - hubspot
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: lead-sync
      port: 8080
      tools:
        - name: sync-hubspot-lead
          description: "Given a HubSpot contact ID, fetch the lead details and create a corresponding Salesforce lead."
          inputParameters:
            - name: hubspot_contact_id
              in: body
              type: string
              description: "The HubSpot contact ID."
          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}}"
                source: "HubSpot"
  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://royalcaribbean.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

Retrieves engagement metrics for Royal Caribbean Instagram posts, returning likes, comments, and reach for the social media marketing team.

naftiko: "0.5"
info:
  label: "Instagram Social Engagement Tracker"
  description: "Retrieves engagement metrics for Royal Caribbean Instagram posts, returning likes, comments, and reach for the social media marketing team."
  tags:
    - marketing
    - social-media
    - instagram
capability:
  exposes:
    - type: mcp
      namespace: social-media
      port: 8080
      tools:
        - name: get-instagram-engagement
          description: "Retrieve engagement metrics for an Instagram post."
          inputParameters:
            - name: post_id
              in: body
              type: string
              description: "The Instagram media ID."
          call: "instagram.get-media-insights"
          with:
            post_id: "{{post_id}}"
          outputParameters:
            - name: likes
              type: number
              mapping: "$.data[0].values[0].value"
            - name: comments
              type: number
              mapping: "$.data[1].values[0].value"
            - name: reach
              type: number
              mapping: "$.data[2].values[0].value"
  consumes:
    - type: http
      namespace: instagram
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.instagram_token"
      resources:
        - name: media-insights
          path: "/{{post_id}}/insights?metric=likes,comments,reach"
          inputParameters:
            - name: post_id
              in: path
          operations:
            - name: get-media-insights
              method: GET

Orchestrates itinerary weather adjustment pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders.

naftiko: "0.5"
info:
  label: "Itinerary Weather Adjustment Pipeline"
  description: "Orchestrates itinerary weather adjustment pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
  tags:
    - itinerary
    - royal-caribbean
    - sap
    - sendgrid
    - datadog
capability:
  exposes:
    - type: mcp
      namespace: itinerary
      port: 8080
      tools:
        - name: itinerary-weather-adjustment-pipeline
          description: "Orchestrates itinerary weather adjustment pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
          steps:
            - name: step-1
              type: call
              call: "sap.execute-1"
              with:
                input: "{{input_id}}"
            - name: step-2
              type: call
              call: "sendgrid.execute-2"
              with:
                input: "{{input_id}}"
            - name: step-3
              type: call
              call: "datadog.execute-3"
              with:
                input: "{{input_id}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://rc-erp.s4hana.ondemand.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: sap-resource
          path: "/api/itinerary"
          operations:
            - name: execute-1
              method: POST
    - type: http
      namespace: sendgrid
      baseUri: "https://api.sendgrid.com/v3"
      authentication:
        type: bearer
        token: "$secrets.sendgrid_api_key"
      resources:
        - name: sendgrid-resource
          path: "/api/itinerary"
          operations:
            - name: execute-2
              method: POST
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: datadog-resource
          path: "/api/itinerary"
          operations:
            - name: execute-3
              method: POST

Queries a weather API for port-of-call forecasts, checks for severe weather, and notifies the bridge team and guest services via Microsoft Teams with itinerary adjustment recommendations.

naftiko: "0.5"
info:
  label: "Itinerary Weather Alert Pipeline"
  description: "Queries a weather API for port-of-call forecasts, checks for severe weather, and notifies the bridge team and guest services via Microsoft Teams with itinerary adjustment recommendations."
  tags:
    - operations
    - weather
    - microsoft-teams
    - itinerary
capability:
  exposes:
    - type: mcp
      namespace: weather-alerts
      port: 8080
      tools:
        - name: check-port-weather
          description: "Given a port name and date, check weather forecast and alert if severe conditions expected."
          inputParameters:
            - name: port_name
              in: body
              type: string
              description: "The port-of-call name."
            - name: port_date
              in: body
              type: string
              description: "The port visit date."
            - name: ship_code
              in: body
              type: string
              description: "The ship code."
          steps:
            - name: get-forecast
              type: call
              call: "weather.get-forecast"
              with:
                location: "{{port_name}}"
                date: "{{port_date}}"
            - name: notify-bridge
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "bridge_{{ship_code}}"
                text: "Weather Alert for {{port_name}} on {{port_date}}: {{get-forecast.condition}}. Wind: {{get-forecast.wind_speed}} kts. Seas: {{get-forecast.wave_height}} ft. Recommendation: {{get-forecast.advisory}}."
            - name: notify-guest-services
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "guest_services_{{ship_code}}"
                text: "Weather Advisory for {{port_name}} ({{port_date}}): {{get-forecast.condition}}. Excursion adjustments may be needed."
  consumes:
    - type: http
      namespace: weather
      baseUri: "https://api.weatherapi.com/v1"
      authentication:
        type: apiKey
        key: "$secrets.weather_api_key"
      resources:
        - name: forecast
          path: "/forecast.json?q={{location}}&dt={{date}}"
          inputParameters:
            - name: location
              in: path
            - name: date
              in: path
          operations:
            - name: get-forecast
              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

Fetches the current sprint details and open issue count from Jira for a given development board.

naftiko: "0.5"
info:
  label: "Jira Project Sprint Tracker"
  description: "Fetches the current sprint details and open issue count from Jira for a given development board."
  tags:
    - engineering
    - project-management
    - jira
capability:
  exposes:
    - type: mcp
      namespace: engineering-pm
      port: 8080
      tools:
        - name: get-sprint-status
          description: "Retrieve active sprint details for a Jira board."
          inputParameters:
            - name: board_id
              in: body
              type: string
              description: "The Jira board ID."
          call: "jira.get-active-sprint"
          with:
            board_id: "{{board_id}}"
          outputParameters:
            - name: sprint_name
              type: string
              mapping: "$.values[0].name"
            - name: start_date
              type: string
              mapping: "$.values[0].startDate"
            - name: end_date
              type: string
              mapping: "$.values[0].endDate"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://royalcaribbean.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

Generates release notes from Jira issues and publishes to Confluence.

naftiko: "0.5"
info:
  label: "Jira to Confluence Release Notes"
  description: "Generates release notes from Jira issues and publishes to Confluence."
  tags:
    - engineering
    - release-management
    - jira
    - confluence
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: release-mgmt
      port: 8080
      tools:
        - name: generate-release-notes
          description: "Fetch Jira issues and publish release notes."
          inputParameters:
            - name: project_key
              in: body
              type: string
              description: "Jira project key."
            - name: version_name
              in: body
              type: string
              description: "Release version."
          steps:
            - name: get-issues
              type: call
              call: "jira.search-issues"
              with:
                jql: "project = {{project_key}} AND fixVersion = '{{version_name}}' AND status = Done"
            - name: create-notes
              type: call
              call: "confluence.create-page"
              with:
                space_key: "ENG"
                title: "Release Notes: {{project_key}} {{version_name}}"
                body: "Release {{version_name}}. Issues: {{get-issues.total}}."
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "engineering_releases"
                text: "Release notes: {{project_key}} {{version_name}}. URL: {{create-notes.url}}."
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://royalcaribbean.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: search
          path: "/search?jql={{jql}}"
          inputParameters:
            - name: jql
              in: path
          operations:
            - name: search-issues
              method: GET
    - type: http
      namespace: confluence
      baseUri: "https://royalcaribbean.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: content
          path: "/content"
          operations:
            - name: create-page
              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 the status of a LinkedIn job posting including application count for the talent acquisition team.

naftiko: "0.5"
info:
  label: "LinkedIn Recruitment Pipeline Status"
  description: "Retrieves the status of a LinkedIn job posting including application count for the talent acquisition team."
  tags:
    - recruitment
    - talent-acquisition
    - linkedin
capability:
  exposes:
    - type: mcp
      namespace: recruitment
      port: 8080
      tools:
        - name: get-job-posting-status
          description: "Look up a LinkedIn job posting by ID."
          inputParameters:
            - name: job_posting_id
              in: body
              type: string
              description: "The LinkedIn job posting ID."
          call: "linkedin.get-job-posting"
          with:
            job_posting_id: "{{job_posting_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.status"
            - name: application_count
              type: number
              mapping: "$.applicationCount"
  consumes:
    - type: http
      namespace: linkedin
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: job-postings
          path: "/jobPostings/{{job_posting_id}}"
          inputParameters:
            - name: job_posting_id
              in: path
          operations:
            - name: get-job-posting
              method: GET

When a guest reaches a loyalty tier threshold in Salesforce, updates their tier, sends a personalized upgrade email via MailChimp, and notifies the loyalty program manager via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Loyalty Program Tier Upgrade Pipeline"
  description: "When a guest reaches a loyalty tier threshold in Salesforce, updates their tier, sends a personalized upgrade email via MailChimp, and notifies the loyalty program manager via Microsoft Teams."
  tags:
    - loyalty
    - guest-services
    - salesforce
    - mailchimp
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: loyalty-upgrade
      port: 8080
      tools:
        - name: process-tier-upgrade
          description: "Given a guest ID and new tier, update Salesforce, send upgrade email, and notify the manager."
          inputParameters:
            - name: guest_id
              in: body
              type: string
              description: "The Salesforce guest record ID."
            - name: new_tier
              in: body
              type: string
              description: "The new loyalty tier (e.g., Gold, Platinum, Diamond)."
          steps:
            - name: get-guest
              type: call
              call: "salesforce.get-guest"
              with:
                guest_id: "{{guest_id}}"
            - name: update-tier
              type: call
              call: "salesforce.update-guest-tier"
              with:
                guest_id: "{{guest_id}}"
                new_tier: "{{new_tier}}"
            - name: send-upgrade-email
              type: call
              call: "mailchimp.send-transactional"
              with:
                template_id: "loyalty_tier_upgrade"
                recipient_email: "{{get-guest.email}}"
                merge_vars: "guest_name={{get-guest.name}},old_tier={{get-guest.loyalty_tier}},new_tier={{new_tier}}"
            - name: notify-loyalty-manager
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "loyalty_program"
                text: "Loyalty Tier Upgrade: {{get-guest.name}} upgraded from {{get-guest.loyalty_tier}} to {{new_tier}}. Sailings: {{get-guest.sailing_count}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://royalcaribbean.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: guests
          path: "/sobjects/Guest__c/{{guest_id}}"
          inputParameters:
            - name: guest_id
              in: path
          operations:
            - name: get-guest
              method: GET
            - name: update-guest-tier
              method: PATCH
    - type: http
      namespace: mailchimp
      baseUri: "https://mandrillapp.com/api/1.0"
      authentication:
        type: apiKey
        key: "$secrets.mailchimp_api_key"
      resources:
        - name: transactional
          path: "/messages/send-template"
          operations:
            - name: send-transactional
              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 performance metrics for a MailChimp email campaign including open rate, click rate, and unsubscribe count.

naftiko: "0.5"
info:
  label: "MailChimp Email Campaign Performance"
  description: "Retrieves performance metrics for a MailChimp email campaign including open rate, click rate, and unsubscribe count."
  tags:
    - marketing
    - email
    - mailchimp
capability:
  exposes:
    - type: mcp
      namespace: email-marketing
      port: 8080
      tools:
        - name: get-campaign-performance
          description: "Look up MailChimp campaign performance by campaign ID."
          inputParameters:
            - name: campaign_id
              in: body
              type: string
              description: "The MailChimp campaign ID."
          call: "mailchimp.get-campaign-report"
          with:
            campaign_id: "{{campaign_id}}"
          outputParameters:
            - name: open_rate
              type: number
              mapping: "$.opens.open_rate"
            - name: click_rate
              type: number
              mapping: "$.clicks.click_rate"
            - name: unsubscribes
              type: number
              mapping: "$.unsubscribed"
  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: reports
          path: "/reports/{{campaign_id}}"
          inputParameters:
            - name: campaign_id
              in: path
          operations:
            - name: get-campaign-report
              method: GET

When a medical emergency is reported onboard, creates a ServiceNow critical incident, notifies the ship medical team and shore-side operations via Microsoft Teams, and logs the event for regulatory reporting.

naftiko: "0.5"
info:
  label: "Medical Emergency Response Pipeline"
  description: "When a medical emergency is reported onboard, creates a ServiceNow critical incident, notifies the ship medical team and shore-side operations via Microsoft Teams, and logs the event for regulatory reporting."
  tags:
    - safety
    - medical
    - servicenow
    - microsoft-teams
    - emergency
capability:
  exposes:
    - type: mcp
      namespace: medical-emergency
      port: 8080
      tools:
        - name: report-medical-emergency
          description: "Given emergency details, create a critical incident, notify medical and shore-side teams."
          inputParameters:
            - name: ship_code
              in: body
              type: string
              description: "The ship code."
            - name: emergency_type
              in: body
              type: string
              description: "The type of medical emergency."
            - name: location_onboard
              in: body
              type: string
              description: "The onboard location."
            - name: guest_id
              in: body
              type: string
              description: "The guest ID if applicable."
          steps:
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Medical Emergency: {{emergency_type}} on {{ship_code}}"
                category: "medical_emergency"
                urgency: "critical"
                description: "Type: {{emergency_type}}. Location: {{location_onboard}}. Guest: {{guest_id}}."
                assigned_group: "Medical_Team_{{ship_code}}"
            - name: notify-medical
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "medical_{{ship_code}}"
                text: "MEDICAL EMERGENCY: {{emergency_type}} at {{location_onboard}} on {{ship_code}}. Incident: {{create-incident.number}}."
            - name: notify-shoreside
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "shore_operations"
                text: "Medical Emergency Alert: {{ship_code}} — {{emergency_type}} at {{location_onboard}}. ServiceNow: {{create-incident.number}}."
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://royalcaribbean.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

Sends a formatted message to a specified Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Microsoft Teams Channel Notifier"
  description: "Sends a formatted message to a specified Microsoft Teams channel."
  tags:
    - communications
    - messaging
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: comms
      port: 8080
      tools:
        - name: send-teams-notification
          description: "Send a text message to a Microsoft Teams channel."
          inputParameters:
            - name: channel_id
              in: body
              type: string
              description: "The Teams channel ID."
            - name: message
              in: body
              type: string
              description: "The message text."
          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

Queries New Relic for application performance metrics.

naftiko: "0.5"
info:
  label: "New Relic Application Performance"
  description: "Queries New Relic for application performance metrics."
  tags:
    - monitoring
    - performance
    - new-relic
capability:
  exposes:
    - type: mcp
      namespace: apm
      port: 8080
      tools:
        - name: get-app-performance
          description: "Check New Relic APM metrics."
          inputParameters:
            - name: app_id
              in: body
              type: string
              description: "The New Relic application ID."
          call: "newrelic.get-app"
          with:
            app_id: "{{app_id}}"
  consumes:
    - type: http
      namespace: newrelic
      baseUri: "https://api.newrelic.com/v2"
      authentication:
        type: apiKey
        key: "$secrets.newrelic_api_key"
      resources:
        - name: applications
          path: "/applications/{{app_id}}.json"
          inputParameters:
            - name: app_id
              in: path
          operations:
            - name: get-app
              method: GET

Retrieves onboard activity schedule data from the Royal Caribbean cruise line and hospitality systems.

naftiko: "0.5"
info:
  label: "Onboard Activity Schedule"
  description: "Retrieves onboard activity schedule data from the Royal Caribbean cruise line and hospitality systems."
  tags:
    - onboard
    - royal-caribbean
    - schedule
capability:
  exposes:
    - type: mcp
      namespace: onboard
      port: 8080
      tools:
        - name: onboard-activity-schedule
          description: "Retrieves onboard activity schedule data from the Royal Caribbean cruise line and hospitality systems."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The input id."
          call: "royal-caribbean.onboard-activity-schedule"
          with:
            input_id: "{{input_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: royal-caribbean
      baseUri: "https://api.royalcaribbean.com/v2"
      authentication:
        type: bearer
        token: "$secrets.rc_api_token"
      resources:
        - name: resource
          path: "/onboard/activity/schedule/{{input_id}}"
          inputParameters:
            - name: input_id
              in: path
          operations:
            - name: onboard-activity-schedule
              method: GET

Checks SAP MM inventory levels for food and beverage items on a ship, compares against sailing passenger count, and alerts the F&B manager via Microsoft Teams when stock is below threshold.

naftiko: "0.5"
info:
  label: "Onboard Food and Beverage Inventory Alert"
  description: "Checks SAP MM inventory levels for food and beverage items on a ship, compares against sailing passenger count, and alerts the F&B manager via Microsoft Teams when stock is below threshold."
  tags:
    - supply-chain
    - inventory
    - food-beverage
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: fb-inventory
      port: 8080
      tools:
        - name: check-fb-inventory
          description: "Given a ship code and material category, check SAP inventory levels and alert if below threshold."
          inputParameters:
            - name: ship_code
              in: body
              type: string
              description: "The ship identifier code."
            - name: material_category
              in: body
              type: string
              description: "The F&B material category (e.g., beverages, proteins, produce)."
            - name: passenger_count
              in: body
              type: number
              description: "The total passenger count for the sailing."
          steps:
            - name: get-inventory
              type: call
              call: "sap.get-inventory"
              with:
                plant: "{{ship_code}}"
                material_group: "{{material_category}}"
            - name: alert-fb-manager
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "fb_operations_{{ship_code}}"
                text: "F&B Inventory Alert for {{ship_code}}: {{material_category}} stock: {{get-inventory.available_quantity}} units. Passengers: {{passenger_count}}. Per-guest ratio: {{get-inventory.per_guest_ratio}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://royalcaribbean-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: inventory
          path: "/A_MatlStkInAcctMod?$filter=Plant eq '{{plant}}' and MaterialGroup eq '{{material_group}}'"
          inputParameters:
            - name: plant
              in: path
            - name: material_group
              in: path
          operations:
            - name: get-inventory
              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

Orchestrates onboard inventory replenishment pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders.

naftiko: "0.5"
info:
  label: "Onboard Inventory Replenishment Pipeline"
  description: "Orchestrates onboard inventory replenishment pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
  tags:
    - onboard
    - royal-caribbean
    - snowflake
    - slack
    - jira
capability:
  exposes:
    - type: mcp
      namespace: onboard
      port: 8080
      tools:
        - name: onboard-inventory-replenishment-pipeline
          description: "Orchestrates onboard inventory replenishment pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
          steps:
            - name: step-1
              type: call
              call: "snowflake.execute-1"
              with:
                input: "{{input_id}}"
            - name: step-2
              type: call
              call: "slack.execute-2"
              with:
                input: "{{input_id}}"
            - name: step-3
              type: call
              call: "jira.execute-3"
              with:
                input: "{{input_id}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://royalcaribbean.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: snowflake-resource
          path: "/api/onboard"
          operations:
            - name: execute-1
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: slack-resource
          path: "/api/onboard"
          operations:
            - name: execute-2
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://royalcaribbean.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: jira-resource
          path: "/api/onboard"
          operations:
            - name: execute-3
              method: POST

Orchestrates onboard kids club management pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders.

naftiko: "0.5"
info:
  label: "Onboard Kids Club Management Pipeline"
  description: "Orchestrates onboard kids club management pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
  tags:
    - onboard
    - royal-caribbean
    - salesforce
    - servicenow
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: onboard
      port: 8080
      tools:
        - name: onboard-kids-club-management-pipeline
          description: "Orchestrates onboard kids club management pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
          steps:
            - name: step-1
              type: call
              call: "salesforce.execute-1"
              with:
                input: "{{input_id}}"
            - name: step-2
              type: call
              call: "servicenow.execute-2"
              with:
                input: "{{input_id}}"
            - name: step-3
              type: call
              call: "snowflake.execute-3"
              with:
                input: "{{input_id}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://royalcaribbean.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_access_token"
      resources:
        - name: salesforce-resource
          path: "/api/onboard"
          operations:
            - name: execute-1
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://royalcaribbean.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: servicenow-resource
          path: "/api/onboard"
          operations:
            - name: execute-2
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://royalcaribbean.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: snowflake-resource
          path: "/api/onboard"
          operations:
            - name: execute-3
              method: POST

Orchestrates onboard retail merchandising pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders.

naftiko: "0.5"
info:
  label: "Onboard Retail Merchandising Pipeline"
  description: "Orchestrates onboard retail merchandising pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
  tags:
    - onboard
    - royal-caribbean
    - jira
    - teams
    - sap
capability:
  exposes:
    - type: mcp
      namespace: onboard
      port: 8080
      tools:
        - name: onboard-retail-merchandising-pipeline
          description: "Orchestrates onboard retail merchandising pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
          steps:
            - name: step-1
              type: call
              call: "jira.execute-1"
              with:
                input: "{{input_id}}"
            - name: step-2
              type: call
              call: "teams.execute-2"
              with:
                input: "{{input_id}}"
            - name: step-3
              type: call
              call: "sap.execute-3"
              with:
                input: "{{input_id}}"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://royalcaribbean.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: jira-resource
          path: "/api/onboard"
          operations:
            - name: execute-1
              method: POST
    - type: http
      namespace: teams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.teams_token"
      resources:
        - name: teams-resource
          path: "/api/onboard"
          operations:
            - name: execute-2
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://rc-erp.s4hana.ondemand.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: sap-resource
          path: "/api/onboard"
          operations:
            - name: execute-3
              method: POST

Orchestrates onboard revenue maximization pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders.

naftiko: "0.5"
info:
  label: "Onboard Revenue Maximization Pipeline"
  description: "Orchestrates onboard revenue maximization pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
  tags:
    - onboard
    - royal-caribbean
    - slack
    - jira
    - teams
capability:
  exposes:
    - type: mcp
      namespace: onboard
      port: 8080
      tools:
        - name: onboard-revenue-maximization-pipeline
          description: "Orchestrates onboard revenue maximization pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
          steps:
            - name: step-1
              type: call
              call: "slack.execute-1"
              with:
                input: "{{input_id}}"
            - name: step-2
              type: call
              call: "jira.execute-2"
              with:
                input: "{{input_id}}"
            - name: step-3
              type: call
              call: "teams.execute-3"
              with:
                input: "{{input_id}}"
  consumes:
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: slack-resource
          path: "/api/onboard"
          operations:
            - name: execute-1
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://royalcaribbean.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: jira-resource
          path: "/api/onboard"
          operations:
            - name: execute-2
              method: POST
    - type: http
      namespace: teams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.teams_token"
      resources:
        - name: teams-resource
          path: "/api/onboard"
          operations:
            - name: execute-3
              method: POST

When a high-value guest boards, enriches their Salesforce profile with spend history, checks for upsell opportunities, and notifies the onboard revenue team via Microsoft Teams with personalized recommendations.

naftiko: "0.5"
info:
  label: "Onboard Revenue Opportunity Alert"
  description: "When a high-value guest boards, enriches their Salesforce profile with spend history, checks for upsell opportunities, and notifies the onboard revenue team via Microsoft Teams with personalized recommendations."
  tags:
    - revenue
    - guest-services
    - salesforce
    - microsoft-teams
    - personalization
capability:
  exposes:
    - type: mcp
      namespace: onboard-revenue
      port: 8080
      tools:
        - name: trigger-upsell-alert
          description: "Given a guest ID and ship code, enrich profile and notify the revenue team with upsell opportunities."
          inputParameters:
            - name: guest_id
              in: body
              type: string
              description: "The Salesforce guest record ID."
            - name: ship_code
              in: body
              type: string
              description: "The ship identifier code."
          steps:
            - name: get-guest
              type: call
              call: "salesforce.get-guest"
              with:
                guest_id: "{{guest_id}}"
            - name: get-spend-history
              type: call
              call: "salesforce.get-spend-history"
              with:
                guest_id: "{{guest_id}}"
            - name: notify-revenue-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "onboard_revenue_{{ship_code}}"
                text: "VIP Guest Alert: {{get-guest.name}} ({{get-guest.loyalty_tier}}). Past spend avg: ${{get-spend-history.avg_spend}}. Top categories: {{get-spend-history.top_categories}}. Cabin: {{get-guest.current_cabin}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://royalcaribbean.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: guests
          path: "/sobjects/Guest__c/{{guest_id}}"
          inputParameters:
            - name: guest_id
              in: path
          operations:
            - name: get-guest
              method: GET
        - name: spend-history
          path: "/sobjects/Guest__c/{{guest_id}}/Spend_History__r"
          inputParameters:
            - name: guest_id
              in: path
          operations:
            - name: get-spend-history
              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

Orchestrates onboard spa appointment pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders.

naftiko: "0.5"
info:
  label: "Onboard Spa Appointment Pipeline"
  description: "Orchestrates onboard spa appointment pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
  tags:
    - onboard
    - royal-caribbean
    - datadog
    - royal-caribbean
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: onboard
      port: 8080
      tools:
        - name: onboard-spa-appointment-pipeline
          description: "Orchestrates onboard spa appointment pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
          steps:
            - name: step-1
              type: call
              call: "datadog.execute-1"
              with:
                input: "{{input_id}}"
            - name: step-2
              type: call
              call: "royal-caribbean.execute-2"
              with:
                input: "{{input_id}}"
            - name: step-3
              type: call
              call: "salesforce.execute-3"
              with:
                input: "{{input_id}}"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: datadog-resource
          path: "/api/onboard"
          operations:
            - name: execute-1
              method: POST
    - type: http
      namespace: royal-caribbean
      baseUri: "https://api.royalcaribbean.com/v2"
      authentication:
        type: bearer
        token: "$secrets.rc_api_token"
      resources:
        - name: royal-caribbean-resource
          path: "/api/onboard"
          operations:
            - name: execute-2
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://royalcaribbean.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_access_token"
      resources:
        - name: salesforce-resource
          path: "/api/onboard"
          operations:
            - name: execute-3
              method: POST

Retrieves firewall rule configurations from Palo Alto Networks for security auditing.

naftiko: "0.5"
info:
  label: "Palo Alto Firewall Rule Audit"
  description: "Retrieves firewall rule configurations from Palo Alto Networks for security auditing."
  tags:
    - security
    - firewall
    - palo-alto-networks
capability:
  exposes:
    - type: mcp
      namespace: security-audit
      port: 8080
      tools:
        - name: audit-firewall-rules
          description: "Query Palo Alto for firewall rules."
          inputParameters:
            - name: device_group
              in: body
              type: string
              description: "The device group name."
          call: "paloalto.get-security-rules"
          with:
            device_group: "{{device_group}}"
  consumes:
    - type: http
      namespace: paloalto
      baseUri: "https://panorama.royalcaribbean.com/restapi/v10.2"
      authentication:
        type: apiKey
        key: "$secrets.paloalto_api_key"
      resources:
        - name: security-rules
          path: "/Policies/SecurityRules?location=device-group&device-group={{device_group}}"
          inputParameters:
            - name: device_group
              in: path
          operations:
            - name: get-security-rules
              method: GET

Orchestrates port agent coordination pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders.

naftiko: "0.5"
info:
  label: "Port Agent Coordination Pipeline"
  description: "Orchestrates port agent coordination pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
  tags:
    - port
    - royal-caribbean
    - datadog
    - royal-caribbean
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: port
      port: 8080
      tools:
        - name: port-agent-coordination-pipeline
          description: "Orchestrates port agent coordination pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
          steps:
            - name: step-1
              type: call
              call: "datadog.execute-1"
              with:
                input: "{{input_id}}"
            - name: step-2
              type: call
              call: "royal-caribbean.execute-2"
              with:
                input: "{{input_id}}"
            - name: step-3
              type: call
              call: "salesforce.execute-3"
              with:
                input: "{{input_id}}"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: datadog-resource
          path: "/api/port"
          operations:
            - name: execute-1
              method: POST
    - type: http
      namespace: royal-caribbean
      baseUri: "https://api.royalcaribbean.com/v2"
      authentication:
        type: bearer
        token: "$secrets.rc_api_token"
      resources:
        - name: royal-caribbean-resource
          path: "/api/port"
          operations:
            - name: execute-2
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://royalcaribbean.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_access_token"
      resources:
        - name: salesforce-resource
          path: "/api/port"
          operations:
            - name: execute-3
              method: POST

Retrieves port clearance status data from the Royal Caribbean cruise line and hospitality systems.

naftiko: "0.5"
info:
  label: "Port Clearance Status"
  description: "Retrieves port clearance status data from the Royal Caribbean cruise line and hospitality systems."
  tags:
    - port
    - royal-caribbean
    - status
capability:
  exposes:
    - type: mcp
      namespace: port
      port: 8080
      tools:
        - name: port-clearance-status
          description: "Retrieves port clearance status data from the Royal Caribbean cruise line and hospitality systems."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The input id."
          call: "royal-caribbean.port-clearance-status"
          with:
            input_id: "{{input_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: royal-caribbean
      baseUri: "https://api.royalcaribbean.com/v2"
      authentication:
        type: bearer
        token: "$secrets.rc_api_token"
      resources:
        - name: resource
          path: "/port/clearance/status/{{input_id}}"
          inputParameters:
            - name: input_id
              in: path
          operations:
            - name: port-clearance-status
              method: GET

When a ship is approaching a port, creates a SAP purchase requisition for provisions, opens a ServiceNow logistics task, and notifies the supply chain team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Port Provisioning Request Pipeline"
  description: "When a ship is approaching a port, creates a SAP purchase requisition for provisions, opens a ServiceNow logistics task, and notifies the supply chain team via Microsoft Teams."
  tags:
    - supply-chain
    - provisioning
    - sap
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: port-provisioning
      port: 8080
      tools:
        - name: request-port-provisions
          description: "Given a ship code and port, create a SAP requisition, open a logistics task, and notify supply chain."
          inputParameters:
            - name: ship_code
              in: body
              type: string
              description: "The ship identifier code."
            - name: port_name
              in: body
              type: string
              description: "The provisioning port name."
            - name: provision_category
              in: body
              type: string
              description: "The provision category."
            - name: arrival_date
              in: body
              type: string
              description: "Port arrival date."
          steps:
            - name: create-requisition
              type: call
              call: "sap.create-requisition"
              with:
                plant: "{{ship_code}}"
                material_group: "{{provision_category}}"
                delivery_date: "{{arrival_date}}"
                description: "Port provisioning for {{ship_code}} at {{port_name}}"
            - name: create-logistics-task
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "Port provisioning: {{ship_code}} at {{port_name}} — {{arrival_date}}"
                assigned_group: "Supply_Chain_Logistics"
                description: "SAP requisition {{create-requisition.req_number}} for {{provision_category}} at {{port_name}}."
            - name: notify-supply-chain
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "supply_chain_ops"
                text: "Port Provisioning: {{ship_code}} at {{port_name}} ({{arrival_date}}). SAP Req: {{create-requisition.req_number}}. Task: {{create-logistics-task.number}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://royalcaribbean-s4.sap.com/sap/opu/odata/sap/MM_PUR_REQUISITION_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: requisitions
          path: "/A_PurchaseRequisition"
          operations:
            - name: create-requisition
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://royalcaribbean.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Triggers a Power BI dataset refresh for the fleet revenue management dashboard and returns the refresh status.

naftiko: "0.5"
info:
  label: "Revenue Management Dashboard Refresh"
  description: "Triggers a Power BI dataset refresh for the fleet revenue management dashboard and returns the refresh status."
  tags:
    - revenue
    - analytics
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: revenue-analytics
      port: 8080
      tools:
        - name: refresh-revenue-dashboard
          description: "Trigger a dataset refresh for a Power BI revenue management dashboard."
          inputParameters:
            - name: dataset_id
              in: body
              type: string
              description: "The Power BI dataset ID."
          call: "powerbi.refresh-dataset"
          with:
            dataset_id: "{{dataset_id}}"
  consumes:
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: refresh-dataset
              method: POST

Tracks crew safety drill completion by querying Workday training records, verifies against regulatory requirements, and opens a ServiceNow task for any compliance gaps before sailing.

naftiko: "0.5"
info:
  label: "Safety Drill Compliance Tracker"
  description: "Tracks crew safety drill completion by querying Workday training records, verifies against regulatory requirements, and opens a ServiceNow task for any compliance gaps before sailing."
  tags:
    - safety
    - compliance
    - workday
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: safety-compliance
      port: 8080
      tools:
        - name: check-safety-drill-compliance
          description: "Given a ship code and sailing date, check crew drill completion in Workday and flag gaps in ServiceNow."
          inputParameters:
            - name: ship_code
              in: body
              type: string
              description: "The ship identifier code."
            - name: sailing_date
              in: body
              type: string
              description: "The sailing departure date."
          steps:
            - name: get-crew-training
              type: call
              call: "workday.get-crew-training"
              with:
                ship_code: "{{ship_code}}"
                training_type: "safety_drill"
            - name: open-gap-task
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "Safety drill compliance gaps: {{ship_code}} — {{sailing_date}}"
                description: "Ship {{ship_code}} sailing {{sailing_date}}. Crew completed: {{get-crew-training.completed_count}}/{{get-crew-training.total_crew}}. Non-compliant: {{get-crew-training.non_compliant_list}}."
                assigned_group: "Safety_Compliance_{{ship_code}}"
                category: "safety_compliance"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: training
          path: "/workers?training_type={{training_type}}&location={{ship_code}}"
          inputParameters:
            - name: training_type
              in: path
            - name: ship_code
              in: path
          operations:
            - name: get-crew-training
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://royalcaribbean.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/task"
          operations:
            - name: create-task
              method: POST

Retrieves a guest profile from Salesforce by guest ID, returning loyalty tier, sailing history count, dietary preferences, and contact information.

naftiko: "0.5"
info:
  label: "Salesforce Guest Profile Lookup"
  description: "Retrieves a guest profile from Salesforce by guest ID, returning loyalty tier, sailing history count, dietary preferences, and contact information."
  tags:
    - guest-services
    - crm
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: guest-crm
      port: 8080
      tools:
        - name: get-guest-profile
          description: "Look up a guest profile in Salesforce by guest ID."
          inputParameters:
            - name: guest_id
              in: body
              type: string
              description: "The Salesforce guest record ID."
          call: "salesforce.get-guest"
          with:
            guest_id: "{{guest_id}}"
          outputParameters:
            - name: loyalty_tier
              type: string
              mapping: "$.Loyalty_Tier__c"
            - name: sailing_count
              type: number
              mapping: "$.Total_Sailings__c"
            - name: dietary_preferences
              type: string
              mapping: "$.Dietary_Preferences__c"
            - name: email
              type: string
              mapping: "$.Email"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://royalcaribbean.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: guests
          path: "/sobjects/Guest__c/{{guest_id}}"
          inputParameters:
            - name: guest_id
              in: path
          operations:
            - name: get-guest
              method: GET

Creates a marketing campaign in Salesforce Marketing Cloud, sets up Google Analytics tracking, and notifies the marketing team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Salesforce Marketing Campaign Launcher"
  description: "Creates a marketing campaign in Salesforce Marketing Cloud, sets up Google Analytics tracking, and notifies the marketing team via Microsoft Teams."
  tags:
    - marketing
    - campaigns
    - salesforce-marketing-cloud
    - google-analytics
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: marketing-campaigns
      port: 8080
      tools:
        - name: launch-campaign
          description: "Given campaign details, create in Salesforce Marketing Cloud, set up GA tracking, and notify the team."
          inputParameters:
            - name: campaign_name
              in: body
              type: string
              description: "The marketing campaign name."
            - name: target_segment
              in: body
              type: string
              description: "The target audience segment."
            - name: launch_date
              in: body
              type: string
              description: "The campaign launch date."
          steps:
            - name: create-campaign
              type: call
              call: "sfmc.create-campaign"
              with:
                name: "{{campaign_name}}"
                segment: "{{target_segment}}"
                launch_date: "{{launch_date}}"
            - name: notify-marketing
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "marketing_campaigns"
                text: "Campaign Launched: {{campaign_name}} targeting {{target_segment}}. Launch: {{launch_date}}. SFMC ID: {{create-campaign.campaign_id}}."
  consumes:
    - type: http
      namespace: sfmc
      baseUri: "https://royalcaribbean.rest.marketingcloudapis.com/v1"
      authentication:
        type: bearer
        token: "$secrets.sfmc_token"
      resources:
        - name: campaigns
          path: "/campaigns"
          operations:
            - name: create-campaign
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves a Salesforce opportunity by ID for the corporate sales team.

naftiko: "0.5"
info:
  label: "Salesforce Opportunity Lookup"
  description: "Retrieves a Salesforce opportunity by ID for the corporate sales team."
  tags:
    - sales
    - crm
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: sales-crm
      port: 8080
      tools:
        - name: get-opportunity
          description: "Look up a Salesforce opportunity."
          inputParameters:
            - name: opportunity_id
              in: body
              type: string
              description: "The opportunity ID."
          call: "salesforce.get-opportunity"
          with:
            opportunity_id: "{{opportunity_id}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://royalcaribbean.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

Retrieves a SAP Concur expense report by ID and returns total amount, approval status, and expense entries.

naftiko: "0.5"
info:
  label: "SAP Concur Expense Report Lookup"
  description: "Retrieves a SAP Concur expense report by ID and returns total amount, approval status, and expense entries."
  tags:
    - finance
    - expense
    - sap-concur
capability:
  exposes:
    - type: mcp
      namespace: finance-expense
      port: 8080
      tools:
        - name: get-expense-report
          description: "Look up a SAP Concur expense report by ID."
          inputParameters:
            - name: report_id
              in: body
              type: string
              description: "The SAP Concur expense report ID."
          call: "concur.get-expense-report"
          with:
            report_id: "{{report_id}}"
          outputParameters:
            - name: report_name
              type: string
              mapping: "$.Name"
            - name: total_amount
              type: number
              mapping: "$.Total"
            - name: approval_status
              type: string
              mapping: "$.ApprovalStatusName"
  consumes:
    - type: http
      namespace: concur
      baseUri: "https://www.concursolutions.com/api/v3.0"
      authentication:
        type: bearer
        token: "$secrets.concur_token"
      resources:
        - name: expense-reports
          path: "/expense/reports/{{report_id}}"
          inputParameters:
            - name: report_id
              in: path
          operations:
            - name: get-expense-report
              method: GET

Looks up a SAP S/4HANA purchase order by number and returns header status, vendor, total value, and delivery date.

naftiko: "0.5"
info:
  label: "SAP Purchase Order Status"
  description: "Looks up a SAP S/4HANA purchase order by number and returns header status, vendor, total value, and delivery date."
  tags:
    - procurement
    - erp
    - sap-s4hana
capability:
  exposes:
    - type: mcp
      namespace: procurement
      port: 8080
      tools:
        - name: get-purchase-order
          description: "Look up a SAP purchase order by PO number."
          inputParameters:
            - name: po_number
              in: body
              type: string
              description: "The SAP purchase order number."
          call: "sap.get-po"
          with:
            po_number: "{{po_number}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.d.OverallStatus"
            - name: vendor
              type: string
              mapping: "$.d.Supplier.CompanyName"
            - name: total_value
              type: string
              mapping: "$.d.TotalAmount"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://royalcaribbean-s4.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

Retrieves a ServiceNow incident by number and returns its state, priority, assigned group, and short description for IT operations teams.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Lookup"
  description: "Retrieves a ServiceNow incident by number and returns its state, priority, assigned group, and short description for IT operations teams."
  tags:
    - it-operations
    - itsm
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: itsm
      port: 8080
      tools:
        - name: get-incident
          description: "Look up a ServiceNow incident by number and return its current state and assignment."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "The ServiceNow incident number."
          call: "servicenow.get-incident"
          with:
            incident_number: "{{incident_number}}"
          outputParameters:
            - name: state
              type: string
              mapping: "$.result.state"
            - name: priority
              type: string
              mapping: "$.result.priority"
            - name: assigned_group
              type: string
              mapping: "$.result.assignment_group.display_value"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://royalcaribbean.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: path
          operations:
            - name: get-incident
              method: GET

Searches a SharePoint site for operational documents by keyword and returns matching file names and URLs.

naftiko: "0.5"
info:
  label: "SharePoint Document Search"
  description: "Searches a SharePoint site for operational documents by keyword and returns matching file names and URLs."
  tags:
    - documentation
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: doc-search
      port: 8080
      tools:
        - name: search-documents
          description: "Search SharePoint for documents by keyword."
          inputParameters:
            - name: site_id
              in: body
              type: string
              description: "The SharePoint site ID."
            - name: query
              in: body
              type: string
              description: "The search keyword."
          call: "sharepoint.search"
          with:
            site_id: "{{site_id}}"
            query: "{{query}}"
  consumes:
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: search
          path: "/{{site_id}}/drive/root/search(q='{{query}}')"
          inputParameters:
            - name: site_id
              in: path
            - name: query
              in: path
          operations:
            - name: search
              method: GET

Orchestrates ship cyber security monitoring pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders.

naftiko: "0.5"
info:
  label: "Ship Cyber Security Monitoring Pipeline"
  description: "Orchestrates ship cyber security monitoring pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
  tags:
    - ship
    - royal-caribbean
    - royal-caribbean
    - salesforce
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: ship
      port: 8080
      tools:
        - name: ship-cyber-security-monitoring-pipeline
          description: "Orchestrates ship cyber security monitoring pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
          steps:
            - name: step-1
              type: call
              call: "royal-caribbean.execute-1"
              with:
                input: "{{input_id}}"
            - name: step-2
              type: call
              call: "salesforce.execute-2"
              with:
                input: "{{input_id}}"
            - name: step-3
              type: call
              call: "servicenow.execute-3"
              with:
                input: "{{input_id}}"
  consumes:
    - type: http
      namespace: royal-caribbean
      baseUri: "https://api.royalcaribbean.com/v2"
      authentication:
        type: bearer
        token: "$secrets.rc_api_token"
      resources:
        - name: royal-caribbean-resource
          path: "/api/ship"
          operations:
            - name: execute-1
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://royalcaribbean.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_access_token"
      resources:
        - name: salesforce-resource
          path: "/api/ship"
          operations:
            - name: execute-2
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://royalcaribbean.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: servicenow-resource
          path: "/api/ship"
          operations:
            - name: execute-3
              method: POST

Orchestrates ship drydock planning pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders.

naftiko: "0.5"
info:
  label: "Ship Drydock Planning Pipeline"
  description: "Orchestrates ship drydock planning pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
  tags:
    - ship
    - royal-caribbean
    - slack
    - jira
    - teams
capability:
  exposes:
    - type: mcp
      namespace: ship
      port: 8080
      tools:
        - name: ship-drydock-planning-pipeline
          description: "Orchestrates ship drydock planning pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
          steps:
            - name: step-1
              type: call
              call: "slack.execute-1"
              with:
                input: "{{input_id}}"
            - name: step-2
              type: call
              call: "jira.execute-2"
              with:
                input: "{{input_id}}"
            - name: step-3
              type: call
              call: "teams.execute-3"
              with:
                input: "{{input_id}}"
  consumes:
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: slack-resource
          path: "/api/ship"
          operations:
            - name: execute-1
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://royalcaribbean.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: jira-resource
          path: "/api/ship"
          operations:
            - name: execute-2
              method: POST
    - type: http
      namespace: teams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.teams_token"
      resources:
        - name: teams-resource
          path: "/api/ship"
          operations:
            - name: execute-3
              method: POST

Orchestrates ship environmental compliance pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders.

naftiko: "0.5"
info:
  label: "Ship Environmental Compliance Pipeline"
  description: "Orchestrates ship environmental compliance pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
  tags:
    - ship
    - royal-caribbean
    - salesforce
    - servicenow
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: ship
      port: 8080
      tools:
        - name: ship-environmental-compliance-pipeline
          description: "Orchestrates ship environmental compliance pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
          steps:
            - name: step-1
              type: call
              call: "salesforce.execute-1"
              with:
                input: "{{input_id}}"
            - name: step-2
              type: call
              call: "servicenow.execute-2"
              with:
                input: "{{input_id}}"
            - name: step-3
              type: call
              call: "snowflake.execute-3"
              with:
                input: "{{input_id}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://royalcaribbean.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_access_token"
      resources:
        - name: salesforce-resource
          path: "/api/ship"
          operations:
            - name: execute-1
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://royalcaribbean.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: servicenow-resource
          path: "/api/ship"
          operations:
            - name: execute-2
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://royalcaribbean.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: snowflake-resource
          path: "/api/ship"
          operations:
            - name: execute-3
              method: POST

Retrieves ship fuel consumption report data from the Royal Caribbean cruise line and hospitality systems.

naftiko: "0.5"
info:
  label: "Ship Fuel Consumption Report"
  description: "Retrieves ship fuel consumption report data from the Royal Caribbean cruise line and hospitality systems."
  tags:
    - ship
    - royal-caribbean
    - report
capability:
  exposes:
    - type: mcp
      namespace: ship
      port: 8080
      tools:
        - name: ship-fuel-consumption-report
          description: "Retrieves ship fuel consumption report data from the Royal Caribbean cruise line and hospitality systems."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The input id."
          call: "royal-caribbean.ship-fuel-consumption-report"
          with:
            input_id: "{{input_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: royal-caribbean
      baseUri: "https://api.royalcaribbean.com/v2"
      authentication:
        type: bearer
        token: "$secrets.rc_api_token"
      resources:
        - name: resource
          path: "/ship/fuel/consumption/report/{{input_id}}"
          inputParameters:
            - name: input_id
              in: path
          operations:
            - name: ship-fuel-consumption-report
              method: GET

Orchestrates ship fuel optimization pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders.

naftiko: "0.5"
info:
  label: "Ship Fuel Optimization Pipeline"
  description: "Orchestrates ship fuel optimization pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
  tags:
    - ship
    - royal-caribbean
    - royal-caribbean
    - salesforce
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: ship
      port: 8080
      tools:
        - name: ship-fuel-optimization-pipeline
          description: "Orchestrates ship fuel optimization pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
          steps:
            - name: step-1
              type: call
              call: "royal-caribbean.execute-1"
              with:
                input: "{{input_id}}"
            - name: step-2
              type: call
              call: "salesforce.execute-2"
              with:
                input: "{{input_id}}"
            - name: step-3
              type: call
              call: "servicenow.execute-3"
              with:
                input: "{{input_id}}"
  consumes:
    - type: http
      namespace: royal-caribbean
      baseUri: "https://api.royalcaribbean.com/v2"
      authentication:
        type: bearer
        token: "$secrets.rc_api_token"
      resources:
        - name: royal-caribbean-resource
          path: "/api/ship"
          operations:
            - name: execute-1
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://royalcaribbean.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_access_token"
      resources:
        - name: salesforce-resource
          path: "/api/ship"
          operations:
            - name: execute-2
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://royalcaribbean.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: servicenow-resource
          path: "/api/ship"
          operations:
            - name: execute-3
              method: POST

Provisions ship inventory by calculating needs based on guest count, ordering from suppliers, and coordinating port delivery.

naftiko: "0.5"
info:
  label: "Ship Inventory Provisioning Pipeline"
  description: "Provisions ship inventory by calculating needs based on guest count, ordering from suppliers, and coordinating port delivery."
  tags:
    - provisioning
    - royal-caribbean
    - sap
    - slack
capability:
  exposes:
    - type: mcp
      namespace: provisioning
      port: 8080
      tools:
        - name: ship-inventory-provisioning-pipeline
          description: "Provisions ship inventory by calculating needs based on guest count, ordering from suppliers, and coordinating port delivery."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
          steps:
            - name: calculate-needs
              type: call
              call: "snowflake.run-query"
              with:
                input: "{{input_id}}"
            - name: create-orders
              type: call
              call: "sap.create-po"
              with:
                input: "{{input_id}}"
            - name: notify-ops
              type: call
              call: "slack.post-message"
              with:
                input: "{{input_id}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://royalcaribbean.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: snowflake-resource
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://rc-erp.s4hana.ondemand.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: sap-resource
          path: "/purchase-orders"
          operations:
            - name: create-po
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: slack-resource
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Retrieves ship maintenance log lookup data from the Royal Caribbean cruise line and hospitality systems.

naftiko: "0.5"
info:
  label: "Ship Maintenance Log Lookup"
  description: "Retrieves ship maintenance log lookup data from the Royal Caribbean cruise line and hospitality systems."
  tags:
    - ship
    - royal-caribbean
    - lookup
capability:
  exposes:
    - type: mcp
      namespace: ship
      port: 8080
      tools:
        - name: ship-maintenance-log-lookup
          description: "Retrieves ship maintenance log lookup data from the Royal Caribbean cruise line and hospitality systems."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The input id."
          call: "royal-caribbean.ship-maintenance-log-lookup"
          with:
            input_id: "{{input_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: royal-caribbean
      baseUri: "https://api.royalcaribbean.com/v2"
      authentication:
        type: bearer
        token: "$secrets.rc_api_token"
      resources:
        - name: resource
          path: "/ship/maintenance/log/lookup/{{input_id}}"
          inputParameters:
            - name: input_id
              in: path
          operations:
            - name: ship-maintenance-log-lookup
              method: GET

Orchestrates ship paint maintenance pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders.

naftiko: "0.5"
info:
  label: "Ship Paint Maintenance Pipeline"
  description: "Orchestrates ship paint maintenance pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
  tags:
    - ship
    - royal-caribbean
    - snowflake
    - slack
    - jira
capability:
  exposes:
    - type: mcp
      namespace: ship
      port: 8080
      tools:
        - name: ship-paint-maintenance-pipeline
          description: "Orchestrates ship paint maintenance pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
          steps:
            - name: step-1
              type: call
              call: "snowflake.execute-1"
              with:
                input: "{{input_id}}"
            - name: step-2
              type: call
              call: "slack.execute-2"
              with:
                input: "{{input_id}}"
            - name: step-3
              type: call
              call: "jira.execute-3"
              with:
                input: "{{input_id}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://royalcaribbean.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: snowflake-resource
          path: "/api/ship"
          operations:
            - name: execute-1
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: slack-resource
          path: "/api/ship"
          operations:
            - name: execute-2
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://royalcaribbean.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: jira-resource
          path: "/api/ship"
          operations:
            - name: execute-3
              method: POST

Retrieves ship position tracking data from the Royal Caribbean cruise line and hospitality systems.

naftiko: "0.5"
info:
  label: "Ship Position Tracking"
  description: "Retrieves ship position tracking data from the Royal Caribbean cruise line and hospitality systems."
  tags:
    - ship
    - royal-caribbean
    - tracking
capability:
  exposes:
    - type: mcp
      namespace: ship
      port: 8080
      tools:
        - name: ship-position-tracking
          description: "Retrieves ship position tracking data from the Royal Caribbean cruise line and hospitality systems."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The input id."
          call: "royal-caribbean.ship-position-tracking"
          with:
            input_id: "{{input_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: royal-caribbean
      baseUri: "https://api.royalcaribbean.com/v2"
      authentication:
        type: bearer
        token: "$secrets.rc_api_token"
      resources:
        - name: resource
          path: "/ship/position/tracking/{{input_id}}"
          inputParameters:
            - name: input_id
              in: path
          operations:
            - name: ship-position-tracking
              method: GET

Orchestrates ship provisioning pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders.

naftiko: "0.5"
info:
  label: "Ship Provisioning Pipeline"
  description: "Orchestrates ship provisioning pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
  tags:
    - ship
    - royal-caribbean
    - servicenow
    - snowflake
    - slack
capability:
  exposes:
    - type: mcp
      namespace: ship
      port: 8080
      tools:
        - name: ship-provisioning-pipeline
          description: "Orchestrates ship provisioning pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
          steps:
            - name: step-1
              type: call
              call: "servicenow.execute-1"
              with:
                input: "{{input_id}}"
            - name: step-2
              type: call
              call: "snowflake.execute-2"
              with:
                input: "{{input_id}}"
            - name: step-3
              type: call
              call: "slack.execute-3"
              with:
                input: "{{input_id}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://royalcaribbean.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: servicenow-resource
          path: "/api/ship"
          operations:
            - name: execute-1
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://royalcaribbean.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: snowflake-resource
          path: "/api/ship"
          operations:
            - name: execute-2
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: slack-resource
          path: "/api/ship"
          operations:
            - name: execute-3
              method: POST

Orchestrates ship safety drill compliance pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders.

naftiko: "0.5"
info:
  label: "Ship Safety Drill Compliance Pipeline"
  description: "Orchestrates ship safety drill compliance pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
  tags:
    - ship
    - royal-caribbean
    - teams
    - sap
    - sendgrid
capability:
  exposes:
    - type: mcp
      namespace: ship
      port: 8080
      tools:
        - name: ship-safety-drill-compliance-pipeline
          description: "Orchestrates ship safety drill compliance pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
          steps:
            - name: step-1
              type: call
              call: "teams.execute-1"
              with:
                input: "{{input_id}}"
            - name: step-2
              type: call
              call: "sap.execute-2"
              with:
                input: "{{input_id}}"
            - name: step-3
              type: call
              call: "sendgrid.execute-3"
              with:
                input: "{{input_id}}"
  consumes:
    - type: http
      namespace: teams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.teams_token"
      resources:
        - name: teams-resource
          path: "/api/ship"
          operations:
            - name: execute-1
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://rc-erp.s4hana.ondemand.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: sap-resource
          path: "/api/ship"
          operations:
            - name: execute-2
              method: POST
    - type: http
      namespace: sendgrid
      baseUri: "https://api.sendgrid.com/v3"
      authentication:
        type: bearer
        token: "$secrets.sendgrid_api_key"
      resources:
        - name: sendgrid-resource
          path: "/api/ship"
          operations:
            - name: execute-3
              method: POST

Orchestrates ship technical maintenance pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders.

naftiko: "0.5"
info:
  label: "Ship Technical Maintenance Pipeline"
  description: "Orchestrates ship technical maintenance pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
  tags:
    - ship
    - royal-caribbean
    - teams
    - sap
    - sendgrid
capability:
  exposes:
    - type: mcp
      namespace: ship
      port: 8080
      tools:
        - name: ship-technical-maintenance-pipeline
          description: "Orchestrates ship technical maintenance pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
          steps:
            - name: step-1
              type: call
              call: "teams.execute-1"
              with:
                input: "{{input_id}}"
            - name: step-2
              type: call
              call: "sap.execute-2"
              with:
                input: "{{input_id}}"
            - name: step-3
              type: call
              call: "sendgrid.execute-3"
              with:
                input: "{{input_id}}"
  consumes:
    - type: http
      namespace: teams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.teams_token"
      resources:
        - name: teams-resource
          path: "/api/ship"
          operations:
            - name: execute-1
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://rc-erp.s4hana.ondemand.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: sap-resource
          path: "/api/ship"
          operations:
            - name: execute-2
              method: POST
    - type: http
      namespace: sendgrid
      baseUri: "https://api.sendgrid.com/v3"
      authentication:
        type: bearer
        token: "$secrets.sendgrid_api_key"
      resources:
        - name: sendgrid-resource
          path: "/api/ship"
          operations:
            - name: execute-3
              method: POST

Orchestrates ship waste management pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders.

naftiko: "0.5"
info:
  label: "Ship Waste Management Pipeline"
  description: "Orchestrates ship waste management pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
  tags:
    - ship
    - royal-caribbean
    - sap
    - sendgrid
    - datadog
capability:
  exposes:
    - type: mcp
      namespace: ship
      port: 8080
      tools:
        - name: ship-waste-management-pipeline
          description: "Orchestrates ship waste management pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
          steps:
            - name: step-1
              type: call
              call: "sap.execute-1"
              with:
                input: "{{input_id}}"
            - name: step-2
              type: call
              call: "sendgrid.execute-2"
              with:
                input: "{{input_id}}"
            - name: step-3
              type: call
              call: "datadog.execute-3"
              with:
                input: "{{input_id}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://rc-erp.s4hana.ondemand.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: sap-resource
          path: "/api/ship"
          operations:
            - name: execute-1
              method: POST
    - type: http
      namespace: sendgrid
      baseUri: "https://api.sendgrid.com/v3"
      authentication:
        type: bearer
        token: "$secrets.sendgrid_api_key"
      resources:
        - name: sendgrid-resource
          path: "/api/ship"
          operations:
            - name: execute-2
              method: POST
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: datadog-resource
          path: "/api/ship"
          operations:
            - name: execute-3
              method: POST

Retrieves shore excursion availability data from the Royal Caribbean cruise line and hospitality systems.

naftiko: "0.5"
info:
  label: "Shore Excursion Availability"
  description: "Retrieves shore excursion availability data from the Royal Caribbean cruise line and hospitality systems."
  tags:
    - shore
    - royal-caribbean
    - availability
capability:
  exposes:
    - type: mcp
      namespace: shore
      port: 8080
      tools:
        - name: shore-excursion-availability
          description: "Retrieves shore excursion availability data from the Royal Caribbean cruise line and hospitality systems."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The input id."
          call: "royal-caribbean.shore-excursion-availability"
          with:
            input_id: "{{input_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: royal-caribbean
      baseUri: "https://api.royalcaribbean.com/v2"
      authentication:
        type: bearer
        token: "$secrets.rc_api_token"
      resources:
        - name: resource
          path: "/shore/excursion/availability/{{input_id}}"
          inputParameters:
            - name: input_id
              in: path
          operations:
            - name: shore-excursion-availability
              method: GET

When a shore excursion is booked in the reservation system, updates the guest itinerary in Salesforce, confirms the booking with the Amadeus excursion provider, and sends a confirmation to the guest via MailChimp.

naftiko: "0.5"
info:
  label: "Shore Excursion Booking Sync"
  description: "When a shore excursion is booked in the reservation system, updates the guest itinerary in Salesforce, confirms the booking with the Amadeus excursion provider, and sends a confirmation to the guest via MailChimp."
  tags:
    - excursions
    - reservations
    - salesforce
    - amadeus
    - mailchimp
capability:
  exposes:
    - type: mcp
      namespace: excursion-booking
      port: 8080
      tools:
        - name: sync-excursion-booking
          description: "Given a guest ID and excursion ID, update Salesforce itinerary, confirm with Amadeus, and send guest confirmation."
          inputParameters:
            - name: guest_id
              in: body
              type: string
              description: "The Salesforce guest record ID."
            - name: excursion_id
              in: body
              type: string
              description: "The shore excursion product ID."
            - name: port_date
              in: body
              type: string
              description: "The port date in YYYY-MM-DD format."
          steps:
            - name: get-excursion
              type: call
              call: "amadeus.get-excursion"
              with:
                excursion_id: "{{excursion_id}}"
            - name: update-itinerary
              type: call
              call: "salesforce.update-itinerary"
              with:
                guest_id: "{{guest_id}}"
                activity_name: "{{get-excursion.name}}"
                activity_date: "{{port_date}}"
                activity_type: "shore_excursion"
            - name: confirm-booking
              type: call
              call: "amadeus.confirm-booking"
              with:
                excursion_id: "{{excursion_id}}"
                guest_id: "{{guest_id}}"
                date: "{{port_date}}"
            - name: send-confirmation
              type: call
              call: "mailchimp.send-transactional"
              with:
                template_id: "excursion_confirmation"
                recipient_email: "{{update-itinerary.guest_email}}"
                merge_vars: "excursion_name={{get-excursion.name}},date={{port_date}},confirmation={{confirm-booking.confirmation_code}}"
  consumes:
    - type: http
      namespace: amadeus
      baseUri: "https://api.amadeus.com/v1"
      authentication:
        type: bearer
        token: "$secrets.amadeus_token"
      resources:
        - name: excursions
          path: "/shopping/activities/{{excursion_id}}"
          inputParameters:
            - name: excursion_id
              in: path
          operations:
            - name: get-excursion
              method: GET
        - name: bookings
          path: "/booking/activities"
          operations:
            - name: confirm-booking
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://royalcaribbean.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: itinerary
          path: "/sobjects/Guest_Itinerary__c"
          operations:
            - name: update-itinerary
              method: POST
    - type: http
      namespace: mailchimp
      baseUri: "https://mandrillapp.com/api/1.0"
      authentication:
        type: apiKey
        key: "$secrets.mailchimp_api_key"
      resources:
        - name: transactional
          path: "/messages/send-template"
          operations:
            - name: send-transactional
              method: POST

Orchestrates shore excursion vendor pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders.

naftiko: "0.5"
info:
  label: "Shore Excursion Vendor Pipeline"
  description: "Orchestrates shore excursion vendor pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
  tags:
    - shore
    - royal-caribbean
    - sap
    - sendgrid
    - datadog
capability:
  exposes:
    - type: mcp
      namespace: shore
      port: 8080
      tools:
        - name: shore-excursion-vendor-pipeline
          description: "Orchestrates shore excursion vendor pipeline across cruise line and hospitality systems, coordinating multiple services and notifying stakeholders."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
          steps:
            - name: step-1
              type: call
              call: "sap.execute-1"
              with:
                input: "{{input_id}}"
            - name: step-2
              type: call
              call: "sendgrid.execute-2"
              with:
                input: "{{input_id}}"
            - name: step-3
              type: call
              call: "datadog.execute-3"
              with:
                input: "{{input_id}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://rc-erp.s4hana.ondemand.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: sap-resource
          path: "/api/shore"
          operations:
            - name: execute-1
              method: POST
    - type: http
      namespace: sendgrid
      baseUri: "https://api.sendgrid.com/v3"
      authentication:
        type: bearer
        token: "$secrets.sendgrid_api_key"
      resources:
        - name: sendgrid-resource
          path: "/api/shore"
          operations:
            - name: execute-2
              method: POST
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: datadog-resource
          path: "/api/shore"
          operations:
            - name: execute-3
              method: POST

Queries SolarWinds for network node health at a ship or shore facility.

naftiko: "0.5"
info:
  label: "SolarWinds Network Health Check"
  description: "Queries SolarWinds for network node health at a ship or shore facility."
  tags:
    - networking
    - infrastructure
    - solarwinds
capability:
  exposes:
    - type: mcp
      namespace: network-health
      port: 8080
      tools:
        - name: get-network-health
          description: "Query SolarWinds for network node health."
          inputParameters:
            - name: location
              in: body
              type: string
              description: "The location name."
          call: "solarwinds.query-nodes"
          with:
            location: "{{location}}"
  consumes:
    - type: http
      namespace: solarwinds
      baseUri: "https://solarwinds.royalcaribbean.com:17778/SolarWinds/InformationService/v3/Json"
      authentication:
        type: basic
        username: "$secrets.solarwinds_user"
        password: "$secrets.solarwinds_password"
      resources:
        - name: nodes
          path: "/Query?query=SELECT+NodeID,Caption,Status+FROM+Orion.Nodes+WHERE+Location='{{location}}'"
          inputParameters:
            - name: location
              in: path
          operations:
            - name: query-nodes
              method: GET

Queries the onboard point-of-sale data in Salesforce for spa and wellness revenue by ship and date range, returning total revenue, service counts, and average transaction value.

naftiko: "0.5"
info:
  label: "Spa and Wellness Revenue Tracker"
  description: "Queries the onboard point-of-sale data in Salesforce for spa and wellness revenue by ship and date range, returning total revenue, service counts, and average transaction value."
  tags:
    - revenue
    - onboard-operations
    - spa
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: spa-revenue
      port: 8080
      tools:
        - name: get-spa-revenue
          description: "Query spa and wellness revenue 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: "Start date."
            - name: end_date
              in: body
              type: string
              description: "End date."
          call: "salesforce.get-spa-revenue"
          with:
            ship_code: "{{ship_code}}"
            start_date: "{{start_date}}"
            end_date: "{{end_date}}"
          outputParameters:
            - name: total_revenue
              type: number
              mapping: "$.Total_Revenue__c"
            - name: service_count
              type: number
              mapping: "$.Service_Count__c"
            - name: avg_transaction
              type: number
              mapping: "$.Avg_Transaction__c"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://royalcaribbean.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: spa-revenue
          path: "/query?q=SELECT+Total_Revenue__c,Service_Count__c,Avg_Transaction__c+FROM+Spa_Revenue__c+WHERE+Ship__c='{{ship_code}}'+AND+Date__c>={{start_date}}+AND+Date__c<={{end_date}}"
          inputParameters:
            - name: ship_code
              in: path
            - name: start_date
              in: path
            - name: end_date
              in: path
          operations:
            - name: get-spa-revenue
              method: GET

Retrieves stateroom availability lookup data from the Royal Caribbean cruise line and hospitality systems.

naftiko: "0.5"
info:
  label: "Stateroom Availability Lookup"
  description: "Retrieves stateroom availability lookup data from the Royal Caribbean cruise line and hospitality systems."
  tags:
    - stateroom
    - royal-caribbean
    - lookup
capability:
  exposes:
    - type: mcp
      namespace: stateroom
      port: 8080
      tools:
        - name: stateroom-availability-lookup
          description: "Retrieves stateroom availability lookup data from the Royal Caribbean cruise line and hospitality systems."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The input id."
          call: "royal-caribbean.stateroom-availability-lookup"
          with:
            input_id: "{{input_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: royal-caribbean
      baseUri: "https://api.royalcaribbean.com/v2"
      authentication:
        type: bearer
        token: "$secrets.rc_api_token"
      resources:
        - name: resource
          path: "/stateroom/availability/lookup/{{input_id}}"
          inputParameters:
            - name: input_id
              in: path
          operations:
            - name: stateroom-availability-lookup
              method: GET

Aggregates fuel consumption data from SAP PM, emissions calculations, and waste management metrics, then publishes a weekly sustainability report to Confluence and notifies the sustainability team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Sustainability Metrics Reporter"
  description: "Aggregates fuel consumption data from SAP PM, emissions calculations, and waste management metrics, then publishes a weekly sustainability report to Confluence and notifies the sustainability team via Microsoft Teams."
  tags:
    - sustainability
    - reporting
    - sap
    - confluence
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: sustainability
      port: 8080
      tools:
        - name: generate-sustainability-report
          description: "Given a ship code and reporting period, aggregate sustainability metrics, publish to Confluence, and notify the team."
          inputParameters:
            - name: ship_code
              in: body
              type: string
              description: "The ship identifier code."
            - name: period
              in: body
              type: string
              description: "The reporting period (e.g., 2026-W12)."
          steps:
            - name: get-fuel-data
              type: call
              call: "sap.get-fuel-consumption"
              with:
                plant: "{{ship_code}}"
                period: "{{period}}"
            - name: publish-report
              type: call
              call: "confluence.create-page"
              with:
                space_key: "SUSTAIN"
                title: "Sustainability Report: {{ship_code}} — {{period}}"
                body: "Ship {{ship_code}} ({{period}}): Fuel consumed: {{get-fuel-data.total_fuel}} MT. CO2 emissions: {{get-fuel-data.co2_emissions}} MT. Efficiency: {{get-fuel-data.efficiency_rating}}."
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "sustainability"
                text: "Sustainability Report Published: {{ship_code}} — {{period}}. Fuel: {{get-fuel-data.total_fuel}} MT. CO2: {{get-fuel-data.co2_emissions}} MT. Report: {{publish-report.url}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://royalcaribbean-s4.sap.com/sap/opu/odata/sap/PM_FUEL_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: fuel
          path: "/FuelConsumption?$filter=Plant eq '{{plant}}' and Period eq '{{period}}'"
          inputParameters:
            - name: plant
              in: path
            - name: period
              in: path
          operations:
            - name: get-fuel-consumption
              method: GET
    - type: http
      namespace: confluence
      baseUri: "https://royalcaribbean.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: content
          path: "/content"
          operations:
            - name: create-page
              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 a Tableau view for fleet performance KPIs and posts the dashboard link to Microsoft Teams for the executive daily briefing.

naftiko: "0.5"
info:
  label: "Tableau Fleet Performance Dashboard"
  description: "Retrieves a Tableau view for fleet performance KPIs and posts the dashboard link to Microsoft Teams for the executive daily briefing."
  tags:
    - analytics
    - fleet-management
    - tableau
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: fleet-analytics
      port: 8080
      tools:
        - name: share-fleet-dashboard
          description: "Fetch a Tableau fleet performance view and share to Microsoft Teams."
          inputParameters:
            - name: workbook_id
              in: body
              type: string
              description: "The Tableau workbook ID."
            - name: view_id
              in: body
              type: string
              description: "The Tableau view ID."
          steps:
            - name: get-view
              type: call
              call: "tableau.get-view"
              with:
                workbook_id: "{{workbook_id}}"
                view_id: "{{view_id}}"
            - name: post-to-teams
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "executive_briefing"
                text: "Fleet Performance Dashboard: {{get-view.url}}"
  consumes:
    - type: http
      namespace: tableau
      baseUri: "https://tableau.royalcaribbean.com/api/3.19"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: views
          path: "/sites/$secrets.tableau_site_id/workbooks/{{workbook_id}}/views/{{view_id}}"
          inputParameters:
            - name: workbook_id
              in: path
            - name: view_id
              in: path
          operations:
            - name: get-view
              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

Retrieves employee compensation data from Workday and sends a review to the manager via Microsoft Outlook.

naftiko: "0.5"
info:
  label: "Workday Compensation Review Pipeline"
  description: "Retrieves employee compensation data from Workday and sends a review to the manager via Microsoft Outlook."
  tags:
    - hr
    - compensation
    - workday
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: hr-compensation
      port: 8080
      tools:
        - name: generate-comp-review
          description: "Generate a compensation review for an employee."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "Workday employee ID."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{employee_id}}"
            - name: get-compensation
              type: call
              call: "workday.get-compensation"
              with:
                worker_id: "{{employee_id}}"
            - name: send-review
              type: call
              call: "outlook.send-mail"
              with:
                recipient: "{{get-employee.manager_email}}"
                subject: "Compensation Review: {{get-employee.full_name}}"
                body: "Employee: {{get-employee.full_name}}. Base: {{get-compensation.base_pay}}. Performance: {{get-compensation.performance_rating}}."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
        - name: compensation
          path: "/workers/{{worker_id}}/compensation"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-compensation
              method: GET
    - type: http
      namespace: outlook
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/me/sendMail"
          operations:
            - name: send-mail
              method: POST

Retrieves a Workday worker profile by employee ID and returns name, department, position, and manager for HR and operations teams.

naftiko: "0.5"
info:
  label: "Workday Employee Profile Lookup"
  description: "Retrieves a Workday worker profile by employee ID and returns name, department, position, and manager for HR and operations teams."
  tags:
    - hr
    - employee-data
    - workday
capability:
  exposes:
    - type: mcp
      namespace: hr-data
      port: 8080
      tools:
        - name: get-employee-profile
          description: "Look up a Workday employee by ID and return their profile details."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday worker ID."
          call: "workday.get-worker"
          with:
            worker_id: "{{employee_id}}"
          outputParameters:
            - name: full_name
              type: string
              mapping: "$.descriptor"
            - name: department
              type: string
              mapping: "$.primaryPosition.department"
            - name: position
              type: string
              mapping: "$.primaryPosition.jobTitle"
            - name: manager
              type: string
              mapping: "$.primaryPosition.manager.descriptor"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET

Creates a Zoom meeting and sends the join link to participants via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Zoom Meeting Scheduler"
  description: "Creates a Zoom meeting and sends the join link to participants via Microsoft Teams."
  tags:
    - collaboration
    - meetings
    - zoom
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: collaboration
      port: 8080
      tools:
        - name: schedule-zoom-meeting
          description: "Create a Zoom meeting and notify participants via Microsoft 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."
            - name: duration
              in: body
              type: number
              description: "Meeting duration in minutes."
            - name: teams_channel_id
              in: body
              type: string
              description: "The Teams channel to notify."
          steps:
            - name: create-meeting
              type: call
              call: "zoom.create-meeting"
              with:
                topic: "{{topic}}"
                start_time: "{{start_time}}"
                duration: "{{duration}}"
            - name: notify-teams
              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