COSCO Shipping Capabilities
Naftiko 0.5 capability definitions for COSCO Shipping - 100 capabilities showing integration workflows and service orchestrations.
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