COSCO Shipping Capabilities

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

Sort
Expand

Reviews access at COSCO Shipping via Okta, IAM, and Jira.

naftiko: "0.5"
info:
  label: "Access Review Pipeline"
  description: "Reviews access at COSCO Shipping via Okta, IAM, and Jira."
  tags:
    - security
    - access-management
    - okta
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: access-rev
      port: 8080
      tools:
        - name: review
          description: "Review access at COSCO Shipping."
          inputParameters:
            - name: dept
              in: body
              type: string
              description: "Department."
          steps:
            - name: ent
              type: call
              call: "okta.get-users"
              with:
                dept: "{{dept}}"
            - name: compare
              type: call
              call: "iam.compare"
              with:
                data: "{{ent.data}}"
            - name: flag
              type: call
              call: "iam.flag"
              with:
                violations: "{{compare.violations}}"
            - name: fix
              type: call
              call: "jira.create-issue"
              with:
                project: "IAM"
                summary: "Violations in {{dept}}"
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://cosco.com.okta.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.okta_api_token"
      resources:
        - name: users
          path: "/users"
          operations:
            - name: get-users
              method: GET
    - type: http
      namespace: iam
      baseUri: "https://iam.cosco.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.iam_token"
      resources:
        - name: reviews
          path: "/compare"
          operations:
            - name: compare
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://cosco.com.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

Synchronizes vessel schedules with alliance partners and notifies coordination team.

naftiko: "0.5"
info:
  label: "Alliance Schedule Sync Pipeline"
  description: "Synchronizes vessel schedules with alliance partners and notifies coordination team."
  tags: [alliance, schedule-sync, vessel-sharing, microsoft-teams]
capability:
  exposes:
    - type: mcp
      namespace: alliance-ops
      port: 8080
      tools:
        - name: sync-alliance-schedule
          description: "Sync schedule changes with alliance partners and notify coordination."
          inputParameters:
            - name: service_loop
              in: body
              type: string
              description: "The service loop code."
            - name: partner_line
              in: body
              type: string
              description: "The alliance partner line."
          steps:
            - name: get-changes
              type: call
              call: "vessel-ops.get-schedule-changes"
              with: { service_loop: "{{service_loop}}" }
            - name: sync-partner
              type: call
              call: "alliance-api.sync-slots"
              with: { service_loop: "{{service_loop}}", partner: "{{partner_line}}", changes: "{{get-changes.changes}}" }
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with: { channel_id: "alliance-coordination", text: "Schedule synced: {{service_loop}} with {{partner_line}}. {{get-changes.change_count}} changes." }
  consumes:
    - type: http
      namespace: vessel-ops
      baseUri: "https://api.internal.cosco.com/vessel-ops/v1"
      authentication: { type: bearer, token: "$secrets.vessel_ops_token" }
      resources:
        - name: schedule-changes
          path: "/service-loops/{{service_loop}}/changes"
          inputParameters: [{ name: service_loop, in: path }]
          operations: [{ name: get-schedule-changes, method: GET }]
    - type: http
      namespace: alliance-api
      baseUri: "https://api.internal.cosco.com/alliance/v1"
      authentication: { type: bearer, token: "$secrets.alliance_token" }
      resources:
        - name: slots
          path: "/slot-sync"
          operations: [{ name: sync-slots, method: POST }]
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication: { type: bearer, token: "$secrets.msgraph_token" }
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters: [{ name: channel_id, in: path }]
          operations: [{ name: send-message, method: POST }]

Manages API deprecation at COSCO Shipping via consumer identification, notices, and tracking.

naftiko: "0.5"
info:
  label: "API Deprecation Pipeline"
  description: "Manages API deprecation at COSCO Shipping via consumer identification, notices, and tracking."
  tags:
    - api-management
    - communications
    - governance
capability:
  exposes:
    - type: mcp
      namespace: api-sunset
      port: 8080
      tools:
        - name: notify-sunset
          description: "Manage API sunset at COSCO Shipping."
          inputParameters:
            - name: api
              in: body
              type: string
              description: "API name."
            - name: date
              in: body
              type: string
              description: "Sunset date."
          steps:
            - name: consumers
              type: call
              call: "api-gw.consumers"
              with:
                api: "{{api}}"
            - name: notify
              type: call
              call: "email.batch"
              with:
                to: "{{consumers.emails}}"
                subject: "{{api}} sunset: {{date}}"
            - name: track
              type: call
              call: "analytics.usage"
              with:
                api: "{{api}}"
            - name: ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "API"
                summary: "Sunset {{api}} by {{date}}"
  consumes:
    - type: http
      namespace: api-gw
      baseUri: "https://api-gw.cosco.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.api_gw_token"
      resources:
        - name: consumers
          path: "/apis/{{api}}/consumers"
          inputParameters:
            - name: api
              in: path
          operations:
            - name: consumers
              method: GET
    - type: http
      namespace: email
      baseUri: "https://email.cosco.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.email_token"
      resources:
        - name: batch
          path: "/send-batch"
          operations:
            - name: batch
              method: POST
    - type: http
      namespace: analytics
      baseUri: "https://analytics.cosco.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: usage
          path: "/api-usage"
          operations:
            - name: usage
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://cosco.com.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

Checks build at COSCO Shipping.

naftiko: "0.5"
info:
  label: "Azure DevOps Build Check"
  description: "Checks build at COSCO Shipping."
  tags:
    - devops
    - azure-devops
    - ci-cd
capability:
  exposes:
    - type: mcp
      namespace: azdo-build
      port: 8080
      tools:
        - name: check-build
          description: "Check build at COSCO Shipping."
          inputParameters:
            - name: project
              in: body
              type: string
              description: "Project."
            - name: build_id
              in: body
              type: string
              description: "Build ID."
          call: "azdo.get-build"
          with:
            project: "{{project}}"
            build_id: "{{build_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: azdo
      baseUri: "https://dev.azure.com/cosco.com"
      authentication:
        type: bearer
        token: "$secrets.azdo_token"
      resources:
        - name: builds
          path: "/{{project}}/_apis/build/builds/{{build_id}}"
          inputParameters:
            - name: project
              in: path
            - name: build_id
              in: path
          operations:
            - name: get-build
              method: GET

Verifies backups at COSCO Shipping.

naftiko: "0.5"
info:
  label: "Backup Verification Pipeline"
  description: "Verifies backups at COSCO Shipping."
  tags:
    - database
    - backup
    - operations
capability:
  exposes:
    - type: mcp
      namespace: backup-verify
      port: 8080
      tools:
        - name: verify-backups
          description: "Verify backups at COSCO Shipping."
          inputParameters:
            - name: db
              in: body
              type: string
              description: "Database."
            - name: date
              in: body
              type: string
              description: "Backup date."
          steps:
            - name: status
              type: call
              call: "backup.get-status"
              with:
                db: "{{db}}"
                date: "{{date}}"
            - name: verify
              type: call
              call: "backup.verify"
              with:
                id: "{{status.backup_id}}"
            - name: log
              type: call
              call: "snowflake.query"
              with:
                query: "INSERT INTO backup_log VALUES ('{{db}}','{{date}}','{{verify.status}}')"
            - name: alert
              type: call
              call: "slack.post-message"
              with:
                channel: "#dba"
                text: "Backup {{db}}: {{verify.status}}"
  consumes:
    - type: http
      namespace: backup
      baseUri: "https://backup.cosco.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.backup_token"
      resources:
        - name: backups
          path: "/databases/{{db}}/status"
          inputParameters:
            - name: db
              in: path
          operations:
            - name: get-status
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://cosco.com.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: query
              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

Retrieves ballast water treatment system status for environmental compliance.

naftiko: "0.5"
info:
  label: "Ballast Water Treatment Status"
  description: "Retrieves ballast water treatment system status for environmental compliance."
  tags: [ballast-water, environmental, compliance]
capability:
  exposes:
    - type: mcp
      namespace: environmental-compliance
      port: 8080
      tools:
        - name: get-ballast-water-status
          description: "Look up BWT status. Returns system status, last treatment, and cert expiry."
          inputParameters:
            - name: vessel_code
              in: body
              type: string
              description: "The vessel code."
          call: "vessel-ops.get-bwt-status"
          with: { vessel_code: "{{vessel_code}}" }
          outputParameters:
            - name: system_status
              type: string
              mapping: "$.bwt.systemStatus"
            - name: cert_expiry
              type: string
              mapping: "$.bwt.certificateExpiry"
  consumes:
    - type: http
      namespace: vessel-ops
      baseUri: "https://api.internal.cosco.com/vessel-ops/v1"
      authentication: { type: bearer, token: "$secrets.vessel_ops_token" }
      resources:
        - name: bwt
          path: "/vessels/{{vessel_code}}/ballast-water"
          inputParameters: [{ name: vessel_code, in: path }]
          operations: [{ name: get-bwt-status, method: GET }]

When cargo is loaded, pulls the shipment details from the TOS, generates a bill of lading in the document system, uploads to SharePoint, and sends to the shipper via email.

naftiko: "0.5"
info:
  label: "Bill of Lading Generation Pipeline"
  description: "When cargo is loaded, pulls the shipment details from the TOS, generates a bill of lading in the document system, uploads to SharePoint, and sends to the shipper via email."
  tags:
    - documentation
    - bill-of-lading
    - tos
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: shipping-docs
      port: 8080
      tools:
        - name: generate-bill-of-lading
          description: "Given a shipment ID, generate the B/L, upload to SharePoint, and send to the shipper."
          inputParameters:
            - name: shipment_id
              in: body
              type: string
              description: "The shipment identifier."
            - name: shipper_email
              in: body
              type: string
              description: "The shipper's email address."
          steps:
            - name: get-shipment
              type: call
              call: "tos.get-shipment"
              with:
                shipment_id: "{{shipment_id}}"
            - name: generate-bl
              type: call
              call: "doc-service.generate-bl"
              with:
                shipment_id: "{{shipment_id}}"
                shipper: "{{get-shipment.shipper_name}}"
                consignee: "{{get-shipment.consignee_name}}"
                containers: "{{get-shipment.container_list}}"
            - name: upload-bl
              type: call
              call: "sharepoint.upload-file"
              with:
                site_id: "shipping_docs"
                file_path: "BillsOfLading/{{shipment_id}}_BL.pdf"
                content: "{{generate-bl.pdf_content}}"
            - name: send-bl
              type: call
              call: "email-service.send-document"
              with:
                to: "{{shipper_email}}"
                subject: "Bill of Lading - Shipment {{shipment_id}}"
                attachment_url: "{{upload-bl.url}}"
  consumes:
    - type: http
      namespace: tos
      baseUri: "https://api.internal.cosco.com/tos/v1"
      authentication:
        type: bearer
        token: "$secrets.tos_token"
      resources:
        - name: shipments
          path: "/shipments/{{shipment_id}}"
          inputParameters:
            - name: shipment_id
              in: path
          operations:
            - name: get-shipment
              method: GET
    - type: http
      namespace: doc-service
      baseUri: "https://api.internal.cosco.com/documents/v1"
      authentication:
        type: bearer
        token: "$secrets.doc_token"
      resources:
        - name: bills-of-lading
          path: "/bl/generate"
          operations:
            - name: generate-bl
              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:/{{file_path}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: file_path
              in: path
          operations:
            - name: upload-file
              method: PUT
    - type: http
      namespace: email-service
      baseUri: "https://api.internal.cosco.com/email/v1"
      authentication:
        type: bearer
        token: "$secrets.email_token"
      resources:
        - name: documents
          path: "/send-document"
          operations:
            - name: send-document
              method: POST

Analyzes budget variance at COSCO Shipping via Oracle, Workday, and Slack.

naftiko: "0.5"
info:
  label: "Budget Variance Pipeline"
  description: "Analyzes budget variance at COSCO Shipping via Oracle, Workday, and Slack."
  tags:
    - finance
    - budget
    - oracle
    - workday
capability:
  exposes:
    - type: mcp
      namespace: budget-var
      port: 8080
      tools:
        - name: analyze-variance
          description: "Check budget variance at COSCO Shipping."
          inputParameters:
            - name: cc
              in: body
              type: string
              description: "Cost center."
            - name: period
              in: body
              type: string
              description: "Period."
          steps:
            - name: actuals
              type: call
              call: "oracle.get-actuals"
              with:
                cc: "{{cc}}"
                period: "{{period}}"
            - name: budget
              type: call
              call: "workday.get-budget"
              with:
                cc: "{{cc}}"
            - name: compute
              type: call
              call: "analytics.variance"
              with:
                a: "{{actuals.total}}"
                b: "{{budget.total}}"
            - name: alert
              type: call
              call: "slack.post-message"
              with:
                channel: "#finance"
                text: "Variance {{cc}}: ${{compute.variance}}"
  consumes:
    - type: http
      namespace: oracle
      baseUri: "https://oracle.cosco.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_token"
      resources:
        - name: fin
          path: "/actuals"
          operations:
            - name: get-actuals
              method: GET
    - type: http
      namespace: workday
      baseUri: "https://wd5.cosco.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: budgets
          path: "/budgets"
          operations:
            - name: get-budget
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://analytics.cosco.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: var
          path: "/compute"
          operations:
            - name: variance
              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

Plans capacity at COSCO Shipping by collecting utilization and forecasting.

naftiko: "0.5"
info:
  label: "Capacity Planning Pipeline"
  description: "Plans capacity at COSCO Shipping by collecting utilization and forecasting."
  tags:
    - infrastructure
    - capacity-planning
    - forecasting
capability:
  exposes:
    - type: mcp
      namespace: capacity
      port: 8080
      tools:
        - name: plan-capacity
          description: "Plan capacity at COSCO Shipping."
          inputParameters:
            - name: resource
              in: body
              type: string
              description: "Resource type."
            - name: months
              in: body
              type: number
              description: "Forecast months."
          steps:
            - name: util
              type: call
              call: "monitoring.get-util"
              with:
                resource: "{{resource}}"
            - name: forecast
              type: call
              call: "analytics.forecast"
              with:
                current: "{{util.pct}}"
                months: "{{months}}"
            - name: procure
              type: call
              call: "servicenow.create-request"
              with:
                type: "capacity"
                resource: "{{resource}}"
            - name: dashboard
              type: call
              call: "power-bi.refresh"
              with:
                dataset: "capacity"
  consumes:
    - type: http
      namespace: monitoring
      baseUri: "https://monitoring.cosco.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.monitoring_token"
      resources:
        - name: util
          path: "/resources/{{resource}}/util"
          inputParameters:
            - name: resource
              in: path
          operations:
            - name: get-util
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://analytics.cosco.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: forecast
          path: "/demand"
          operations:
            - name: forecast
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://cosco.com.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST
    - type: http
      namespace: power-bi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.power_bi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset}}/refreshes"
          inputParameters:
            - name: dataset
              in: path
          operations:
            - name: refresh
              method: POST

When a cargo damage claim is filed, creates a case in the claims system, retrieves the original B/L from the document system, and notifies the P&I insurance team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Cargo Claim Processing Pipeline"
  description: "When a cargo damage claim is filed, creates a case in the claims system, retrieves the original B/L from the document system, and notifies the P&I insurance team via Microsoft Teams."
  tags:
    - claims
    - cargo-damage
    - insurance
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: claims-management
      port: 8080
      tools:
        - name: process-cargo-claim
          description: "Given claim details, create a case, retrieve the B/L, and notify the P&I team."
          inputParameters:
            - name: shipment_id
              in: body
              type: string
              description: "The shipment identifier."
            - name: claimant_name
              in: body
              type: string
              description: "The claimant's name."
            - name: damage_description
              in: body
              type: string
              description: "Description of the cargo damage."
            - name: claimed_amount
              in: body
              type: number
              description: "The claimed damage amount in USD."
          steps:
            - name: create-claim
              type: call
              call: "claims-system.create-claim"
              with:
                shipment_id: "{{shipment_id}}"
                claimant: "{{claimant_name}}"
                description: "{{damage_description}}"
                amount: "{{claimed_amount}}"
            - name: get-bl
              type: call
              call: "doc-service.get-bl"
              with:
                shipment_id: "{{shipment_id}}"
            - name: notify-pi-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "pi-claims"
                text: "New cargo claim: {{create-claim.claim_number}}. Shipment: {{shipment_id}}. Claimant: {{claimant_name}}. Amount: ${{claimed_amount}}. B/L: {{get-bl.bl_number}}."
  consumes:
    - type: http
      namespace: claims-system
      baseUri: "https://api.internal.cosco.com/claims/v1"
      authentication:
        type: bearer
        token: "$secrets.claims_token"
      resources:
        - name: claims
          path: "/claims"
          operations:
            - name: create-claim
              method: POST
    - type: http
      namespace: doc-service
      baseUri: "https://api.internal.cosco.com/documents/v1"
      authentication:
        type: bearer
        token: "$secrets.doc_token"
      resources:
        - name: bills-of-lading
          path: "/bl/{{shipment_id}}"
          inputParameters:
            - name: shipment_id
              in: path
          operations:
            - name: get-bl
              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/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Pulls booking data from the commercial system, runs revenue forecast models, and distributes the report to management via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Cargo Revenue Forecast Pipeline"
  description: "Pulls booking data from the commercial system, runs revenue forecast models, and distributes the report to management via Microsoft Teams."
  tags: [revenue, forecasting, commercial, microsoft-teams]
capability:
  exposes:
    - type: mcp
      namespace: revenue-forecasting
      port: 8080
      tools:
        - name: generate-revenue-forecast
          description: "Given a trade lane and period, pull bookings, forecast revenue, and notify management."
          inputParameters:
            - name: trade_lane
              in: body
              type: string
              description: "The trade lane code."
            - name: forecast_months
              in: body
              type: number
              description: "Months ahead to forecast."
          steps:
            - name: get-bookings
              type: call
              call: "commercial.get-booking-data"
              with: { trade_lane: "{{trade_lane}}", months: "{{forecast_months}}" }
            - name: run-forecast
              type: call
              call: "analytics.forecast-revenue"
              with: { trade_lane: "{{trade_lane}}", booking_data: "{{get-bookings.data}}" }
            - name: notify-mgmt
              type: call
              call: "msteams.send-message"
              with: { channel_id: "commercial-leadership", text: "Revenue forecast: {{trade_lane}} ({{forecast_months}}mo). Projected: ${{run-forecast.projected_revenue}}. YoY change: {{run-forecast.yoy_change}}%." }
  consumes:
    - type: http
      namespace: commercial
      baseUri: "https://api.internal.cosco.com/commercial/v1"
      authentication: { type: bearer, token: "$secrets.commercial_token" }
      resources:
        - name: bookings
          path: "/booking-data"
          operations: [{ name: get-booking-data, method: GET }]
    - type: http
      namespace: analytics
      baseUri: "https://api.internal.cosco.com/analytics/v1"
      authentication: { type: bearer, token: "$secrets.analytics_token" }
      resources:
        - name: forecasts
          path: "/revenue-forecast"
          operations: [{ name: forecast-revenue, method: POST }]
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication: { type: bearer, token: "$secrets.msgraph_token" }
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters: [{ name: channel_id, in: path }]
          operations: [{ name: send-message, method: POST }]

Monitors cert expiry at COSCO Shipping.

naftiko: "0.5"
info:
  label: "Certificate Expiry Pipeline"
  description: "Monitors cert expiry at COSCO Shipping."
  tags:
    - security
    - certificates
    - monitoring
capability:
  exposes:
    - type: mcp
      namespace: cert-monitor
      port: 8080
      tools:
        - name: check-certs
          description: "Monitor certs at COSCO Shipping."
          inputParameters:
            - name: domains
              in: body
              type: string
              description: "Domains to check."
          steps:
            - name: scan
              type: call
              call: "cert-scanner.scan"
              with:
                domains: "{{domains}}"
            - name: filter
              type: call
              call: "analytics.filter-expiring"
              with:
                certs: "{{scan.results}}"
            - name: ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "SEC"
                summary: "{{filter.count}} certs expiring"
            - name: alert
              type: call
              call: "slack.post-message"
              with:
                channel: "#security"
                text: "Cert alert: {{filter.count}} expiring"
  consumes:
    - type: http
      namespace: cert-scanner
      baseUri: "https://certs.cosco.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.cert_token"
      resources:
        - name: scans
          path: "/scan"
          operations:
            - name: scan
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://cosco.com.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Routes changes at COSCO Shipping through ServiceNow and CAB approval.

naftiko: "0.5"
info:
  label: "Change Management Pipeline"
  description: "Routes changes at COSCO Shipping through ServiceNow and CAB approval."
  tags:
    - change-management
    - servicenow
    - itil
capability:
  exposes:
    - type: mcp
      namespace: change-mgmt
      port: 8080
      tools:
        - name: process-change
          description: "Process changes at COSCO Shipping."
          inputParameters:
            - name: change_id
              in: body
              type: string
              description: "Change ID."
            - name: date
              in: body
              type: string
              description: "Date."
          steps:
            - name: get
              type: call
              call: "servicenow.get-change"
              with:
                id: "{{change_id}}"
            - name: conflicts
              type: call
              call: "servicenow.check-conflicts"
              with:
                date: "{{date}}"
            - name: submit
              type: call
              call: "servicenow.update"
              with:
                id: "{{change_id}}"
                state: "approval"
            - name: notify
              type: call
              call: "email.send"
              with:
                to: "cab@co.com"
                subject: "CAB: {{change_id}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://cosco.com.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: changes
          path: "/table/change_request/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-change
              method: GET
    - type: http
      namespace: email
      baseUri: "https://email.cosco.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.email_token"
      resources:
        - name: messages
          path: "/send"
          operations:
            - name: send
              method: POST

Optimizes cloud costs at COSCO Shipping via Azure, FinOps, Jira, and Power BI.

naftiko: "0.5"
info:
  label: "Cloud Cost Optimization Pipeline"
  description: "Optimizes cloud costs at COSCO Shipping via Azure, FinOps, Jira, and Power BI."
  tags:
    - cloud
    - cost-management
    - finops
capability:
  exposes:
    - type: mcp
      namespace: cloud-opt
      port: 8080
      tools:
        - name: optimize
          description: "Optimize cloud costs at COSCO Shipping."
          inputParameters:
            - name: provider
              in: body
              type: string
              description: "Provider."
            - name: range
              in: body
              type: string
              description: "Range."
          steps:
            - name: spend
              type: call
              call: "cloud.get-costs"
              with:
                provider: "{{provider}}"
                range: "{{range}}"
            - name: savings
              type: call
              call: "finops.analyze"
              with:
                data: "{{spend.data}}"
            - name: action
              type: call
              call: "jira.create-issue"
              with:
                project: "FINOPS"
                summary: "Save ${{savings.potential}}"
            - name: report
              type: call
              call: "power-bi.refresh"
              with:
                dataset: "cloud"
  consumes:
    - type: http
      namespace: cloud
      baseUri: "https://management.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azure_token"
      resources:
        - name: costs
          path: "/providers/Microsoft.CostManagement/query"
          operations:
            - name: get-costs
              method: POST
    - type: http
      namespace: finops
      baseUri: "https://finops.cosco.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.finops_token"
      resources:
        - name: analysis
          path: "/savings"
          operations:
            - name: analyze
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://cosco.com.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: power-bi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.power_bi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset}}/refreshes"
          inputParameters:
            - name: dataset
              in: path
          operations:
            - name: refresh
              method: POST

Searches Confluence at COSCO Shipping.

naftiko: "0.5"
info:
  label: "Confluence Article Search"
  description: "Searches Confluence at COSCO Shipping."
  tags:
    - knowledge-management
    - confluence
    - documentation
capability:
  exposes:
    - type: mcp
      namespace: confluence-search
      port: 8080
      tools:
        - name: search-articles
          description: "Search Confluence at COSCO Shipping."
          inputParameters:
            - name: query
              in: body
              type: string
              description: "Query."
          call: "confluence.search"
          with:
            query: "{{query}}"
          outputParameters:
            - name: title
              type: string
              mapping: "$.results[0].title"
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://cosco.com.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: content
          path: "/content/search"
          operations:
            - name: search
              method: GET

When a new container booking is created in the TOS, validates the vessel schedule, reserves container slots, creates a booking confirmation in SAP, and notifies the customer via email.

naftiko: "0.5"
info:
  label: "Container Booking Pipeline"
  description: "When a new container booking is created in the TOS, validates the vessel schedule, reserves container slots, creates a booking confirmation in SAP, and notifies the customer via email."
  tags:
    - booking
    - container-shipping
    - sap
    - tos
capability:
  exposes:
    - type: mcp
      namespace: container-booking
      port: 8080
      tools:
        - name: process-container-booking
          description: "Given booking details, validate vessel schedule, reserve slots, create SAP order, and send confirmation."
          inputParameters:
            - name: vessel_code
              in: body
              type: string
              description: "The vessel voyage code."
            - name: origin_port
              in: body
              type: string
              description: "The origin port UN/LOCODE."
            - name: destination_port
              in: body
              type: string
              description: "The destination port UN/LOCODE."
            - name: container_count
              in: body
              type: number
              description: "Number of containers to book."
            - name: container_type
              in: body
              type: string
              description: "Container type (20GP, 40GP, 40HC, 20RF)."
            - name: customer_id
              in: body
              type: string
              description: "The customer account identifier."
          steps:
            - name: check-vessel-schedule
              type: call
              call: "vessel-ops.get-voyage"
              with:
                vessel_code: "{{vessel_code}}"
                origin: "{{origin_port}}"
                destination: "{{destination_port}}"
            - name: reserve-slots
              type: call
              call: "tos.reserve-container-slots"
              with:
                voyage_id: "{{check-vessel-schedule.voyage_id}}"
                container_count: "{{container_count}}"
                container_type: "{{container_type}}"
            - name: create-sap-order
              type: call
              call: "sap.create-sales-order"
              with:
                customer_id: "{{customer_id}}"
                voyage_id: "{{check-vessel-schedule.voyage_id}}"
                container_count: "{{container_count}}"
                container_type: "{{container_type}}"
            - name: send-confirmation
              type: call
              call: "email-service.send-booking-confirmation"
              with:
                customer_id: "{{customer_id}}"
                booking_number: "{{create-sap-order.order_number}}"
                vessel: "{{check-vessel-schedule.vessel_name}}"
                etd: "{{check-vessel-schedule.etd}}"
                eta: "{{check-vessel-schedule.eta}}"
  consumes:
    - type: http
      namespace: vessel-ops
      baseUri: "https://api.internal.cosco.com/vessel-ops/v1"
      authentication:
        type: bearer
        token: "$secrets.vessel_ops_token"
      resources:
        - name: voyages
          path: "/voyages"
          operations:
            - name: get-voyage
              method: GET
    - type: http
      namespace: tos
      baseUri: "https://api.internal.cosco.com/tos/v1"
      authentication:
        type: bearer
        token: "$secrets.tos_token"
      resources:
        - name: slots
          path: "/container-slots/reserve"
          operations:
            - name: reserve-container-slots
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://cosco-s4.sap.com/sap/opu/odata/sap/API_SALES_ORDER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: sales-orders
          path: "/A_SalesOrder"
          operations:
            - name: create-sales-order
              method: POST
    - type: http
      namespace: email-service
      baseUri: "https://api.internal.cosco.com/email/v1"
      authentication:
        type: bearer
        token: "$secrets.email_token"
      resources:
        - name: confirmations
          path: "/booking-confirmations"
          operations:
            - name: send-booking-confirmation
              method: POST

When a damaged container is returned, creates a repair estimate, approves if eligible, and updates availability.

naftiko: "0.5"
info:
  label: "Container Depot Repair Pipeline"
  description: "When a damaged container is returned, creates a repair estimate, approves if eligible, and updates availability."
  tags: [container-repair, depot, inventory]
capability:
  exposes:
    - type: mcp
      namespace: depot-ops
      port: 8080
      tools:
        - name: process-container-repair
          description: "Create repair estimate, approve, and update inventory for damaged container."
          inputParameters:
            - name: container_number
              in: body
              type: string
              description: "The container number."
            - name: damage_code
              in: body
              type: string
              description: "The IICL damage code."
          steps:
            - name: create-estimate
              type: call
              call: "depot-system.create-repair-estimate"
              with: { container_number: "{{container_number}}", damage_code: "{{damage_code}}" }
            - name: approve-repair
              type: call
              call: "depot-system.approve-repair"
              with: { estimate_id: "{{create-estimate.estimate_id}}" }
            - name: update-inventory
              type: call
              call: "tos.update-container-status"
              with: { container_number: "{{container_number}}", status: "under_repair" }
  consumes:
    - type: http
      namespace: depot-system
      baseUri: "https://api.internal.cosco.com/depot/v1"
      authentication: { type: bearer, token: "$secrets.depot_token" }
      resources:
        - name: estimates
          path: "/repair-estimates"
          operations: [{ name: create-repair-estimate, method: POST }]
        - name: approvals
          path: "/repair-approvals"
          operations: [{ name: approve-repair, method: POST }]
    - type: http
      namespace: tos
      baseUri: "https://api.internal.cosco.com/tos/v1"
      authentication: { type: bearer, token: "$secrets.tos_token" }
      resources:
        - name: containers
          path: "/containers/{{container_number}}/status"
          inputParameters: [{ name: container_number, in: path }]
          operations: [{ name: update-container-status, method: PATCH }]

Retrieves container lease agreement details from the leasing system, returning lessor, lease rate, term, and containers on hire.

naftiko: "0.5"
info:
  label: "Container Lease Agreement Lookup"
  description: "Retrieves container lease agreement details from the leasing system, returning lessor, lease rate, term, and containers on hire."
  tags: [container-leasing, finance, fleet]
capability:
  exposes:
    - type: mcp
      namespace: container-leasing
      port: 8080
      tools:
        - name: get-lease-agreement
          description: "Look up container lease agreement. Returns lessor, rate, term, and units on hire."
          inputParameters:
            - name: agreement_id
              in: body
              type: string
              description: "The lease agreement ID."
          call: "leasing.get-agreement"
          with: { agreement_id: "{{agreement_id}}" }
          outputParameters:
            - name: lessor
              type: string
              mapping: "$.agreement.lessorName"
            - name: daily_rate
              type: number
              mapping: "$.agreement.dailyRate"
            - name: units_on_hire
              type: number
              mapping: "$.agreement.unitsOnHire"
  consumes:
    - type: http
      namespace: leasing
      baseUri: "https://api.internal.cosco.com/leasing/v1"
      authentication: { type: bearer, token: "$secrets.leasing_token" }
      resources:
        - name: agreements
          path: "/agreements/{{agreement_id}}"
          inputParameters: [{ name: agreement_id, in: path }]
          operations: [{ name: get-agreement, method: GET }]

Creates repositioning orders for empty containers between surplus and deficit ports.

naftiko: "0.5"
info:
  label: "Container Repositioning Pipeline"
  description: "Creates repositioning orders for empty containers between surplus and deficit ports."
  tags: [equipment-management, repositioning, tos, microsoft-teams]
capability:
  exposes:
    - type: mcp
      namespace: equipment-repositioning
      port: 8080
      tools:
        - name: reposition-empties
          description: "Create repositioning orders and notify equipment team."
          inputParameters:
            - name: surplus_port
              in: body
              type: string
              description: "Port with surplus empties."
            - name: deficit_port
              in: body
              type: string
              description: "Port needing empties."
            - name: quantity
              in: body
              type: number
              description: "Number of containers."
          steps:
            - name: create-repo-order
              type: call
              call: "tos.create-repositioning-order"
              with: { from_port: "{{surplus_port}}", to_port: "{{deficit_port}}", quantity: "{{quantity}}" }
            - name: notify-equipment
              type: call
              call: "msteams.send-message"
              with: { channel_id: "equipment-control", text: "Repositioning: {{quantity}} containers from {{surplus_port}} to {{deficit_port}}. Order: {{create-repo-order.order_id}}." }
  consumes:
    - type: http
      namespace: tos
      baseUri: "https://api.internal.cosco.com/tos/v1"
      authentication: { type: bearer, token: "$secrets.tos_token" }
      resources:
        - name: repositioning
          path: "/repositioning-orders"
          operations: [{ name: create-repositioning-order, method: POST }]
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication: { type: bearer, token: "$secrets.msgraph_token" }
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters: [{ name: channel_id, in: path }]
          operations: [{ name: send-message, method: POST }]

Retrieves the current tracking status of a container by number, returning location, vessel, status event, and timestamp.

naftiko: "0.5"
info:
  label: "Container Tracking Status"
  description: "Retrieves the current tracking status of a container by number, returning location, vessel, status event, and timestamp."
  tags:
    - container-tracking
    - logistics
    - visibility
capability:
  exposes:
    - type: mcp
      namespace: container-visibility
      port: 8080
      tools:
        - name: get-container-status
          description: "Track a container by number. Returns location, vessel, status event, and timestamp."
          inputParameters:
            - name: container_number
              in: body
              type: string
              description: "The container number (e.g., CSLU1234567)."
          call: "tracking.get-container"
          with:
            container_number: "{{container_number}}"
          outputParameters:
            - name: location
              type: string
              mapping: "$.tracking.currentLocation"
            - name: vessel
              type: string
              mapping: "$.tracking.vesselName"
            - name: status_event
              type: string
              mapping: "$.tracking.latestEvent"
            - name: timestamp
              type: string
              mapping: "$.tracking.eventTimestamp"
  consumes:
    - type: http
      namespace: tracking
      baseUri: "https://api.internal.cosco.com/tracking/v1"
      authentication:
        type: bearer
        token: "$secrets.tracking_token"
      resources:
        - name: containers
          path: "/containers/{{container_number}}"
          inputParameters:
            - name: container_number
              in: path
          operations:
            - name: get-container
              method: GET

Retrieves weighbridge measurement for a container at the terminal gate.

naftiko: "0.5"
info:
  label: "Container Weighbridge Reading"
  description: "Retrieves weighbridge measurement for a container at the terminal gate."
  tags: [terminal, weighbridge, gate-operations]
capability:
  exposes:
    - type: mcp
      namespace: gate-ops
      port: 8080
      tools:
        - name: get-weighbridge-reading
          description: "Look up weighbridge reading. Returns gross, tare, and cargo weight."
          inputParameters:
            - name: container_number
              in: body
              type: string
              description: "The container number."
          call: "terminal.get-weighbridge"
          with: { container_number: "{{container_number}}" }
          outputParameters:
            - name: gross_weight_kg
              type: number
              mapping: "$.weighbridge.grossWeight"
            - name: cargo_weight_kg
              type: number
              mapping: "$.weighbridge.cargoWeight"
  consumes:
    - type: http
      namespace: terminal
      baseUri: "https://api.internal.cosco.com/terminal/v1"
      authentication: { type: bearer, token: "$secrets.terminal_token" }
      resources:
        - name: weighbridge
          path: "/weighbridge/{{container_number}}"
          inputParameters: [{ name: container_number, in: path }]
          operations: [{ name: get-weighbridge, method: GET }]

Retrieves verified gross mass (VGM) data for a container as required by SOLAS.

naftiko: "0.5"
info:
  label: "Container Weight Verification"
  description: "Retrieves verified gross mass (VGM) data for a container as required by SOLAS."
  tags: [solas, vgm, compliance, safety]
capability:
  exposes:
    - type: mcp
      namespace: vgm-compliance
      port: 8080
      tools:
        - name: get-container-vgm
          description: "Look up VGM data for a container. Returns verified weight and method."
          inputParameters:
            - name: container_number
              in: body
              type: string
              description: "The container number."
          call: "vgm-service.get-vgm"
          with: { container_number: "{{container_number}}" }
          outputParameters:
            - name: vgm_kg
              type: number
              mapping: "$.vgm.verifiedGrossMass"
            - name: method
              type: string
              mapping: "$.vgm.verificationMethod"
  consumes:
    - type: http
      namespace: vgm-service
      baseUri: "https://api.internal.cosco.com/vgm/v1"
      authentication: { type: bearer, token: "$secrets.vgm_token" }
      resources:
        - name: vgm
          path: "/containers/{{container_number}}/vgm"
          inputParameters: [{ name: container_number, in: path }]
          operations: [{ name: get-vgm, method: GET }]

Retrieves the current container yard inventory for a terminal, returning total containers, available empties by type, and yard utilization percentage.

naftiko: "0.5"
info:
  label: "Container Yard Inventory Lookup"
  description: "Retrieves the current container yard inventory for a terminal, returning total containers, available empties by type, and yard utilization percentage."
  tags:
    - terminal
    - container-yard
    - inventory
capability:
  exposes:
    - type: mcp
      namespace: yard-operations
      port: 8080
      tools:
        - name: get-yard-inventory
          description: "Look up container yard inventory. Returns total containers, empties by type, and utilization."
          inputParameters:
            - name: terminal_code
              in: body
              type: string
              description: "The terminal code."
          call: "tos.get-yard-inventory"
          with:
            terminal_code: "{{terminal_code}}"
          outputParameters:
            - name: total_containers
              type: number
              mapping: "$.yard.totalContainers"
            - name: empty_20gp
              type: number
              mapping: "$.yard.empties.20GP"
            - name: empty_40gp
              type: number
              mapping: "$.yard.empties.40GP"
            - name: utilization_pct
              type: number
              mapping: "$.yard.utilizationPercentage"
  consumes:
    - type: http
      namespace: tos
      baseUri: "https://api.internal.cosco.com/tos/v1"
      authentication:
        type: bearer
        token: "$secrets.tos_token"
      resources:
        - name: yard
          path: "/terminals/{{terminal_code}}/yard/inventory"
          inputParameters:
            - name: terminal_code
              in: path
          operations:
            - name: get-yard-inventory
              method: GET

Tracks contract renewals at COSCO Shipping via contracts system, email, Jira, and Salesforce.

naftiko: "0.5"
info:
  label: "Contract Renewal Pipeline"
  description: "Tracks contract renewals at COSCO Shipping via contracts system, email, Jira, and Salesforce."
  tags:
    - procurement
    - contracts
    - salesforce
    - jira
capability:
  exposes:
    - type: mcp
      namespace: contract-renew
      port: 8080
      tools:
        - name: track
          description: "Track renewals at COSCO Shipping."
          inputParameters:
            - name: contract_id
              in: body
              type: string
              description: "Contract ID."
            - name: owner
              in: body
              type: string
              description: "Owner email."
          steps:
            - name: get
              type: call
              call: "contracts.get"
              with:
                id: "{{contract_id}}"
            - name: remind
              type: call
              call: "email.send"
              with:
                to: "{{owner}}"
                subject: "Renewal: {{contract_id}}"
            - name: task
              type: call
              call: "jira.create-issue"
              with:
                project: "PROC"
                summary: "Renew {{contract_id}}"
            - name: crm
              type: call
              call: "salesforce.update"
              with:
                id: "{{contract_id}}"
                stage: "Renewal"
  consumes:
    - type: http
      namespace: contracts
      baseUri: "https://contracts.cosco.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.contracts_token"
      resources:
        - name: contracts
          path: "/contracts/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get
              method: GET
    - type: http
      namespace: email
      baseUri: "https://email.cosco.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.email_token"
      resources:
        - name: messages
          path: "/send"
          operations:
            - name: send
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://cosco.com.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://cosco.com.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opps
          path: "/sobjects/Opportunity"
          operations:
            - name: update
              method: PATCH

Reallocates costs at COSCO Shipping.

naftiko: "0.5"
info:
  label: "Cost Reallocation Pipeline"
  description: "Reallocates costs at COSCO Shipping."
  tags:
    - finance
    - cost-allocation
    - oracle
capability:
  exposes:
    - type: mcp
      namespace: cost-realloc
      port: 8080
      tools:
        - name: reallocate
          description: "Reallocate costs at COSCO Shipping."
          inputParameters:
            - name: source
              in: body
              type: string
              description: "Source CC."
            - name: target
              in: body
              type: string
              description: "Target CC."
            - name: amount
              in: body
              type: number
              description: "Amount."
          steps:
            - name: current
              type: call
              call: "oracle.get-alloc"
              with:
                cc: "{{source}}"
            - name: compute
              type: call
              call: "analytics.realloc"
              with:
                source: "{{source}}"
                target: "{{target}}"
                amount: "{{amount}}"
            - name: post
              type: call
              call: "oracle.post-journal"
              with:
                entries: "{{compute.entries}}"
            - name: notify
              type: call
              call: "slack.post-message"
              with:
                channel: "#finance"
                text: "Reallocated ${{amount}} from {{source}} to {{target}}"
  consumes:
    - type: http
      namespace: oracle
      baseUri: "https://oracle.cosco.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_token"
      resources:
        - name: allocations
          path: "/cost-centers/{{cc}}/allocations"
          inputParameters:
            - name: cc
              in: path
          operations:
            - name: get-alloc
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://analytics.cosco.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: realloc
          path: "/compute"
          operations:
            - name: realloc
              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

Checks crew certification expiry dates from the crew management system and creates renewal tasks in ServiceNow for any certificates expiring within 90 days.

naftiko: "0.5"
info:
  label: "Crew Management Certificate Expiry Alert"
  description: "Checks crew certification expiry dates from the crew management system and creates renewal tasks in ServiceNow for any certificates expiring within 90 days."
  tags:
    - crew-management
    - certification
    - servicenow
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: crew-compliance
      port: 8080
      tools:
        - name: check-crew-certificates
          description: "Given a vessel, check crew certificates for upcoming expiry and create renewal tasks."
          inputParameters:
            - name: vessel_code
              in: body
              type: string
              description: "The vessel code."
            - name: days_ahead
              in: body
              type: number
              description: "Number of days ahead to check for expiry."
          steps:
            - name: get-crew-certs
              type: call
              call: "crew-mgmt.get-expiring-certificates"
              with:
                vessel_code: "{{vessel_code}}"
                days_ahead: "{{days_ahead}}"
            - name: create-tasks
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "Crew certificate renewal: {{get-crew-certs.expiring_count}} certificates on {{vessel_code}}"
                category: "crew_compliance"
                description: "Expiring certificates: {{get-crew-certs.expiring_details}}. Vessel: {{vessel_code}}. Review and schedule renewals."
  consumes:
    - type: http
      namespace: crew-mgmt
      baseUri: "https://api.internal.cosco.com/crew/v1"
      authentication:
        type: bearer
        token: "$secrets.crew_mgmt_token"
      resources:
        - name: certificates
          path: "/vessels/{{vessel_code}}/certificates/expiring"
          inputParameters:
            - name: vessel_code
              in: path
          operations:
            - name: get-expiring-certificates
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://cosco.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/sc_task"
          operations:
            - name: create-task
              method: POST

Retrieves crew medical certificate status, returning certificate type, expiry date, and renewal status.

naftiko: "0.5"
info:
  label: "Crew Medical Certificate Tracking"
  description: "Retrieves crew medical certificate status, returning certificate type, expiry date, and renewal status."
  tags: [crew-management, medical, certification]
capability:
  exposes:
    - type: mcp
      namespace: crew-medical
      port: 8080
      tools:
        - name: get-medical-cert-status
          description: "Look up crew medical certificate status. Returns type, expiry, and renewal status."
          inputParameters:
            - name: seafarer_id
              in: body
              type: string
              description: "The seafarer ID."
          call: "crew-mgmt.get-medical-cert"
          with: { seafarer_id: "{{seafarer_id}}" }
          outputParameters:
            - name: cert_type
              type: string
              mapping: "$.certificate.type"
            - name: expiry_date
              type: string
              mapping: "$.certificate.expiryDate"
            - name: renewal_status
              type: string
              mapping: "$.certificate.renewalStatus"
  consumes:
    - type: http
      namespace: crew-mgmt
      baseUri: "https://api.internal.cosco.com/crew/v1"
      authentication: { type: bearer, token: "$secrets.crew_mgmt_token" }
      resources:
        - name: medical
          path: "/seafarers/{{seafarer_id}}/medical"
          inputParameters: [{ name: seafarer_id, in: path }]
          operations: [{ name: get-medical-cert, method: GET }]

Retrieves customer credit status including credit limit, balance, and DSO.

naftiko: "0.5"
info:
  label: "Customer Credit Check"
  description: "Retrieves customer credit status including credit limit, balance, and DSO."
  tags: [credit-management, finance, customer]
capability:
  exposes:
    - type: mcp
      namespace: credit-ops
      port: 8080
      tools:
        - name: get-customer-credit
          description: "Look up customer credit. Returns credit limit, balance, and DSO."
          inputParameters:
            - name: customer_id
              in: body
              type: string
              description: "The customer account ID."
          call: "credit-mgmt.get-credit-status"
          with: { customer_id: "{{customer_id}}" }
          outputParameters:
            - name: credit_limit
              type: number
              mapping: "$.credit.creditLimit"
            - name: outstanding_balance
              type: number
              mapping: "$.credit.outstandingBalance"
  consumes:
    - type: http
      namespace: credit-mgmt
      baseUri: "https://api.internal.cosco.com/credit/v1"
      authentication: { type: bearer, token: "$secrets.credit_token" }
      resources:
        - name: credit
          path: "/customers/{{customer_id}}/credit"
          inputParameters: [{ name: customer_id, in: path }]
          operations: [{ name: get-credit-status, method: GET }]

Pulls shipment cargo manifest from the TOS, submits customs declaration to the port authority, and updates the booking status in SAP.

naftiko: "0.5"
info:
  label: "Customs Declaration Pipeline"
  description: "Pulls shipment cargo manifest from the TOS, submits customs declaration to the port authority, and updates the booking status in SAP."
  tags:
    - customs
    - compliance
    - tos
    - sap
capability:
  exposes:
    - type: mcp
      namespace: customs-ops
      port: 8080
      tools:
        - name: submit-customs-declaration
          description: "Given a shipment ID, pull the manifest, submit customs declaration, and update SAP booking status."
          inputParameters:
            - name: shipment_id
              in: body
              type: string
              description: "The shipment identifier."
            - name: port_code
              in: body
              type: string
              description: "The customs declaration port code."
          steps:
            - name: get-manifest
              type: call
              call: "tos.get-cargo-manifest"
              with:
                shipment_id: "{{shipment_id}}"
            - name: submit-declaration
              type: call
              call: "customs.submit-declaration"
              with:
                port_code: "{{port_code}}"
                manifest: "{{get-manifest.cargo_details}}"
                shipment_id: "{{shipment_id}}"
            - name: update-booking
              type: call
              call: "sap.update-order-status"
              with:
                order_number: "{{get-manifest.order_number}}"
                customs_status: "{{submit-declaration.status}}"
                declaration_number: "{{submit-declaration.declaration_number}}"
  consumes:
    - type: http
      namespace: tos
      baseUri: "https://api.internal.cosco.com/tos/v1"
      authentication:
        type: bearer
        token: "$secrets.tos_token"
      resources:
        - name: manifests
          path: "/shipments/{{shipment_id}}/manifest"
          inputParameters:
            - name: shipment_id
              in: path
          operations:
            - name: get-cargo-manifest
              method: GET
    - type: http
      namespace: customs
      baseUri: "https://api.internal.cosco.com/customs/v1"
      authentication:
        type: bearer
        token: "$secrets.customs_token"
      resources:
        - name: declarations
          path: "/declarations"
          operations:
            - name: submit-declaration
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://cosco-s4.sap.com/sap/opu/odata/sap/API_SALES_ORDER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: orders
          path: "/A_SalesOrder('{{order_number}}')"
          inputParameters:
            - name: order_number
              in: path
          operations:
            - name: update-order-status
              method: PATCH

When dangerous goods are booked, validates IMDG classification, generates the DG declaration document, and files the notification with port authorities.

naftiko: "0.5"
info:
  label: "Dangerous Goods Declaration Pipeline"
  description: "When dangerous goods are booked, validates IMDG classification, generates the DG declaration document, and files the notification with port authorities."
  tags: [dangerous-goods, imdg, compliance, documentation]
capability:
  exposes:
    - type: mcp
      namespace: dg-compliance
      port: 8080
      tools:
        - name: process-dg-declaration
          description: "Validate IMDG class, generate declaration, and notify port authorities."
          inputParameters:
            - name: booking_number
              in: body
              type: string
              description: "The booking reference."
            - name: un_number
              in: body
              type: string
              description: "The UN number."
          steps:
            - name: validate-dg
              type: call
              call: "dg-service.validate-classification"
              with: { un_number: "{{un_number}}" }
            - name: generate-declaration
              type: call
              call: "doc-service.generate-dg-declaration"
              with: { booking_number: "{{booking_number}}", stowage: "{{validate-dg.stowage_category}}" }
            - name: file-notification
              type: call
              call: "port-authority.file-dg-notification"
              with: { booking_number: "{{booking_number}}", declaration_id: "{{generate-declaration.declaration_id}}" }
  consumes:
    - type: http
      namespace: dg-service
      baseUri: "https://api.internal.cosco.com/dangerous-goods/v1"
      authentication: { type: bearer, token: "$secrets.dg_token" }
      resources:
        - name: validation
          path: "/validate"
          operations: [{ name: validate-classification, method: POST }]
    - type: http
      namespace: doc-service
      baseUri: "https://api.internal.cosco.com/documents/v1"
      authentication: { type: bearer, token: "$secrets.doc_token" }
      resources:
        - name: dg-declarations
          path: "/dg-declarations"
          operations: [{ name: generate-dg-declaration, method: POST }]
    - type: http
      namespace: port-authority
      baseUri: "https://api.internal.cosco.com/port-authority/v1"
      authentication: { type: bearer, token: "$secrets.port_auth_token" }
      resources:
        - name: notifications
          path: "/dg-notifications"
          operations: [{ name: file-dg-notification, method: POST }]

Monitors data pipelines at COSCO Shipping via Databricks, Snowflake, Slack, and ServiceNow.

naftiko: "0.5"
info:
  label: "Data Pipeline Monitor Pipeline"
  description: "Monitors data pipelines at COSCO Shipping via Databricks, Snowflake, Slack, and ServiceNow."
  tags:
    - data-engineering
    - databricks
    - monitoring
    - slack
capability:
  exposes:
    - type: mcp
      namespace: pipeline-mon
      port: 8080
      tools:
        - name: monitor
          description: "Monitor pipelines at COSCO Shipping."
          inputParameters:
            - name: pipeline_id
              in: body
              type: string
              description: "Pipeline ID."
          steps:
            - name: status
              type: call
              call: "databricks.get-run"
              with:
                id: "{{pipeline_id}}"
            - name: quality
              type: call
              call: "snowflake.query"
              with:
                query: "SELECT COUNT(*) FROM out WHERE p='{{pipeline_id}}'"
            - name: alert
              type: call
              call: "slack.post-message"
              with:
                channel: "#data"
                text: "Pipeline {{pipeline_id}}: {{status.state}}"
            - name: incident
              type: call
              call: "servicenow.create-incident"
              with:
                desc: "Pipeline {{pipeline_id}} issue"
  consumes:
    - type: http
      namespace: databricks
      baseUri: "https://cosco.com.cloud.databricks.com/api/2.1"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: jobs
          path: "/jobs/runs/get"
          operations:
            - name: get-run
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://cosco.com.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: query
              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
    - type: http
      namespace: servicenow
      baseUri: "https://cosco.com.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST

Checks Datadog monitor at COSCO Shipping.

naftiko: "0.5"
info:
  label: "Datadog Monitor Check"
  description: "Checks Datadog monitor at COSCO Shipping."
  tags:
    - monitoring
    - datadog
    - observability
capability:
  exposes:
    - type: mcp
      namespace: dd-monitor
      port: 8080
      tools:
        - name: check-monitor
          description: "Check monitor at COSCO Shipping."
          inputParameters:
            - name: monitor_id
              in: body
              type: string
              description: "Monitor ID."
          call: "datadog.get-monitor"
          with:
            monitor_id: "{{monitor_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.overall_state"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: monitors
          path: "/monitor/{{monitor_id}}"
          inputParameters:
            - name: monitor_id
              in: path
          operations:
            - name: get-monitor
              method: GET

When a container exceeds free time, calculates demurrage and detention charges, creates an invoice in SAP, and notifies the customer via email.

naftiko: "0.5"
info:
  label: "Demurrage and Detention Calculation Pipeline"
  description: "When a container exceeds free time, calculates demurrage and detention charges, creates an invoice in SAP, and notifies the customer via email."
  tags:
    - demurrage
    - detention
    - billing
    - sap
capability:
  exposes:
    - type: mcp
      namespace: demurrage-billing
      port: 8080
      tools:
        - name: calculate-demurrage
          description: "Given a container and return date, calculate D&D charges, create SAP invoice, and notify customer."
          inputParameters:
            - name: container_number
              in: body
              type: string
              description: "The container number."
            - name: booking_number
              in: body
              type: string
              description: "The booking reference number."
            - name: return_date
              in: body
              type: string
              description: "The actual container return date."
          steps:
            - name: get-booking
              type: call
              call: "booking-service.get-booking"
              with:
                booking_number: "{{booking_number}}"
            - name: calculate-charges
              type: call
              call: "billing-engine.calculate-dd"
              with:
                container_number: "{{container_number}}"
                free_time_end: "{{get-booking.free_time_end}}"
                return_date: "{{return_date}}"
                tariff_id: "{{get-booking.tariff_id}}"
            - name: create-invoice
              type: call
              call: "sap.create-invoice"
              with:
                customer_id: "{{get-booking.customer_id}}"
                amount: "{{calculate-charges.total_charges}}"
                currency: "{{calculate-charges.currency}}"
                description: "D&D charges for container {{container_number}}"
            - name: notify-customer
              type: call
              call: "email-service.send-invoice"
              with:
                customer_id: "{{get-booking.customer_id}}"
                invoice_number: "{{create-invoice.invoice_number}}"
                amount: "{{calculate-charges.total_charges}}"
  consumes:
    - type: http
      namespace: booking-service
      baseUri: "https://api.internal.cosco.com/bookings/v1"
      authentication:
        type: bearer
        token: "$secrets.booking_token"
      resources:
        - name: bookings
          path: "/bookings/{{booking_number}}"
          inputParameters:
            - name: booking_number
              in: path
          operations:
            - name: get-booking
              method: GET
    - type: http
      namespace: billing-engine
      baseUri: "https://api.internal.cosco.com/billing/v1"
      authentication:
        type: bearer
        token: "$secrets.billing_token"
      resources:
        - name: dd-calculation
          path: "/demurrage-detention/calculate"
          operations:
            - name: calculate-dd
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://cosco-s4.sap.com/sap/opu/odata/sap/API_BILLING_DOCUMENT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: invoices
          path: "/A_BillingDocument"
          operations:
            - name: create-invoice
              method: POST
    - type: http
      namespace: email-service
      baseUri: "https://api.internal.cosco.com/email/v1"
      authentication:
        type: bearer
        token: "$secrets.email_token"
      resources:
        - name: invoices
          path: "/send-invoice"
          operations:
            - name: send-invoice
              method: POST

Tests disaster recovery at COSCO Shipping via failover, health checks, and reporting.

naftiko: "0.5"
info:
  label: "DR Test Pipeline"
  description: "Tests disaster recovery at COSCO Shipping via failover, health checks, and reporting."
  tags:
    - disaster-recovery
    - business-continuity
    - testing
capability:
  exposes:
    - type: mcp
      namespace: dr-test
      port: 8080
      tools:
        - name: test-dr
          description: "Test DR at COSCO Shipping."
          inputParameters:
            - name: plan_id
              in: body
              type: string
              description: "Plan ID."
            - name: type
              in: body
              type: string
              description: "Test type."
          steps:
            - name: failover
              type: call
              call: "dr.failover"
              with:
                plan: "{{plan_id}}"
                type: "{{type}}"
            - name: validate
              type: call
              call: "monitoring.check"
              with:
                scope: "critical"
            - name: measure
              type: call
              call: "dr.metrics"
              with:
                id: "{{failover.id}}"
            - name: report
              type: call
              call: "confluence.create-page"
              with:
                title: "DR - {{plan_id}}"
                body: "RTO:{{measure.rto}}m RPO:{{measure.rpo}}m"
  consumes:
    - type: http
      namespace: dr
      baseUri: "https://dr.cosco.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.dr_token"
      resources:
        - name: failovers
          path: "/failovers"
          operations:
            - name: failover
              method: POST
    - type: http
      namespace: monitoring
      baseUri: "https://monitoring.cosco.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.monitoring_token"
      resources:
        - name: health
          path: "/checks"
          operations:
            - name: check
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://cosco.com.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: create-page
              method: POST

Detects infrastructure drift at COSCO Shipping via Terraform, Slack, and Jira.

naftiko: "0.5"
info:
  label: "Drift Detection Pipeline"
  description: "Detects infrastructure drift at COSCO Shipping via Terraform, Slack, and Jira."
  tags:
    - infrastructure
    - terraform
    - drift-detection
    - devops
capability:
  exposes:
    - type: mcp
      namespace: drift-det
      port: 8080
      tools:
        - name: detect
          description: "Detect drift at COSCO Shipping."
          inputParameters:
            - name: ws_id
              in: body
              type: string
              description: "Workspace ID."
            - name: env
              in: body
              type: string
              description: "Environment."
          steps:
            - name: plan
              type: call
              call: "terraform.run"
              with:
                ws: "{{ws_id}}"
            - name: check
              type: call
              call: "terraform.get-plan"
              with:
                run: "{{plan.id}}"
            - name: alert
              type: call
              call: "slack.post-message"
              with:
                channel: "#infra"
                text: "Drift {{env}}: {{check.changes}} changes"
            - name: ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "INFRA"
                summary: "Drift in {{env}}"
  consumes:
    - type: http
      namespace: terraform
      baseUri: "https://app.terraform.io/api/v2"
      authentication:
        type: bearer
        token: "$secrets.terraform_token"
      resources:
        - name: runs
          path: "/runs"
          operations:
            - name: run
              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
    - type: http
      namespace: jira
      baseUri: "https://cosco.com.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

Receives an EDI IFTMIN booking message, parses and validates it, creates a booking in the TOS, and sends an EDI IFTMCS confirmation back to the shipper.

naftiko: "0.5"
info:
  label: "EDI Message Processing Pipeline"
  description: "Receives an EDI IFTMIN booking message, parses and validates it, creates a booking in the TOS, and sends an EDI IFTMCS confirmation back to the shipper."
  tags:
    - edi
    - electronic-data-interchange
    - booking
    - tos
capability:
  exposes:
    - type: mcp
      namespace: edi-processing
      port: 8080
      tools:
        - name: process-edi-booking
          description: "Given an EDI message ID, parse the IFTMIN, create a TOS booking, and send IFTMCS confirmation."
          inputParameters:
            - name: message_id
              in: body
              type: string
              description: "The EDI message identifier."
          steps:
            - name: parse-message
              type: call
              call: "edi-gateway.parse-message"
              with:
                message_id: "{{message_id}}"
            - name: create-booking
              type: call
              call: "tos.create-booking"
              with:
                shipper: "{{parse-message.shipper}}"
                consignee: "{{parse-message.consignee}}"
                origin: "{{parse-message.origin_port}}"
                destination: "{{parse-message.destination_port}}"
                container_count: "{{parse-message.container_count}}"
            - name: send-confirmation
              type: call
              call: "edi-gateway.send-confirmation"
              with:
                partner_id: "{{parse-message.sender_id}}"
                booking_number: "{{create-booking.booking_number}}"
                message_type: "IFTMCS"
  consumes:
    - type: http
      namespace: edi-gateway
      baseUri: "https://api.internal.cosco.com/edi/v1"
      authentication:
        type: bearer
        token: "$secrets.edi_token"
      resources:
        - name: messages
          path: "/messages/{{message_id}}"
          inputParameters:
            - name: message_id
              in: path
          operations:
            - name: parse-message
              method: GET
        - name: outbound
          path: "/messages/send"
          operations:
            - name: send-confirmation
              method: POST
    - type: http
      namespace: tos
      baseUri: "https://api.internal.cosco.com/tos/v1"
      authentication:
        type: bearer
        token: "$secrets.tos_token"
      resources:
        - name: bookings
          path: "/bookings"
          operations:
            - name: create-booking
              method: POST

Checks ES index at COSCO Shipping.

naftiko: "0.5"
info:
  label: "ES Index Health"
  description: "Checks ES index at COSCO Shipping."
  tags:
    - search
    - elasticsearch
    - infrastructure
capability:
  exposes:
    - type: mcp
      namespace: es-health
      port: 8080
      tools:
        - name: check-index
          description: "Check ES index at COSCO Shipping."
          inputParameters:
            - name: index
              in: body
              type: string
              description: "Index name."
          call: "es.get-health"
          with:
            index: "{{index}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.status"
            - name: docs
              type: number
              mapping: "$.docs.count"
  consumes:
    - type: http
      namespace: es
      baseUri: "https://es.cosco.com:9200"
      authentication:
        type: bearer
        token: "$secrets.es_token"
      resources:
        - name: indices
          path: "/{{index}}/_stats"
          inputParameters:
            - name: index
              in: path
          operations:
            - name: get-health
              method: GET

Offboards employees at COSCO Shipping via Okta, Slack, ServiceNow, and storage.

naftiko: "0.5"
info:
  label: "Employee Offboarding Pipeline"
  description: "Offboards employees at COSCO Shipping via Okta, Slack, ServiceNow, and storage."
  tags:
    - hr
    - offboarding
    - okta
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: offboarding
      port: 8080
      tools:
        - name: offboard
          description: "Offboard employees at COSCO Shipping."
          inputParameters:
            - name: emp_id
              in: body
              type: string
              description: "Employee ID."
            - name: last_day
              in: body
              type: string
              description: "Last day."
          steps:
            - name: disable
              type: call
              call: "okta.deactivate"
              with:
                user: "{{emp_id}}"
            - name: revoke
              type: call
              call: "slack.remove"
              with:
                user: "{{emp_id}}"
            - name: return
              type: call
              call: "servicenow.create-request"
              with:
                type: "return"
                emp: "{{emp_id}}"
            - name: archive
              type: call
              call: "storage.archive"
              with:
                user: "{{emp_id}}"
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://cosco.com.okta.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.okta_api_token"
      resources:
        - name: users
          path: "/users/{{user}}/lifecycle/deactivate"
          inputParameters:
            - name: user
              in: path
          operations:
            - name: deactivate
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: users
          path: "/users.admin.remove"
          operations:
            - name: remove
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://cosco.com.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST
    - type: http
      namespace: storage
      baseUri: "https://storage.cosco.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.storage_token"
      resources:
        - name: archives
          path: "/archive"
          operations:
            - name: archive
              method: POST

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

naftiko: "0.5"
info:
  label: "Employee Onboarding Orchestrator"
  description: "On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint folder, and sends a Microsoft Teams welcome message."
  tags:
    - hr
    - onboarding
    - workday
    - servicenow
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-onboarding
      port: 8080
      tools:
        - name: trigger-onboarding
          description: "Given a Workday employee ID, orchestrate onboarding across ServiceNow, SharePoint, and Microsoft Teams."
          inputParameters:
            - name: workday_employee_id
              in: body
              type: string
              description: "The Workday worker ID for the new hire."
            - name: start_date
              in: body
              type: string
              description: "The employee start date."
            - name: department
              in: body
              type: string
              description: "The department."
          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"
                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 COSCO Shipping, {{get-employee.first_name}}! IT ticket: {{open-ticket.number}}. Docs: {{provision-folder.url}}."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://cosco.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

Audits expenses at COSCO Shipping via Concur, compliance checks, and email.

naftiko: "0.5"
info:
  label: "Expense Audit Pipeline"
  description: "Audits expenses at COSCO Shipping via Concur, compliance checks, and email."
  tags:
    - finance
    - travel
    - sap-concur
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: expense-audit
      port: 8080
      tools:
        - name: audit
          description: "Audit expenses at COSCO Shipping."
          inputParameters:
            - name: report_id
              in: body
              type: string
              description: "Report ID."
          steps:
            - name: get
              type: call
              call: "concur.get-report"
              with:
                id: "{{report_id}}"
            - name: check
              type: call
              call: "compliance.check"
              with:
                expenses: "{{get.entries}}"
            - name: flag
              type: call
              call: "workflow.flag"
              with:
                id: "{{report_id}}"
                violations: "{{check.violations}}"
            - name: notify
              type: call
              call: "email.send"
              with:
                to: "{{get.approver}}"
                subject: "Expense {{report_id}} violations"
  consumes:
    - type: http
      namespace: concur
      baseUri: "https://us.api.concursolutions.com/api/v3.0"
      authentication:
        type: bearer
        token: "$secrets.concur_token"
      resources:
        - name: reports
          path: "/expense/reports/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-report
              method: GET
    - type: http
      namespace: compliance
      baseUri: "https://compliance.cosco.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.compliance_token"
      resources:
        - name: policies
          path: "/check"
          operations:
            - name: check
              method: POST
    - type: http
      namespace: workflow
      baseUri: "https://workflow.cosco.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workflow_token"
      resources:
        - name: reviews
          path: "/flag"
          operations:
            - name: flag
              method: POST
    - type: http
      namespace: email
      baseUri: "https://email.cosco.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.email_token"
      resources:
        - name: messages
          path: "/send"
          operations:
            - name: send
              method: POST

Analyzes feedback at COSCO Shipping via surveys, AI sentiment, and Power BI.

naftiko: "0.5"
info:
  label: "Customer Feedback Pipeline"
  description: "Analyzes feedback at COSCO Shipping via surveys, AI sentiment, and Power BI."
  tags:
    - customer-experience
    - analytics
    - sentiment-analysis
capability:
  exposes:
    - type: mcp
      namespace: feedback
      port: 8080
      tools:
        - name: analyze
          description: "Analyze feedback at COSCO Shipping."
          inputParameters:
            - name: survey_id
              in: body
              type: string
              description: "Survey ID."
          steps:
            - name: collect
              type: call
              call: "survey.get"
              with:
                id: "{{survey_id}}"
            - name: sentiment
              type: call
              call: "ai.analyze"
              with:
                text: "{{collect.responses}}"
            - name: themes
              type: call
              call: "ai.themes"
              with:
                data: "{{collect.responses}}"
            - name: dashboard
              type: call
              call: "power-bi.refresh"
              with:
                dataset: "cx"
  consumes:
    - type: http
      namespace: survey
      baseUri: "https://surveys.cosco.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.survey_token"
      resources:
        - name: responses
          path: "/surveys/{{id}}/responses"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get
              method: GET
    - type: http
      namespace: ai
      baseUri: "https://api.openai.com/v1"
      authentication:
        type: bearer
        token: "$secrets.openai_api_key"
      resources:
        - name: completions
          path: "/chat/completions"
          operations:
            - name: analyze
              method: POST
    - type: http
      namespace: power-bi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.power_bi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset}}/refreshes"
          inputParameters:
            - name: dataset
              in: path
          operations:
            - name: refresh
              method: POST

Retrieves a freight rate quote for a given trade lane and container type, returning base rate, surcharges, and total all-in rate.

naftiko: "0.5"
info:
  label: "Freight Rate Quote Lookup"
  description: "Retrieves a freight rate quote for a given trade lane and container type, returning base rate, surcharges, and total all-in rate."
  tags:
    - pricing
    - freight-rates
    - commercial
capability:
  exposes:
    - type: mcp
      namespace: commercial-pricing
      port: 8080
      tools:
        - name: get-freight-rate
          description: "Look up freight rate for a trade lane. Returns base rate, surcharges, and total rate."
          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 (20GP, 40GP, 40HC)."
          call: "pricing.get-rate"
          with:
            origin: "{{origin_port}}"
            destination: "{{destination_port}}"
            container_type: "{{container_type}}"
          outputParameters:
            - name: base_rate
              type: number
              mapping: "$.rate.baseRate"
            - name: surcharges
              type: number
              mapping: "$.rate.totalSurcharges"
            - name: total_rate
              type: number
              mapping: "$.rate.allInRate"
            - name: currency
              type: string
              mapping: "$.rate.currency"
  consumes:
    - type: http
      namespace: pricing
      baseUri: "https://api.internal.cosco.com/pricing/v1"
      authentication:
        type: bearer
        token: "$secrets.pricing_token"
      resources:
        - name: rates
          path: "/rates/quote"
          operations:
            - name: get-rate
              method: GET

Checks GitHub repo at COSCO Shipping.

naftiko: "0.5"
info:
  label: "GitHub Repo Check"
  description: "Checks GitHub repo at COSCO Shipping."
  tags:
    - devops
    - github
    - version-control
capability:
  exposes:
    - type: mcp
      namespace: gh-repo
      port: 8080
      tools:
        - name: get-branch
          description: "Check branch at COSCO Shipping."
          inputParameters:
            - name: repo
              in: body
              type: string
              description: "Repo."
            - name: branch
              in: body
              type: string
              description: "Branch."
          call: "github.get-branch"
          with:
            repo: "{{repo}}"
            branch: "{{branch}}"
          outputParameters:
            - name: sha
              type: string
              mapping: "$.commit.sha"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: branches
          path: "/repos/org/{{repo}}/branches/{{branch}}"
          inputParameters:
            - name: repo
              in: path
            - name: branch
              in: path
          operations:
            - name: get-branch
              method: GET

Checks Grafana dashboard at COSCO Shipping.

naftiko: "0.5"
info:
  label: "Grafana Dashboard Status"
  description: "Checks Grafana dashboard at COSCO Shipping."
  tags:
    - monitoring
    - grafana
    - dashboards
capability:
  exposes:
    - type: mcp
      namespace: grafana
      port: 8080
      tools:
        - name: check-dash
          description: "Check dashboard at COSCO Shipping."
          inputParameters:
            - name: uid
              in: body
              type: string
              description: "Dashboard UID."
          call: "grafana.get-dash"
          with:
            uid: "{{uid}}"
          outputParameters:
            - name: title
              type: string
              mapping: "$.dashboard.title"
  consumes:
    - type: http
      namespace: grafana
      baseUri: "https://grafana.cosco.com/api"
      authentication:
        type: bearer
        token: "$secrets.grafana_token"
      resources:
        - name: dashboards
          path: "/dashboards/uid/{{uid}}"
          inputParameters:
            - name: uid
              in: path
          operations:
            - name: get-dash
              method: GET

Coordinates inland transportation after container discharge including rail and truck booking.

naftiko: "0.5"
info:
  label: "Intermodal Connection Pipeline"
  description: "Coordinates inland transportation after container discharge including rail and truck booking."
  tags: [intermodal, inland-transport, logistics]
capability:
  exposes:
    - type: mcp
      namespace: intermodal-ops
      port: 8080
      tools:
        - name: book-inland-connection
          description: "Check availability, book inland transport, and update tracking."
          inputParameters:
            - name: container_number
              in: body
              type: string
              description: "The container number."
            - name: discharge_port
              in: body
              type: string
              description: "Port of discharge."
            - name: final_destination
              in: body
              type: string
              description: "Inland destination."
          steps:
            - name: check-availability
              type: call
              call: "inland-transport.check-availability"
              with: { origin: "{{discharge_port}}", destination: "{{final_destination}}" }
            - name: book-connection
              type: call
              call: "inland-transport.book-transport"
              with: { container_number: "{{container_number}}", service_id: "{{check-availability.service_id}}" }
            - name: update-tracking
              type: call
              call: "tracking.update-inland-leg"
              with: { container_number: "{{container_number}}", booking_ref: "{{book-connection.booking_ref}}" }
  consumes:
    - type: http
      namespace: inland-transport
      baseUri: "https://api.internal.cosco.com/inland/v1"
      authentication: { type: bearer, token: "$secrets.inland_token" }
      resources:
        - name: availability
          path: "/availability"
          operations: [{ name: check-availability, method: GET }]
        - name: bookings
          path: "/bookings"
          operations: [{ name: book-transport, method: POST }]
    - type: http
      namespace: tracking
      baseUri: "https://api.internal.cosco.com/tracking/v1"
      authentication: { type: bearer, token: "$secrets.tracking_token" }
      resources:
        - name: inland
          path: "/containers/{{container_number}}/inland-leg"
          inputParameters: [{ name: container_number, in: path }]
          operations: [{ name: update-inland-leg, method: PATCH }]

Escalates IT incidents at COSCO Shipping via ServiceNow, PagerDuty, and Slack.

naftiko: "0.5"
info:
  label: "IT Incident Escalation Pipeline"
  description: "Escalates IT incidents at COSCO Shipping via ServiceNow, PagerDuty, and Slack."
  tags:
    - incident-management
    - servicenow
    - pagerduty
    - slack
capability:
  exposes:
    - type: mcp
      namespace: incident-escalation
      port: 8080
      tools:
        - name: escalate-incident
          description: "Escalate incidents at COSCO Shipping."
          inputParameters:
            - name: incident_id
              in: body
              type: string
              description: "Incident ID."
            - name: severity
              in: body
              type: string
              description: "Severity."
          steps:
            - name: get-incident
              type: call
              call: "servicenow.get-incident"
              with:
                incident_id: "{{incident_id}}"
            - name: page
              type: call
              call: "pagerduty.create-incident"
              with:
                title: "{{get-incident.description}}"
                urgency: "{{severity}}"
            - name: channel
              type: call
              call: "slack.create-channel"
              with:
                name: "inc-{{incident_id}}"
            - name: notify
              type: call
              call: "slack.post-message"
              with:
                channel: "#inc-{{incident_id}}"
                text: "P{{severity}}: {{get-incident.description}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://cosco.com.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: incidents
          path: "/table/incident/{{incident_id}}"
          inputParameters:
            - name: incident_id
              in: path
          operations:
            - name: get-incident
              method: GET
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: bearer
        token: "$secrets.pagerduty_token"
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: channels
          path: "/conversations.create"
          operations:
            - name: create-channel
              method: POST

Retrieves sprint progress at COSCO Shipping.

naftiko: "0.5"
info:
  label: "Jira Sprint Progress Lookup"
  description: "Retrieves sprint progress at COSCO Shipping."
  tags:
    - project-management
    - jira
    - agile
capability:
  exposes:
    - type: mcp
      namespace: jira-sprint
      port: 8080
      tools:
        - name: get-sprint
          description: "Look up sprint at COSCO Shipping."
          inputParameters:
            - name: project_key
              in: body
              type: string
              description: "Project key."
          call: "jira.get-sprints"
          with:
            project: "{{project_key}}"
          outputParameters:
            - name: name
              type: string
              mapping: "$.values[0].name"
            - name: state
              type: string
              mapping: "$.values[0].state"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://cosco.com.atlassian.net/rest/agile/1.0"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: sprints
          path: "/board/1/sprint"
          operations:
            - name: get-sprints
              method: GET

Maintains KB at COSCO Shipping by finding stale articles and notifying owners.

naftiko: "0.5"
info:
  label: "Knowledge Base Maintenance Pipeline"
  description: "Maintains KB at COSCO Shipping by finding stale articles and notifying owners."
  tags:
    - knowledge-management
    - confluence
    - maintenance
capability:
  exposes:
    - type: mcp
      namespace: kb-maint
      port: 8080
      tools:
        - name: maintain-kb
          description: "Maintain KB at COSCO Shipping."
          inputParameters:
            - name: space
              in: body
              type: string
              description: "Confluence space."
            - name: stale_days
              in: body
              type: number
              description: "Days threshold."
          steps:
            - name: find
              type: call
              call: "confluence.search-stale"
              with:
                space: "{{space}}"
                days: "{{stale_days}}"
            - name: notify
              type: call
              call: "email.batch"
              with:
                to: "{{find.owners}}"
                subject: "KB review needed"
            - name: flag
              type: call
              call: "confluence.add-label"
              with:
                pages: "{{find.ids}}"
                label: "needs-review"
            - name: report
              type: call
              call: "slack.post-message"
              with:
                channel: "#kb"
                text: "KB: {{find.count}} stale articles"
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://cosco.com.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: content
          path: "/content/search"
          operations:
            - name: search-stale
              method: GET
    - type: http
      namespace: email
      baseUri: "https://email.cosco.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.email_token"
      resources:
        - name: batch
          path: "/send-batch"
          operations:
            - name: batch
              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

Generates KPI digest at COSCO Shipping from Snowflake, Oracle, Power BI, and email.

naftiko: "0.5"
info:
  label: "Weekly KPI Digest Pipeline"
  description: "Generates KPI digest at COSCO Shipping from Snowflake, Oracle, Power BI, and email."
  tags:
    - reporting
    - kpi
    - snowflake
    - executive
capability:
  exposes:
    - type: mcp
      namespace: kpi-digest
      port: 8080
      tools:
        - name: gen-digest
          description: "Generate KPI digest at COSCO Shipping."
          inputParameters:
            - name: week
              in: body
              type: string
              description: "Week ending."
            - name: dist
              in: body
              type: string
              description: "Distribution list."
          steps:
            - name: ops
              type: call
              call: "snowflake.query"
              with:
                query: "SELECT * FROM kpis WHERE w='{{week}}'"
            - name: fin
              type: call
              call: "oracle.get-summary"
              with:
                period: "{{week}}"
            - name: refresh
              type: call
              call: "power-bi.refresh"
              with:
                dataset: "exec_kpis"
            - name: send
              type: call
              call: "email.send"
              with:
                to: "{{dist}}"
                subject: "KPIs - {{week}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://cosco.com.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: query
              method: POST
    - type: http
      namespace: oracle
      baseUri: "https://oracle.cosco.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_token"
      resources:
        - name: fin
          path: "/summary"
          operations:
            - name: get-summary
              method: GET
    - type: http
      namespace: power-bi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.power_bi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset}}/refreshes"
          inputParameters:
            - name: dataset
              in: path
          operations:
            - name: refresh
              method: POST
    - type: http
      namespace: email
      baseUri: "https://email.cosco.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.email_token"
      resources:
        - name: messages
          path: "/send"
          operations:
            - name: send
              method: POST

Checks K8s pod health at COSCO Shipping.

naftiko: "0.5"
info:
  label: "K8s Pod Health"
  description: "Checks K8s pod health at COSCO Shipping."
  tags:
    - containers
    - kubernetes
    - infrastructure
capability:
  exposes:
    - type: mcp
      namespace: k8s-pod
      port: 8080
      tools:
        - name: check-pod
          description: "Check pod at COSCO Shipping."
          inputParameters:
            - name: namespace
              in: body
              type: string
              description: "Namespace."
            - name: pod
              in: body
              type: string
              description: "Pod name."
          call: "k8s.get-pod"
          with:
            namespace: "{{namespace}}"
            pod: "{{pod}}"
          outputParameters:
            - name: phase
              type: string
              mapping: "$.status.phase"
  consumes:
    - type: http
      namespace: k8s
      baseUri: "https://k8s.cosco.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.k8s_token"
      resources:
        - name: pods
          path: "/namespaces/{{namespace}}/pods/{{pod}}"
          inputParameters:
            - name: namespace
              in: path
            - name: pod
              in: path
          operations:
            - name: get-pod
              method: GET

Checks license compliance at COSCO Shipping via scanning, entitlements, and procurement.

naftiko: "0.5"
info:
  label: "License Compliance Pipeline"
  description: "Checks license compliance at COSCO Shipping via scanning, entitlements, and procurement."
  tags:
    - compliance
    - licensing
    - procurement
capability:
  exposes:
    - type: mcp
      namespace: license-comp
      port: 8080
      tools:
        - name: check-licenses
          description: "Check license compliance at COSCO Shipping."
          inputParameters:
            - name: software
              in: body
              type: string
              description: "Software."
            - name: vendor
              in: body
              type: string
              description: "Vendor."
          steps:
            - name: scan
              type: call
              call: "assets.installations"
              with:
                sw: "{{software}}"
            - name: entitlements
              type: call
              call: "licenses.get"
              with:
                sw: "{{software}}"
            - name: flag
              type: call
              call: "compliance.flag"
              with:
                installed: "{{scan.count}}"
                entitled: "{{entitlements.count}}"
            - name: procure
              type: call
              call: "servicenow.create-request"
              with:
                type: "license"
                sw: "{{software}}"
  consumes:
    - type: http
      namespace: assets
      baseUri: "https://assets.cosco.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.asset_token"
      resources:
        - name: installations
          path: "/installations"
          operations:
            - name: installations
              method: GET
    - type: http
      namespace: licenses
      baseUri: "https://licenses.cosco.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.license_token"
      resources:
        - name: ent
          path: "/entitlements"
          operations:
            - name: get
              method: GET
    - type: http
      namespace: compliance
      baseUri: "https://compliance.cosco.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.compliance_token"
      resources:
        - name: overages
          path: "/flag"
          operations:
            - name: flag
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://cosco.com.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST

Generates monthly security reports at COSCO Shipping from Splunk and Qualys.

naftiko: "0.5"
info:
  label: "Monthly Security Report Pipeline"
  description: "Generates monthly security reports at COSCO Shipping from Splunk and Qualys."
  tags:
    - security
    - reporting
    - splunk
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: sec-report
      port: 8080
      tools:
        - name: gen-sec-report
          description: "Generate security report at COSCO Shipping."
          inputParameters:
            - name: month
              in: body
              type: string
              description: "Month."
          steps:
            - name: splunk
              type: call
              call: "splunk.search"
              with:
                query: "index=security earliest=-30d"
            - name: scans
              type: call
              call: "qualys.results"
              with:
                month: "{{month}}"
            - name: compile
              type: call
              call: "analytics.compile-security"
              with:
                events: "{{splunk.count}}"
                vulns: "{{scans.critical}}"
            - name: send
              type: call
              call: "email.send"
              with:
                to: "ciso@co.com"
                subject: "Security - {{month}}"
  consumes:
    - type: http
      namespace: splunk
      baseUri: "https://splunk.cosco.com:8089/services"
      authentication:
        type: bearer
        token: "$secrets.splunk_token"
      resources:
        - name: search
          path: "/search/jobs"
          operations:
            - name: search
              method: POST
    - type: http
      namespace: qualys
      baseUri: "https://qualysapi.qualys.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.qualys_token"
      resources:
        - name: results
          path: "/fo/scan/results"
          operations:
            - name: results
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://analytics.cosco.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: security
          path: "/compile"
          operations:
            - name: compile-security
              method: POST
    - type: http
      namespace: email
      baseUri: "https://email.cosco.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.email_token"
      resources:
        - name: messages
          path: "/send"
          operations:
            - name: send
              method: POST

Onboards employees at COSCO Shipping with Okta, ServiceNow, Slack, and calendar.

naftiko: "0.5"
info:
  label: "New Employee IT Onboarding Pipeline"
  description: "Onboards employees at COSCO Shipping with Okta, ServiceNow, Slack, and calendar."
  tags:
    - hr
    - onboarding
    - okta
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: it-onboarding
      port: 8080
      tools:
        - name: onboard-employee
          description: "Onboard employees at COSCO Shipping."
          inputParameters:
            - name: name
              in: body
              type: string
              description: "Name."
            - name: dept
              in: body
              type: string
              description: "Department."
            - name: start
              in: body
              type: string
              description: "Start date."
          steps:
            - name: okta
              type: call
              call: "okta.create-user"
              with:
                name: "{{name}}"
                department: "{{dept}}"
            - name: equip
              type: call
              call: "servicenow.create-request"
              with:
                type: "new_hire"
                for: "{{name}}"
            - name: slack
              type: call
              call: "slack.invite"
              with:
                email: "{{okta.email}}"
            - name: orient
              type: call
              call: "calendar.create-event"
              with:
                title: "Orientation - {{name}}"
                date: "{{start}}"
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://cosco.com.okta.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.okta_api_token"
      resources:
        - name: users
          path: "/users"
          operations:
            - name: create-user
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://cosco.com.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: users
          path: "/users.admin.invite"
          operations:
            - name: invite
              method: POST
    - type: http
      namespace: calendar
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.microsoft_graph_token"
      resources:
        - name: events
          path: "/users/hr/events"
          operations:
            - name: create-event
              method: POST

Checks New Relic APM at COSCO Shipping.

naftiko: "0.5"
info:
  label: "New Relic APM Check"
  description: "Checks New Relic APM at COSCO Shipping."
  tags:
    - monitoring
    - new-relic
    - apm
capability:
  exposes:
    - type: mcp
      namespace: nr-apm
      port: 8080
      tools:
        - name: check-apm
          description: "Check APM at COSCO Shipping."
          inputParameters:
            - name: app_id
              in: body
              type: string
              description: "App ID."
          call: "newrelic.get-app"
          with:
            app_id: "{{app_id}}"
          outputParameters:
            - name: health
              type: string
              mapping: "$.application.health_status"
  consumes:
    - type: http
      namespace: newrelic
      baseUri: "https://api.newrelic.com/v2"
      authentication:
        type: bearer
        token: "$secrets.new_relic_api_key"
      resources:
        - name: applications
          path: "/applications/{{app_id}}.json"
          inputParameters:
            - name: app_id
              in: path
          operations:
            - name: get-app
              method: GET

Checks Okta user at COSCO Shipping.

naftiko: "0.5"
info:
  label: "Okta User Check"
  description: "Checks Okta user at COSCO Shipping."
  tags:
    - identity
    - okta
    - access-management
capability:
  exposes:
    - type: mcp
      namespace: okta-user
      port: 8080
      tools:
        - name: check-user
          description: "Check user at COSCO Shipping."
          inputParameters:
            - name: email
              in: body
              type: string
              description: "Email."
          call: "okta.get-user"
          with:
            email: "{{email}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://cosco.com.okta.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.okta_api_token"
      resources:
        - name: users
          path: "/users/{{email}}"
          inputParameters:
            - name: email
              in: path
          operations:
            - name: get-user
              method: GET

Checks on-call at COSCO Shipping.

naftiko: "0.5"
info:
  label: "PagerDuty On-Call Check"
  description: "Checks on-call at COSCO Shipping."
  tags:
    - incident-management
    - pagerduty
    - on-call
capability:
  exposes:
    - type: mcp
      namespace: pd-oncall
      port: 8080
      tools:
        - name: get-oncall
          description: "Check on-call at COSCO Shipping."
          inputParameters:
            - name: schedule_id
              in: body
              type: string
              description: "Schedule ID."
          call: "pagerduty.get-oncall"
          with:
            schedule_id: "{{schedule_id}}"
          outputParameters:
            - name: user
              type: string
              mapping: "$.oncalls[0].user.summary"
  consumes:
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: bearer
        token: "$secrets.pagerduty_token"
      resources:
        - name: oncalls
          path: "/oncalls"
          operations:
            - name: get-oncall
              method: GET

When a vessel approaches port, retrieves the berth allocation from the terminal, notifies port agents via the messaging system, and updates the voyage tracker with ETA.

naftiko: "0.5"
info:
  label: "Port Call Schedule Pipeline"
  description: "When a vessel approaches port, retrieves the berth allocation from the terminal, notifies port agents via the messaging system, and updates the voyage tracker with ETA."
  tags:
    - port-operations
    - vessel-ops
    - terminal
    - messaging
capability:
  exposes:
    - type: mcp
      namespace: port-operations
      port: 8080
      tools:
        - name: coordinate-port-call
          description: "Given a vessel and port, retrieve berth allocation, notify agents, and update the voyage tracker."
          inputParameters:
            - name: vessel_code
              in: body
              type: string
              description: "The vessel code."
            - name: port_code
              in: body
              type: string
              description: "The port UN/LOCODE."
            - name: eta
              in: body
              type: string
              description: "The estimated time of arrival in ISO 8601."
          steps:
            - name: get-berth
              type: call
              call: "terminal.get-berth-allocation"
              with:
                vessel_code: "{{vessel_code}}"
                port_code: "{{port_code}}"
                eta: "{{eta}}"
            - name: notify-agents
              type: call
              call: "messaging.send-port-notification"
              with:
                port_code: "{{port_code}}"
                vessel_code: "{{vessel_code}}"
                berth: "{{get-berth.berth_number}}"
                eta: "{{eta}}"
            - name: update-tracker
              type: call
              call: "vessel-ops.update-voyage"
              with:
                vessel_code: "{{vessel_code}}"
                port_code: "{{port_code}}"
                eta: "{{eta}}"
                berth: "{{get-berth.berth_number}}"
  consumes:
    - type: http
      namespace: terminal
      baseUri: "https://api.internal.cosco.com/terminal/v1"
      authentication:
        type: bearer
        token: "$secrets.terminal_token"
      resources:
        - name: berths
          path: "/berth-allocations"
          operations:
            - name: get-berth-allocation
              method: GET
    - type: http
      namespace: messaging
      baseUri: "https://api.internal.cosco.com/messaging/v1"
      authentication:
        type: bearer
        token: "$secrets.messaging_token"
      resources:
        - name: notifications
          path: "/port-notifications"
          operations:
            - name: send-port-notification
              method: POST
    - type: http
      namespace: vessel-ops
      baseUri: "https://api.internal.cosco.com/vessel-ops/v1"
      authentication:
        type: bearer
        token: "$secrets.vessel_ops_token"
      resources:
        - name: voyages
          path: "/voyages/update"
          operations:
            - name: update-voyage
              method: PATCH

Retrieves port congestion data including vessel queue, wait time, and berth utilization.

naftiko: "0.5"
info:
  label: "Port Congestion Report"
  description: "Retrieves port congestion data including vessel queue, wait time, and berth utilization."
  tags: [port-operations, congestion, visibility]
capability:
  exposes:
    - type: mcp
      namespace: port-visibility
      port: 8080
      tools:
        - name: get-port-congestion
          description: "Look up port congestion. Returns queue count, avg wait time, and berth utilization."
          inputParameters:
            - name: port_code
              in: body
              type: string
              description: "The port UN/LOCODE."
          call: "port-intel.get-congestion"
          with: { port_code: "{{port_code}}" }
          outputParameters:
            - name: vessel_queue
              type: number
              mapping: "$.congestion.vesselQueue"
            - name: avg_wait_hours
              type: number
              mapping: "$.congestion.avgWaitHours"
  consumes:
    - type: http
      namespace: port-intel
      baseUri: "https://api.internal.cosco.com/port-intel/v1"
      authentication: { type: bearer, token: "$secrets.port_intel_token" }
      resources:
        - name: congestion
          path: "/ports/{{port_code}}/congestion"
          inputParameters: [{ name: port_code, in: path }]
          operations: [{ name: get-congestion, method: GET }]

Creates postmortems at COSCO Shipping.

naftiko: "0.5"
info:
  label: "Incident Postmortem Pipeline"
  description: "Creates postmortems at COSCO Shipping."
  tags:
    - incident-management
    - postmortem
    - pagerduty
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: postmortem
      port: 8080
      tools:
        - name: create-postmortem
          description: "Create postmortem at COSCO Shipping."
          inputParameters:
            - name: incident_id
              in: body
              type: string
              description: "Incident ID."
          steps:
            - name: timeline
              type: call
              call: "pagerduty.get-log"
              with:
                id: "{{incident_id}}"
            - name: metrics
              type: call
              call: "datadog.get-metrics"
              with:
                incident: "{{incident_id}}"
            - name: doc
              type: call
              call: "confluence.create-page"
              with:
                title: "Postmortem: {{timeline.title}}"
                body: "Impact: {{metrics.impact}}"
            - name: review
              type: call
              call: "calendar.create-event"
              with:
                title: "Review: {{timeline.title}}"
  consumes:
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: bearer
        token: "$secrets.pagerduty_token"
      resources:
        - name: incidents
          path: "/incidents/{{id}}/log_entries"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-log
              method: GET
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: get-metrics
              method: GET
    - type: http
      namespace: confluence
      baseUri: "https://cosco.com.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: create-page
              method: POST
    - type: http
      namespace: calendar
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.microsoft_graph_token"
      resources:
        - name: events
          path: "/users/sre/events"
          operations:
            - name: create-event
              method: POST

Checks Power BI refresh at COSCO Shipping.

naftiko: "0.5"
info:
  label: "Power BI Refresh Check"
  description: "Checks Power BI refresh at COSCO Shipping."
  tags:
    - analytics
    - power-bi
    - dashboards
capability:
  exposes:
    - type: mcp
      namespace: pbi-refresh
      port: 8080
      tools:
        - name: check-refresh
          description: "Check refresh at COSCO Shipping."
          inputParameters:
            - name: dataset_id
              in: body
              type: string
              description: "Dataset ID."
          call: "power-bi.get-refresh"
          with:
            dataset_id: "{{dataset_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.value[0].status"
  consumes:
    - type: http
      namespace: power-bi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.power_bi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: get-refresh
              method: GET

Triggers a Power BI dataset refresh for the shipping operations dashboard and returns the refresh status.

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

Generates compliance reports at COSCO Shipping from Snowflake, Power BI, and email.

naftiko: "0.5"
info:
  label: "Quarterly Compliance Report Pipeline"
  description: "Generates compliance reports at COSCO Shipping from Snowflake, Power BI, and email."
  tags:
    - compliance
    - reporting
    - snowflake
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: compliance-rpt
      port: 8080
      tools:
        - name: gen-report
          description: "Generate compliance reports at COSCO Shipping."
          inputParameters:
            - name: quarter
              in: body
              type: string
              description: "Quarter."
            - name: type
              in: body
              type: string
              description: "Type."
          steps:
            - name: data
              type: call
              call: "snowflake.query"
              with:
                query: "SELECT * FROM compliance WHERE q='{{quarter}}'"
            - name: metrics
              type: call
              call: "analytics.compute"
              with:
                data: "{{data.results}}"
            - name: refresh
              type: call
              call: "power-bi.refresh"
              with:
                dataset: "compliance"
            - name: send
              type: call
              call: "email.send"
              with:
                to: "compliance@co.com"
                subject: "{{type}} - {{quarter}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://cosco.com.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: query
              method: POST
    - type: http
      namespace: analytics
      baseUri: "https://analytics.cosco.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: metrics
          path: "/compute"
          operations:
            - name: compute
              method: POST
    - type: http
      namespace: power-bi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.power_bi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset}}/refreshes"
          inputParameters:
            - name: dataset
              in: path
          operations:
            - name: refresh
              method: POST
    - type: http
      namespace: email
      baseUri: "https://email.cosco.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.email_token"
      resources:
        - name: messages
          path: "/send"
          operations:
            - name: send
              method: POST

Checks Redis at COSCO Shipping.

naftiko: "0.5"
info:
  label: "Redis Cache Status"
  description: "Checks Redis at COSCO Shipping."
  tags:
    - caching
    - redis
    - infrastructure
capability:
  exposes:
    - type: mcp
      namespace: redis
      port: 8080
      tools:
        - name: check-cache
          description: "Check Redis at COSCO Shipping."
          inputParameters:
            - name: instance
              in: body
              type: string
              description: "Instance ID."
          call: "redis.get-info"
          with:
            instance: "{{instance}}"
          outputParameters:
            - name: memory
              type: string
              mapping: "$.used_memory_human"
  consumes:
    - type: http
      namespace: redis
      baseUri: "https://redis.cosco.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.redis_token"
      resources:
        - name: instances
          path: "/instances/{{instance}}/info"
          inputParameters:
            - name: instance
              in: path
          operations:
            - name: get-info
              method: GET

Monitors refrigerated container temperatures via IoT sensors, checks against cargo requirements, and creates an alert in ServiceNow if temperature is out of range.

naftiko: "0.5"
info:
  label: "Reefer Container Monitoring Pipeline"
  description: "Monitors refrigerated container temperatures via IoT sensors, checks against cargo requirements, and creates an alert in ServiceNow if temperature is out of range."
  tags:
    - reefer
    - iot
    - temperature-monitoring
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: reefer-monitoring
      port: 8080
      tools:
        - name: check-reefer-temperature
          description: "Given a reefer container, check temperature against cargo requirements and alert if out of range."
          inputParameters:
            - name: container_number
              in: body
              type: string
              description: "The reefer container number."
            - name: required_temp_c
              in: body
              type: number
              description: "The required temperature setpoint in Celsius."
            - name: tolerance_c
              in: body
              type: number
              description: "The allowable temperature deviation in Celsius."
          steps:
            - name: get-temperature
              type: call
              call: "iot.get-reefer-telemetry"
              with:
                container_number: "{{container_number}}"
            - name: check-threshold
              type: call
              call: "monitoring.evaluate-threshold"
              with:
                actual_temp: "{{get-temperature.current_temp}}"
                required_temp: "{{required_temp_c}}"
                tolerance: "{{tolerance_c}}"
            - name: create-alert
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Reefer temp alert: {{container_number}} at {{get-temperature.current_temp}}C"
                category: "reefer_monitoring"
                priority: "high"
                description: "Container {{container_number}} temperature: {{get-temperature.current_temp}}C. Required: {{required_temp_c}}C +/- {{tolerance_c}}C. Status: {{check-threshold.status}}."
  consumes:
    - type: http
      namespace: iot
      baseUri: "https://api.internal.cosco.com/iot/v1"
      authentication:
        type: bearer
        token: "$secrets.iot_token"
      resources:
        - name: reefer
          path: "/reefers/{{container_number}}/telemetry"
          inputParameters:
            - name: container_number
              in: path
          operations:
            - name: get-reefer-telemetry
              method: GET
    - type: http
      namespace: monitoring
      baseUri: "https://api.internal.cosco.com/monitoring/v1"
      authentication:
        type: bearer
        token: "$secrets.monitoring_token"
      resources:
        - name: thresholds
          path: "/evaluate"
          operations:
            - name: evaluate-threshold
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://cosco.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

Checks release readiness at COSCO Shipping.

naftiko: "0.5"
info:
  label: "Release Readiness Pipeline"
  description: "Checks release readiness at COSCO Shipping."
  tags:
    - release-management
    - devops
    - quality
capability:
  exposes:
    - type: mcp
      namespace: release-ready
      port: 8080
      tools:
        - name: check-release
          description: "Check release at COSCO Shipping."
          inputParameters:
            - name: release_id
              in: body
              type: string
              description: "Release ID."
            - name: project
              in: body
              type: string
              description: "Project."
          steps:
            - name: tests
              type: call
              call: "azdo.get-tests"
              with:
                project: "{{project}}"
                release: "{{release_id}}"
            - name: quality
              type: call
              call: "sonarqube.get-gate"
              with:
                project: "{{project}}"
            - name: security
              type: call
              call: "security.get-scan"
              with:
                project: "{{project}}"
            - name: doc
              type: call
              call: "confluence.create-page"
              with:
                title: "Release - {{release_id}}"
                body: "Tests: {{tests.pass_rate}}% Quality: {{quality.status}}"
  consumes:
    - type: http
      namespace: azdo
      baseUri: "https://dev.azure.com/cosco.com"
      authentication:
        type: bearer
        token: "$secrets.azdo_token"
      resources:
        - name: tests
          path: "/{{project}}/_apis/test/runs"
          inputParameters:
            - name: project
              in: path
          operations:
            - name: get-tests
              method: GET
    - type: http
      namespace: sonarqube
      baseUri: "https://sonarqube.cosco.com/api"
      authentication:
        type: bearer
        token: "$secrets.sonarqube_token"
      resources:
        - name: quality
          path: "/qualitygates/project_status"
          operations:
            - name: get-gate
              method: GET
    - type: http
      namespace: security
      baseUri: "https://security.cosco.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.security_token"
      resources:
        - name: scans
          path: "/results"
          operations:
            - name: get-scan
              method: GET
    - type: http
      namespace: confluence
      baseUri: "https://cosco.com.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: create-page
              method: POST

Looks up a SAP freight invoice by number and returns status, amount, currency, customer, and payment due date.

naftiko: "0.5"
info:
  label: "SAP Freight Invoice Status"
  description: "Looks up a SAP freight invoice by number and returns status, amount, currency, customer, and payment due date."
  tags:
    - finance
    - sap
    - freight-billing
capability:
  exposes:
    - type: mcp
      namespace: freight-billing
      port: 8080
      tools:
        - name: get-freight-invoice
          description: "Look up a SAP freight invoice. Returns status, amount, currency, customer, and due date."
          inputParameters:
            - name: invoice_number
              in: body
              type: string
              description: "The SAP freight invoice number."
          call: "sap.get-invoice"
          with:
            invoice_number: "{{invoice_number}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.d.InvoiceStatus"
            - name: amount
              type: number
              mapping: "$.d.TotalAmount"
            - name: currency
              type: string
              mapping: "$.d.Currency"
            - name: customer
              type: string
              mapping: "$.d.CustomerName"
            - name: due_date
              type: string
              mapping: "$.d.PaymentDueDate"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://cosco-s4.sap.com/sap/opu/odata/sap/API_BILLING_DOCUMENT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: invoices
          path: "/A_BillingDocument('{{invoice_number}}')"
          inputParameters:
            - name: invoice_number
              in: path
          operations:
            - name: get-invoice
              method: GET

Checks SAP PO at COSCO Shipping.

naftiko: "0.5"
info:
  label: "SAP PO Check"
  description: "Checks SAP PO at COSCO Shipping."
  tags:
    - procurement
    - sap
    - purchase-orders
capability:
  exposes:
    - type: mcp
      namespace: sap-po
      port: 8080
      tools:
        - name: get-po
          description: "Check PO at COSCO Shipping."
          inputParameters:
            - name: po_number
              in: body
              type: string
              description: "PO number."
          call: "sap.get-po"
          with:
            po_number: "{{po_number}}"
          outputParameters:
            - name: vendor
              type: string
              mapping: "$.order.vendor"
            - name: status
              type: string
              mapping: "$.order.status"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://sap.cosco.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: purchase-orders
          path: "/purchase-orders/{{po_number}}"
          inputParameters:
            - name: po_number
              in: path
          operations:
            - name: get-po
              method: GET

Looks up a SAP purchase order for marine supplies, returning status, vendor, total value, and delivery date.

naftiko: "0.5"
info:
  label: "SAP Purchase Order Status"
  description: "Looks up a SAP purchase order for marine supplies, returning status, vendor, total value, and delivery date."
  tags:
    - procurement
    - sap
    - purchase-order
capability:
  exposes:
    - type: mcp
      namespace: procurement
      port: 8080
      tools:
        - name: get-purchase-order
          description: "Look up a SAP purchase order. Returns status, vendor, value, and delivery date."
          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"
            - name: delivery_date
              type: string
              mapping: "$.d.DeliveryDate"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://cosco-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

Remediates vulnerabilities at COSCO Shipping via scanning, Jira, and Slack.

naftiko: "0.5"
info:
  label: "Security Vulnerability Remediation Pipeline"
  description: "Remediates vulnerabilities at COSCO Shipping via scanning, Jira, and Slack."
  tags:
    - security
    - vulnerability-management
    - jira
capability:
  exposes:
    - type: mcp
      namespace: vuln-fix
      port: 8080
      tools:
        - name: remediate
          description: "Fix vulnerabilities at COSCO Shipping."
          inputParameters:
            - name: target
              in: body
              type: string
              description: "Target."
            - name: policy
              in: body
              type: string
              description: "Policy."
          steps:
            - name: scan
              type: call
              call: "qualys.scan"
              with:
                target: "{{target}}"
                policy: "{{policy}}"
            - name: prioritize
              type: call
              call: "security.prioritize"
              with:
                scan: "{{scan.id}}"
            - name: ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "SEC"
                summary: "Vulns: {{prioritize.critical}} critical"
            - name: notify
              type: call
              call: "slack.post-message"
              with:
                channel: "#security"
                text: "Scan: {{prioritize.critical}} critical"
  consumes:
    - type: http
      namespace: qualys
      baseUri: "https://qualysapi.qualys.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.qualys_token"
      resources:
        - name: scans
          path: "/fo/scan"
          operations:
            - name: scan
              method: POST
    - type: http
      namespace: security
      baseUri: "https://security.cosco.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.security_token"
      resources:
        - name: vulns
          path: "/prioritize"
          operations:
            - name: prioritize
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://cosco.com.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Retrieves a ServiceNow change request, returning state, approval status, planned start, and risk assessment.

naftiko: "0.5"
info:
  label: "ServiceNow Change Request Status"
  description: "Retrieves a ServiceNow change request, returning state, approval status, planned start, and risk assessment."
  tags:
    - change-management
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: change-management
      port: 8080
      tools:
        - name: get-change-request
          description: "Look up a ServiceNow change request. Returns state, approval, planned start, and risk."
          inputParameters:
            - name: change_number
              in: body
              type: string
              description: "The change request number."
          call: "servicenow.get-change"
          with:
            change_number: "{{change_number}}"
          outputParameters:
            - name: state
              type: string
              mapping: "$.result.state"
            - name: approval
              type: string
              mapping: "$.result.approval"
            - name: planned_start
              type: string
              mapping: "$.result.start_date"
            - name: risk
              type: string
              mapping: "$.result.risk"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://cosco.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: changes
          path: "/table/change_request"
          operations:
            - name: get-change
              method: GET

Checks IT incident in ServiceNow for COSCO Shipping.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Detail Check"
  description: "Checks IT incident in ServiceNow for COSCO Shipping."
  tags:
    - it-service
    - servicenow
    - incident-management
capability:
  exposes:
    - type: mcp
      namespace: snow-incident
      port: 8080
      tools:
        - name: check-incident
          description: "Check incident at COSCO Shipping."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "Incident number."
          call: "servicenow.get-incident"
          with:
            number: "{{incident_number}}"
          outputParameters:
            - name: state
              type: string
              mapping: "$.result.state"
            - name: priority
              type: string
              mapping: "$.result.priority"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://cosco.com.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: get-incident
              method: GET

Retrieves an IT incident from ServiceNow, returning short description, priority, state, and assigned group.

naftiko: "0.5"
info:
  label: "ServiceNow IT Incident Lookup"
  description: "Retrieves an IT incident from ServiceNow, returning short description, priority, state, and assigned group."
  tags:
    - it-service
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: it-service
      port: 8080
      tools:
        - name: get-incident
          description: "Look up a ServiceNow incident. Returns description, priority, state, and assigned group."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "The ServiceNow incident number."
          call: "servicenow.get-incident"
          with:
            number: "{{incident_number}}"
          outputParameters:
            - name: short_description
              type: string
              mapping: "$.result.short_description"
            - name: priority
              type: string
              mapping: "$.result.priority"
            - name: state
              type: string
              mapping: "$.result.state"
            - name: assigned_group
              type: string
              mapping: "$.result.assignment_group.display_value"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://cosco.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-incident
              method: GET

Retrieves SharePoint metadata at COSCO Shipping.

naftiko: "0.5"
info:
  label: "SharePoint File Metadata"
  description: "Retrieves SharePoint metadata at COSCO Shipping."
  tags:
    - document-management
    - sharepoint
    - collaboration
capability:
  exposes:
    - type: mcp
      namespace: sp-docs
      port: 8080
      tools:
        - name: get-file
          description: "Look up file at COSCO Shipping."
          inputParameters:
            - name: site_id
              in: body
              type: string
              description: "Site ID."
            - name: file_path
              in: body
              type: string
              description: "Path."
          call: "sharepoint.get-file"
          with:
            site_id: "{{site_id}}"
            path: "{{file_path}}"
          outputParameters:
            - name: name
              type: string
              mapping: "$.name"
            - name: size
              type: number
              mapping: "$.size"
  consumes:
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.microsoft_graph_token"
      resources:
        - name: files
          path: "/sites/{{site_id}}/drive/root:/{{path}}"
          inputParameters:
            - name: site_id
              in: path
            - name: path
              in: path
          operations:
            - name: get-file
              method: GET

Searches the document archive for shipping documents by B/L number, returning document type, upload date, and download URL.

naftiko: "0.5"
info:
  label: "Shipping Document Archive Search"
  description: "Searches the document archive for shipping documents by B/L number, returning document type, upload date, and download URL."
  tags: [documentation, archive, search]
capability:
  exposes:
    - type: mcp
      namespace: doc-archive
      port: 8080
      tools:
        - name: search-shipping-docs
          description: "Search document archive by B/L number. Returns document list."
          inputParameters:
            - name: bl_number
              in: body
              type: string
              description: "The bill of lading number."
          call: "doc-service.search-documents"
          with: { bl_number: "{{bl_number}}" }
          outputParameters:
            - name: documents
              type: string
              mapping: "$.results"
  consumes:
    - type: http
      namespace: doc-service
      baseUri: "https://api.internal.cosco.com/documents/v1"
      authentication: { type: bearer, token: "$secrets.doc_token" }
      resources:
        - name: search
          path: "/search"
          operations: [{ name: search-documents, method: GET }]

Monitors SLAs at COSCO Shipping via Datadog and Slack.

naftiko: "0.5"
info:
  label: "SLA Monitoring Pipeline"
  description: "Monitors SLAs at COSCO Shipping via Datadog and Slack."
  tags:
    - operations
    - sla
    - datadog
    - slack
capability:
  exposes:
    - type: mcp
      namespace: sla-monitor
      port: 8080
      tools:
        - name: check-sla
          description: "Monitor SLAs at COSCO Shipping."
          inputParameters:
            - name: service
              in: body
              type: string
              description: "Service."
            - name: target
              in: body
              type: number
              description: "SLA target %."
          steps:
            - name: metrics
              type: call
              call: "datadog.get-sla"
              with:
                service: "{{service}}"
            - name: check
              type: call
              call: "analytics.check-sla"
              with:
                uptime: "{{metrics.uptime}}"
                target: "{{target}}"
            - name: alert
              type: call
              call: "slack.post-message"
              with:
                channel: "#ops"
                text: "SLA: {{service}} at {{metrics.uptime}}% (target: {{target}}%)"
            - name: log
              type: call
              call: "servicenow.create-incident"
              with:
                desc: "SLA breach: {{service}}"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: metrics
          path: "/metrics"
          operations:
            - name: get-sla
              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
    - type: http
      namespace: servicenow
      baseUri: "https://cosco.com.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST

Checks spare parts inventory, creates requisitions if needed, and notifies the technical superintendent.

naftiko: "0.5"
info:
  label: "Spare Parts Inventory Pipeline"
  description: "Checks spare parts inventory, creates requisitions if needed, and notifies the technical superintendent."
  tags: [spare-parts, inventory, sap, procurement]
capability:
  exposes:
    - type: mcp
      namespace: spare-parts
      port: 8080
      tools:
        - name: check-spare-parts
          description: "Check stock, create requisition if needed, and notify superintendent."
          inputParameters:
            - name: part_number
              in: body
              type: string
              description: "The spare part material number."
            - name: vessel_code
              in: body
              type: string
              description: "The requesting vessel."
            - name: quantity_needed
              in: body
              type: number
              description: "Quantity needed."
          steps:
            - name: check-stock
              type: call
              call: "sap.check-material-stock"
              with: { material: "{{part_number}}" }
            - name: create-requisition
              type: call
              call: "sap.create-purchase-requisition"
              with: { material: "{{part_number}}", quantity: "{{quantity_needed}}" }
            - name: notify-superintendent
              type: call
              call: "msteams.send-message"
              with: { channel_id: "technical-fleet", text: "Spare part: {{part_number}} x{{quantity_needed}} for {{vessel_code}}. Stock: {{check-stock.available_qty}}. PR: {{create-requisition.pr_number}}." }
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://cosco-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV"
      authentication: { type: basic, username: "$secrets.sap_user", password: "$secrets.sap_password" }
      resources:
        - name: stock
          path: "/A_MatlStkInAcctMod"
          operations: [{ name: check-material-stock, method: GET }]
        - name: requisitions
          path: "/A_PurchaseRequisition"
          operations: [{ name: create-purchase-requisition, method: POST }]
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication: { type: bearer, token: "$secrets.msgraph_token" }
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters: [{ name: channel_id, in: path }]
          operations: [{ name: send-message, method: POST }]

Searches Splunk at COSCO Shipping.

naftiko: "0.5"
info:
  label: "Splunk Log Search"
  description: "Searches Splunk at COSCO Shipping."
  tags:
    - security
    - splunk
    - logging
capability:
  exposes:
    - type: mcp
      namespace: splunk-search
      port: 8080
      tools:
        - name: search-logs
          description: "Search logs at COSCO Shipping."
          inputParameters:
            - name: query
              in: body
              type: string
              description: "SPL query."
          call: "splunk.search"
          with:
            query: "{{query}}"
          outputParameters:
            - name: count
              type: number
              mapping: "$.results.count"
  consumes:
    - type: http
      namespace: splunk
      baseUri: "https://splunk.cosco.com:8089/services"
      authentication:
        type: bearer
        token: "$secrets.splunk_token"
      resources:
        - name: search
          path: "/search/jobs"
          operations:
            - name: search
              method: POST

Retrieves Teams activity at COSCO Shipping.

naftiko: "0.5"
info:
  label: "Teams Channel Activity"
  description: "Retrieves Teams activity at COSCO Shipping."
  tags:
    - communications
    - microsoft-teams
    - analytics
capability:
  exposes:
    - type: mcp
      namespace: teams-activity
      port: 8080
      tools:
        - name: get-activity
          description: "Check Teams activity at COSCO Shipping."
          inputParameters:
            - name: team_id
              in: body
              type: string
              description: "Team ID."
            - name: channel_id
              in: body
              type: string
              description: "Channel ID."
          call: "teams.get-messages"
          with:
            team_id: "{{team_id}}"
            channel_id: "{{channel_id}}"
          outputParameters:
            - name: count
              type: number
              mapping: "$.value.length"
  consumes:
    - type: http
      namespace: teams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.microsoft_graph_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: get-messages
              method: GET

Retrieves the operational status of terminal equipment (cranes, reach stackers) from the TOS, returning equipment ID, status, utilization rate, and next maintenance date.

naftiko: "0.5"
info:
  label: "Terminal Equipment Status"
  description: "Retrieves the operational status of terminal equipment (cranes, reach stackers) from the TOS, returning equipment ID, status, utilization rate, and next maintenance date."
  tags:
    - terminal
    - equipment
    - tos
capability:
  exposes:
    - type: mcp
      namespace: terminal-equipment
      port: 8080
      tools:
        - name: get-equipment-status
          description: "Look up terminal equipment status in TOS. Returns ID, status, utilization, and next maintenance."
          inputParameters:
            - name: equipment_id
              in: body
              type: string
              description: "The terminal equipment identifier."
          call: "tos.get-equipment"
          with:
            equipment_id: "{{equipment_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.equipment.operationalStatus"
            - name: utilization_rate
              type: number
              mapping: "$.equipment.utilizationRate"
            - name: next_maintenance
              type: string
              mapping: "$.equipment.nextMaintenanceDate"
            - name: equipment_type
              type: string
              mapping: "$.equipment.type"
  consumes:
    - type: http
      namespace: tos
      baseUri: "https://api.internal.cosco.com/tos/v1"
      authentication:
        type: bearer
        token: "$secrets.tos_token"
      resources:
        - name: equipment
          path: "/equipment/{{equipment_id}}"
          inputParameters:
            - name: equipment_id
              in: path
          operations:
            - name: get-equipment
              method: GET

Retrieves the gate-in or gate-out transaction for a container at a terminal, returning transaction type, timestamp, and truck details.

naftiko: "0.5"
info:
  label: "Terminal Gate Transaction"
  description: "Retrieves the gate-in or gate-out transaction for a container at a terminal, returning transaction type, timestamp, and truck details."
  tags: [terminal, gate-operations, container-tracking]
capability:
  exposes:
    - type: mcp
      namespace: terminal-gate
      port: 8080
      tools:
        - name: get-gate-transaction
          description: "Look up container gate transaction. Returns type, timestamp, and truck details."
          inputParameters:
            - name: container_number
              in: body
              type: string
              description: "The container number."
            - name: terminal_code
              in: body
              type: string
              description: "The terminal code."
          call: "tos.get-gate-transaction"
          with: { container_number: "{{container_number}}", terminal: "{{terminal_code}}" }
          outputParameters:
            - name: transaction_type
              type: string
              mapping: "$.gate.transactionType"
            - name: timestamp
              type: string
              mapping: "$.gate.timestamp"
            - name: truck_plate
              type: string
              mapping: "$.gate.truckPlate"
  consumes:
    - type: http
      namespace: tos
      baseUri: "https://api.internal.cosco.com/tos/v1"
      authentication: { type: bearer, token: "$secrets.tos_token" }
      resources:
        - name: gate
          path: "/terminals/{{terminal}}/gate/{{container_number}}"
          inputParameters: [{ name: terminal, in: path }, { name: container_number, in: path }]
          operations: [{ name: get-gate-transaction, method: GET }]

Checks Terraform workspace at COSCO Shipping.

naftiko: "0.5"
info:
  label: "Terraform Workspace Check"
  description: "Checks Terraform workspace at COSCO Shipping."
  tags:
    - infrastructure
    - terraform
    - iac
capability:
  exposes:
    - type: mcp
      namespace: tf-ws
      port: 8080
      tools:
        - name: check-ws
          description: "Check workspace at COSCO Shipping."
          inputParameters:
            - name: workspace_id
              in: body
              type: string
              description: "Workspace ID."
          call: "terraform.get-ws"
          with:
            workspace_id: "{{workspace_id}}"
          outputParameters:
            - name: name
              type: string
              mapping: "$.data.attributes.name"
  consumes:
    - type: http
      namespace: terraform
      baseUri: "https://app.terraform.io/api/v2"
      authentication:
        type: bearer
        token: "$secrets.terraform_token"
      resources:
        - name: workspaces
          path: "/workspaces/{{workspace_id}}"
          inputParameters:
            - name: workspace_id
              in: path
          operations:
            - name: get-ws
              method: GET

Retrieves booking forecasts for a trade lane, compares with vessel capacity, identifies overbooked voyages, and alerts the commercial team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Trade Lane Capacity Planning Pipeline"
  description: "Retrieves booking forecasts for a trade lane, compares with vessel capacity, identifies overbooked voyages, and alerts the commercial team via Microsoft Teams."
  tags:
    - capacity-planning
    - commercial
    - trade-lane
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: capacity-planning
      port: 8080
      tools:
        - name: check-trade-lane-capacity
          description: "Given a trade lane, compare booking forecasts with capacity and alert on overbookings."
          inputParameters:
            - name: trade_lane
              in: body
              type: string
              description: "The trade lane code (e.g., FE-ECNA for Far East to East Coast North America)."
            - name: weeks_ahead
              in: body
              type: number
              description: "Number of weeks ahead to forecast."
          steps:
            - name: get-forecast
              type: call
              call: "commercial.get-booking-forecast"
              with:
                trade_lane: "{{trade_lane}}"
                weeks: "{{weeks_ahead}}"
            - name: get-capacity
              type: call
              call: "vessel-ops.get-trade-lane-capacity"
              with:
                trade_lane: "{{trade_lane}}"
                weeks: "{{weeks_ahead}}"
            - name: alert-commercial
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "commercial-ops"
                text: "Capacity alert for {{trade_lane}} ({{weeks_ahead}}-week outlook): Forecast TEU: {{get-forecast.total_teu}}. Available capacity: {{get-capacity.available_teu}} TEU. Utilization: {{get-capacity.utilization_pct}}%."
  consumes:
    - type: http
      namespace: commercial
      baseUri: "https://api.internal.cosco.com/commercial/v1"
      authentication:
        type: bearer
        token: "$secrets.commercial_token"
      resources:
        - name: forecasts
          path: "/forecasts/bookings"
          operations:
            - name: get-booking-forecast
              method: GET
    - type: http
      namespace: vessel-ops
      baseUri: "https://api.internal.cosco.com/vessel-ops/v1"
      authentication:
        type: bearer
        token: "$secrets.vessel_ops_token"
      resources:
        - name: capacity
          path: "/trade-lanes/{{trade_lane}}/capacity"
          inputParameters:
            - name: trade_lane
              in: path
          operations:
            - name: get-trade-lane-capacity
              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/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Checks Vault secret at COSCO Shipping.

naftiko: "0.5"
info:
  label: "Vault Secret Metadata"
  description: "Checks Vault secret at COSCO Shipping."
  tags:
    - security
    - vault
    - secrets-management
capability:
  exposes:
    - type: mcp
      namespace: vault
      port: 8080
      tools:
        - name: check-secret
          description: "Check secret at COSCO Shipping."
          inputParameters:
            - name: path
              in: body
              type: string
              description: "Secret path."
          call: "vault.get-metadata"
          with:
            path: "{{path}}"
          outputParameters:
            - name: version
              type: number
              mapping: "$.data.current_version"
  consumes:
    - type: http
      namespace: vault
      baseUri: "https://vault.cosco.com/v1"
      authentication:
        type: bearer
        token: "$secrets.vault_token"
      resources:
        - name: secrets
          path: "/secret/metadata/{{path}}"
          inputParameters:
            - name: path
              in: path
          operations:
            - name: get-metadata
              method: GET

Processes invoices at COSCO Shipping via OCR, SAP matching, approval, and Oracle recording.

naftiko: "0.5"
info:
  label: "Vendor Invoice Processing Pipeline"
  description: "Processes invoices at COSCO Shipping via OCR, SAP matching, approval, and Oracle recording."
  tags:
    - finance
    - accounts-payable
    - sap
    - oracle
capability:
  exposes:
    - type: mcp
      namespace: invoice-proc
      port: 8080
      tools:
        - name: process-invoice
          description: "Process invoices at COSCO Shipping."
          inputParameters:
            - name: invoice_id
              in: body
              type: string
              description: "Invoice ID."
            - name: vendor_id
              in: body
              type: string
              description: "Vendor ID."
          steps:
            - name: extract
              type: call
              call: "ocr.extract"
              with:
                doc: "{{invoice_id}}"
            - name: match
              type: call
              call: "sap.match-po"
              with:
                vendor: "{{vendor_id}}"
                amount: "{{extract.total}}"
            - name: approve
              type: call
              call: "workflow.submit"
              with:
                invoice: "{{invoice_id}}"
            - name: record
              type: call
              call: "oracle.create-payment"
              with:
                invoice: "{{invoice_id}}"
  consumes:
    - type: http
      namespace: ocr
      baseUri: "https://ocr.cosco.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ocr_token"
      resources:
        - name: invoices
          path: "/extract"
          operations:
            - name: extract
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://sap.cosco.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: pos
          path: "/match"
          operations:
            - name: match-po
              method: POST
    - type: http
      namespace: workflow
      baseUri: "https://workflow.cosco.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workflow_token"
      resources:
        - name: approvals
          path: "/submit"
          operations:
            - name: submit
              method: POST
    - type: http
      namespace: oracle
      baseUri: "https://oracle.cosco.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_token"
      resources:
        - name: payments
          path: "/payments"
          operations:
            - name: create-payment
              method: POST

Processes approved vendor invoices through payment, records in treasury, and notifies AP team.

naftiko: "0.5"
info:
  label: "Vendor Payment Processing Pipeline"
  description: "Processes approved vendor invoices through payment, records in treasury, and notifies AP team."
  tags: [finance, sap, treasury, microsoft-teams, accounts-payable]
capability:
  exposes:
    - type: mcp
      namespace: vendor-payments
      port: 8080
      tools:
        - name: process-vendor-payment
          description: "Process payment for approved SAP invoice and notify AP."
          inputParameters:
            - name: invoice_number
              in: body
              type: string
              description: "The SAP invoice number."
          steps:
            - name: get-invoice
              type: call
              call: "sap.get-billing-doc"
              with: { invoice_number: "{{invoice_number}}" }
            - name: process-payment
              type: call
              call: "treasury.execute-payment"
              with: { vendor_id: "{{get-invoice.vendor_id}}", amount: "{{get-invoice.amount}}" }
            - name: notify-ap
              type: call
              call: "msteams.send-message"
              with: { channel_id: "accounts-payable", text: "Payment processed: {{invoice_number}} - ${{get-invoice.amount}} to {{get-invoice.vendor_name}}. Ref: {{process-payment.payment_ref}}." }
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://cosco-s4.sap.com/sap/opu/odata/sap/API_BILLING_DOCUMENT_SRV"
      authentication: { type: basic, username: "$secrets.sap_user", password: "$secrets.sap_password" }
      resources:
        - name: billing-docs
          path: "/A_BillingDocument('{{invoice_number}}')"
          inputParameters: [{ name: invoice_number, in: path }]
          operations: [{ name: get-billing-doc, method: GET }]
    - type: http
      namespace: treasury
      baseUri: "https://api.internal.cosco.com/treasury/v1"
      authentication: { type: bearer, token: "$secrets.treasury_token" }
      resources:
        - name: payments
          path: "/payments"
          operations: [{ name: execute-payment, method: POST }]
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication: { type: bearer, token: "$secrets.msgraph_token" }
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters: [{ name: channel_id, in: path }]
          operations: [{ name: send-message, method: POST }]

Reviews vendors at COSCO Shipping.

naftiko: "0.5"
info:
  label: "Quarterly Vendor Review Pipeline"
  description: "Reviews vendors at COSCO Shipping."
  tags:
    - procurement
    - vendor-management
    - review
capability:
  exposes:
    - type: mcp
      namespace: vendor-review
      port: 8080
      tools:
        - name: review-vendor
          description: "Review vendors at COSCO Shipping."
          inputParameters:
            - name: vendor_id
              in: body
              type: string
              description: "Vendor ID."
            - name: quarter
              in: body
              type: string
              description: "Quarter."
          steps:
            - name: perf
              type: call
              call: "procurement.get-metrics"
              with:
                vendor: "{{vendor_id}}"
                q: "{{quarter}}"
            - name: scorecard
              type: call
              call: "analytics.scorecard"
              with:
                data: "{{perf.data}}"
            - name: invite
              type: call
              call: "email.send"
              with:
                to: "{{perf.contact}}"
                subject: "QBR - {{quarter}}"
            - name: schedule
              type: call
              call: "calendar.create-event"
              with:
                title: "QBR - {{perf.name}}"
  consumes:
    - type: http
      namespace: procurement
      baseUri: "https://procurement.cosco.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.procurement_token"
      resources:
        - name: vendors
          path: "/vendors/{{vendor}}/metrics"
          inputParameters:
            - name: vendor
              in: path
          operations:
            - name: get-metrics
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://analytics.cosco.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: scorecards
          path: "/compute"
          operations:
            - name: scorecard
              method: POST
    - type: http
      namespace: email
      baseUri: "https://email.cosco.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.email_token"
      resources:
        - name: messages
          path: "/send"
          operations:
            - name: send
              method: POST
    - type: http
      namespace: calendar
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.microsoft_graph_token"
      resources:
        - name: events
          path: "/users/proc/events"
          operations:
            - name: create-event
              method: POST

Retrieves the current bunker fuel levels for a vessel, returning heavy fuel oil, marine diesel, and LNG quantities.

naftiko: "0.5"
info:
  label: "Vessel Bunker Fuel Level"
  description: "Retrieves the current bunker fuel levels for a vessel, returning heavy fuel oil, marine diesel, and LNG quantities."
  tags:
    - bunker
    - fuel-management
    - vessel-ops
capability:
  exposes:
    - type: mcp
      namespace: fuel-management
      port: 8080
      tools:
        - name: get-bunker-levels
          description: "Look up vessel bunker fuel levels. Returns HFO, MDO, and LNG quantities in metric tons."
          inputParameters:
            - name: vessel_code
              in: body
              type: string
              description: "The vessel code."
          call: "vessel-ops.get-bunker"
          with:
            vessel_code: "{{vessel_code}}"
          outputParameters:
            - name: hfo_mt
              type: number
              mapping: "$.bunker.hfo"
            - name: mdo_mt
              type: number
              mapping: "$.bunker.mdo"
            - name: lng_mt
              type: number
              mapping: "$.bunker.lng"
            - name: last_bunkering
              type: string
              mapping: "$.bunker.lastBunkeringDate"
  consumes:
    - type: http
      namespace: vessel-ops
      baseUri: "https://api.internal.cosco.com/vessel-ops/v1"
      authentication:
        type: bearer
        token: "$secrets.vessel_ops_token"
      resources:
        - name: bunker
          path: "/vessels/{{vessel_code}}/bunker"
          inputParameters:
            - name: vessel_code
              in: path
          operations:
            - name: get-bunker
              method: GET

Retrieves classification survey status including next survey type, due date, and class status.

naftiko: "0.5"
info:
  label: "Vessel Classification Survey Status"
  description: "Retrieves classification survey status including next survey type, due date, and class status."
  tags: [classification, vessel-compliance, surveys]
capability:
  exposes:
    - type: mcp
      namespace: vessel-classification
      port: 8080
      tools:
        - name: get-survey-status
          description: "Look up vessel classification surveys. Returns class status and next survey due."
          inputParameters:
            - name: vessel_code
              in: body
              type: string
              description: "The vessel code."
          call: "classification.get-surveys"
          with: { vessel_code: "{{vessel_code}}" }
          outputParameters:
            - name: class_status
              type: string
              mapping: "$.classification.classStatus"
            - name: next_survey_due
              type: string
              mapping: "$.classification.nextSurvey.dueDate"
  consumes:
    - type: http
      namespace: classification
      baseUri: "https://api.internal.cosco.com/classification/v1"
      authentication: { type: bearer, token: "$secrets.classification_token" }
      resources:
        - name: surveys
          path: "/vessels/{{vessel_code}}/surveys"
          inputParameters: [{ name: vessel_code, in: path }]
          operations: [{ name: get-surveys, method: GET }]

Processes crew rotation by pulling manifests, booking travel, and notifying the vessel master.

naftiko: "0.5"
info:
  label: "Vessel Crew Rotation Pipeline"
  description: "Processes crew rotation by pulling manifests, booking travel, and notifying the vessel master."
  tags: [crew-management, rotation, travel, messaging]
capability:
  exposes:
    - type: mcp
      namespace: crew-rotation
      port: 8080
      tools:
        - name: process-crew-rotation
          description: "Pull crew manifest, book travel, and notify vessel for crew change."
          inputParameters:
            - name: vessel_code
              in: body
              type: string
              description: "The vessel code."
            - name: port_code
              in: body
              type: string
              description: "The crew change port."
          steps:
            - name: get-rotation-plan
              type: call
              call: "crew-mgmt.get-rotation-plan"
              with: { vessel_code: "{{vessel_code}}" }
            - name: book-travel
              type: call
              call: "travel-service.book-crew-travel"
              with: { crew_list: "{{get-rotation-plan.joining_crew}}", destination_port: "{{port_code}}" }
            - name: notify-vessel
              type: call
              call: "messaging.send-vessel-notification"
              with: { vessel_code: "{{vessel_code}}", message: "Crew change at {{port_code}}. {{get-rotation-plan.joining_count}} joining." }
  consumes:
    - type: http
      namespace: crew-mgmt
      baseUri: "https://api.internal.cosco.com/crew/v1"
      authentication: { type: bearer, token: "$secrets.crew_mgmt_token" }
      resources:
        - name: rotations
          path: "/vessels/{{vessel_code}}/rotation-plan"
          inputParameters: [{ name: vessel_code, in: path }]
          operations: [{ name: get-rotation-plan, method: GET }]
    - type: http
      namespace: travel-service
      baseUri: "https://api.internal.cosco.com/travel/v1"
      authentication: { type: bearer, token: "$secrets.travel_token" }
      resources:
        - name: bookings
          path: "/crew-travel"
          operations: [{ name: book-crew-travel, method: POST }]
    - type: http
      namespace: messaging
      baseUri: "https://api.internal.cosco.com/messaging/v1"
      authentication: { type: bearer, token: "$secrets.messaging_token" }
      resources:
        - name: vessel-notifications
          path: "/vessel-notifications"
          operations: [{ name: send-vessel-notification, method: POST }]

When a vessel is due for dry dock, creates a maintenance project in SAP, coordinates with the shipyard via the procurement system, and notifies the fleet management team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Vessel Dry Dock Scheduling Pipeline"
  description: "When a vessel is due for dry dock, creates a maintenance project in SAP, coordinates with the shipyard via the procurement system, and notifies the fleet management team via Microsoft Teams."
  tags:
    - fleet-management
    - dry-dock
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: fleet-maintenance
      port: 8080
      tools:
        - name: schedule-dry-dock
          description: "Given vessel and shipyard details, create the maintenance project, coordinate procurement, and notify fleet management."
          inputParameters:
            - name: vessel_code
              in: body
              type: string
              description: "The vessel code."
            - name: shipyard_id
              in: body
              type: string
              description: "The shipyard identifier."
            - name: planned_start
              in: body
              type: string
              description: "Planned dry dock start date."
            - name: duration_days
              in: body
              type: number
              description: "Expected dry dock duration in days."
          steps:
            - name: create-project
              type: call
              call: "sap.create-maintenance-project"
              with:
                vessel_code: "{{vessel_code}}"
                project_type: "DRY_DOCK"
                planned_start: "{{planned_start}}"
                duration: "{{duration_days}}"
            - name: coordinate-shipyard
              type: call
              call: "procurement.create-shipyard-order"
              with:
                shipyard_id: "{{shipyard_id}}"
                vessel_code: "{{vessel_code}}"
                project_number: "{{create-project.project_number}}"
                start_date: "{{planned_start}}"
            - name: notify-fleet
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "fleet-management"
                text: "Dry dock scheduled: Vessel {{vessel_code}} at shipyard {{shipyard_id}}. Start: {{planned_start}}. Duration: {{duration_days}} days. Project: {{create-project.project_number}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://cosco-s4.sap.com/sap/opu/odata/sap/API_MAINTENANCEORDER"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: projects
          path: "/MaintenanceOrder"
          operations:
            - name: create-maintenance-project
              method: POST
    - type: http
      namespace: procurement
      baseUri: "https://api.internal.cosco.com/procurement/v1"
      authentication:
        type: bearer
        token: "$secrets.procurement_token"
      resources:
        - name: shipyard-orders
          path: "/shipyard-orders"
          operations:
            - name: create-shipyard-order
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Pulls fuel consumption data from the vessel reporting system, calculates CO2 emissions per IMO DCS requirements, and submits the report to the compliance system.

naftiko: "0.5"
info:
  label: "Vessel Emissions Reporting Pipeline"
  description: "Pulls fuel consumption data from the vessel reporting system, calculates CO2 emissions per IMO DCS requirements, and submits the report to the compliance system."
  tags:
    - emissions
    - sustainability
    - imo-compliance
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: emissions-reporting
      port: 8080
      tools:
        - name: generate-emissions-report
          description: "Given a vessel and reporting period, calculate emissions and submit compliance report."
          inputParameters:
            - name: vessel_code
              in: body
              type: string
              description: "The vessel code."
            - name: reporting_year
              in: body
              type: string
              description: "The reporting year."
          steps:
            - name: get-fuel-data
              type: call
              call: "vessel-ops.get-fuel-consumption"
              with:
                vessel_code: "{{vessel_code}}"
                year: "{{reporting_year}}"
            - name: calculate-emissions
              type: call
              call: "emissions-engine.calculate"
              with:
                hfo_consumed: "{{get-fuel-data.hfo_mt}}"
                mdo_consumed: "{{get-fuel-data.mdo_mt}}"
                lng_consumed: "{{get-fuel-data.lng_mt}}"
                distance_nm: "{{get-fuel-data.total_distance_nm}}"
            - name: submit-report
              type: call
              call: "compliance.submit-dcs-report"
              with:
                vessel_code: "{{vessel_code}}"
                year: "{{reporting_year}}"
                co2_total_mt: "{{calculate-emissions.co2_total}}"
                eeoi: "{{calculate-emissions.eeoi}}"
                cii_rating: "{{calculate-emissions.cii_rating}}"
  consumes:
    - type: http
      namespace: vessel-ops
      baseUri: "https://api.internal.cosco.com/vessel-ops/v1"
      authentication:
        type: bearer
        token: "$secrets.vessel_ops_token"
      resources:
        - name: fuel
          path: "/vessels/{{vessel_code}}/fuel-consumption"
          inputParameters:
            - name: vessel_code
              in: path
          operations:
            - name: get-fuel-consumption
              method: GET
    - type: http
      namespace: emissions-engine
      baseUri: "https://api.internal.cosco.com/emissions/v1"
      authentication:
        type: bearer
        token: "$secrets.emissions_token"
      resources:
        - name: calculations
          path: "/calculate"
          operations:
            - name: calculate
              method: POST
    - type: http
      namespace: compliance
      baseUri: "https://api.internal.cosco.com/compliance/v1"
      authentication:
        type: bearer
        token: "$secrets.compliance_token"
      resources:
        - name: dcs-reports
          path: "/dcs-reports"
          operations:
            - name: submit-dcs-report
              method: POST

Retrieves P&I insurance certificate details for a vessel.

naftiko: "0.5"
info:
  label: "Vessel Insurance Certificate Lookup"
  description: "Retrieves P&I insurance certificate details for a vessel."
  tags: [insurance, p-and-i, vessel-compliance]
capability:
  exposes:
    - type: mcp
      namespace: vessel-insurance
      port: 8080
      tools:
        - name: get-insurance-certificate
          description: "Look up vessel P&I insurance. Returns policy number, coverage, expiry, and insurer."
          inputParameters:
            - name: vessel_code
              in: body
              type: string
              description: "The vessel code."
          call: "insurance.get-certificate"
          with: { vessel_code: "{{vessel_code}}" }
          outputParameters:
            - name: policy_number
              type: string
              mapping: "$.certificate.policyNumber"
            - name: expiry_date
              type: string
              mapping: "$.certificate.expiryDate"
  consumes:
    - type: http
      namespace: insurance
      baseUri: "https://api.internal.cosco.com/insurance/v1"
      authentication: { type: bearer, token: "$secrets.insurance_token" }
      resources:
        - name: certificates
          path: "/vessels/{{vessel_code}}/certificates"
          inputParameters: [{ name: vessel_code, in: path }]
          operations: [{ name: get-certificate, method: GET }]

Retrieves maintenance history for a vessel from SAP Plant Maintenance, returning completed work orders, total costs, and last major overhaul date.

naftiko: "0.5"
info:
  label: "Vessel Maintenance History"
  description: "Retrieves maintenance history for a vessel from SAP Plant Maintenance, returning completed work orders, total costs, and last major overhaul date."
  tags: [vessel-maintenance, sap, fleet-management]
capability:
  exposes:
    - type: mcp
      namespace: vessel-maintenance
      port: 8080
      tools:
        - name: get-maintenance-history
          description: "Look up vessel maintenance history. Returns completed WOs, costs, and last overhaul."
          inputParameters:
            - name: vessel_code
              in: body
              type: string
              description: "The vessel code."
          call: "sap.get-vessel-maintenance"
          with: { vessel_code: "{{vessel_code}}" }
          outputParameters:
            - name: completed_orders
              type: number
              mapping: "$.maintenance.completedCount"
            - name: total_cost
              type: number
              mapping: "$.maintenance.totalCost"
            - name: last_overhaul
              type: string
              mapping: "$.maintenance.lastMajorOverhaul"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://cosco-s4.sap.com/sap/opu/odata/sap/API_MAINTENANCEORDER"
      authentication: { type: basic, username: "$secrets.sap_user", password: "$secrets.sap_password" }
      resources:
        - name: orders
          path: "/MaintenanceOrder"
          operations: [{ name: get-vessel-maintenance, method: GET }]

Pulls vessel performance data from the noon report system, runs efficiency analysis in the analytics platform, and generates a fleet performance report for management.

naftiko: "0.5"
info:
  label: "Vessel Performance Analytics Pipeline"
  description: "Pulls vessel performance data from the noon report system, runs efficiency analysis in the analytics platform, and generates a fleet performance report for management."
  tags:
    - vessel-performance
    - fleet-analytics
    - reporting
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: vessel-performance
      port: 8080
      tools:
        - name: analyze-vessel-performance
          description: "Given a vessel and date range, pull noon reports, run performance analysis, and notify management."
          inputParameters:
            - name: vessel_code
              in: body
              type: string
              description: "The vessel code."
            - name: start_date
              in: body
              type: string
              description: "Analysis start date."
            - name: end_date
              in: body
              type: string
              description: "Analysis end date."
          steps:
            - name: get-noon-reports
              type: call
              call: "vessel-ops.get-noon-reports"
              with:
                vessel_code: "{{vessel_code}}"
                start: "{{start_date}}"
                end: "{{end_date}}"
            - name: run-analysis
              type: call
              call: "analytics.analyze-performance"
              with:
                vessel_code: "{{vessel_code}}"
                noon_data: "{{get-noon-reports.reports}}"
            - name: notify-management
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "fleet-performance"
                text: "Vessel {{vessel_code}} performance ({{start_date}} to {{end_date}}): Avg speed: {{run-analysis.avg_speed}} kts. Fuel efficiency: {{run-analysis.fuel_efficiency}} MT/day. CII: {{run-analysis.cii_rating}}."
  consumes:
    - type: http
      namespace: vessel-ops
      baseUri: "https://api.internal.cosco.com/vessel-ops/v1"
      authentication:
        type: bearer
        token: "$secrets.vessel_ops_token"
      resources:
        - name: noon-reports
          path: "/vessels/{{vessel_code}}/noon-reports"
          inputParameters:
            - name: vessel_code
              in: path
          operations:
            - name: get-noon-reports
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://api.internal.cosco.com/analytics/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: performance
          path: "/vessel-performance"
          operations:
            - name: analyze-performance
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves the current AIS position of a vessel, returning latitude, longitude, speed, heading, and last report time.

naftiko: "0.5"
info:
  label: "Vessel Position Tracking"
  description: "Retrieves the current AIS position of a vessel, returning latitude, longitude, speed, heading, and last report time."
  tags:
    - vessel-tracking
    - ais
    - maritime
capability:
  exposes:
    - type: mcp
      namespace: vessel-tracking
      port: 8080
      tools:
        - name: get-vessel-position
          description: "Look up the current AIS position of a vessel. Returns lat, lon, speed, heading, and last report time."
          inputParameters:
            - name: imo_number
              in: body
              type: string
              description: "The IMO number of the vessel."
          call: "ais.get-position"
          with:
            imo: "{{imo_number}}"
          outputParameters:
            - name: latitude
              type: number
              mapping: "$.position.lat"
            - name: longitude
              type: number
              mapping: "$.position.lon"
            - name: speed_knots
              type: number
              mapping: "$.position.speed"
            - name: heading
              type: number
              mapping: "$.position.heading"
            - name: last_report
              type: string
              mapping: "$.position.timestamp"
  consumes:
    - type: http
      namespace: ais
      baseUri: "https://api.internal.cosco.com/ais/v1"
      authentication:
        type: bearer
        token: "$secrets.ais_token"
      resources:
        - name: positions
          path: "/vessels/{{imo}}/position"
          inputParameters:
            - name: imo
              in: path
          operations:
            - name: get-position
              method: GET

Retrieves speed optimization recommendations from the weather routing system.

naftiko: "0.5"
info:
  label: "Vessel Speed Optimization"
  description: "Retrieves speed optimization recommendations from the weather routing system."
  tags: [weather-routing, speed-optimization, fuel-efficiency]
capability:
  exposes:
    - type: mcp
      namespace: speed-optimization
      port: 8080
      tools:
        - name: get-speed-recommendation
          description: "Look up speed optimization for a voyage. Returns optimal speed and fuel savings."
          inputParameters:
            - name: voyage_number
              in: body
              type: string
              description: "The voyage number."
          call: "weather-routing.get-recommendation"
          with: { voyage_number: "{{voyage_number}}" }
          outputParameters:
            - name: optimal_speed_knots
              type: number
              mapping: "$.recommendation.optimalSpeed"
            - name: fuel_savings_mt
              type: number
              mapping: "$.recommendation.fuelSavings"
  consumes:
    - type: http
      namespace: weather-routing
      baseUri: "https://api.internal.cosco.com/weather-routing/v1"
      authentication: { type: bearer, token: "$secrets.weather_routing_token" }
      resources:
        - name: recommendations
          path: "/voyages/{{voyage_number}}/recommendation"
          inputParameters: [{ name: voyage_number, in: path }]
          operations: [{ name: get-recommendation, method: GET }]

Retrieves the container stowage plan for a vessel voyage, returning bay layout, weight distribution, and stability status.

naftiko: "0.5"
info:
  label: "Vessel Stowage Plan Lookup"
  description: "Retrieves the container stowage plan for a vessel voyage, returning bay layout, weight distribution, and stability status."
  tags: [stowage, vessel-operations, container-planning]
capability:
  exposes:
    - type: mcp
      namespace: stowage-planning
      port: 8080
      tools:
        - name: get-stowage-plan
          description: "Look up vessel stowage plan. Returns bay layout, weight distribution, and stability."
          inputParameters:
            - name: voyage_number
              in: body
              type: string
              description: "The voyage number."
          call: "tos.get-stowage-plan"
          with: { voyage_number: "{{voyage_number}}" }
          outputParameters:
            - name: total_teu
              type: number
              mapping: "$.stowage.totalTEU"
            - name: weight_distribution
              type: string
              mapping: "$.stowage.weightDistribution"
            - name: stability_status
              type: string
              mapping: "$.stowage.stabilityCheck"
  consumes:
    - type: http
      namespace: tos
      baseUri: "https://api.internal.cosco.com/tos/v1"
      authentication: { type: bearer, token: "$secrets.tos_token" }
      resources:
        - name: stowage
          path: "/voyages/{{voyage_number}}/stowage"
          inputParameters: [{ name: voyage_number, in: path }]
          operations: [{ name: get-stowage-plan, method: GET }]

Retrieves the full schedule for a vessel voyage, returning port calls, ETDs, ETAs, and transit times.

naftiko: "0.5"
info:
  label: "Voyage Schedule Lookup"
  description: "Retrieves the full schedule for a vessel voyage, returning port calls, ETDs, ETAs, and transit times."
  tags:
    - vessel-operations
    - schedule
    - maritime
capability:
  exposes:
    - type: mcp
      namespace: voyage-schedule
      port: 8080
      tools:
        - name: get-voyage-schedule
          description: "Look up a vessel voyage schedule. Returns port calls, ETDs, ETAs, and transit times."
          inputParameters:
            - name: voyage_number
              in: body
              type: string
              description: "The voyage number."
          call: "vessel-ops.get-schedule"
          with:
            voyage_number: "{{voyage_number}}"
          outputParameters:
            - name: vessel_name
              type: string
              mapping: "$.voyage.vesselName"
            - name: port_calls
              type: string
              mapping: "$.voyage.portCalls"
            - name: total_transit_days
              type: number
              mapping: "$.voyage.totalTransitDays"
  consumes:
    - type: http
      namespace: vessel-ops
      baseUri: "https://api.internal.cosco.com/vessel-ops/v1"
      authentication:
        type: bearer
        token: "$secrets.vessel_ops_token"
      resources:
        - name: schedules
          path: "/voyages/{{voyage_number}}/schedule"
          inputParameters:
            - name: voyage_number
              in: path
          operations:
            - name: get-schedule
              method: GET

Retrieves an employee's compensation details from Workday, returning base pay, allowances, and total compensation.

naftiko: "0.5"
info:
  label: "Workday Compensation Lookup"
  description: "Retrieves an employee's compensation details from Workday, returning base pay, allowances, and total compensation."
  tags:
    - hr
    - compensation
    - workday
capability:
  exposes:
    - type: mcp
      namespace: hr-compensation
      port: 8080
      tools:
        - name: get-employee-compensation
          description: "Look up employee compensation in Workday. Returns base pay, allowances, and total."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday employee ID."
          call: "workday.get-compensation"
          with:
            worker_id: "{{employee_id}}"
          outputParameters:
            - name: base_pay
              type: number
              mapping: "$.compensationPlans[0].amount"
            - name: sea_allowance
              type: number
              mapping: "$.compensationPlans[1].amount"
            - name: total_compensation
              type: number
              mapping: "$.totalBasePayAnnualized"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: compensation
          path: "/workers/{{worker_id}}/compensation"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-compensation
              method: GET

Retrieves employee profile from Workday for COSCO Shipping.

naftiko: "0.5"
info:
  label: "Workday Employee Profile Lookup"
  description: "Retrieves employee profile from Workday for COSCO Shipping."
  tags:
    - hr
    - workday
    - employee-directory
capability:
  exposes:
    - type: mcp
      namespace: workday-profile
      port: 8080
      tools:
        - name: get-employee-profile
          description: "Look up COSCO Shipping employee in Workday."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "Employee ID."
          call: "workday.get-worker"
          with:
            employee_id: "{{employee_id}}"
          outputParameters:
            - name: name
              type: string
              mapping: "$.worker.name"
            - name: title
              type: string
              mapping: "$.worker.title"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5.cosco.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{employee_id}}"
          inputParameters:
            - name: employee_id
              in: path
          operations:
            - name: get-worker
              method: GET