Maersk Capabilities

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

Sort
Expand

Retrieves the latest build status from Azure DevOps for a given pipeline, returning build result, duration, and triggered-by information.

naftiko: "0.5"
info:
  label: "Azure DevOps Build Status Checker"
  description: "Retrieves the latest build status from Azure DevOps for a given pipeline, returning build result, duration, and triggered-by information."
  tags:
    - devops
    - azure-devops
    - ci-cd
capability:
  exposes:
    - type: mcp
      namespace: devops-builds
      port: 8080
      tools:
        - name: get-build-status
          description: "Check the latest build status for an Azure DevOps pipeline."
          inputParameters:
            - name: project_name
              in: body
              type: string
              description: "The Azure DevOps project name."
            - name: pipeline_id
              in: body
              type: string
              description: "The pipeline definition ID."
          call: "azuredevops.get-latest-build"
          with:
            project: "{{project_name}}"
            definition_id: "{{pipeline_id}}"
  consumes:
    - type: http
      namespace: azuredevops
      baseUri: "https://dev.azure.com/maersk"
      authentication:
        type: basic
        username: ""
        password: "$secrets.azuredevops_pat"
      resources:
        - name: builds
          path: "/{{project}}/_apis/build/builds?definitions={{definition_id}}&$top=1&api-version=7.0"
          inputParameters:
            - name: project
              in: path
            - name: definition_id
              in: query
          operations:
            - name: get-latest-build
              method: GET

Fetches a bill of lading document from the Maersk documentation system by BL number for trade compliance and customs clearance.

naftiko: "0.5"
info:
  label: "Bill of Lading Retrieval"
  description: "Fetches a bill of lading document from the Maersk documentation system by BL number for trade compliance and customs clearance."
  tags:
    - shipping
    - documentation
    - trade-compliance
capability:
  exposes:
    - type: mcp
      namespace: shipping-docs
      port: 8080
      tools:
        - name: get-bill-of-lading
          description: "Retrieve a bill of lading by BL number, returning shipper, consignee, commodity, and weight."
          inputParameters:
            - name: bl_number
              in: body
              type: string
              description: "The bill of lading reference number."
          call: "maersk-docs.get-bl"
          with:
            bl_number: "{{bl_number}}"
  consumes:
    - type: http
      namespace: maersk-docs
      baseUri: "https://api.maersk.com/documentation/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: bills-of-lading
          path: "/bills-of-lading/{{bl_number}}"
          inputParameters:
            - name: bl_number
              in: path
          operations:
            - name: get-bl
              method: GET

Retrieves booking confirmation details including container allocations and vessel assignments.

naftiko: "0.5"
info:
  label: "Booking Confirmation Retrieval"
  description: "Retrieves booking confirmation details including container allocations and vessel assignments."
  tags:
    - shipping
    - bookings
capability:
  exposes:
    - type: mcp
      namespace: booking-svc
      port: 8080
      tools:
        - name: get-booking
          description: "Retrieve booking confirmation details by booking number."
          inputParameters:
            - name: booking_number
              in: body
              type: string
              description: "Booking reference number."
          call: "booking-svc.get-booking"
          with:
            booking_number: "{{booking_number}}"
  consumes:
    - type: http
      namespace: booking-svc
      baseUri: "https://api.maersk.com/bookings/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: bookings
          path: "/bookings/{{booking_number}}"
          inputParameters:
            - name: booking_number
              in: path
          operations:
            - name: get-booking
              method: GET

Archives completed shipment documentation from SharePoint to Box long-term storage, applying retention policies and metadata tags.

naftiko: "0.5"
info:
  label: "Box Document Archive"
  description: "Archives completed shipment documentation from SharePoint to Box long-term storage, applying retention policies and metadata tags."
  tags:
    - document-management
    - box
    - sharepoint
    - archiving
capability:
  exposes:
    - type: mcp
      namespace: doc-archive
      port: 8080
      tools:
        - name: archive-shipment-docs
          description: "Move completed shipment documents from SharePoint to Box archive with retention metadata."
          inputParameters:
            - name: booking_ref
              in: body
              type: string
              description: "The booking reference whose documents should be archived."
            - name: retention_years
              in: body
              type: integer
              description: "Number of years to retain in archive."
          steps:
            - name: get-docs
              type: call
              call: "sharepoint.list-files"
              with:
                site_id: "shipping_docs"
                folder_path: "Completed/{{booking_ref}}"
            - name: upload-to-box
              type: call
              call: "box.upload-file"
              with:
                folder_id: "shipment_archive"
                file_name: "{{booking_ref}}_archive.zip"
                metadata: "retention_years:{{retention_years}},booking:{{booking_ref}}"
  consumes:
    - 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}}:/children"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
          operations:
            - name: list-files
              method: GET
    - type: http
      namespace: box
      baseUri: "https://upload.box.com/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: files
          path: "/files/content"
          operations:
            - name: upload-file
              method: POST

Calculates CO2 emissions for a shipment using Maersk's emissions API based on route, container type, and weight, then logs results in SharePoint for ESG reporting.

naftiko: "0.5"
info:
  label: "Carbon Emissions Calculator"
  description: "Calculates CO2 emissions for a shipment using Maersk's emissions API based on route, container type, and weight, then logs results in SharePoint for ESG reporting."
  tags:
    - sustainability
    - emissions
    - sharepoint
    - esg
capability:
  exposes:
    - type: mcp
      namespace: emissions-calc
      port: 8080
      tools:
        - name: calculate-emissions
          description: "Calculate CO2 emissions for a shipment and store the report in SharePoint."
          inputParameters:
            - name: origin_port
              in: body
              type: string
              description: "Origin port UN/LOCODE."
            - name: destination_port
              in: body
              type: string
              description: "Destination port UN/LOCODE."
            - name: container_type
              in: body
              type: string
              description: "Container type code."
            - name: gross_weight_kg
              in: body
              type: number
              description: "Gross weight in kilograms."
          steps:
            - name: get-emissions
              type: call
              call: "maersk-emissions.calculate"
              with:
                origin: "{{origin_port}}"
                destination: "{{destination_port}}"
                equipment: "{{container_type}}"
                weight: "{{gross_weight_kg}}"
            - name: store-report
              type: call
              call: "sharepoint.upload-file"
              with:
                site_id: "sustainability_reporting"
                folder_path: "EmissionsReports/{{origin_port}}_{{destination_port}}"
                content: "CO2: {{get-emissions.co2_kg}} kg | Route: {{origin_port}} to {{destination_port}} | Weight: {{gross_weight_kg}} kg"
  consumes:
    - type: http
      namespace: maersk-emissions
      baseUri: "https://api.maersk.com/emissions/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: calculations
          path: "/calculate"
          operations:
            - name: calculate
              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: upload-file
              method: PUT

Receives a cargo damage claim, retrieves shipment details, and creates a Salesforce case for claims processing.

naftiko: "0.5"
info:
  label: "Cargo Claim Processing Pipeline"
  description: "Receives a cargo damage claim, retrieves shipment details, and creates a Salesforce case for claims processing."
  tags:
    - shipping
    - claims
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: shipping
      port: 8080
      tools:
        - name: cargo-claim-processing-pipeline
          description: "Process cargo damage claims by retrieving shipment data and creating a Salesforce case."
          inputParameters:
            - name: shipment_id
              in: body
              type: string
              description: "Shipment identifier."
            - name: damage_description
              in: body
              type: string
              description: "Description of the damage."
          steps:
            - name: get-shipment
              type: call
              call: "maersk-docs.get-shipment-details"
              with:
                shipment_id: "{{shipment_id}}"
            - name: create-case
              type: call
              call: "salesforce.create-case"
              with:
                subject: "Cargo claim: {{shipment_id}}"
                shipment_data: "{{get-shipment}}"
                damage_description: "{{damage_description}}"
  consumes:
    - type: http
      namespace: maersk-docs
      baseUri: "https://api.maersk.com/documentation/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: shipment-details
          path: "/shipments/{{shipment_id}}"
          operations:
            - name: get-shipment-details
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://maersk.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: cases
          path: "/sobjects/Case"
          operations:
            - name: create-case
              method: POST

Generates cargo insurance quotes based on shipment details and sends the quote via email through HubSpot.

naftiko: "0.5"
info:
  label: "Cargo Insurance Quotation Pipeline"
  description: "Generates cargo insurance quotes based on shipment details and sends the quote via email through HubSpot."
  tags:
    - shipping
    - insurance
    - hubspot
capability:
  exposes:
    - type: mcp
      namespace: shipping
      port: 8080
      tools:
        - name: cargo-insurance-quotation-pipeline
          description: "Generate insurance quotes and send via HubSpot email."
          inputParameters:
            - name: shipment_id
              in: body
              type: string
              description: "Shipment identifier."
            - name: cargo_value
              in: body
              type: string
              description: "Declared cargo value."
            - name: customer_email
              in: body
              type: string
              description: "Customer email."
          steps:
            - name: get-quote
              type: call
              call: "maersk-insurance.get-quotation"
              with:
                shipment_id: "{{shipment_id}}"
                cargo_value: "{{cargo_value}}"
            - name: send-email
              type: call
              call: "hubspot.send-email"
              with:
                to: "{{customer_email}}"
                subject: "Cargo Insurance Quote for {{shipment_id}}"
                body: "{{get-quote.quote_details}}"
  consumes:
    - type: http
      namespace: maersk-insurance
      baseUri: "https://api.maersk.com/insurance/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: quotations
          path: "/quotations"
          operations:
            - name: get-quotation
              method: GET
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com/crm/v3"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: emails
          path: "/objects/emails"
          operations:
            - name: send-email
              method: POST

Aggregates on-time delivery metrics from Maersk tracking, computes KPIs, and pushes results to a Tableau dashboard via Tableau REST API.

naftiko: "0.5"
info:
  label: "Carrier Performance Dashboard Updater"
  description: "Aggregates on-time delivery metrics from Maersk tracking, computes KPIs, and pushes results to a Tableau dashboard via Tableau REST API."
  tags:
    - performance
    - kpi
    - tableau
    - shipping
capability:
  exposes:
    - type: mcp
      namespace: carrier-performance
      port: 8080
      tools:
        - name: update-performance-dashboard
          description: "Pull delivery metrics for a trade lane and push aggregated KPIs to Tableau."
          inputParameters:
            - name: trade_lane
              in: body
              type: string
              description: "Trade lane identifier (e.g., ASIA-EUROPE)."
            - name: period
              in: body
              type: string
              description: "Reporting period (e.g., 2026-Q1)."
          steps:
            - name: get-metrics
              type: call
              call: "maersk-analytics.get-delivery-metrics"
              with:
                trade_lane: "{{trade_lane}}"
                period: "{{period}}"
            - name: publish-to-tableau
              type: call
              call: "tableau.publish-datasource"
              with:
                project_id: "carrier_performance"
                datasource_name: "OTD_{{trade_lane}}_{{period}}"
                data: "{{get-metrics.kpis}}"
  consumes:
    - type: http
      namespace: maersk-analytics
      baseUri: "https://api.maersk.com/analytics/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: delivery-metrics
          path: "/delivery-performance"
          inputParameters:
            - name: trade_lane
              in: query
            - name: period
              in: query
          operations:
            - name: get-delivery-metrics
              method: GET
    - type: http
      namespace: tableau
      baseUri: "https://maersk-tableau.online.tableau.com/api/3.19"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: datasources
          path: "/sites/{{site_id}}/datasources"
          operations:
            - name: publish-datasource
              method: POST

Pulls market intelligence data from Circana for logistics market trends and competitive insights, storing results in Google Drive.

naftiko: "0.5"
info:
  label: "Circana Market Intelligence Feed"
  description: "Pulls market intelligence data from Circana for logistics market trends and competitive insights, storing results in Google Drive."
  tags:
    - market-intelligence
    - circana
    - google-drive
capability:
  exposes:
    - type: mcp
      namespace: market-intel
      port: 8080
      tools:
        - name: get-market-trends
          description: "Fetch logistics market trends from Circana and save to Google Drive."
          inputParameters:
            - name: market_segment
              in: body
              type: string
              description: "Market segment (e.g., ocean-freight, air-freight, warehousing)."
            - name: region
              in: body
              type: string
              description: "Geographic region for the analysis."
          steps:
            - name: fetch-data
              type: call
              call: "circana.get-market-data"
              with:
                segment: "{{market_segment}}"
                region: "{{region}}"
            - name: save-to-drive
              type: call
              call: "googledrive.upload-file"
              with:
                folder_id: "market_intelligence"
                file_name: "{{market_segment}}_{{region}}_trends.json"
                content: "{{fetch-data.report}}"
  consumes:
    - type: http
      namespace: circana
      baseUri: "https://api.circana.com/v1"
      authentication:
        type: bearer
        token: "$secrets.circana_token"
      resources:
        - name: market-data
          path: "/market-trends"
          inputParameters:
            - name: segment
              in: query
            - name: region
              in: query
          operations:
            - name: get-market-data
              method: GET
    - type: http
      namespace: googledrive
      baseUri: "https://www.googleapis.com/upload/drive/v3"
      authentication:
        type: bearer
        token: "$secrets.google_drive_token"
      resources:
        - name: files
          path: "/files"
          operations:
            - name: upload-file
              method: POST

Checks Cloudflare DNS health and performance for Maersk web properties, returning latency metrics and active incidents.

naftiko: "0.5"
info:
  label: "Cloudflare DNS Health Monitor"
  description: "Checks Cloudflare DNS health and performance for Maersk web properties, returning latency metrics and active incidents."
  tags:
    - infrastructure
    - cloudflare
    - dns
capability:
  exposes:
    - type: mcp
      namespace: dns-health
      port: 8080
      tools:
        - name: check-dns-health
          description: "Check Cloudflare DNS health and latency for a specified zone."
          inputParameters:
            - name: zone_id
              in: body
              type: string
              description: "The Cloudflare zone ID for the domain."
          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: zones
          path: "/zones/{{zone_id}}/analytics/dashboard"
          inputParameters:
            - name: zone_id
              in: path
          operations:
            - name: get-zone-analytics
              method: GET

Monitors reefer container temperatures, flags excursions, and creates ServiceNow incidents for out-of-range readings.

naftiko: "0.5"
info:
  label: "Cold Chain Compliance Pipeline"
  description: "Monitors reefer container temperatures, flags excursions, and creates ServiceNow incidents for out-of-range readings."
  tags:
    - shipping
    - cold-chain
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: shipping
      port: 8080
      tools:
        - name: cold-chain-compliance-pipeline
          description: "Monitor reefer temps and escalate excursions to ServiceNow."
          inputParameters:
            - name: container_number
              in: body
              type: string
              description: "Reefer container number."
            - name: period
              in: body
              type: string
              description: "Monitoring period."
          steps:
            - name: get-temps
              type: call
              call: "maersk-reefer.get-temperatures"
              with:
                container_number: "{{container_number}}"
                period: "{{period}}"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Reefer temp excursion: {{container_number}}"
                data: "{{get-temps.excursions}}"
  consumes:
    - type: http
      namespace: maersk-reefer
      baseUri: "https://api.maersk.com/reefer/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: temperatures
          path: "/temperatures"
          operations:
            - name: get-temperatures
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://maersk.service-now.com/api/now/v1"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: create-incident
              method: POST

Retrieves trade compliance documents from SharePoint, runs them through an Oracle Integration workflow for validation, and logs results in ServiceNow.

naftiko: "0.5"
info:
  label: "Compliance Document Reviewer"
  description: "Retrieves trade compliance documents from SharePoint, runs them through an Oracle Integration workflow for validation, and logs results in ServiceNow."
  tags:
    - compliance
    - trade-compliance
    - sharepoint
    - oracle-integration
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: compliance-review
      port: 8080
      tools:
        - name: review-compliance-docs
          description: "Pull compliance documents from SharePoint, validate through Oracle Integration, and log in ServiceNow."
          inputParameters:
            - name: document_folder
              in: body
              type: string
              description: "SharePoint folder path containing compliance documents."
            - name: review_type
              in: body
              type: string
              description: "Type of compliance review (e.g., sanctions, export-control, customs)."
          steps:
            - name: get-documents
              type: call
              call: "sharepoint.list-files"
              with:
                site_id: "compliance_docs"
                folder_path: "{{document_folder}}"
            - name: validate-docs
              type: call
              call: "oracle-integration.run-flow"
              with:
                flow_name: "compliance_validation"
                review_type: "{{review_type}}"
                documents: "{{get-documents.files}}"
            - name: log-results
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Compliance review: {{review_type}}"
                category: "compliance"
                description: "Reviewed {{get-documents.count}} documents. Result: {{validate-docs.status}}. Findings: {{validate-docs.findings}}."
  consumes:
    - 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}}:/children"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
          operations:
            - name: list-files
              method: GET
    - type: http
      namespace: oracle-integration
      baseUri: "https://maersk-oic.integration.ocp.oraclecloud.com/ic/api/integration/v1"
      authentication:
        type: basic
        username: "$secrets.oracle_integration_user"
        password: "$secrets.oracle_integration_password"
      resources:
        - name: flows
          path: "/flows/{{flow_name}}/run"
          inputParameters:
            - name: flow_name
              in: path
          operations:
            - name: run-flow
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://maersk.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

When container damage is reported, creates a ServiceNow claim ticket, uploads photos to SharePoint, updates the Salesforce case, and notifies insurance via Microsoft Outlook.

naftiko: "0.5"
info:
  label: "Container Damage Claim Processor"
  description: "When container damage is reported, creates a ServiceNow claim ticket, uploads photos to SharePoint, updates the Salesforce case, and notifies insurance via Microsoft Outlook."
  tags:
    - claims
    - container-damage
    - servicenow
    - sharepoint
    - salesforce
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: damage-claims
      port: 8080
      tools:
        - name: process-damage-claim
          description: "Process a container damage claim across ServiceNow, SharePoint, Salesforce, and email notification."
          inputParameters:
            - name: container_number
              in: body
              type: string
              description: "The damaged container ID."
            - name: damage_description
              in: body
              type: string
              description: "Description of the damage."
            - name: booking_ref
              in: body
              type: string
              description: "Associated booking reference."
            - name: photo_urls
              in: body
              type: string
              description: "Comma-separated URLs of damage photos."
          steps:
            - name: create-claim-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Container damage claim: {{container_number}}"
                category: "damage_claim"
                description: "{{damage_description}}. Booking: {{booking_ref}}."
            - name: upload-photos
              type: call
              call: "sharepoint.upload-file"
              with:
                site_id: "claims_docs"
                folder_path: "DamageClaims/{{container_number}}_{{booking_ref}}"
                content: "{{photo_urls}}"
            - name: create-sfdc-case
              type: call
              call: "salesforce.create-case"
              with:
                subject: "Damage claim: {{container_number}}"
                description: "{{damage_description}}. ServiceNow: {{create-claim-ticket.number}}. Photos: {{upload-photos.url}}."
            - name: notify-insurance
              type: call
              call: "outlook.send-email"
              with:
                to: "insurance-claims@maersk.com"
                subject: "New damage claim: {{container_number}}"
                body: "Container {{container_number}} damage reported. Claim ticket: {{create-claim-ticket.number}}. SFDC case: {{create-sfdc-case.id}}."
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://maersk.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: upload-file
              method: PUT
    - type: http
      namespace: salesforce
      baseUri: "https://maersk.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: cases
          path: "/sobjects/Case"
          operations:
            - name: create-case
              method: POST
    - type: http
      namespace: outlook
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: send-mail
          path: "/me/sendMail"
          operations:
            - name: send-email
              method: POST

Checks the detention and demurrage status for a container at a port.

naftiko: "0.5"
info:
  label: "Container Detention Status"
  description: "Checks the detention and demurrage status for a container at a port."
  tags:
    - shipping
    - container-management
capability:
  exposes:
    - type: mcp
      namespace: detention-svc
      port: 8080
      tools:
        - name: get-status
          description: "Retrieve detention and demurrage status for a container."
          inputParameters:
            - name: container_number
              in: body
              type: string
              description: "Container number."
            - name: port_code
              in: body
              type: string
              description: "Port code."
          call: "detention-svc.get-status"
          with:
            container_number: "{{container_number}}"
            port_code: "{{port_code}}"
  consumes:
    - type: http
      namespace: detention-svc
      baseUri: "https://api.maersk.com/detention/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: detention-status
          path: "/containers/{{container_number}}/detention"
          inputParameters:
            - name: container_number
              in: path
            - name: port_code
              in: query
          operations:
            - name: get-status
              method: GET

Aggregates container fleet utilization metrics across depots and publishes to Tableau.

naftiko: "0.5"
info:
  label: "Container Fleet Utilization Report"
  description: "Aggregates container fleet utilization metrics across depots and publishes to Tableau."
  tags:
    - shipping
    - fleet-management
    - tableau
capability:
  exposes:
    - type: mcp
      namespace: shipping
      port: 8080
      tools:
        - name: container-fleet-utilization-report
          description: "Aggregate fleet utilization metrics and publish to Tableau."
          inputParameters:
            - name: region
              in: body
              type: string
              description: "Geographic region."
            - name: period
              in: body
              type: string
              description: "Reporting period."
          steps:
            - name: get-utilization
              type: call
              call: "maersk-fleet.get-utilization"
              with:
                region: "{{region}}"
                period: "{{period}}"
            - name: publish
              type: call
              call: "tableau.publish-datasource"
              with:
                project_id: "fleet_ops"
                datasource_name: "utilization_{{region}}_{{period}}"
                data: "{{get-utilization.metrics}}"
  consumes:
    - type: http
      namespace: maersk-fleet
      baseUri: "https://api.maersk.com/fleet/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: utilization
          path: "/utilization"
          operations:
            - name: get-utilization
              method: GET
    - type: http
      namespace: tableau
      baseUri: "https://maersk-tableau.online.tableau.com/api/3.19"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: datasources
          path: "/sites/{{site_id}}/datasources"
          operations:
            - name: publish-datasource
              method: POST

Records container inspection results and archives the report in SharePoint with a Teams notification.

naftiko: "0.5"
info:
  label: "Container Inspection Report Pipeline"
  description: "Records container inspection results and archives the report in SharePoint with a Teams notification."
  tags:
    - shipping
    - quality
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: shipping
      port: 8080
      tools:
        - name: container-inspection-report-pipeline
          description: "Save inspection results, archive to SharePoint, and notify via Teams."
          inputParameters:
            - name: container_number
              in: body
              type: string
              description: "Container number."
            - name: inspection_results
              in: body
              type: string
              description: "Inspection results data."
          steps:
            - name: save-inspection
              type: call
              call: "maersk-quality.save-inspection"
              with:
                container_number: "{{container_number}}"
                results: "{{inspection_results}}"
            - name: archive
              type: call
              call: "sharepoint.upload-document"
              with:
                library: "inspection-reports"
                content: "{{save-inspection.report}}"
            - name: notify
              type: call
              call: "teams.send-message"
              with:
                channel_id: "quality-ops"
                message: "Inspection complete for {{container_number}}: {{save-inspection.grade}}"
  consumes:
    - type: http
      namespace: maersk-quality
      baseUri: "https://api.maersk.com/quality/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: inspections
          path: "/inspections"
          operations:
            - name: save-inspection
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://maersk.sharepoint.com/_api/v2.0"
      authentication:
        type: bearer
        token: "$secrets.sharepoint_token"
      resources:
        - name: documents
          path: "/documents"
          operations:
            - name: upload-document
              method: POST
    - type: http
      namespace: teams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.teams_token"
      resources:
        - name: messages
          path: "/teams/channels/messages"
          operations:
            - name: send-message
              method: POST

Analyzes empty container imbalances across regions and creates repositioning orders with Slack notification.

naftiko: "0.5"
info:
  label: "Container Repositioning Optimizer"
  description: "Analyzes empty container imbalances across regions and creates repositioning orders with Slack notification."
  tags:
    - shipping
    - fleet-management
    - slack
capability:
  exposes:
    - type: mcp
      namespace: shipping
      port: 8080
      tools:
        - name: container-repositioning-optimizer
          description: "Analyze container imbalances and create repositioning orders."
          inputParameters:
            - name: region
              in: body
              type: string
              description: "Geographic region."
          steps:
            - name: analyze
              type: call
              call: "maersk-fleet.analyze-imbalance"
              with:
                region: "{{region}}"
            - name: create-order
              type: call
              call: "maersk-fleet.create-repositioning"
              with:
                recommendations: "{{analyze.recommendations}}"
            - name: notify
              type: call
              call: "slack.post-message"
              with:
                channel: "#fleet-ops"
                text: "Repositioning orders created for {{region}}: {{create-order.order_count}} orders"
  consumes:
    - type: http
      namespace: maersk-fleet
      baseUri: "https://api.maersk.com/fleet/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: imbalance
          path: "/imbalance"
          operations:
            - name: analyze-imbalance
              method: GET
        - name: repositioning
          path: "/repositioning"
          operations:
            - name: create-repositioning
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Subscribes to container tracking events, filters for milestone events, and pushes updates to a Datadog dashboard.

naftiko: "0.5"
info:
  label: "Container Tracking Event Stream"
  description: "Subscribes to container tracking events, filters for milestone events, and pushes updates to a Datadog dashboard."
  tags:
    - shipping
    - tracking
    - datadog
capability:
  exposes:
    - type: mcp
      namespace: shipping
      port: 8080
      tools:
        - name: container-tracking-event-stream
          description: "Stream container milestone events to Datadog."
          inputParameters:
            - name: container_number
              in: body
              type: string
              description: "Container number."
          steps:
            - name: get-events
              type: call
              call: "maersk-tracking.get-container-events"
              with:
                container_number: "{{container_number}}"
                event_type: "milestone"
            - name: push-metrics
              type: call
              call: "datadog.submit-metrics"
              with:
                metric_name: "container.milestone_events"
                tags: "container:{{container_number}}"
                data: "{{get-events.milestones}}"
  consumes:
    - type: http
      namespace: maersk-tracking
      baseUri: "https://api.maersk.com/tracking/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: container-events
          path: "/containers/events"
          operations:
            - name: get-container-events
              method: GET
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.datadog_token"
      resources:
        - name: metrics
          path: "/series"
          operations:
            - name: submit-metrics
              method: POST

Retrieves real-time container location, vessel, and estimated arrival from Maersk tracking APIs given a container or booking number.

naftiko: "0.5"
info:
  label: "Container Tracking Lookup"
  description: "Retrieves real-time container location, vessel, and estimated arrival from Maersk tracking APIs given a container or booking number."
  tags:
    - shipping
    - container-tracking
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: container-tracking
      port: 8080
      tools:
        - name: get-container-status
          description: "Look up a shipping container by number and return vessel name, current port, and ETA."
          inputParameters:
            - name: container_number
              in: body
              type: string
              description: "The container ID or booking reference."
          call: "maersk-tracking.get-container"
          with:
            container_id: "{{container_number}}"
          outputParameters:
            - name: vessel
              type: string
              mapping: "$.vessel.name"
            - name: current_port
              type: string
              mapping: "$.location.port"
            - name: eta
              type: string
              mapping: "$.eta"
  consumes:
    - type: http
      namespace: maersk-tracking
      baseUri: "https://api.maersk.com/track/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: containers
          path: "/containers/{{container_id}}"
          inputParameters:
            - name: container_id
              in: path
          operations:
            - name: get-container
              method: GET

Retrieves verified gross mass data for a container.

naftiko: "0.5"
info:
  label: "Container Weight Verification"
  description: "Retrieves verified gross mass data for a container."
  tags:
    - shipping
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: vgm-svc
      port: 8080
      tools:
        - name: get-vgm
          description: "Retrieve verified gross mass for a container."
          inputParameters:
            - name: container_number
              in: body
              type: string
              description: "Container number."
          call: "vgm-svc.get-vgm"
          with:
            container_number: "{{container_number}}"
  consumes:
    - type: http
      namespace: vgm-svc
      baseUri: "https://api.maersk.com/compliance/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: vgm
          path: "/containers/{{container_number}}/vgm"
          inputParameters:
            - name: container_number
              in: path
          operations:
            - name: get-vgm
              method: GET

Checks crew member certification expiry dates and creates renewal tasks in Workday.

naftiko: "0.5"
info:
  label: "Crew Certification Renewal Pipeline"
  description: "Checks crew member certification expiry dates and creates renewal tasks in Workday."
  tags:
    - shipping
    - crew-management
    - workday
capability:
  exposes:
    - type: mcp
      namespace: shipping
      port: 8080
      tools:
        - name: crew-certification-renewal-pipeline
          description: "Check crew certifications and create Workday renewal tasks."
          inputParameters:
            - name: vessel_id
              in: body
              type: string
              description: "Vessel identifier."
          steps:
            - name: check-certs
              type: call
              call: "maersk-crew.check-certifications"
              with:
                vessel_id: "{{vessel_id}}"
            - name: create-renewals
              type: call
              call: "workday.create-task"
              with:
                task_type: "certification_renewal"
                assignments: "{{check-certs.expiring_certs}}"
  consumes:
    - type: http
      namespace: maersk-crew
      baseUri: "https://api.maersk.com/crew/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: certifications
          path: "/certifications"
          operations:
            - name: check-certifications
              method: GET
    - type: http
      namespace: workday
      baseUri: "https://wd3-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: tasks
          path: "/tasks"
          operations:
            - name: create-task
              method: POST

Provisions a new customer account with credit setup, Salesforce record, and welcome communication via Teams.

naftiko: "0.5"
info:
  label: "Customer Onboarding Pipeline"
  description: "Provisions a new customer account with credit setup, Salesforce record, and welcome communication via Teams."
  tags:
    - shipping
    - onboarding
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: shipping
      port: 8080
      tools:
        - name: customer-onboarding-pipeline
          description: "Provision customer account, create Salesforce record, and welcome via Teams."
          inputParameters:
            - name: company_name
              in: body
              type: string
              description: "Company name."
            - name: contact_email
              in: body
              type: string
              description: "Primary contact email."
          steps:
            - name: provision
              type: call
              call: "maersk-accounts.create-customer"
              with:
                company_name: "{{company_name}}"
                contact_email: "{{contact_email}}"
            - name: create-sf-record
              type: call
              call: "salesforce.create-account"
              with:
                name: "{{company_name}}"
                account_number: "{{provision.account_id}}"
            - name: welcome-msg
              type: call
              call: "teams.send-message"
              with:
                channel_id: "customer-success"
                message: "New customer onboarded: {{company_name}} ({{provision.account_id}})"
  consumes:
    - type: http
      namespace: maersk-accounts
      baseUri: "https://api.maersk.com/accounts/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: customers
          path: "/customers"
          operations:
            - name: create-customer
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://maersk.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account"
          operations:
            - name: create-account
              method: POST
    - type: http
      namespace: teams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.teams_token"
      resources:
        - name: messages
          path: "/teams/channels/messages"
          operations:
            - name: send-message
              method: POST

Prepares customs clearance documents, submits to customs authority API, and notifies operations team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Customs Clearance Orchestrator"
  description: "Prepares customs clearance documents, submits to customs authority API, and notifies operations team via Microsoft Teams."
  tags:
    - shipping
    - customs
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: shipping
      port: 8080
      tools:
        - name: customs-clearance-orchestrator
          description: "Prepare customs documents and notify ops team via Teams."
          inputParameters:
            - name: shipment_id
              in: body
              type: string
              description: "Shipment identifier."
            - name: destination_country
              in: body
              type: string
              description: "Destination country code."
          steps:
            - name: prepare-docs
              type: call
              call: "maersk-customs.prepare-clearance"
              with:
                shipment_id: "{{shipment_id}}"
                destination_country: "{{destination_country}}"
            - name: notify-team
              type: call
              call: "teams.send-message"
              with:
                channel_id: "customs-ops"
                message: "Customs clearance submitted for {{shipment_id}} to {{destination_country}}: {{prepare-docs.status}}"
  consumes:
    - type: http
      namespace: maersk-customs
      baseUri: "https://api.maersk.com/customs/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: clearance
          path: "/clearance"
          operations:
            - name: prepare-clearance
              method: POST
    - type: http
      namespace: teams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.teams_token"
      resources:
        - name: messages
          path: "/teams/channels/messages"
          operations:
            - name: send-message
              method: POST

Generates customs declaration documents by pulling shipment data from Maersk booking, enriching with HS codes from Oracle E-Business Suite, and filing to SharePoint.

naftiko: "0.5"
info:
  label: "Customs Document Generator"
  description: "Generates customs declaration documents by pulling shipment data from Maersk booking, enriching with HS codes from Oracle E-Business Suite, and filing to SharePoint."
  tags:
    - customs
    - trade-compliance
    - oracle-e-business-suite
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: customs-docs
      port: 8080
      tools:
        - name: generate-customs-declaration
          description: "Given a booking reference, pull shipment details, look up HS codes, generate customs declaration, and store in SharePoint."
          inputParameters:
            - name: booking_ref
              in: body
              type: string
              description: "The Maersk booking reference number."
            - name: destination_country
              in: body
              type: string
              description: "The ISO country code of the destination."
          steps:
            - name: get-booking
              type: call
              call: "maersk-booking.get-booking"
              with:
                booking_id: "{{booking_ref}}"
            - name: lookup-hs-codes
              type: call
              call: "oracle-ebs.get-hs-codes"
              with:
                commodity: "{{get-booking.commodity_description}}"
                country: "{{destination_country}}"
            - name: store-declaration
              type: call
              call: "sharepoint.upload-file"
              with:
                site_id: "customs_declarations"
                folder_path: "Declarations/{{destination_country}}/{{booking_ref}}"
                content: "HS Code: {{lookup-hs-codes.hs_code}} | Commodity: {{get-booking.commodity_description}} | Weight: {{get-booking.gross_weight}}"
  consumes:
    - type: http
      namespace: maersk-booking
      baseUri: "https://api.maersk.com/booking/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: bookings
          path: "/bookings/{{booking_id}}"
          inputParameters:
            - name: booking_id
              in: path
          operations:
            - name: get-booking
              method: GET
    - type: http
      namespace: oracle-ebs
      baseUri: "https://maersk-ebs.oraclecloud.com/webservices/rest"
      authentication:
        type: basic
        username: "$secrets.oracle_ebs_user"
        password: "$secrets.oracle_ebs_password"
      resources:
        - name: hs-codes
          path: "/trade/hs-codes"
          inputParameters:
            - name: commodity
              in: query
            - name: country
              in: query
          operations:
            - name: get-hs-codes
              method: GET
    - 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: upload-file
              method: PUT

Fetches dangerous goods declaration details for a specific shipment.

naftiko: "0.5"
info:
  label: "Dangerous Goods Declaration Lookup"
  description: "Fetches dangerous goods declaration details for a specific shipment."
  tags:
    - shipping
    - hazmat
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: dg-svc
      port: 8080
      tools:
        - name: get-declaration
          description: "Retrieve dangerous goods declaration for a shipment."
          inputParameters:
            - name: shipment_id
              in: body
              type: string
              description: "Shipment identifier."
          call: "dg-svc.get-declaration"
          with:
            shipment_id: "{{shipment_id}}"
  consumes:
    - type: http
      namespace: dg-svc
      baseUri: "https://api.maersk.com/dangerous-goods/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: declarations
          path: "/declarations/{{shipment_id}}"
          inputParameters:
            - name: shipment_id
              in: path
          operations:
            - name: get-declaration
              method: GET

Monitors container dwell time at port and sends Microsoft Teams alerts to operations when containers approach demurrage thresholds.

naftiko: "0.5"
info:
  label: "Demurrage Alert Notifier"
  description: "Monitors container dwell time at port and sends Microsoft Teams alerts to operations when containers approach demurrage thresholds."
  tags:
    - demurrage
    - port-operations
    - microsoft-teams
    - alerts
capability:
  exposes:
    - type: mcp
      namespace: demurrage-alerts
      port: 8080
      tools:
        - name: check-demurrage-risk
          description: "Check containers at a port for demurrage risk and notify the operations team in Microsoft Teams."
          inputParameters:
            - name: port_code
              in: body
              type: string
              description: "The port UN/LOCODE to check."
            - name: threshold_days
              in: body
              type: integer
              description: "Number of free days before demurrage triggers."
          steps:
            - name: get-dwell-times
              type: call
              call: "maersk-tracking.get-port-containers"
              with:
                port: "{{port_code}}"
                min_dwell_days: "{{threshold_days}}"
            - name: notify-ops
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "ops-demurrage-alerts"
                text: "Demurrage risk at {{port_code}}: {{get-dwell-times.count}} containers exceeding {{threshold_days}} free days. Total estimated charges: {{get-dwell-times.estimated_charges}}."
  consumes:
    - type: http
      namespace: maersk-tracking
      baseUri: "https://api.maersk.com/track/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: port-containers
          path: "/ports/{{port}}/containers"
          inputParameters:
            - name: port
              in: path
            - name: min_dwell_days
              in: query
          operations:
            - name: get-port-containers
              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

Processes demurrage dispute claims by gathering container event history and creating a resolution case.

naftiko: "0.5"
info:
  label: "Demurrage Dispute Resolution Pipeline"
  description: "Processes demurrage dispute claims by gathering container event history and creating a resolution case."
  tags:
    - shipping
    - demurrage
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: shipping
      port: 8080
      tools:
        - name: demurrage-dispute-resolution-pipeline
          description: "Gather container history and create a Salesforce dispute case."
          inputParameters:
            - name: container_number
              in: body
              type: string
              description: "Container number."
            - name: booking_number
              in: body
              type: string
              description: "Booking reference."
          steps:
            - name: get-history
              type: call
              call: "maersk-tracking.get-container-history"
              with:
                container_number: "{{container_number}}"
                booking_number: "{{booking_number}}"
            - name: create-case
              type: call
              call: "salesforce.create-case"
              with:
                subject: "Demurrage dispute: {{container_number}}"
                event_history: "{{get-history.events}}"
  consumes:
    - type: http
      namespace: maersk-tracking
      baseUri: "https://api.maersk.com/tracking/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: container-history
          path: "/container-history"
          operations:
            - name: get-container-history
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://maersk.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: cases
          path: "/sobjects/Case"
          operations:
            - name: create-case
              method: POST

Queries Dynatrace for application health metrics including response time, error rate, and throughput for Maersk digital platforms.

naftiko: "0.5"
info:
  label: "Dynatrace Application Health Check"
  description: "Queries Dynatrace for application health metrics including response time, error rate, and throughput for Maersk digital platforms."
  tags:
    - monitoring
    - dynatrace
    - application-health
capability:
  exposes:
    - type: mcp
      namespace: app-health
      port: 8080
      tools:
        - name: get-app-health
          description: "Retrieve application health metrics from Dynatrace for a specified application."
          inputParameters:
            - name: application_id
              in: body
              type: string
              description: "The Dynatrace application entity ID."
          call: "dynatrace.get-app-metrics"
          with:
            entity_id: "{{application_id}}"
  consumes:
    - type: http
      namespace: dynatrace
      baseUri: "https://maersk.live.dynatrace.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.dynatrace_token"
      resources:
        - name: metrics
          path: "/metrics/query"
          inputParameters:
            - name: entity_id
              in: query
          operations:
            - name: get-app-metrics
              method: GET

Parses incoming EDI 315 (status) messages, extracts container events, and updates the Maersk tracking system and Salesforce shipment records.

naftiko: "0.5"
info:
  label: "EDI Document Processor"
  description: "Parses incoming EDI 315 (status) messages, extracts container events, and updates the Maersk tracking system and Salesforce shipment records."
  tags:
    - edi
    - electronic-data-interchange
    - salesforce
    - shipping
capability:
  exposes:
    - type: mcp
      namespace: edi-processing
      port: 8080
      tools:
        - name: process-edi-315
          description: "Parse an EDI 315 status message and update tracking and CRM systems."
          inputParameters:
            - name: edi_payload
              in: body
              type: string
              description: "The raw EDI 315 message content."
            - name: booking_ref
              in: body
              type: string
              description: "The associated booking reference."
          steps:
            - name: update-tracking
              type: call
              call: "maersk-tracking.update-event"
              with:
                booking_ref: "{{booking_ref}}"
                edi_data: "{{edi_payload}}"
            - name: update-salesforce
              type: call
              call: "salesforce.update-shipment"
              with:
                booking_ref: "{{booking_ref}}"
                status: "{{update-tracking.latest_status}}"
                location: "{{update-tracking.current_location}}"
  consumes:
    - type: http
      namespace: maersk-tracking
      baseUri: "https://api.maersk.com/track/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: events
          path: "/shipments/{{booking_ref}}/events"
          inputParameters:
            - name: booking_ref
              in: path
          operations:
            - name: update-event
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://maersk.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: shipments
          path: "/sobjects/Shipment__c"
          operations:
            - name: update-shipment
              method: PATCH

Checks availability of empty containers at a specified depot location.

naftiko: "0.5"
info:
  label: "Empty Container Availability Check"
  description: "Checks availability of empty containers at a specified depot location."
  tags:
    - shipping
    - container-management
capability:
  exposes:
    - type: mcp
      namespace: container-ops
      port: 8080
      tools:
        - name: check-availability
          description: "Check empty container availability at a depot."
          inputParameters:
            - name: depot_code
              in: body
              type: string
              description: "Container depot code."
            - name: container_type
              in: body
              type: string
              description: "Container type e.g. 20GP, 40HC."
          call: "container-ops.check-availability"
          with:
            depot_code: "{{depot_code}}"
            container_type: "{{container_type}}"
  consumes:
    - type: http
      namespace: container-ops
      baseUri: "https://api.maersk.com/containers/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: availability
          path: "/depots/{{depot_code}}/availability"
          inputParameters:
            - name: depot_code
              in: path
            - name: container_type
              in: query
          operations:
            - name: check-availability
              method: GET

Checks the status of export documentation processing for a shipment.

naftiko: "0.5"
info:
  label: "Export Documentation Status"
  description: "Checks the status of export documentation processing for a shipment."
  tags:
    - shipping
    - documentation
capability:
  exposes:
    - type: mcp
      namespace: docs
      port: 8080
      tools:
        - name: get-export-status
          description: "Retrieve export documentation status for a shipment."
          inputParameters:
            - name: shipment_id
              in: body
              type: string
              description: "Shipment identifier."
          call: "docs.get-export-status"
          with:
            shipment_id: "{{shipment_id}}"
  consumes:
    - type: http
      namespace: docs
      baseUri: "https://api.maersk.com/documentation/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: export-status
          path: "/export-status/{{shipment_id}}"
          inputParameters:
            - name: shipment_id
              in: path
          operations:
            - name: get-export-status
              method: GET

Queries F5 Networks load balancer status for Maersk application pools, returning active members, health status, and connection counts.

naftiko: "0.5"
info:
  label: "F5 Load Balancer Health Check"
  description: "Queries F5 Networks load balancer status for Maersk application pools, returning active members, health status, and connection counts."
  tags:
    - infrastructure
    - f5-networks
    - load-balancing
capability:
  exposes:
    - type: mcp
      namespace: lb-health
      port: 8080
      tools:
        - name: check-pool-health
          description: "Check F5 load balancer pool health for an application."
          inputParameters:
            - name: pool_name
              in: body
              type: string
              description: "The F5 pool name to check."
          call: "f5.get-pool-status"
          with:
            pool: "{{pool_name}}"
  consumes:
    - type: http
      namespace: f5
      baseUri: "https://maersk-f5.com/mgmt/tm"
      authentication:
        type: basic
        username: "$secrets.f5_user"
        password: "$secrets.f5_password"
      resources:
        - name: pools
          path: "/ltm/pool/{{pool}}/members"
          inputParameters:
            - name: pool
              in: path
          operations:
            - name: get-pool-status
              method: GET

Identifies optimal feeder vessel connections for transshipment cargo and updates the booking in SAP.

naftiko: "0.5"
info:
  label: "Feeder Vessel Connection Planner"
  description: "Identifies optimal feeder vessel connections for transshipment cargo and updates the booking in SAP."
  tags:
    - shipping
    - transshipment
    - sap
capability:
  exposes:
    - type: mcp
      namespace: shipping
      port: 8080
      tools:
        - name: feeder-vessel-connection-planner
          description: "Find optimal feeder connections and update SAP booking."
          inputParameters:
            - name: origin_port
              in: body
              type: string
              description: "Origin port code."
            - name: hub_port
              in: body
              type: string
              description: "Hub port code."
            - name: destination_port
              in: body
              type: string
              description: "Destination port code."
            - name: booking_id
              in: body
              type: string
              description: "Booking ID."
          steps:
            - name: find-connections
              type: call
              call: "maersk-schedules.find-feeder-connections"
              with:
                origin_port: "{{origin_port}}"
                hub_port: "{{hub_port}}"
                destination_port: "{{destination_port}}"
            - name: update-booking
              type: call
              call: "sap.update-transport-order"
              with:
                booking_id: "{{booking_id}}"
                feeder_details: "{{find-connections.best_option}}"
  consumes:
    - type: http
      namespace: maersk-schedules
      baseUri: "https://api.maersk.com/schedules/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: feeder-connections
          path: "/feeder-connections"
          operations:
            - name: find-feeder-connections
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://maersk-sap.s4hana.cloud.sap/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: transport-orders
          path: "/transport-orders"
          operations:
            - name: update-transport-order
              method: PUT

Aggregates fleet-wide CO2 emissions data and generates sustainability reports in Confluence.

naftiko: "0.5"
info:
  label: "Fleet Emissions Reporting Pipeline"
  description: "Aggregates fleet-wide CO2 emissions data and generates sustainability reports in Confluence."
  tags:
    - shipping
    - sustainability
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: shipping
      port: 8080
      tools:
        - name: fleet-emissions-reporting-pipeline
          description: "Aggregate fleet emissions and publish report to Confluence."
          inputParameters:
            - name: period
              in: body
              type: string
              description: "Reporting period."
            - name: region
              in: body
              type: string
              description: "Geographic region."
          steps:
            - name: get-emissions
              type: call
              call: "maersk-sustainability.get-fleet-emissions"
              with:
                period: "{{period}}"
                region: "{{region}}"
            - name: publish-report
              type: call
              call: "confluence.create-page"
              with:
                space: "SUSTAINABILITY"
                title: "Fleet Emissions Report {{region}} {{period}}"
                content: "{{get-emissions.report}}"
  consumes:
    - type: http
      namespace: maersk-sustainability
      baseUri: "https://api.maersk.com/sustainability/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: fleet-emissions
          path: "/fleet-emissions"
          operations:
            - name: get-fleet-emissions
              method: GET
    - type: http
      namespace: confluence
      baseUri: "https://maersk.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: create-page
              method: POST

Compares freight invoices against booking rates and flags discrepancies in a Jira ticket.

naftiko: "0.5"
info:
  label: "Freight Invoice Reconciliation Pipeline"
  description: "Compares freight invoices against booking rates and flags discrepancies in a Jira ticket."
  tags:
    - shipping
    - finance
    - jira
capability:
  exposes:
    - type: mcp
      namespace: shipping
      port: 8080
      tools:
        - name: freight-invoice-reconciliation-pipeline
          description: "Reconcile freight invoices and create Jira tickets for discrepancies."
          inputParameters:
            - name: invoice_number
              in: body
              type: string
              description: "Invoice number."
          steps:
            - name: reconcile
              type: call
              call: "maersk-finance.reconcile-invoice"
              with:
                invoice_number: "{{invoice_number}}"
            - name: create-ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "FIN"
                summary: "Invoice discrepancy: {{invoice_number}}"
                description: "{{reconcile.discrepancy_details}}"
  consumes:
    - type: http
      namespace: maersk-finance
      baseUri: "https://api.maersk.com/finance/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: invoices
          path: "/invoices/reconcile"
          operations:
            - name: reconcile-invoice
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://maersk.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

Fetches spot freight rates from the Maersk rate API for a given trade lane, container type, and date, then logs the quote in Salesforce as an opportunity.

naftiko: "0.5"
info:
  label: "Freight Rate Quotation Engine"
  description: "Fetches spot freight rates from the Maersk rate API for a given trade lane, container type, and date, then logs the quote in Salesforce as an opportunity."
  tags:
    - freight-rates
    - sales
    - salesforce
    - logistics
capability:
  exposes:
    - type: mcp
      namespace: freight-rates
      port: 8080
      tools:
        - name: get-rate-and-log
          description: "Retrieve a spot freight rate for a trade lane and create a Salesforce opportunity with the quoted amount."
          inputParameters:
            - name: origin_port
              in: body
              type: string
              description: "Origin port UN/LOCODE."
            - name: destination_port
              in: body
              type: string
              description: "Destination port UN/LOCODE."
            - name: container_type
              in: body
              type: string
              description: "Container type code (e.g., 40HC)."
            - name: customer_account_id
              in: body
              type: string
              description: "Salesforce account ID for the customer."
          steps:
            - name: fetch-rate
              type: call
              call: "maersk-rates.get-spot-rate"
              with:
                origin: "{{origin_port}}"
                destination: "{{destination_port}}"
                equipment: "{{container_type}}"
            - name: create-opportunity
              type: call
              call: "salesforce.create-opportunity"
              with:
                account_id: "{{customer_account_id}}"
                name: "Freight Quote {{origin_port}}-{{destination_port}}"
                amount: "{{fetch-rate.total_rate}}"
                stage: "Qualification"
  consumes:
    - type: http
      namespace: maersk-rates
      baseUri: "https://api.maersk.com/rates/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: spot-rates
          path: "/spot"
          inputParameters:
            - name: origin
              in: query
            - name: destination
              in: query
            - name: equipment
              in: query
          operations:
            - name: get-spot-rate
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://maersk.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity"
          operations:
            - name: create-opportunity
              method: POST

Retrieves bunker fuel prices from Bloomberg Enterprise Data and logs procurement costs against SAP purchase orders for fleet fuel management.

naftiko: "0.5"
info:
  label: "Fuel Procurement Cost Tracker"
  description: "Retrieves bunker fuel prices from Bloomberg Enterprise Data and logs procurement costs against SAP purchase orders for fleet fuel management."
  tags:
    - fuel
    - procurement
    - bloomberg-enterprise-data
    - sap
capability:
  exposes:
    - type: mcp
      namespace: fuel-procurement
      port: 8080
      tools:
        - name: track-fuel-cost
          description: "Get current bunker fuel prices and match against a SAP purchase order for cost tracking."
          inputParameters:
            - name: fuel_type
              in: body
              type: string
              description: "Fuel type (e.g., VLSFO, HSFO, MGO)."
            - name: po_number
              in: body
              type: string
              description: "SAP purchase order number for fuel."
          steps:
            - name: get-fuel-price
              type: call
              call: "bloomberg.get-commodity-price"
              with:
                commodity: "{{fuel_type}}"
            - name: get-po-details
              type: call
              call: "sap.get-po"
              with:
                po_number: "{{po_number}}"
  consumes:
    - type: http
      namespace: bloomberg
      baseUri: "https://api.bloomberg.com/eap/v1"
      authentication:
        type: bearer
        token: "$secrets.bloomberg_token"
      resources:
        - name: commodities
          path: "/catalogs/commodities/{{commodity}}/price"
          inputParameters:
            - name: commodity
              in: path
          operations:
            - name: get-commodity-price
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://maersk-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

Monitors GitHub Actions workflow runs for Maersk repositories, reporting build failures to Slack for quick developer response.

naftiko: "0.5"
info:
  label: "GitHub Actions CI Pipeline Monitor"
  description: "Monitors GitHub Actions workflow runs for Maersk repositories, reporting build failures to Slack for quick developer response."
  tags:
    - devops
    - github-actions
    - slack
    - ci-cd
capability:
  exposes:
    - type: mcp
      namespace: ci-monitor
      port: 8080
      tools:
        - name: monitor-ci-pipeline
          description: "Check GitHub Actions workflow status and alert Slack on failures."
          inputParameters:
            - name: repo_name
              in: body
              type: string
              description: "The GitHub repository name (org/repo format)."
            - name: workflow_name
              in: body
              type: string
              description: "The workflow file name."
          steps:
            - name: get-workflow-runs
              type: call
              call: "github.get-workflow-runs"
              with:
                repo: "{{repo_name}}"
                workflow: "{{workflow_name}}"
            - name: notify-failure
              type: call
              call: "slack.post-message"
              with:
                channel: "ci-alerts"
                text: "CI failure in {{repo_name}}/{{workflow_name}}: {{get-workflow-runs.latest_run.conclusion}}. Commit: {{get-workflow-runs.latest_run.head_sha}}."
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: workflow-runs
          path: "/repos/{{repo}}/actions/workflows/{{workflow}}/runs"
          inputParameters:
            - name: repo
              in: path
            - name: workflow
              in: path
          operations:
            - name: get-workflow-runs
              method: GET
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Retrieves recorded sales calls from Gong, extracting key topics and action items for shipping and logistics deal reviews.

naftiko: "0.5"
info:
  label: "Gong Sales Call Analyzer"
  description: "Retrieves recorded sales calls from Gong, extracting key topics and action items for shipping and logistics deal reviews."
  tags:
    - sales
    - gong
    - call-analytics
capability:
  exposes:
    - type: mcp
      namespace: call-analysis
      port: 8080
      tools:
        - name: analyze-call
          description: "Get a Gong call recording analysis with key topics and action items."
          inputParameters:
            - name: call_id
              in: body
              type: string
              description: "The Gong call ID."
          call: "gong.get-call-analysis"
          with:
            call_id: "{{call_id}}"
  consumes:
    - type: http
      namespace: gong
      baseUri: "https://api.gong.io/v2"
      authentication:
        type: bearer
        token: "$secrets.gong_token"
      resources:
        - name: calls
          path: "/calls/{{call_id}}/transcript"
          inputParameters:
            - name: call_id
              in: path
          operations:
            - name: get-call-analysis
              method: GET

Pulls website traffic metrics from Google Analytics for Maersk.com, including sessions, bounce rate, and top pages.

naftiko: "0.5"
info:
  label: "Google Analytics Traffic Reporter"
  description: "Pulls website traffic metrics from Google Analytics for Maersk.com, including sessions, bounce rate, and top pages."
  tags:
    - marketing
    - google-analytics
    - web-analytics
capability:
  exposes:
    - type: mcp
      namespace: web-analytics
      port: 8080
      tools:
        - name: get-traffic-report
          description: "Retrieve traffic summary from Google Analytics for a date range."
          inputParameters:
            - 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.get-report"
          with:
            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"
          operations:
            - name: get-report
              method: POST

Validates dangerous goods shipment details against IMDG code and creates an approval workflow in ServiceNow.

naftiko: "0.5"
info:
  label: "Hazmat Shipment Approval Pipeline"
  description: "Validates dangerous goods shipment details against IMDG code and creates an approval workflow in ServiceNow."
  tags:
    - shipping
    - hazmat
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: shipping
      port: 8080
      tools:
        - name: hazmat-shipment-approval-pipeline
          description: "Validate DG shipment and create ServiceNow approval."
          inputParameters:
            - name: shipment_id
              in: body
              type: string
              description: "Shipment identifier."
          steps:
            - name: validate-dg
              type: call
              call: "maersk-dg.validate-shipment"
              with:
                shipment_id: "{{shipment_id}}"
            - name: create-approval
              type: call
              call: "servicenow.create-request"
              with:
                type: "approval"
                short_description: "DG approval: {{shipment_id}}"
                details: "{{validate-dg.validation_result}}"
  consumes:
    - type: http
      namespace: maersk-dg
      baseUri: "https://api.maersk.com/dangerous-goods/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: validation
          path: "/validate"
          operations:
            - name: validate-shipment
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://maersk.service-now.com/api/now/v1"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST

Retrieves campaign performance metrics from HubSpot including open rates, click rates, and conversions for Maersk marketing campaigns.

naftiko: "0.5"
info:
  label: "HubSpot Marketing Campaign Tracker"
  description: "Retrieves campaign performance metrics from HubSpot including open rates, click rates, and conversions for Maersk marketing campaigns."
  tags:
    - marketing
    - hubspot
    - campaign-analytics
capability:
  exposes:
    - type: mcp
      namespace: marketing-campaigns
      port: 8080
      tools:
        - name: get-campaign-metrics
          description: "Retrieve HubSpot campaign performance metrics by campaign ID."
          inputParameters:
            - name: campaign_id
              in: body
              type: string
              description: "The HubSpot campaign ID."
          call: "hubspot.get-campaign"
          with:
            campaign_id: "{{campaign_id}}"
  consumes:
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: campaigns
          path: "/marketing/v3/campaigns/{{campaign_id}}"
          inputParameters:
            - name: campaign_id
              in: path
          operations:
            - name: get-campaign
              method: GET

Triggers an Informatica data quality job to cleanse and validate shipping master data, then updates results in Oracle E-Business Suite.

naftiko: "0.5"
info:
  label: "Informatica Data Quality Pipeline"
  description: "Triggers an Informatica data quality job to cleanse and validate shipping master data, then updates results in Oracle E-Business Suite."
  tags:
    - data-quality
    - informatica
    - oracle-e-business-suite
capability:
  exposes:
    - type: mcp
      namespace: data-quality
      port: 8080
      tools:
        - name: run-data-quality-check
          description: "Run an Informatica data quality job on shipping master data and update Oracle EBS with cleansed records."
          inputParameters:
            - name: job_name
              in: body
              type: string
              description: "The Informatica job name to execute."
            - name: data_domain
              in: body
              type: string
              description: "Data domain (e.g., vessel_master, port_master, customer_master)."
          steps:
            - name: run-dq-job
              type: call
              call: "informatica.run-job"
              with:
                job_name: "{{job_name}}"
                domain: "{{data_domain}}"
            - name: update-master-data
              type: call
              call: "oracle-ebs.update-master"
              with:
                domain: "{{data_domain}}"
                cleansed_data: "{{run-dq-job.output}}"
  consumes:
    - type: http
      namespace: informatica
      baseUri: "https://maersk-iics.informatica.com/saas/api/v2"
      authentication:
        type: bearer
        token: "$secrets.informatica_token"
      resources:
        - name: jobs
          path: "/job"
          operations:
            - name: run-job
              method: POST
    - type: http
      namespace: oracle-ebs
      baseUri: "https://maersk-ebs.oraclecloud.com/webservices/rest"
      authentication:
        type: basic
        username: "$secrets.oracle_ebs_user"
        password: "$secrets.oracle_ebs_password"
      resources:
        - name: master-data
          path: "/master/{{domain}}"
          inputParameters:
            - name: domain
              in: path
          operations:
            - name: update-master
              method: PUT

Tracks inland delivery progress from port to final destination and sends milestone updates via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Inland Delivery Tracking Pipeline"
  description: "Tracks inland delivery progress from port to final destination and sends milestone updates via Microsoft Teams."
  tags:
    - shipping
    - inland-logistics
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: shipping
      port: 8080
      tools:
        - name: inland-delivery-tracking-pipeline
          description: "Track inland deliveries and send Teams notifications."
          inputParameters:
            - name: delivery_order
              in: body
              type: string
              description: "Delivery order number."
          steps:
            - name: track-delivery
              type: call
              call: "maersk-inland.track-delivery"
              with:
                delivery_order: "{{delivery_order}}"
            - name: notify
              type: call
              call: "teams.send-message"
              with:
                channel_id: "inland-ops"
                message: "Delivery {{delivery_order}} status: {{track-delivery.current_status}} - ETA: {{track-delivery.eta}}"
  consumes:
    - type: http
      namespace: maersk-inland
      baseUri: "https://api.maersk.com/inland/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: deliveries
          path: "/deliveries"
          operations:
            - name: track-delivery
              method: GET
    - type: http
      namespace: teams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.teams_token"
      resources:
        - name: messages
          path: "/teams/channels/messages"
          operations:
            - name: send-message
              method: POST

Fetches inland transportation rate quotes for door-to-port or port-to-door moves.

naftiko: "0.5"
info:
  label: "Inland Transport Rate Query"
  description: "Fetches inland transportation rate quotes for door-to-port or port-to-door moves."
  tags:
    - shipping
    - inland-logistics
capability:
  exposes:
    - type: mcp
      namespace: rates
      port: 8080
      tools:
        - name: get-inland-rate
          description: "Retrieve inland transport rate for a given origin and destination."
          inputParameters:
            - name: origin
              in: body
              type: string
              description: "Origin location."
            - name: destination
              in: body
              type: string
              description: "Destination location."
            - name: cargo_type
              in: body
              type: string
              description: "Cargo type."
          call: "rates.get-inland-rate"
          with:
            origin: "{{origin}}"
            destination: "{{destination}}"
            cargo_type: "{{cargo_type}}"
  consumes:
    - type: http
      namespace: rates
      baseUri: "https://api.maersk.com/rates/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: inland-rates
          path: "/inland-rates"
          inputParameters:
            - name: origin
              in: query
            - name: destination
              in: query
            - name: cargo_type
              in: query
          operations:
            - name: get-inland-rate
              method: GET

Publishes approved Maersk brand content to Instagram, pulling creative assets from Adobe Creative Cloud and scheduling posts.

naftiko: "0.5"
info:
  label: "Instagram Social Media Post Publisher"
  description: "Publishes approved Maersk brand content to Instagram, pulling creative assets from Adobe Creative Cloud and scheduling posts."
  tags:
    - social-media
    - instagram
    - adobe-creative-cloud
    - marketing
capability:
  exposes:
    - type: mcp
      namespace: social-publishing
      port: 8080
      tools:
        - name: publish-instagram-post
          description: "Pull a creative asset from Adobe Creative Cloud and publish to Instagram."
          inputParameters:
            - name: asset_id
              in: body
              type: string
              description: "Adobe Creative Cloud asset ID."
            - name: caption
              in: body
              type: string
              description: "Instagram post caption."
            - name: scheduled_time
              in: body
              type: string
              description: "Scheduled publish time in ISO 8601 format."
          steps:
            - name: get-asset
              type: call
              call: "adobe-cc.get-asset"
              with:
                asset_id: "{{asset_id}}"
            - name: publish-post
              type: call
              call: "instagram.create-media"
              with:
                image_url: "{{get-asset.download_url}}"
                caption: "{{caption}}"
                scheduled_time: "{{scheduled_time}}"
  consumes:
    - type: http
      namespace: adobe-cc
      baseUri: "https://cc-api-storage.adobe.io/v1"
      authentication:
        type: bearer
        token: "$secrets.adobe_cc_token"
      resources:
        - name: assets
          path: "/assets/{{asset_id}}"
          inputParameters:
            - name: asset_id
              in: path
          operations:
            - name: get-asset
              method: GET
    - type: http
      namespace: instagram
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.instagram_token"
      resources:
        - name: media
          path: "/{{ig_user_id}}/media"
          operations:
            - name: create-media
              method: POST

Creates an intermodal booking combining ocean and inland legs, then sends confirmation via Slack.

naftiko: "0.5"
info:
  label: "Intermodal Booking Creation Pipeline"
  description: "Creates an intermodal booking combining ocean and inland legs, then sends confirmation via Slack."
  tags:
    - shipping
    - intermodal
    - slack
capability:
  exposes:
    - type: mcp
      namespace: shipping
      port: 8080
      tools:
        - name: intermodal-booking-creation-pipeline
          description: "Create intermodal booking and notify via Slack."
          inputParameters:
            - name: origin
              in: body
              type: string
              description: "Origin address."
            - name: destination
              in: body
              type: string
              description: "Destination address."
            - name: commodity
              in: body
              type: string
              description: "Commodity description."
          steps:
            - name: create-booking
              type: call
              call: "maersk-booking.create-intermodal"
              with:
                origin: "{{origin}}"
                destination: "{{destination}}"
                commodity: "{{commodity}}"
            - name: notify
              type: call
              call: "slack.post-message"
              with:
                channel: "#bookings"
                text: "Intermodal booking created: {{create-booking.booking_number}}"
  consumes:
    - type: http
      namespace: maersk-booking
      baseUri: "https://api.maersk.com/bookings/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: intermodal
          path: "/intermodal"
          operations:
            - name: create-intermodal
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Combines ocean schedule data with inland transport options to find the optimal intermodal route, then logs the recommendation in Salesforce.

naftiko: "0.5"
info:
  label: "Intermodal Route Optimizer"
  description: "Combines ocean schedule data with inland transport options to find the optimal intermodal route, then logs the recommendation in Salesforce."
  tags:
    - logistics
    - intermodal
    - route-optimization
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: route-optimizer
      port: 8080
      tools:
        - name: optimize-route
          description: "Find optimal intermodal route from origin to final destination and log in Salesforce."
          inputParameters:
            - name: origin_address
              in: body
              type: string
              description: "Full origin address."
            - name: destination_address
              in: body
              type: string
              description: "Full destination address."
            - name: weight_kg
              in: body
              type: number
              description: "Total shipment weight in kg."
            - name: opportunity_id
              in: body
              type: string
              description: "Salesforce opportunity ID."
          steps:
            - name: geocode-origin
              type: call
              call: "google-maps.geocode"
              with:
                address: "{{origin_address}}"
            - name: geocode-dest
              type: call
              call: "google-maps.geocode"
              with:
                address: "{{destination_address}}"
            - name: find-route
              type: call
              call: "maersk-routing.get-intermodal-route"
              with:
                origin_lat: "{{geocode-origin.lat}}"
                origin_lng: "{{geocode-origin.lng}}"
                dest_lat: "{{geocode-dest.lat}}"
                dest_lng: "{{geocode-dest.lng}}"
                weight: "{{weight_kg}}"
            - name: log-recommendation
              type: call
              call: "salesforce.update-opportunity"
              with:
                opportunity_id: "{{opportunity_id}}"
                description: "Recommended route: {{find-route.summary}}. Transit time: {{find-route.transit_days}} days. Cost: {{find-route.estimated_cost}}."
  consumes:
    - type: http
      namespace: google-maps
      baseUri: "https://maps.googleapis.com/maps/api"
      authentication:
        type: apiKey
        key: "$secrets.google_maps_key"
      resources:
        - name: geocode
          path: "/geocode/json"
          inputParameters:
            - name: address
              in: query
          operations:
            - name: geocode
              method: GET
    - type: http
      namespace: maersk-routing
      baseUri: "https://api.maersk.com/routing/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: intermodal
          path: "/intermodal"
          operations:
            - name: get-intermodal-route
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://maersk.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: update-opportunity
              method: PATCH

Publishes approved job requisitions from Workday to LinkedIn recruiting, creating sponsored job posts for maritime and logistics roles.

naftiko: "0.5"
info:
  label: "LinkedIn Job Posting Publisher"
  description: "Publishes approved job requisitions from Workday to LinkedIn recruiting, creating sponsored job posts for maritime and logistics roles."
  tags:
    - recruiting
    - linkedin
    - workday
capability:
  exposes:
    - type: mcp
      namespace: recruiting-publisher
      port: 8080
      tools:
        - name: publish-job
          description: "Pull a job requisition from Workday and publish it to LinkedIn as a sponsored job post."
          inputParameters:
            - name: requisition_id
              in: body
              type: string
              description: "The Workday job requisition ID."
          steps:
            - name: get-requisition
              type: call
              call: "workday.get-requisition"
              with:
                req_id: "{{requisition_id}}"
            - name: post-to-linkedin
              type: call
              call: "linkedin.create-job-post"
              with:
                title: "{{get-requisition.title}}"
                description: "{{get-requisition.description}}"
                location: "{{get-requisition.location}}"
                company_id: "maersk"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: requisitions
          path: "/recruiting/requisitions/{{req_id}}"
          inputParameters:
            - name: req_id
              in: path
          operations:
            - name: get-requisition
              method: GET
    - type: http
      namespace: linkedin
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: job-posts
          path: "/jobPosts"
          operations:
            - name: create-job-post
              method: POST

Sends targeted shipping updates and newsletters to customer segments via MailChimp, pulling contact lists from Salesforce.

naftiko: "0.5"
info:
  label: "MailChimp Customer Newsletter Sender"
  description: "Sends targeted shipping updates and newsletters to customer segments via MailChimp, pulling contact lists from Salesforce."
  tags:
    - marketing
    - mailchimp
    - salesforce
    - newsletters
capability:
  exposes:
    - type: mcp
      namespace: newsletters
      port: 8080
      tools:
        - name: send-newsletter
          description: "Pull a customer segment from Salesforce and send a MailChimp newsletter."
          inputParameters:
            - name: segment_name
              in: body
              type: string
              description: "Salesforce contact list/segment name."
            - name: campaign_name
              in: body
              type: string
              description: "MailChimp campaign name."
            - name: subject_line
              in: body
              type: string
              description: "Email subject line."
          steps:
            - name: get-contacts
              type: call
              call: "salesforce.get-contact-list"
              with:
                segment: "{{segment_name}}"
            - name: send-campaign
              type: call
              call: "mailchimp.send-campaign"
              with:
                campaign_name: "{{campaign_name}}"
                subject: "{{subject_line}}"
                recipients: "{{get-contacts.emails}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://maersk.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: contacts
          path: "/sobjects/Contact"
          operations:
            - name: get-contact-list
              method: GET
    - type: http
      namespace: mailchimp
      baseUri: "https://us1.api.mailchimp.com/3.0"
      authentication:
        type: basic
        username: "anystring"
        password: "$secrets.mailchimp_api_key"
      resources:
        - name: campaigns
          path: "/campaigns"
          operations:
            - name: send-campaign
              method: POST

Fetches marine weather forecast data for a voyage route and posts optimal routing advice to Slack.

naftiko: "0.5"
info:
  label: "Marine Weather Routing Advisor"
  description: "Fetches marine weather forecast data for a voyage route and posts optimal routing advice to Slack."
  tags:
    - shipping
    - weather
    - slack
capability:
  exposes:
    - type: mcp
      namespace: shipping
      port: 8080
      tools:
        - name: marine-weather-routing-advisor
          description: "Get weather forecast for voyage and post advisory to Slack."
          inputParameters:
            - name: voyage_number
              in: body
              type: string
              description: "Voyage reference number."
          steps:
            - name: get-weather
              type: call
              call: "maersk-weather.get-route-forecast"
              with:
                voyage_number: "{{voyage_number}}"
            - name: post-advisory
              type: call
              call: "slack.post-message"
              with:
                channel: "#voyage-planning"
                text: "Weather advisory for voyage {{voyage_number}}: {{get-weather.recommendation}}"
  consumes:
    - type: http
      namespace: maersk-weather
      baseUri: "https://api.maersk.com/weather/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: route-forecast
          path: "/route-forecast"
          operations:
            - name: get-route-forecast
              method: GET
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Generates a Microsoft Excel report of weekly shipping volumes by trade lane using data from Teradata and delivers it via Microsoft Outlook email.

naftiko: "0.5"
info:
  label: "Microsoft Excel Report Generator"
  description: "Generates a Microsoft Excel report of weekly shipping volumes by trade lane using data from Teradata and delivers it via Microsoft Outlook email."
  tags:
    - reporting
    - microsoft-excel
    - teradata
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: excel-reports
      port: 8080
      tools:
        - name: generate-weekly-volume-report
          description: "Query Teradata for weekly shipping volumes and email an Excel report to stakeholders."
          inputParameters:
            - name: week_start
              in: body
              type: string
              description: "Start of the reporting week in YYYY-MM-DD format."
            - name: recipient_email
              in: body
              type: string
              description: "Email address to send the report to."
          steps:
            - name: query-volumes
              type: call
              call: "teradata.run-query"
              with:
                query: "SELECT trade_lane, SUM(teu) as total_teu FROM shipping_volumes WHERE week_start = '{{week_start}}' GROUP BY trade_lane"
            - name: send-report
              type: call
              call: "outlook.send-email"
              with:
                to: "{{recipient_email}}"
                subject: "Weekly Shipping Volume Report - {{week_start}}"
                body: "Weekly shipping volumes by trade lane attached. Total TEU: {{query-volumes.total_teu}}."
  consumes:
    - type: http
      namespace: teradata
      baseUri: "https://maersk-td.teradata.com/api/v1"
      authentication:
        type: basic
        username: "$secrets.teradata_user"
        password: "$secrets.teradata_password"
      resources:
        - name: queries
          path: "/queries"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: outlook
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: send-mail
          path: "/me/sendMail"
          operations:
            - name: send-email
              method: POST

Creates tasks in Microsoft Planner for port operations teams based on incoming vessel arrival notifications.

naftiko: "0.5"
info:
  label: "Microsoft Planner Task Creator"
  description: "Creates tasks in Microsoft Planner for port operations teams based on incoming vessel arrival notifications."
  tags:
    - task-management
    - microsoft-planner
    - port-operations
capability:
  exposes:
    - type: mcp
      namespace: port-tasks
      port: 8080
      tools:
        - name: create-arrival-tasks
          description: "Create Planner tasks for vessel arrival operations including berth allocation, crane assignment, and customs notification."
          inputParameters:
            - name: vessel_name
              in: body
              type: string
              description: "Name of the arriving vessel."
            - name: eta
              in: body
              type: string
              description: "Estimated time of arrival in ISO 8601 format."
            - name: port_code
              in: body
              type: string
              description: "Port UN/LOCODE."
            - name: plan_id
              in: body
              type: string
              description: "Microsoft Planner plan ID."
          call: "planner.create-task"
          with:
            plan_id: "{{plan_id}}"
            title: "Vessel arrival ops: {{vessel_name}} at {{port_code}} - ETA {{eta}}"
            due_date: "{{eta}}"
  consumes:
    - type: http
      namespace: planner
      baseUri: "https://graph.microsoft.com/v1.0/planner"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: tasks
          path: "/tasks"
          operations:
            - name: create-task
              method: POST

Triggers a Microsoft Power Automate flow to process incoming booking confirmations, routing them to the correct operations team.

naftiko: "0.5"
info:
  label: "Microsoft Power Automate Workflow Trigger"
  description: "Triggers a Microsoft Power Automate flow to process incoming booking confirmations, routing them to the correct operations team."
  tags:
    - automation
    - microsoft-power-automate
    - booking
capability:
  exposes:
    - type: mcp
      namespace: flow-trigger
      port: 8080
      tools:
        - name: trigger-booking-flow
          description: "Trigger a Power Automate flow for booking confirmation processing."
          inputParameters:
            - name: booking_ref
              in: body
              type: string
              description: "The booking reference number."
            - name: trade_lane
              in: body
              type: string
              description: "The trade lane for routing."
          call: "powerautomate.trigger-flow"
          with:
            booking_ref: "{{booking_ref}}"
            trade_lane: "{{trade_lane}}"
  consumes:
    - type: http
      namespace: powerautomate
      baseUri: "https://prod-123.westus.logic.azure.com/workflows"
      authentication:
        type: apiKey
        key: "$secrets.power_automate_key"
      resources:
        - name: flows
          path: "/booking-confirmation/triggers/manual/paths/invoke"
          operations:
            - name: trigger-flow
              method: POST

Posts a daily operations standup summary to Microsoft Teams by aggregating open ServiceNow incidents, delayed shipments, and port congestion alerts.

naftiko: "0.5"
info:
  label: "Microsoft Teams Operations Standup Bot"
  description: "Posts a daily operations standup summary to Microsoft Teams by aggregating open ServiceNow incidents, delayed shipments, and port congestion alerts."
  tags:
    - operations
    - microsoft-teams
    - servicenow
    - daily-standup
capability:
  exposes:
    - type: mcp
      namespace: ops-standup
      port: 8080
      tools:
        - name: post-standup-summary
          description: "Aggregate operational metrics and post daily standup summary to Microsoft Teams."
          inputParameters:
            - name: team_channel_id
              in: body
              type: string
              description: "The Microsoft Teams channel ID for the standup."
          steps:
            - name: get-open-incidents
              type: call
              call: "servicenow.get-incidents"
              with:
                state: "open"
                category: "logistics"
            - name: get-delayed-shipments
              type: call
              call: "maersk-tracking.get-delays"
              with:
                min_delay_hours: "24"
            - name: post-summary
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "{{team_channel_id}}"
                text: "Daily Ops Standup: {{get-open-incidents.count}} open incidents | {{get-delayed-shipments.count}} delayed shipments (>24h)"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://maersk.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: get-incidents
              method: GET
    - type: http
      namespace: maersk-tracking
      baseUri: "https://api.maersk.com/track/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: delays
          path: "/shipments/delays"
          inputParameters:
            - name: min_delay_hours
              in: query
          operations:
            - name: get-delays
              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

Runs a credit check on a new customer, creates a Salesforce account, and notifies the sales team via Slack.

naftiko: "0.5"
info:
  label: "New Customer Credit Check Pipeline"
  description: "Runs a credit check on a new customer, creates a Salesforce account, and notifies the sales team via Slack."
  tags:
    - shipping
    - credit
    - salesforce
    - slack
capability:
  exposes:
    - type: mcp
      namespace: shipping
      port: 8080
      tools:
        - name: new-customer-credit-check-pipeline
          description: "Run credit check, create Salesforce account, and notify sales."
          inputParameters:
            - name: company_name
              in: body
              type: string
              description: "Company name."
            - name: registration_number
              in: body
              type: string
              description: "Company registration number."
          steps:
            - name: run-credit
              type: call
              call: "maersk-credit.check-customer"
              with:
                company_name: "{{company_name}}"
                registration_number: "{{registration_number}}"
            - name: create-account
              type: call
              call: "salesforce.create-account"
              with:
                name: "{{company_name}}"
                credit_score: "{{run-credit.score}}"
            - name: notify-sales
              type: call
              call: "slack.post-message"
              with:
                channel: "#new-customers"
                text: "New customer {{company_name}} credit score: {{run-credit.score}}"
  consumes:
    - type: http
      namespace: maersk-credit
      baseUri: "https://api.maersk.com/credit/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: customers
          path: "/customers/check"
          operations:
            - name: check-customer
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://maersk.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account"
          operations:
            - name: create-account
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

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

naftiko: "0.5"
info:
  label: "New Hire Onboarding Orchestrator"
  description: "On new hire creation in Workday, provisions a ServiceNow onboarding ticket, creates a SharePoint folder for 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: "Orchestrate the full onboarding sequence for a new Maersk hire."
          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: "Department or business unit."
          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"
            - name: provision-folder
              type: call
              call: "sharepoint.create-folder"
              with:
                site_id: "hr_onboarding_site"
                folder_path: "OnboardingDocs/{{get-employee.full_name}}_{{start_date}}"
            - name: send-welcome
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-employee.work_email}}"
                text: "Welcome to Maersk, {{get-employee.first_name}}! Your IT onboarding ticket is {{open-ticket.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://maersk.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: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Queries New Relic for performance anomalies in Maersk web applications and creates ServiceNow incidents for critical deviations.

naftiko: "0.5"
info:
  label: "New Relic Performance Anomaly Detector"
  description: "Queries New Relic for performance anomalies in Maersk web applications and creates ServiceNow incidents for critical deviations."
  tags:
    - monitoring
    - new-relic
    - servicenow
    - anomaly-detection
capability:
  exposes:
    - type: mcp
      namespace: perf-anomaly
      port: 8080
      tools:
        - name: detect-and-escalate
          description: "Check New Relic for performance anomalies and create ServiceNow incidents for critical ones."
          inputParameters:
            - name: application_name
              in: body
              type: string
              description: "The New Relic application name."
            - name: threshold_ms
              in: body
              type: integer
              description: "Response time threshold in milliseconds."
          steps:
            - name: check-anomalies
              type: call
              call: "newrelic.get-anomalies"
              with:
                app_name: "{{application_name}}"
                threshold: "{{threshold_ms}}"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Performance anomaly: {{application_name}}"
                category: "application"
                priority: "2"
                description: "Response time exceeded {{threshold_ms}}ms. Current: {{check-anomalies.current_response_time}}ms. Error rate: {{check-anomalies.error_rate}}%."
  consumes:
    - type: http
      namespace: newrelic
      baseUri: "https://api.newrelic.com/v2"
      authentication:
        type: apiKey
        key: "$secrets.newrelic_api_key"
      resources:
        - name: anomalies
          path: "/applications/{{app_name}}/metrics"
          inputParameters:
            - name: app_name
              in: path
          operations:
            - name: get-anomalies
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://maersk.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

Monitors Maersk shipping API health metrics in New Relic and escalates degraded performance to Slack.

naftiko: "0.5"
info:
  label: "New Relic Shipping API Health Monitor"
  description: "Monitors Maersk shipping API health metrics in New Relic and escalates degraded performance to Slack."
  tags:
    - shipping
    - monitoring
    - new-relic
    - slack
capability:
  exposes:
    - type: mcp
      namespace: shipping
      port: 8080
      tools:
        - name: new-relic-shipping-api-health-monitor
          description: "Check API health in New Relic and escalate to Slack."
          steps:
            - name: check-health
              type: call
              call: "newrelic.get-application-metrics"
              with:
                app_name: "maersk-shipping-api"
            - name: escalate
              type: call
              call: "slack.post-message"
              with:
                channel: "#api-monitoring"
                text: "API health: response_time={{check-health.avg_response_time}}ms error_rate={{check-health.error_rate}}pct"
  consumes:
    - type: http
      namespace: newrelic
      baseUri: "https://api.newrelic.com/v2"
      authentication:
        type: bearer
        token: "$secrets.newrelic_token"
      resources:
        - name: application-metrics
          path: "/applications/metrics"
          operations:
            - name: get-application-metrics
              method: GET
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Monitors Oracle Cloud infrastructure health and resource utilization for Maersk enterprise applications.

naftiko: "0.5"
info:
  label: "Oracle Cloud Infrastructure Monitor"
  description: "Monitors Oracle Cloud infrastructure health and resource utilization for Maersk enterprise applications."
  tags:
    - infrastructure
    - oracle-cloud
    - monitoring
capability:
  exposes:
    - type: mcp
      namespace: oci-monitor
      port: 8080
      tools:
        - name: get-infra-health
          description: "Check Oracle Cloud infrastructure health metrics for a compartment."
          inputParameters:
            - name: compartment_id
              in: body
              type: string
              description: "The Oracle Cloud compartment OCID."
          call: "oraclecloud.get-metrics"
          with:
            compartment_id: "{{compartment_id}}"
  consumes:
    - type: http
      namespace: oraclecloud
      baseUri: "https://telemetry.us-ashburn-1.oraclecloud.com/20180401"
      authentication:
        type: bearer
        token: "$secrets.oracle_cloud_token"
      resources:
        - name: metrics
          path: "/metrics/actions/summarizeMetricsData"
          operations:
            - name: get-metrics
              method: POST

Confirms cargo receipt at origin warehouse, generates receipt documents, and updates SAP.

naftiko: "0.5"
info:
  label: "Origin Cargo Receipt Pipeline"
  description: "Confirms cargo receipt at origin warehouse, generates receipt documents, and updates SAP."
  tags:
    - shipping
    - cargo-operations
    - sap
capability:
  exposes:
    - type: mcp
      namespace: shipping
      port: 8080
      tools:
        - name: origin-cargo-receipt-pipeline
          description: "Confirm cargo receipt and update SAP goods receipt."
          inputParameters:
            - name: cargo_id
              in: body
              type: string
              description: "Cargo identifier."
            - name: warehouse_code
              in: body
              type: string
              description: "Warehouse code."
          steps:
            - name: confirm-receipt
              type: call
              call: "maersk-warehouse.confirm-receipt"
              with:
                cargo_id: "{{cargo_id}}"
                warehouse_code: "{{warehouse_code}}"
            - name: update-sap
              type: call
              call: "sap.update-goods-receipt"
              with:
                material_doc: "{{confirm-receipt.material_document}}"
                warehouse: "{{warehouse_code}}"
  consumes:
    - type: http
      namespace: maersk-warehouse
      baseUri: "https://api.maersk.com/warehouse/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: receipts
          path: "/receipts"
          operations:
            - name: confirm-receipt
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://maersk-sap.s4hana.cloud.sap/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: goods-receipts
          path: "/goods-receipts"
          operations:
            - name: update-goods-receipt
              method: PUT

Retrieves firewall rule configurations from Palo Alto Networks for compliance auditing of Maersk network security policies.

naftiko: "0.5"
info:
  label: "Palo Alto Firewall Rule Auditor"
  description: "Retrieves firewall rule configurations from Palo Alto Networks for compliance auditing of Maersk network security policies."
  tags:
    - security
    - palo-alto-networks
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: firewall-audit
      port: 8080
      tools:
        - name: audit-firewall-rules
          description: "Retrieve and audit Palo Alto firewall rules for a given device group."
          inputParameters:
            - name: device_group
              in: body
              type: string
              description: "The Palo Alto device group name."
          call: "paloalto.get-security-rules"
          with:
            device_group: "{{device_group}}"
  consumes:
    - type: http
      namespace: paloalto
      baseUri: "https://maersk-panorama.paloaltonetworks.com/restapi/v10.2"
      authentication:
        type: apiKey
        key: "$secrets.paloalto_api_key"
      resources:
        - name: security-rules
          path: "/Policies/SecurityRules"
          inputParameters:
            - name: device_group
              in: query
          operations:
            - name: get-security-rules
              method: GET

Analyzes port call schedules, optimizes berth windows, and updates the plan in Oracle Cloud.

naftiko: "0.5"
info:
  label: "Port Call Optimization Pipeline"
  description: "Analyzes port call schedules, optimizes berth windows, and updates the plan in Oracle Cloud."
  tags:
    - shipping
    - port-operations
    - oracle-cloud
capability:
  exposes:
    - type: mcp
      namespace: shipping
      port: 8080
      tools:
        - name: port-call-optimization-pipeline
          description: "Optimize port call schedule and update Oracle Cloud."
          inputParameters:
            - name: vessel_id
              in: body
              type: string
              description: "Vessel identifier."
            - name: port_code
              in: body
              type: string
              description: "Port code."
          steps:
            - name: optimize
              type: call
              call: "maersk-portops.optimize-port-call"
              with:
                vessel_id: "{{vessel_id}}"
                port_code: "{{port_code}}"
            - name: update-plan
              type: call
              call: "oracle-cloud.update-record"
              with:
                module: "port_operations"
                record_id: "{{vessel_id}}_{{port_code}}"
                data: "{{optimize.optimized_schedule}}"
  consumes:
    - type: http
      namespace: maersk-portops
      baseUri: "https://api.maersk.com/port-operations/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: port-call
          path: "/port-call/optimize"
          operations:
            - name: optimize-port-call
              method: POST
    - type: http
      namespace: oracle-cloud
      baseUri: "https://maersk.oraclecloud.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_cloud_token"
      resources:
        - name: records
          path: "/records"
          operations:
            - name: update-record
              method: PUT

Monitors port congestion levels and sends Slack alerts when wait times exceed thresholds.

naftiko: "0.5"
info:
  label: "Port Congestion Alert Pipeline"
  description: "Monitors port congestion levels and sends Slack alerts when wait times exceed thresholds."
  tags:
    - shipping
    - port-operations
    - slack
capability:
  exposes:
    - type: mcp
      namespace: shipping
      port: 8080
      tools:
        - name: port-congestion-alert-pipeline
          description: "Monitor port congestion and send Slack alerts."
          inputParameters:
            - name: port_code
              in: body
              type: string
              description: "Port code to monitor."
          steps:
            - name: get-congestion
              type: call
              call: "maersk-portops.get-congestion-data"
              with:
                port_code: "{{port_code}}"
            - name: send-alert
              type: call
              call: "slack.post-message"
              with:
                channel: "#port-ops-alerts"
                text: "Port congestion alert for {{port_code}}: {{get-congestion.wait_time_hours}}h wait"
  consumes:
    - type: http
      namespace: maersk-portops
      baseUri: "https://api.maersk.com/port-operations/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: congestion-data
          path: "/congestion"
          operations:
            - name: get-congestion-data
              method: GET
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Checks current port congestion levels and average wait times from Bloomberg Enterprise Data terminal feeds, returning queue depth and average anchorage days.

naftiko: "0.5"
info:
  label: "Port Congestion Monitor"
  description: "Checks current port congestion levels and average wait times from Bloomberg Enterprise Data terminal feeds, returning queue depth and average anchorage days."
  tags:
    - port-operations
    - congestion
    - bloomberg-enterprise-data
capability:
  exposes:
    - type: mcp
      namespace: port-congestion
      port: 8080
      tools:
        - name: get-port-congestion
          description: "Retrieve congestion metrics for a given port, including vessel queue and average anchorage wait."
          inputParameters:
            - name: port_code
              in: body
              type: string
              description: "The UN/LOCODE of the port to check."
          call: "bloomberg.get-port-data"
          with:
            port: "{{port_code}}"
  consumes:
    - type: http
      namespace: bloomberg
      baseUri: "https://api.bloomberg.com/eap/v1"
      authentication:
        type: bearer
        token: "$secrets.bloomberg_token"
      resources:
        - name: port-data
          path: "/catalogs/shipping/ports/{{port}}/congestion"
          inputParameters:
            - name: port
              in: path
          operations:
            - name: get-port-data
              method: GET

Retrieves real-time capacity and berth availability data for a specified port terminal.

naftiko: "0.5"
info:
  label: "Port Terminal Capacity Lookup"
  description: "Retrieves real-time capacity and berth availability data for a specified port terminal."
  tags:
    - shipping
    - port-operations
capability:
  exposes:
    - type: mcp
      namespace: port-ops
      port: 8080
      tools:
        - name: get-terminal-capacity
          description: "Retrieve terminal capacity and berth availability by terminal code."
          inputParameters:
            - name: terminal_code
              in: body
              type: string
              description: "Port terminal code."
          call: "port-ops.get-terminal-capacity"
          with:
            terminal_code: "{{terminal_code}}"
  consumes:
    - type: http
      namespace: port-ops
      baseUri: "https://api.maersk.com/port-operations/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: terminal-capacity
          path: "/terminals/{{terminal_code}}/capacity"
          inputParameters:
            - name: terminal_code
              in: path
          operations:
            - name: get-terminal-capacity
              method: GET

Triggers a dataset refresh in Power BI for the shipping operations dashboard, pulling latest data from Teradata warehouse.

naftiko: "0.5"
info:
  label: "Power BI Shipping Dashboard Refresh"
  description: "Triggers a dataset refresh in Power BI for the shipping operations dashboard, pulling latest data from Teradata warehouse."
  tags:
    - reporting
    - power-bi
    - teradata
    - shipping
capability:
  exposes:
    - type: mcp
      namespace: bi-refresh
      port: 8080
      tools:
        - name: refresh-shipping-dashboard
          description: "Trigger a Power BI dataset refresh for the shipping operations dashboard."
          inputParameters:
            - name: dataset_id
              in: body
              type: string
              description: "The Power BI dataset ID to refresh."
          steps:
            - name: validate-teradata
              type: call
              call: "teradata.check-connection"
              with:
                database: "shipping_dw"
            - name: trigger-refresh
              type: call
              call: "powerbi.refresh-dataset"
              with:
                dataset_id: "{{dataset_id}}"
  consumes:
    - type: http
      namespace: teradata
      baseUri: "https://maersk-td.teradata.com/api/v1"
      authentication:
        type: basic
        username: "$secrets.teradata_user"
        password: "$secrets.teradata_password"
      resources:
        - name: connections
          path: "/systems/shipping_dw/health"
          operations:
            - name: check-connection
              method: GET
    - 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

Evaluates vendor performance scores from SAP and generates a vendor scorecard report in Box.

naftiko: "0.5"
info:
  label: "Procurement Vendor Evaluation Pipeline"
  description: "Evaluates vendor performance scores from SAP and generates a vendor scorecard report in Box."
  tags:
    - shipping
    - procurement
    - sap
    - box
capability:
  exposes:
    - type: mcp
      namespace: shipping
      port: 8080
      tools:
        - name: procurement-vendor-evaluation-pipeline
          description: "Evaluate vendor scores from SAP and upload scorecard to Box."
          inputParameters:
            - name: vendor_id
              in: body
              type: string
              description: "Vendor identifier."
            - name: period
              in: body
              type: string
              description: "Evaluation period."
          steps:
            - name: get-scores
              type: call
              call: "sap.get-vendor-scores"
              with:
                vendor_id: "{{vendor_id}}"
                period: "{{period}}"
            - name: upload-scorecard
              type: call
              call: "box.upload-file"
              with:
                folder_id: "vendor-scorecards"
                filename: "scorecard_{{vendor_id}}_{{period}}.pdf"
                content: "{{get-scores.report}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://maersk-sap.s4hana.cloud.sap/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: vendor-scores
          path: "/vendor-scores"
          operations:
            - name: get-vendor-scores
              method: GET
    - type: http
      namespace: box
      baseUri: "https://api.box.com/2.0"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: files
          path: "/files/content"
          operations:
            - name: upload-file
              method: POST

Retrieves current market rates, compares with contract rates, and creates a HubSpot deal for rate negotiation.

naftiko: "0.5"
info:
  label: "Rate Negotiation Workflow"
  description: "Retrieves current market rates, compares with contract rates, and creates a HubSpot deal for rate negotiation."
  tags:
    - shipping
    - rates
    - hubspot
capability:
  exposes:
    - type: mcp
      namespace: shipping
      port: 8080
      tools:
        - name: rate-negotiation-workflow
          description: "Compare market and contract rates and create HubSpot deal."
          inputParameters:
            - name: trade_lane
              in: body
              type: string
              description: "Trade lane identifier."
            - name: contract_id
              in: body
              type: string
              description: "Contract identifier."
          steps:
            - name: get-rates
              type: call
              call: "maersk-rates.get-market-comparison"
              with:
                trade_lane: "{{trade_lane}}"
                contract_id: "{{contract_id}}"
            - name: create-deal
              type: call
              call: "hubspot.create-deal"
              with:
                name: "Rate renegotiation: {{trade_lane}}"
                amount: "{{get-rates.potential_savings}}"
  consumes:
    - type: http
      namespace: maersk-rates
      baseUri: "https://api.maersk.com/rates/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: market-comparison
          path: "/market-comparison"
          operations:
            - name: get-market-comparison
              method: GET
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com/crm/v3"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: deals
          path: "/objects/deals"
          operations:
            - name: create-deal
              method: POST

Queries Maersk IoT sensors for refrigerated container temperature readings and flags deviations to a Datadog dashboard.

naftiko: "0.5"
info:
  label: "Reefer Container Temperature Monitor"
  description: "Queries Maersk IoT sensors for refrigerated container temperature readings and flags deviations to a Datadog dashboard."
  tags:
    - reefer
    - cold-chain
    - datadog
    - monitoring
capability:
  exposes:
    - type: mcp
      namespace: reefer-monitoring
      port: 8080
      tools:
        - name: check-reefer-temp
          description: "Retrieve temperature readings for a reefer container and push anomalies to Datadog."
          inputParameters:
            - name: container_number
              in: body
              type: string
              description: "The reefer container ID."
            - name: temp_threshold_c
              in: body
              type: number
              description: "Maximum acceptable temperature in Celsius."
          steps:
            - name: get-temp
              type: call
              call: "maersk-iot.get-temperature"
              with:
                container_id: "{{container_number}}"
            - name: log-anomaly
              type: call
              call: "datadog.post-event"
              with:
                title: "Reefer temp alert: {{container_number}}"
                text: "Current temp {{get-temp.current_celsius}}C exceeds threshold {{temp_threshold_c}}C."
                alert_type: "warning"
                tags: "container:{{container_number}},reefer:true"
  consumes:
    - type: http
      namespace: maersk-iot
      baseUri: "https://api.maersk.com/iot/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: temperature
          path: "/containers/{{container_id}}/temperature"
          inputParameters:
            - name: container_id
              in: path
          operations:
            - name: get-temperature
              method: GET
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.datadog_api_key"
      resources:
        - name: events
          path: "/events"
          operations:
            - name: post-event
              method: POST

Converts an incoming trade inquiry into a Salesforce lead with company details, trade lane interest, and estimated volume.

naftiko: "0.5"
info:
  label: "Salesforce Lead from Trade Inquiry"
  description: "Converts an incoming trade inquiry into a Salesforce lead with company details, trade lane interest, and estimated volume."
  tags:
    - sales
    - salesforce
    - lead-management
capability:
  exposes:
    - type: mcp
      namespace: sales-leads
      port: 8080
      tools:
        - name: create-lead
          description: "Create a Salesforce lead from a trade inquiry."
          inputParameters:
            - name: company_name
              in: body
              type: string
              description: "Name of the prospective customer."
            - name: contact_email
              in: body
              type: string
              description: "Contact email address."
            - name: trade_lane
              in: body
              type: string
              description: "Trade lane of interest."
            - name: estimated_teu
              in: body
              type: integer
              description: "Estimated annual TEU volume."
          call: "salesforce.create-lead"
          with:
            company: "{{company_name}}"
            email: "{{contact_email}}"
            description: "Trade lane: {{trade_lane}}, Est. TEU: {{estimated_teu}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://maersk.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

Looks up a SAP purchase order by number for Maersk procurement, returning header status, vendor, total value, and delivery date.

naftiko: "0.5"
info:
  label: "SAP Purchase Order Status"
  description: "Looks up a SAP purchase order by number for Maersk procurement, returning header status, vendor, total value, and delivery date."
  tags:
    - procurement
    - erp
    - sap
capability:
  exposes:
    - type: mcp
      namespace: erp-procurement
      port: 8080
      tools:
        - name: get-purchase-order
          description: "Look up a SAP purchase order by PO number. Returns status, vendor, and total value."
          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://maersk-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

Identifies expiring service contracts, prepares renewal terms, and creates opportunities in Salesforce.

naftiko: "0.5"
info:
  label: "Service Contract Renewal Pipeline"
  description: "Identifies expiring service contracts, prepares renewal terms, and creates opportunities in Salesforce."
  tags:
    - shipping
    - contracts
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: shipping
      port: 8080
      tools:
        - name: service-contract-renewal-pipeline
          description: "Find expiring contracts and create Salesforce renewal opportunities."
          inputParameters:
            - name: days_ahead
              in: body
              type: string
              description: "Number of days to look ahead."
          steps:
            - name: check-expiring
              type: call
              call: "maersk-contracts.get-expiring"
              with:
                days_ahead: "{{days_ahead}}"
            - name: create-opportunities
              type: call
              call: "salesforce.create-opportunity"
              with:
                name: "Contract renewal batch"
                contracts: "{{check-expiring.contracts}}"
  consumes:
    - type: http
      namespace: maersk-contracts
      baseUri: "https://api.maersk.com/contracts/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: expiring
          path: "/expiring"
          operations:
            - name: get-expiring
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://maersk.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity"
          operations:
            - name: create-opportunity
              method: POST

Opens a new ServiceNow incident for IT or operational issues at Maersk facilities, assigning category and priority.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Creator"
  description: "Opens a new ServiceNow incident for IT or operational issues at Maersk facilities, assigning category and priority."
  tags:
    - it-support
    - servicenow
    - incident-management
capability:
  exposes:
    - type: mcp
      namespace: it-incidents
      port: 8080
      tools:
        - name: create-incident
          description: "Create a new ServiceNow incident with description, category, and priority."
          inputParameters:
            - name: short_description
              in: body
              type: string
              description: "Brief summary of the incident."
            - name: category
              in: body
              type: string
              description: "Incident category (e.g., network, application, hardware)."
            - name: priority
              in: body
              type: string
              description: "Priority level (1-Critical through 5-Planning)."
          call: "servicenow.create-incident"
          with:
            short_description: "{{short_description}}"
            category: "{{category}}"
            priority: "{{priority}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://maersk.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

Creates a new ocean freight booking in the Maersk booking system with origin, destination, commodity, and container type details.

naftiko: "0.5"
info:
  label: "Shipment Booking Creator"
  description: "Creates a new ocean freight booking in the Maersk booking system with origin, destination, commodity, and container type details."
  tags:
    - shipping
    - booking
    - logistics
capability:
  exposes:
    - type: mcp
      namespace: shipment-booking
      port: 8080
      tools:
        - name: create-booking
          description: "Submit a new ocean freight booking with origin port, destination port, commodity, and container size."
          inputParameters:
            - name: origin_port
              in: body
              type: string
              description: "The UN/LOCODE of the origin port."
            - name: destination_port
              in: body
              type: string
              description: "The UN/LOCODE of the destination port."
            - name: commodity
              in: body
              type: string
              description: "Description of goods being shipped."
            - name: container_type
              in: body
              type: string
              description: "Container size/type code (e.g., 40HC, 20DV)."
          call: "maersk-booking.create-booking"
          with:
            origin: "{{origin_port}}"
            destination: "{{destination_port}}"
            commodity: "{{commodity}}"
            equipment_type: "{{container_type}}"
  consumes:
    - type: http
      namespace: maersk-booking
      baseUri: "https://api.maersk.com/booking/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: bookings
          path: "/bookings"
          operations:
            - name: create-booking
              method: POST

Calculates CO2 emissions for a shipment route and publishes the sustainability report to Box.

naftiko: "0.5"
info:
  label: "Shipment Carbon Footprint Reporter"
  description: "Calculates CO2 emissions for a shipment route and publishes the sustainability report to Box."
  tags:
    - shipping
    - sustainability
    - box
capability:
  exposes:
    - type: mcp
      namespace: shipping
      port: 8080
      tools:
        - name: shipment-carbon-footprint-reporter
          description: "Calculate shipment emissions and upload report to Box."
          inputParameters:
            - name: shipment_id
              in: body
              type: string
              description: "Shipment identifier."
          steps:
            - name: calc-emissions
              type: call
              call: "maersk-sustainability.calculate-emissions"
              with:
                shipment_id: "{{shipment_id}}"
            - name: upload-report
              type: call
              call: "box.upload-file"
              with:
                folder_id: "sustainability_reports"
                filename: "carbon_{{shipment_id}}.pdf"
                content: "{{calc-emissions.report}}"
  consumes:
    - type: http
      namespace: maersk-sustainability
      baseUri: "https://api.maersk.com/sustainability/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: emissions
          path: "/emissions/calculate"
          operations:
            - name: calculate-emissions
              method: POST
    - type: http
      namespace: box
      baseUri: "https://api.box.com/2.0"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: files
          path: "/files/content"
          operations:
            - name: upload-file
              method: POST

When a shipment is delayed beyond SLA, creates a ServiceNow incident, updates the Salesforce opportunity, and notifies the account manager via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Shipment Delay Escalation Pipeline"
  description: "When a shipment is delayed beyond SLA, creates a ServiceNow incident, updates the Salesforce opportunity, and notifies the account manager via Microsoft Teams."
  tags:
    - shipping
    - sla
    - servicenow
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: delay-escalation
      port: 8080
      tools:
        - name: escalate-delay
          description: "Escalate a shipment delay: create incident, update CRM, and notify account manager."
          inputParameters:
            - name: booking_ref
              in: body
              type: string
              description: "The booking reference of the delayed shipment."
            - name: delay_days
              in: body
              type: integer
              description: "Number of days the shipment is delayed."
            - name: account_manager_email
              in: body
              type: string
              description: "Email of the account manager to notify."
          steps:
            - name: get-shipment
              type: call
              call: "maersk-tracking.get-shipment"
              with:
                booking_ref: "{{booking_ref}}"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Shipment delay: {{booking_ref}} - {{delay_days}} days late"
                category: "logistics"
                priority: "2"
                description: "Vessel {{get-shipment.vessel_name}} delayed. Original ETA: {{get-shipment.original_eta}}. Revised ETA: {{get-shipment.revised_eta}}."
            - name: update-opportunity
              type: call
              call: "salesforce.update-opportunity"
              with:
                opportunity_id: "{{get-shipment.sfdc_opportunity_id}}"
                description: "Delay of {{delay_days}} days. Incident: {{create-incident.number}}"
            - name: notify-manager
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{account_manager_email}}"
                text: "Shipment {{booking_ref}} delayed {{delay_days}} days. Incident {{create-incident.number}} opened. Revised ETA: {{get-shipment.revised_eta}}."
  consumes:
    - type: http
      namespace: maersk-tracking
      baseUri: "https://api.maersk.com/track/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: shipments
          path: "/shipments/{{booking_ref}}"
          inputParameters:
            - name: booking_ref
              in: path
          operations:
            - name: get-shipment
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://maersk.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://maersk.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: update-opportunity
              method: PATCH
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Collects shipper booking patterns and on-time delivery rates, generates a scorecard in Power BI.

naftiko: "0.5"
info:
  label: "Shipper Performance Scorecard Pipeline"
  description: "Collects shipper booking patterns and on-time delivery rates, generates a scorecard in Power BI."
  tags:
    - shipping
    - analytics
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: shipping
      port: 8080
      tools:
        - name: shipper-performance-scorecard-pipeline
          description: "Collect shipper metrics and publish scorecard to Power BI."
          inputParameters:
            - name: shipper_id
              in: body
              type: string
              description: "Shipper account ID."
            - name: period
              in: body
              type: string
              description: "Reporting period."
          steps:
            - name: get-metrics
              type: call
              call: "maersk-analytics.get-shipper-metrics"
              with:
                shipper_id: "{{shipper_id}}"
                period: "{{period}}"
            - name: refresh
              type: call
              call: "powerbi.refresh-dataset"
              with:
                dataset_id: "shipper_scorecards"
                data: "{{get-metrics.scorecard}}"
  consumes:
    - type: http
      namespace: maersk-analytics
      baseUri: "https://api.maersk.com/analytics/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: shipper-metrics
          path: "/shipper-metrics"
          operations:
            - name: get-shipper-metrics
              method: GET
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets"
          operations:
            - name: refresh-dataset
              method: POST

Returns the current processing status of shipping instructions for a booking.

naftiko: "0.5"
info:
  label: "Shipping Instruction Status"
  description: "Returns the current processing status of shipping instructions for a booking."
  tags:
    - shipping
    - documentation
capability:
  exposes:
    - type: mcp
      namespace: si-svc
      port: 8080
      tools:
        - name: get-status
          description: "Retrieve shipping instruction processing status."
          inputParameters:
            - name: si_reference
              in: body
              type: string
              description: "Shipping instruction reference."
          call: "si-svc.get-status"
          with:
            si_reference: "{{si_reference}}"
  consumes:
    - type: http
      namespace: si-svc
      baseUri: "https://api.maersk.com/shipping-instructions/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: instructions
          path: "/instructions/{{si_reference}}/status"
          inputParameters:
            - name: si_reference
              in: path
          operations:
            - name: get-status
              method: GET

Routes operational alerts from Datadog to the appropriate Slack channel based on alert severity and service category.

naftiko: "0.5"
info:
  label: "Slack Channel Alert Router"
  description: "Routes operational alerts from Datadog to the appropriate Slack channel based on alert severity and service category."
  tags:
    - alerting
    - slack
    - datadog
    - operations
capability:
  exposes:
    - type: mcp
      namespace: alert-router
      port: 8080
      tools:
        - name: route-alert
          description: "Route a Datadog alert to the correct Slack channel based on severity and category."
          inputParameters:
            - name: alert_title
              in: body
              type: string
              description: "The Datadog alert title."
            - name: severity
              in: body
              type: string
              description: "Alert severity (critical, warning, info)."
            - name: service_category
              in: body
              type: string
              description: "Service category (shipping, port-ops, it-infra)."
          steps:
            - name: get-alert-details
              type: call
              call: "datadog.get-event"
              with:
                title: "{{alert_title}}"
            - name: post-to-slack
              type: call
              call: "slack.post-message"
              with:
                channel: "alerts-{{service_category}}"
                text: "[{{severity}}] {{alert_title}}: {{get-alert-details.message}}"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.datadog_api_key"
      resources:
        - name: events
          path: "/events"
          operations:
            - name: get-event
              method: GET
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Retrieves network device health and uptime metrics from SolarWinds for Maersk port and terminal network infrastructure.

naftiko: "0.5"
info:
  label: "SolarWinds Network Health Monitor"
  description: "Retrieves network device health and uptime metrics from SolarWinds for Maersk port and terminal network infrastructure."
  tags:
    - network
    - solarwinds
    - port-infrastructure
capability:
  exposes:
    - type: mcp
      namespace: network-health
      port: 8080
      tools:
        - name: get-network-status
          description: "Check SolarWinds for network device health at a specific port or terminal location."
          inputParameters:
            - name: location_name
              in: body
              type: string
              description: "The port or terminal location name."
          call: "solarwinds.get-nodes"
          with:
            location: "{{location_name}}"
  consumes:
    - type: http
      namespace: solarwinds
      baseUri: "https://maersk-solarwinds.com/SolarWinds/InformationService/v3/Json"
      authentication:
        type: basic
        username: "$secrets.solarwinds_user"
        password: "$secrets.solarwinds_password"
      resources:
        - name: nodes
          path: "/Query"
          inputParameters:
            - name: location
              in: query
          operations:
            - name: get-nodes
              method: POST

Aggregates shipment milestone data across multiple bookings and syncs to Tableau for supply chain visibility.

naftiko: "0.5"
info:
  label: "Supply Chain Visibility Dashboard Sync"
  description: "Aggregates shipment milestone data across multiple bookings and syncs to Tableau for supply chain visibility."
  tags:
    - shipping
    - analytics
    - tableau
capability:
  exposes:
    - type: mcp
      namespace: shipping
      port: 8080
      tools:
        - name: supply-chain-visibility-dashboard-sync
          description: "Aggregate shipment milestones and sync to Tableau."
          inputParameters:
            - name: customer_id
              in: body
              type: string
              description: "Customer account ID."
            - name: date_range
              in: body
              type: string
              description: "Date range for milestones."
          steps:
            - name: get-milestones
              type: call
              call: "maersk-tracking.get-milestones"
              with:
                customer_id: "{{customer_id}}"
                date_range: "{{date_range}}"
            - name: publish-data
              type: call
              call: "tableau.publish-datasource"
              with:
                project_id: "supply_chain_visibility"
                datasource_name: "milestones_{{customer_id}}"
                data: "{{get-milestones.events}}"
  consumes:
    - type: http
      namespace: maersk-tracking
      baseUri: "https://api.maersk.com/tracking/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: milestones
          path: "/milestones"
          operations:
            - name: get-milestones
              method: GET
    - type: http
      namespace: tableau
      baseUri: "https://maersk-tableau.online.tableau.com/api/3.19"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: datasources
          path: "/sites/{{site_id}}/datasources"
          operations:
            - name: publish-datasource
              method: POST

Retrieves applicable tariff rates for a given commodity and trade lane.

naftiko: "0.5"
info:
  label: "Tariff Rate Lookup"
  description: "Retrieves applicable tariff rates for a given commodity and trade lane."
  tags:
    - shipping
    - tariffs
capability:
  exposes:
    - type: mcp
      namespace: tariffs
      port: 8080
      tools:
        - name: get-rate
          description: "Retrieve tariff rates for a commodity and trade lane."
          inputParameters:
            - name: commodity_code
              in: body
              type: string
              description: "HS commodity code."
            - name: trade_lane
              in: body
              type: string
              description: "Trade lane identifier."
          call: "tariffs.get-rate"
          with:
            commodity_code: "{{commodity_code}}"
            trade_lane: "{{trade_lane}}"
  consumes:
    - type: http
      namespace: tariffs
      baseUri: "https://api.maersk.com/tariffs/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: rates
          path: "/rates"
          inputParameters:
            - name: commodity_code
              in: query
            - name: trade_lane
              in: query
          operations:
            - name: get-rate
              method: GET

Retrieves expected container arrivals at a terminal and creates a yard planning page in Confluence.

naftiko: "0.5"
info:
  label: "Terminal Yard Planning Pipeline"
  description: "Retrieves expected container arrivals at a terminal and creates a yard planning page in Confluence."
  tags:
    - shipping
    - terminal-operations
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: shipping
      port: 8080
      tools:
        - name: terminal-yard-planning-pipeline
          description: "Plan terminal yard operations and publish to Confluence."
          inputParameters:
            - name: terminal_code
              in: body
              type: string
              description: "Terminal code."
            - name: date
              in: body
              type: string
              description: "Planning date."
          steps:
            - name: get-arrivals
              type: call
              call: "maersk-terminal.get-expected-arrivals"
              with:
                terminal_code: "{{terminal_code}}"
                date: "{{date}}"
            - name: publish-plan
              type: call
              call: "confluence.create-page"
              with:
                space: "TERMINAL-OPS"
                title: "Yard Plan {{terminal_code}} {{date}}"
                content: "{{get-arrivals.yard_plan}}"
  consumes:
    - type: http
      namespace: maersk-terminal
      baseUri: "https://api.maersk.com/terminal/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: expected-arrivals
          path: "/expected-arrivals"
          operations:
            - name: get-expected-arrivals
              method: GET
    - type: http
      namespace: confluence
      baseUri: "https://maersk.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: create-page
              method: POST

Validates trade documents against regulatory requirements and publishes results to SharePoint.

naftiko: "0.5"
info:
  label: "Trade Document Compliance Checker"
  description: "Validates trade documents against regulatory requirements and publishes results to SharePoint."
  tags:
    - shipping
    - compliance
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: shipping
      port: 8080
      tools:
        - name: trade-document-compliance-checker
          description: "Validate trade documents and publish compliance report to SharePoint."
          inputParameters:
            - name: shipment_id
              in: body
              type: string
              description: "Shipment identifier."
          steps:
            - name: validate-docs
              type: call
              call: "maersk-compliance.validate-documents"
              with:
                shipment_id: "{{shipment_id}}"
            - name: upload-report
              type: call
              call: "sharepoint.upload-document"
              with:
                library: "compliance-reports"
                content: "{{validate-docs.report}}"
  consumes:
    - type: http
      namespace: maersk-compliance
      baseUri: "https://api.maersk.com/compliance/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: documents
          path: "/documents/validate"
          operations:
            - name: validate-documents
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://maersk.sharepoint.com/_api/v2.0"
      authentication:
        type: bearer
        token: "$secrets.sharepoint_token"
      resources:
        - name: documents
          path: "/documents"
          operations:
            - name: upload-document
              method: POST

Returns average transit times for a specified origin-destination trade lane pair.

naftiko: "0.5"
info:
  label: "Trade Lane Transit Time Lookup"
  description: "Returns average transit times for a specified origin-destination trade lane pair."
  tags:
    - shipping
    - trade-lanes
capability:
  exposes:
    - type: mcp
      namespace: trade-lanes
      port: 8080
      tools:
        - name: get-transit-time
          description: "Retrieve average transit times for a trade lane."
          inputParameters:
            - name: origin_port
              in: body
              type: string
              description: "Origin port code."
            - name: destination_port
              in: body
              type: string
              description: "Destination port code."
          call: "trade-lanes.get-transit-time"
          with:
            origin_port: "{{origin_port}}"
            destination_port: "{{destination_port}}"
  consumes:
    - type: http
      namespace: trade-lanes
      baseUri: "https://api.maersk.com/trade-lanes/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: transit-times
          path: "/transit-times"
          inputParameters:
            - name: origin_port
              in: query
            - name: destination_port
              in: query
          operations:
            - name: get-transit-time
              method: GET

When a new vendor is approved, creates the vendor record in Oracle E-Business Suite, opens a ServiceNow onboarding ticket, and notifies procurement via Slack.

naftiko: "0.5"
info:
  label: "Vendor Onboarding Pipeline"
  description: "When a new vendor is approved, creates the vendor record in Oracle E-Business Suite, opens a ServiceNow onboarding ticket, and notifies procurement via Slack."
  tags:
    - procurement
    - vendor-management
    - oracle-e-business-suite
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: vendor-onboarding
      port: 8080
      tools:
        - name: onboard-vendor
          description: "Create vendor in Oracle EBS, open ServiceNow ticket, and notify procurement team."
          inputParameters:
            - name: vendor_name
              in: body
              type: string
              description: "Legal name of the vendor."
            - name: vendor_category
              in: body
              type: string
              description: "Category (e.g., port_services, fuel, maintenance)."
            - name: contact_email
              in: body
              type: string
              description: "Primary contact email."
          steps:
            - name: create-vendor
              type: call
              call: "oracle-ebs.create-vendor"
              with:
                vendor_name: "{{vendor_name}}"
                category: "{{vendor_category}}"
                email: "{{contact_email}}"
            - name: open-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Vendor onboarding: {{vendor_name}}"
                category: "procurement"
                description: "New vendor {{vendor_name}} ({{vendor_category}}). Oracle vendor ID: {{create-vendor.vendor_id}}."
            - name: notify-procurement
              type: call
              call: "slack.post-message"
              with:
                channel: "procurement-ops"
                text: "New vendor onboarded: {{vendor_name}} ({{vendor_category}}). Oracle ID: {{create-vendor.vendor_id}}. ServiceNow ticket: {{open-ticket.number}}."
  consumes:
    - type: http
      namespace: oracle-ebs
      baseUri: "https://maersk-ebs.oraclecloud.com/webservices/rest"
      authentication:
        type: basic
        username: "$secrets.oracle_ebs_user"
        password: "$secrets.oracle_ebs_password"
      resources:
        - name: vendors
          path: "/vendors"
          operations:
            - name: create-vendor
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://maersk.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: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Fetches current bunker fuel levels for a vessel by IMO number.

naftiko: "0.5"
info:
  label: "Vessel Bunker Fuel Level Query"
  description: "Fetches current bunker fuel levels for a vessel by IMO number."
  tags:
    - shipping
    - fuel-management
capability:
  exposes:
    - type: mcp
      namespace: vessel-ops
      port: 8080
      tools:
        - name: get-fuel-level
          description: "Retrieve current bunker fuel levels for a vessel."
          inputParameters:
            - name: imo_number
              in: body
              type: string
              description: "IMO number of the vessel."
          call: "vessel-ops.get-fuel-level"
          with:
            imo_number: "{{imo_number}}"
  consumes:
    - type: http
      namespace: vessel-ops
      baseUri: "https://api.maersk.com/vessels/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: fuel-levels
          path: "/vessels/{{imo_number}}/fuel-levels"
          inputParameters:
            - name: imo_number
              in: path
          operations:
            - name: get-fuel-level
              method: GET

Retrieves draft survey measurement results for cargo loaded onto a vessel.

naftiko: "0.5"
info:
  label: "Vessel Draft Survey Result"
  description: "Retrieves draft survey measurement results for cargo loaded onto a vessel."
  tags:
    - shipping
    - cargo-operations
capability:
  exposes:
    - type: mcp
      namespace: cargo-ops
      port: 8080
      tools:
        - name: get-draft-survey
          description: "Retrieve draft survey results for a voyage at a port."
          inputParameters:
            - name: voyage_number
              in: body
              type: string
              description: "Voyage reference."
            - name: port_code
              in: body
              type: string
              description: "Port of loading."
          call: "cargo-ops.get-draft-survey"
          with:
            voyage_number: "{{voyage_number}}"
            port_code: "{{port_code}}"
  consumes:
    - type: http
      namespace: cargo-ops
      baseUri: "https://api.maersk.com/cargo-operations/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: draft-surveys
          path: "/voyages/{{voyage_number}}/draft-surveys"
          inputParameters:
            - name: voyage_number
              in: path
            - name: port_code
              in: query
          operations:
            - name: get-draft-survey
              method: GET

Retrieves vessel maintenance schedule, identifies upcoming dry dock needs, and creates project tasks in Microsoft Planner.

naftiko: "0.5"
info:
  label: "Vessel Dry Dock Planning Pipeline"
  description: "Retrieves vessel maintenance schedule, identifies upcoming dry dock needs, and creates project tasks in Microsoft Planner."
  tags:
    - shipping
    - maintenance
    - microsoft-planner
capability:
  exposes:
    - type: mcp
      namespace: shipping
      port: 8080
      tools:
        - name: vessel-dry-dock-planning-pipeline
          description: "Retrieve maintenance schedule and create dry dock planning tasks."
          inputParameters:
            - name: imo_number
              in: body
              type: string
              description: "Vessel IMO number."
          steps:
            - name: get-schedule
              type: call
              call: "maersk-maintenance.get-drydock-schedule"
              with:
                imo_number: "{{imo_number}}"
            - name: create-tasks
              type: call
              call: "planner.create-task"
              with:
                plan_id: "drydock_planning"
                title: "Dry dock: {{imo_number}}"
                details: "{{get-schedule.maintenance_items}}"
  consumes:
    - type: http
      namespace: maersk-maintenance
      baseUri: "https://api.maersk.com/maintenance/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: drydock-schedules
          path: "/drydock-schedules"
          operations:
            - name: get-drydock-schedule
              method: GET
    - type: http
      namespace: planner
      baseUri: "https://graph.microsoft.com/v1.0/planner"
      authentication:
        type: bearer
        token: "$secrets.planner_token"
      resources:
        - name: tasks
          path: "/tasks"
          operations:
            - name: create-task
              method: POST

Returns the estimated time of arrival for a vessel at a specific port.

naftiko: "0.5"
info:
  label: "Vessel ETA Lookup"
  description: "Returns the estimated time of arrival for a vessel at a specific port."
  tags:
    - shipping
    - vessel-tracking
capability:
  exposes:
    - type: mcp
      namespace: vessel-tracking
      port: 8080
      tools:
        - name: get-eta
          description: "Retrieve the ETA for a vessel at a given port."
          inputParameters:
            - name: vessel_name
              in: body
              type: string
              description: "Name of the vessel."
            - name: port_code
              in: body
              type: string
              description: "Destination port code."
          call: "vessel-tracking.get-eta"
          with:
            vessel_name: "{{vessel_name}}"
            port_code: "{{port_code}}"
  consumes:
    - type: http
      namespace: vessel-tracking
      baseUri: "https://api.maersk.com/vessel-tracking/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: eta
          path: "/vessels/eta"
          inputParameters:
            - name: vessel_name
              in: query
            - name: port_code
              in: query
          operations:
            - name: get-eta
              method: GET

Collects vessel performance data including fuel consumption and speed, then publishes KPIs to a Power BI dashboard.

naftiko: "0.5"
info:
  label: "Vessel Performance Analytics Pipeline"
  description: "Collects vessel performance data including fuel consumption and speed, then publishes KPIs to a Power BI dashboard."
  tags:
    - shipping
    - analytics
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: shipping
      port: 8080
      tools:
        - name: vessel-performance-analytics-pipeline
          description: "Collect vessel performance data and push KPIs to Power BI."
          inputParameters:
            - name: imo_number
              in: body
              type: string
              description: "Vessel IMO number."
            - name: period
              in: body
              type: string
              description: "Reporting period."
          steps:
            - name: get-performance
              type: call
              call: "maersk-analytics.get-vessel-performance"
              with:
                imo_number: "{{imo_number}}"
                period: "{{period}}"
            - name: refresh-dashboard
              type: call
              call: "powerbi.refresh-dataset"
              with:
                dataset_id: "vessel_performance"
                data: "{{get-performance.kpis}}"
  consumes:
    - type: http
      namespace: maersk-analytics
      baseUri: "https://api.maersk.com/analytics/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: vessel-performance
          path: "/vessel-performance"
          operations:
            - name: get-vessel-performance
              method: GET
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets"
          operations:
            - name: refresh-dataset
              method: POST

Queries the Maersk vessel schedule API for upcoming sailings between two ports, returning departure dates, transit times, and vessel names.

naftiko: "0.5"
info:
  label: "Vessel Schedule Lookup"
  description: "Queries the Maersk vessel schedule API for upcoming sailings between two ports, returning departure dates, transit times, and vessel names."
  tags:
    - shipping
    - vessel-schedule
    - logistics
capability:
  exposes:
    - type: mcp
      namespace: vessel-schedule
      port: 8080
      tools:
        - name: get-schedules
          description: "Find upcoming vessel sailings between an origin and destination port."
          inputParameters:
            - name: origin_port
              in: body
              type: string
              description: "The UN/LOCODE of the origin port."
            - name: destination_port
              in: body
              type: string
              description: "The UN/LOCODE of the destination port."
          call: "maersk-schedule.list-schedules"
          with:
            origin: "{{origin_port}}"
            destination: "{{destination_port}}"
  consumes:
    - type: http
      namespace: maersk-schedule
      baseUri: "https://api.maersk.com/schedules/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: schedules
          path: "/port-pairs"
          inputParameters:
            - name: origin
              in: query
            - name: destination
              in: query
          operations:
            - name: list-schedules
              method: GET

Returns the full port rotation schedule for a given vessel voyage.

naftiko: "0.5"
info:
  label: "Vessel Schedule Route Query"
  description: "Returns the full port rotation schedule for a given vessel voyage."
  tags:
    - shipping
    - vessel-scheduling
capability:
  exposes:
    - type: mcp
      namespace: schedules
      port: 8080
      tools:
        - name: get-route
          description: "Retrieve port rotation schedule for a voyage."
          inputParameters:
            - name: voyage_number
              in: body
              type: string
              description: "Voyage reference number."
          call: "schedules.get-route"
          with:
            voyage_number: "{{voyage_number}}"
  consumes:
    - type: http
      namespace: schedules
      baseUri: "https://api.maersk.com/schedules/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: routes
          path: "/voyages/{{voyage_number}}/route"
          inputParameters:
            - name: voyage_number
              in: path
          operations:
            - name: get-route
              method: GET

Calculates voyage profit and loss by aggregating revenue and cost data, then publishes to Tableau.

naftiko: "0.5"
info:
  label: "Voyage Profit Loss Analyzer"
  description: "Calculates voyage profit and loss by aggregating revenue and cost data, then publishes to Tableau."
  tags:
    - shipping
    - finance
    - tableau
capability:
  exposes:
    - type: mcp
      namespace: shipping
      port: 8080
      tools:
        - name: voyage-profit-loss-analyzer
          description: "Calculate voyage P&L and publish to Tableau."
          inputParameters:
            - name: voyage_number
              in: body
              type: string
              description: "Voyage reference number."
          steps:
            - name: get-pnl
              type: call
              call: "maersk-finance.get-voyage-pnl"
              with:
                voyage_number: "{{voyage_number}}"
            - name: publish
              type: call
              call: "tableau.publish-datasource"
              with:
                project_id: "voyage_financials"
                datasource_name: "pnl_{{voyage_number}}"
                data: "{{get-pnl.breakdown}}"
  consumes:
    - type: http
      namespace: maersk-finance
      baseUri: "https://api.maersk.com/finance/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: voyage-pnl
          path: "/voyage-pnl"
          operations:
            - name: get-voyage-pnl
              method: GET
    - type: http
      namespace: tableau
      baseUri: "https://maersk-tableau.online.tableau.com/api/3.19"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: datasources
          path: "/sites/{{site_id}}/datasources"
          operations:
            - name: publish-datasource
              method: POST

Synchronizes warehouse inventory levels from Oracle E-Business Suite to a SharePoint tracker, flagging items below reorder threshold.

naftiko: "0.5"
info:
  label: "Warehouse Inventory Sync"
  description: "Synchronizes warehouse inventory levels from Oracle E-Business Suite to a SharePoint tracker, flagging items below reorder threshold."
  tags:
    - warehouse
    - inventory
    - oracle-e-business-suite
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: warehouse-inventory
      port: 8080
      tools:
        - name: sync-inventory
          description: "Pull inventory levels from Oracle EBS for a warehouse and update the SharePoint inventory tracker."
          inputParameters:
            - name: warehouse_id
              in: body
              type: string
              description: "The Oracle EBS warehouse/organization ID."
          steps:
            - name: get-inventory
              type: call
              call: "oracle-ebs.get-inventory"
              with:
                org_id: "{{warehouse_id}}"
            - name: update-tracker
              type: call
              call: "sharepoint.update-list"
              with:
                site_id: "warehouse_ops"
                list_name: "InventoryLevels"
                data: "{{get-inventory.items}}"
  consumes:
    - type: http
      namespace: oracle-ebs
      baseUri: "https://maersk-ebs.oraclecloud.com/webservices/rest"
      authentication:
        type: basic
        username: "$secrets.oracle_ebs_user"
        password: "$secrets.oracle_ebs_password"
      resources:
        - name: inventory
          path: "/inventory/onhand/{{org_id}}"
          inputParameters:
            - name: org_id
              in: path
          operations:
            - name: get-inventory
              method: GET
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: lists
          path: "/{{site_id}}/lists/{{list_name}}/items"
          inputParameters:
            - name: site_id
              in: path
            - name: list_name
              in: path
          operations:
            - name: update-list
              method: POST

Processes incoming container at warehouse, updates SAP inventory, and sends confirmation via Teams.

naftiko: "0.5"
info:
  label: "Warehouse Receiving Orchestrator"
  description: "Processes incoming container at warehouse, updates SAP inventory, and sends confirmation via Teams."
  tags:
    - shipping
    - warehousing
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: shipping
      port: 8080
      tools:
        - name: warehouse-receiving-orchestrator
          description: "Process container receipt, update SAP, and notify via Teams."
          inputParameters:
            - name: container_number
              in: body
              type: string
              description: "Container number."
            - name: warehouse_code
              in: body
              type: string
              description: "Warehouse code."
          steps:
            - name: receive-container
              type: call
              call: "maersk-warehouse.receive"
              with:
                container_number: "{{container_number}}"
                warehouse_code: "{{warehouse_code}}"
            - name: update-inventory
              type: call
              call: "sap.update-inventory"
              with:
                material: "{{receive-container.materials}}"
                warehouse: "{{warehouse_code}}"
            - name: notify
              type: call
              call: "teams.send-message"
              with:
                channel_id: "warehouse-ops"
                message: "Container {{container_number}} received at {{warehouse_code}}"
  consumes:
    - type: http
      namespace: maersk-warehouse
      baseUri: "https://api.maersk.com/warehouse/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: receiving
          path: "/receiving"
          operations:
            - name: receive
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://maersk-sap.s4hana.cloud.sap/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: inventory
          path: "/inventory"
          operations:
            - name: update-inventory
              method: PUT
    - type: http
      namespace: teams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.teams_token"
      resources:
        - name: messages
          path: "/teams/channels/messages"
          operations:
            - name: send-message
              method: POST

Retrieves employee details from Workday by worker ID, including department, manager, and location for operational staffing queries.

naftiko: "0.5"
info:
  label: "Workday Employee Directory Lookup"
  description: "Retrieves employee details from Workday by worker ID, including department, manager, and location for operational staffing queries."
  tags:
    - hr
    - workday
    - employee-directory
capability:
  exposes:
    - type: mcp
      namespace: hr-directory
      port: 8080
      tools:
        - name: get-employee
          description: "Look up an employee in Workday by worker ID."
          inputParameters:
            - name: worker_id
              in: body
              type: string
              description: "The Workday worker ID."
          call: "workday.get-worker"
          with:
            worker_id: "{{worker_id}}"
  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 Zendesk support ticket from customer shipping inquiries, attaching container tracking details for faster resolution.

naftiko: "0.5"
info:
  label: "Zendesk Customer Support Ticket Creator"
  description: "Creates a Zendesk support ticket from customer shipping inquiries, attaching container tracking details for faster resolution."
  tags:
    - customer-support
    - zendesk
    - shipping
capability:
  exposes:
    - type: mcp
      namespace: customer-support
      port: 8080
      tools:
        - name: create-support-ticket
          description: "Create a Zendesk ticket with container tracking context for customer support."
          inputParameters:
            - name: customer_email
              in: body
              type: string
              description: "Customer email address."
            - name: subject
              in: body
              type: string
              description: "Ticket subject."
            - name: container_number
              in: body
              type: string
              description: "Container number for tracking context."
          steps:
            - name: get-tracking
              type: call
              call: "maersk-tracking.get-container"
              with:
                container_id: "{{container_number}}"
            - name: create-ticket
              type: call
              call: "zendesk.create-ticket"
              with:
                requester_email: "{{customer_email}}"
                subject: "{{subject}}"
                description: "Container: {{container_number}} | Vessel: {{get-tracking.vessel.name}} | ETA: {{get-tracking.eta}} | Status: {{get-tracking.status}}"
  consumes:
    - type: http
      namespace: maersk-tracking
      baseUri: "https://api.maersk.com/track/v1"
      authentication:
        type: bearer
        token: "$secrets.maersk_api_token"
      resources:
        - name: containers
          path: "/containers/{{container_id}}"
          inputParameters:
            - name: container_id
              in: path
          operations:
            - name: get-container
              method: GET
    - type: http
      namespace: zendesk
      baseUri: "https://maersk.zendesk.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.zendesk_token"
      resources:
        - name: tickets
          path: "/tickets"
          operations:
            - name: create-ticket
              method: POST

Enriches Salesforce account records with firmographic data from ZoomInfo, including company size, revenue, and industry classification.

naftiko: "0.5"
info:
  label: "ZoomInfo Account Enrichment"
  description: "Enriches Salesforce account records with firmographic data from ZoomInfo, including company size, revenue, and industry classification."
  tags:
    - sales
    - zoominfo
    - salesforce
    - data-enrichment
capability:
  exposes:
    - type: mcp
      namespace: account-enrichment
      port: 8080
      tools:
        - name: enrich-account
          description: "Pull firmographic data from ZoomInfo and update the Salesforce account record."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "The Salesforce account ID to enrich."
            - name: company_domain
              in: body
              type: string
              description: "The company website domain for ZoomInfo lookup."
          steps:
            - name: get-firmographics
              type: call
              call: "zoominfo.enrich-company"
              with:
                domain: "{{company_domain}}"
            - name: update-account
              type: call
              call: "salesforce.update-account"
              with:
                account_id: "{{account_id}}"
                employee_count: "{{get-firmographics.employee_count}}"
                annual_revenue: "{{get-firmographics.revenue}}"
                industry: "{{get-firmographics.industry}}"
  consumes:
    - type: http
      namespace: zoominfo
      baseUri: "https://api.zoominfo.com"
      authentication:
        type: bearer
        token: "$secrets.zoominfo_token"
      resources:
        - name: companies
          path: "/enrich/company"
          operations:
            - name: enrich-company
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://maersk.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{account_id}}"
          inputParameters:
            - name: account_id
              in: path
          operations:
            - name: update-account
              method: PATCH