Maersk Capabilities
Naftiko 0.5 capability definitions for Maersk - 100 capabilities showing integration workflows and service orchestrations.
Retrieves the latest build status from Azure DevOps for a given pipeline, returning build result, duration, and triggered-by information.
naftiko: "0.5"
info:
label: "Azure DevOps Build Status Checker"
description: "Retrieves the latest build status from Azure DevOps for a given pipeline, returning build result, duration, and triggered-by information."
tags:
- devops
- azure-devops
- ci-cd
capability:
exposes:
- type: mcp
namespace: devops-builds
port: 8080
tools:
- name: get-build-status
description: "Check the latest build status for an Azure DevOps pipeline."
inputParameters:
- name: project_name
in: body
type: string
description: "The Azure DevOps project name."
- name: pipeline_id
in: body
type: string
description: "The pipeline definition ID."
call: "azuredevops.get-latest-build"
with:
project: "{{project_name}}"
definition_id: "{{pipeline_id}}"
consumes:
- type: http
namespace: azuredevops
baseUri: "https://dev.azure.com/maersk"
authentication:
type: basic
username: ""
password: "$secrets.azuredevops_pat"
resources:
- name: builds
path: "/{{project}}/_apis/build/builds?definitions={{definition_id}}&$top=1&api-version=7.0"
inputParameters:
- name: project
in: path
- name: definition_id
in: query
operations:
- name: get-latest-build
method: GET
Fetches a bill of lading document from the Maersk documentation system by BL number for trade compliance and customs clearance.
naftiko: "0.5"
info:
label: "Bill of Lading Retrieval"
description: "Fetches a bill of lading document from the Maersk documentation system by BL number for trade compliance and customs clearance."
tags:
- shipping
- documentation
- trade-compliance
capability:
exposes:
- type: mcp
namespace: shipping-docs
port: 8080
tools:
- name: get-bill-of-lading
description: "Retrieve a bill of lading by BL number, returning shipper, consignee, commodity, and weight."
inputParameters:
- name: bl_number
in: body
type: string
description: "The bill of lading reference number."
call: "maersk-docs.get-bl"
with:
bl_number: "{{bl_number}}"
consumes:
- type: http
namespace: maersk-docs
baseUri: "https://api.maersk.com/documentation/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: bills-of-lading
path: "/bills-of-lading/{{bl_number}}"
inputParameters:
- name: bl_number
in: path
operations:
- name: get-bl
method: GET
Retrieves booking confirmation details including container allocations and vessel assignments.
naftiko: "0.5"
info:
label: "Booking Confirmation Retrieval"
description: "Retrieves booking confirmation details including container allocations and vessel assignments."
tags:
- shipping
- bookings
capability:
exposes:
- type: mcp
namespace: booking-svc
port: 8080
tools:
- name: get-booking
description: "Retrieve booking confirmation details by booking number."
inputParameters:
- name: booking_number
in: body
type: string
description: "Booking reference number."
call: "booking-svc.get-booking"
with:
booking_number: "{{booking_number}}"
consumes:
- type: http
namespace: booking-svc
baseUri: "https://api.maersk.com/bookings/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: bookings
path: "/bookings/{{booking_number}}"
inputParameters:
- name: booking_number
in: path
operations:
- name: get-booking
method: GET
Archives completed shipment documentation from SharePoint to Box long-term storage, applying retention policies and metadata tags.
naftiko: "0.5"
info:
label: "Box Document Archive"
description: "Archives completed shipment documentation from SharePoint to Box long-term storage, applying retention policies and metadata tags."
tags:
- document-management
- box
- sharepoint
- archiving
capability:
exposes:
- type: mcp
namespace: doc-archive
port: 8080
tools:
- name: archive-shipment-docs
description: "Move completed shipment documents from SharePoint to Box archive with retention metadata."
inputParameters:
- name: booking_ref
in: body
type: string
description: "The booking reference whose documents should be archived."
- name: retention_years
in: body
type: integer
description: "Number of years to retain in archive."
steps:
- name: get-docs
type: call
call: "sharepoint.list-files"
with:
site_id: "shipping_docs"
folder_path: "Completed/{{booking_ref}}"
- name: upload-to-box
type: call
call: "box.upload-file"
with:
folder_id: "shipment_archive"
file_name: "{{booking_ref}}_archive.zip"
metadata: "retention_years:{{retention_years}},booking:{{booking_ref}}"
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: drive-items
path: "/{{site_id}}/drive/root:/{{folder_path}}:/children"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
operations:
- name: list-files
method: GET
- type: http
namespace: box
baseUri: "https://upload.box.com/api/2.0"
authentication:
type: bearer
token: "$secrets.box_token"
resources:
- name: files
path: "/files/content"
operations:
- name: upload-file
method: POST
Calculates CO2 emissions for a shipment using Maersk's emissions API based on route, container type, and weight, then logs results in SharePoint for ESG reporting.
naftiko: "0.5"
info:
label: "Carbon Emissions Calculator"
description: "Calculates CO2 emissions for a shipment using Maersk's emissions API based on route, container type, and weight, then logs results in SharePoint for ESG reporting."
tags:
- sustainability
- emissions
- sharepoint
- esg
capability:
exposes:
- type: mcp
namespace: emissions-calc
port: 8080
tools:
- name: calculate-emissions
description: "Calculate CO2 emissions for a shipment and store the report in SharePoint."
inputParameters:
- name: origin_port
in: body
type: string
description: "Origin port UN/LOCODE."
- name: destination_port
in: body
type: string
description: "Destination port UN/LOCODE."
- name: container_type
in: body
type: string
description: "Container type code."
- name: gross_weight_kg
in: body
type: number
description: "Gross weight in kilograms."
steps:
- name: get-emissions
type: call
call: "maersk-emissions.calculate"
with:
origin: "{{origin_port}}"
destination: "{{destination_port}}"
equipment: "{{container_type}}"
weight: "{{gross_weight_kg}}"
- name: store-report
type: call
call: "sharepoint.upload-file"
with:
site_id: "sustainability_reporting"
folder_path: "EmissionsReports/{{origin_port}}_{{destination_port}}"
content: "CO2: {{get-emissions.co2_kg}} kg | Route: {{origin_port}} to {{destination_port}} | Weight: {{gross_weight_kg}} kg"
consumes:
- type: http
namespace: maersk-emissions
baseUri: "https://api.maersk.com/emissions/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: calculations
path: "/calculate"
operations:
- name: calculate
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: drive-items
path: "/{{site_id}}/drive/root:/{{folder_path}}"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
operations:
- name: upload-file
method: PUT
Receives a cargo damage claim, retrieves shipment details, and creates a Salesforce case for claims processing.
naftiko: "0.5"
info:
label: "Cargo Claim Processing Pipeline"
description: "Receives a cargo damage claim, retrieves shipment details, and creates a Salesforce case for claims processing."
tags:
- shipping
- claims
- salesforce
capability:
exposes:
- type: mcp
namespace: shipping
port: 8080
tools:
- name: cargo-claim-processing-pipeline
description: "Process cargo damage claims by retrieving shipment data and creating a Salesforce case."
inputParameters:
- name: shipment_id
in: body
type: string
description: "Shipment identifier."
- name: damage_description
in: body
type: string
description: "Description of the damage."
steps:
- name: get-shipment
type: call
call: "maersk-docs.get-shipment-details"
with:
shipment_id: "{{shipment_id}}"
- name: create-case
type: call
call: "salesforce.create-case"
with:
subject: "Cargo claim: {{shipment_id}}"
shipment_data: "{{get-shipment}}"
damage_description: "{{damage_description}}"
consumes:
- type: http
namespace: maersk-docs
baseUri: "https://api.maersk.com/documentation/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: shipment-details
path: "/shipments/{{shipment_id}}"
operations:
- name: get-shipment-details
method: GET
- type: http
namespace: salesforce
baseUri: "https://maersk.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/sobjects/Case"
operations:
- name: create-case
method: POST
Generates cargo insurance quotes based on shipment details and sends the quote via email through HubSpot.
naftiko: "0.5"
info:
label: "Cargo Insurance Quotation Pipeline"
description: "Generates cargo insurance quotes based on shipment details and sends the quote via email through HubSpot."
tags:
- shipping
- insurance
- hubspot
capability:
exposes:
- type: mcp
namespace: shipping
port: 8080
tools:
- name: cargo-insurance-quotation-pipeline
description: "Generate insurance quotes and send via HubSpot email."
inputParameters:
- name: shipment_id
in: body
type: string
description: "Shipment identifier."
- name: cargo_value
in: body
type: string
description: "Declared cargo value."
- name: customer_email
in: body
type: string
description: "Customer email."
steps:
- name: get-quote
type: call
call: "maersk-insurance.get-quotation"
with:
shipment_id: "{{shipment_id}}"
cargo_value: "{{cargo_value}}"
- name: send-email
type: call
call: "hubspot.send-email"
with:
to: "{{customer_email}}"
subject: "Cargo Insurance Quote for {{shipment_id}}"
body: "{{get-quote.quote_details}}"
consumes:
- type: http
namespace: maersk-insurance
baseUri: "https://api.maersk.com/insurance/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: quotations
path: "/quotations"
operations:
- name: get-quotation
method: GET
- type: http
namespace: hubspot
baseUri: "https://api.hubapi.com/crm/v3"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: emails
path: "/objects/emails"
operations:
- name: send-email
method: POST
Aggregates on-time delivery metrics from Maersk tracking, computes KPIs, and pushes results to a Tableau dashboard via Tableau REST API.
naftiko: "0.5"
info:
label: "Carrier Performance Dashboard Updater"
description: "Aggregates on-time delivery metrics from Maersk tracking, computes KPIs, and pushes results to a Tableau dashboard via Tableau REST API."
tags:
- performance
- kpi
- tableau
- shipping
capability:
exposes:
- type: mcp
namespace: carrier-performance
port: 8080
tools:
- name: update-performance-dashboard
description: "Pull delivery metrics for a trade lane and push aggregated KPIs to Tableau."
inputParameters:
- name: trade_lane
in: body
type: string
description: "Trade lane identifier (e.g., ASIA-EUROPE)."
- name: period
in: body
type: string
description: "Reporting period (e.g., 2026-Q1)."
steps:
- name: get-metrics
type: call
call: "maersk-analytics.get-delivery-metrics"
with:
trade_lane: "{{trade_lane}}"
period: "{{period}}"
- name: publish-to-tableau
type: call
call: "tableau.publish-datasource"
with:
project_id: "carrier_performance"
datasource_name: "OTD_{{trade_lane}}_{{period}}"
data: "{{get-metrics.kpis}}"
consumes:
- type: http
namespace: maersk-analytics
baseUri: "https://api.maersk.com/analytics/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: delivery-metrics
path: "/delivery-performance"
inputParameters:
- name: trade_lane
in: query
- name: period
in: query
operations:
- name: get-delivery-metrics
method: GET
- type: http
namespace: tableau
baseUri: "https://maersk-tableau.online.tableau.com/api/3.19"
authentication:
type: bearer
token: "$secrets.tableau_token"
resources:
- name: datasources
path: "/sites/{{site_id}}/datasources"
operations:
- name: publish-datasource
method: POST
Pulls market intelligence data from Circana for logistics market trends and competitive insights, storing results in Google Drive.
naftiko: "0.5"
info:
label: "Circana Market Intelligence Feed"
description: "Pulls market intelligence data from Circana for logistics market trends and competitive insights, storing results in Google Drive."
tags:
- market-intelligence
- circana
- google-drive
capability:
exposes:
- type: mcp
namespace: market-intel
port: 8080
tools:
- name: get-market-trends
description: "Fetch logistics market trends from Circana and save to Google Drive."
inputParameters:
- name: market_segment
in: body
type: string
description: "Market segment (e.g., ocean-freight, air-freight, warehousing)."
- name: region
in: body
type: string
description: "Geographic region for the analysis."
steps:
- name: fetch-data
type: call
call: "circana.get-market-data"
with:
segment: "{{market_segment}}"
region: "{{region}}"
- name: save-to-drive
type: call
call: "googledrive.upload-file"
with:
folder_id: "market_intelligence"
file_name: "{{market_segment}}_{{region}}_trends.json"
content: "{{fetch-data.report}}"
consumes:
- type: http
namespace: circana
baseUri: "https://api.circana.com/v1"
authentication:
type: bearer
token: "$secrets.circana_token"
resources:
- name: market-data
path: "/market-trends"
inputParameters:
- name: segment
in: query
- name: region
in: query
operations:
- name: get-market-data
method: GET
- type: http
namespace: googledrive
baseUri: "https://www.googleapis.com/upload/drive/v3"
authentication:
type: bearer
token: "$secrets.google_drive_token"
resources:
- name: files
path: "/files"
operations:
- name: upload-file
method: POST
Checks Cloudflare DNS health and performance for Maersk web properties, returning latency metrics and active incidents.
naftiko: "0.5"
info:
label: "Cloudflare DNS Health Monitor"
description: "Checks Cloudflare DNS health and performance for Maersk web properties, returning latency metrics and active incidents."
tags:
- infrastructure
- cloudflare
- dns
capability:
exposes:
- type: mcp
namespace: dns-health
port: 8080
tools:
- name: check-dns-health
description: "Check Cloudflare DNS health and latency for a specified zone."
inputParameters:
- name: zone_id
in: body
type: string
description: "The Cloudflare zone ID for the domain."
call: "cloudflare.get-zone-analytics"
with:
zone_id: "{{zone_id}}"
consumes:
- type: http
namespace: cloudflare
baseUri: "https://api.cloudflare.com/client/v4"
authentication:
type: bearer
token: "$secrets.cloudflare_token"
resources:
- name: zones
path: "/zones/{{zone_id}}/analytics/dashboard"
inputParameters:
- name: zone_id
in: path
operations:
- name: get-zone-analytics
method: GET
Monitors reefer container temperatures, flags excursions, and creates ServiceNow incidents for out-of-range readings.
naftiko: "0.5"
info:
label: "Cold Chain Compliance Pipeline"
description: "Monitors reefer container temperatures, flags excursions, and creates ServiceNow incidents for out-of-range readings."
tags:
- shipping
- cold-chain
- servicenow
capability:
exposes:
- type: mcp
namespace: shipping
port: 8080
tools:
- name: cold-chain-compliance-pipeline
description: "Monitor reefer temps and escalate excursions to ServiceNow."
inputParameters:
- name: container_number
in: body
type: string
description: "Reefer container number."
- name: period
in: body
type: string
description: "Monitoring period."
steps:
- name: get-temps
type: call
call: "maersk-reefer.get-temperatures"
with:
container_number: "{{container_number}}"
period: "{{period}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Reefer temp excursion: {{container_number}}"
data: "{{get-temps.excursions}}"
consumes:
- type: http
namespace: maersk-reefer
baseUri: "https://api.maersk.com/reefer/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: temperatures
path: "/temperatures"
operations:
- name: get-temperatures
method: GET
- type: http
namespace: servicenow
baseUri: "https://maersk.service-now.com/api/now/v1"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
Retrieves trade compliance documents from SharePoint, runs them through an Oracle Integration workflow for validation, and logs results in ServiceNow.
naftiko: "0.5"
info:
label: "Compliance Document Reviewer"
description: "Retrieves trade compliance documents from SharePoint, runs them through an Oracle Integration workflow for validation, and logs results in ServiceNow."
tags:
- compliance
- trade-compliance
- sharepoint
- oracle-integration
- servicenow
capability:
exposes:
- type: mcp
namespace: compliance-review
port: 8080
tools:
- name: review-compliance-docs
description: "Pull compliance documents from SharePoint, validate through Oracle Integration, and log in ServiceNow."
inputParameters:
- name: document_folder
in: body
type: string
description: "SharePoint folder path containing compliance documents."
- name: review_type
in: body
type: string
description: "Type of compliance review (e.g., sanctions, export-control, customs)."
steps:
- name: get-documents
type: call
call: "sharepoint.list-files"
with:
site_id: "compliance_docs"
folder_path: "{{document_folder}}"
- name: validate-docs
type: call
call: "oracle-integration.run-flow"
with:
flow_name: "compliance_validation"
review_type: "{{review_type}}"
documents: "{{get-documents.files}}"
- name: log-results
type: call
call: "servicenow.create-incident"
with:
short_description: "Compliance review: {{review_type}}"
category: "compliance"
description: "Reviewed {{get-documents.count}} documents. Result: {{validate-docs.status}}. Findings: {{validate-docs.findings}}."
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: drive-items
path: "/{{site_id}}/drive/root:/{{folder_path}}:/children"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
operations:
- name: list-files
method: GET
- type: http
namespace: oracle-integration
baseUri: "https://maersk-oic.integration.ocp.oraclecloud.com/ic/api/integration/v1"
authentication:
type: basic
username: "$secrets.oracle_integration_user"
password: "$secrets.oracle_integration_password"
resources:
- name: flows
path: "/flows/{{flow_name}}/run"
inputParameters:
- name: flow_name
in: path
operations:
- name: run-flow
method: POST
- type: http
namespace: servicenow
baseUri: "https://maersk.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
When container damage is reported, creates a ServiceNow claim ticket, uploads photos to SharePoint, updates the Salesforce case, and notifies insurance via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Container Damage Claim Processor"
description: "When container damage is reported, creates a ServiceNow claim ticket, uploads photos to SharePoint, updates the Salesforce case, and notifies insurance via Microsoft Outlook."
tags:
- claims
- container-damage
- servicenow
- sharepoint
- salesforce
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: damage-claims
port: 8080
tools:
- name: process-damage-claim
description: "Process a container damage claim across ServiceNow, SharePoint, Salesforce, and email notification."
inputParameters:
- name: container_number
in: body
type: string
description: "The damaged container ID."
- name: damage_description
in: body
type: string
description: "Description of the damage."
- name: booking_ref
in: body
type: string
description: "Associated booking reference."
- name: photo_urls
in: body
type: string
description: "Comma-separated URLs of damage photos."
steps:
- name: create-claim-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "Container damage claim: {{container_number}}"
category: "damage_claim"
description: "{{damage_description}}. Booking: {{booking_ref}}."
- name: upload-photos
type: call
call: "sharepoint.upload-file"
with:
site_id: "claims_docs"
folder_path: "DamageClaims/{{container_number}}_{{booking_ref}}"
content: "{{photo_urls}}"
- name: create-sfdc-case
type: call
call: "salesforce.create-case"
with:
subject: "Damage claim: {{container_number}}"
description: "{{damage_description}}. ServiceNow: {{create-claim-ticket.number}}. Photos: {{upload-photos.url}}."
- name: notify-insurance
type: call
call: "outlook.send-email"
with:
to: "insurance-claims@maersk.com"
subject: "New damage claim: {{container_number}}"
body: "Container {{container_number}} damage reported. Claim ticket: {{create-claim-ticket.number}}. SFDC case: {{create-sfdc-case.id}}."
consumes:
- type: http
namespace: servicenow
baseUri: "https://maersk.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: drive-items
path: "/{{site_id}}/drive/root:/{{folder_path}}"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
operations:
- name: upload-file
method: PUT
- type: http
namespace: salesforce
baseUri: "https://maersk.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/sobjects/Case"
operations:
- name: create-case
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: send-mail
path: "/me/sendMail"
operations:
- name: send-email
method: POST
Checks the detention and demurrage status for a container at a port.
naftiko: "0.5"
info:
label: "Container Detention Status"
description: "Checks the detention and demurrage status for a container at a port."
tags:
- shipping
- container-management
capability:
exposes:
- type: mcp
namespace: detention-svc
port: 8080
tools:
- name: get-status
description: "Retrieve detention and demurrage status for a container."
inputParameters:
- name: container_number
in: body
type: string
description: "Container number."
- name: port_code
in: body
type: string
description: "Port code."
call: "detention-svc.get-status"
with:
container_number: "{{container_number}}"
port_code: "{{port_code}}"
consumes:
- type: http
namespace: detention-svc
baseUri: "https://api.maersk.com/detention/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: detention-status
path: "/containers/{{container_number}}/detention"
inputParameters:
- name: container_number
in: path
- name: port_code
in: query
operations:
- name: get-status
method: GET
Aggregates container fleet utilization metrics across depots and publishes to Tableau.
naftiko: "0.5"
info:
label: "Container Fleet Utilization Report"
description: "Aggregates container fleet utilization metrics across depots and publishes to Tableau."
tags:
- shipping
- fleet-management
- tableau
capability:
exposes:
- type: mcp
namespace: shipping
port: 8080
tools:
- name: container-fleet-utilization-report
description: "Aggregate fleet utilization metrics and publish to Tableau."
inputParameters:
- name: region
in: body
type: string
description: "Geographic region."
- name: period
in: body
type: string
description: "Reporting period."
steps:
- name: get-utilization
type: call
call: "maersk-fleet.get-utilization"
with:
region: "{{region}}"
period: "{{period}}"
- name: publish
type: call
call: "tableau.publish-datasource"
with:
project_id: "fleet_ops"
datasource_name: "utilization_{{region}}_{{period}}"
data: "{{get-utilization.metrics}}"
consumes:
- type: http
namespace: maersk-fleet
baseUri: "https://api.maersk.com/fleet/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: utilization
path: "/utilization"
operations:
- name: get-utilization
method: GET
- type: http
namespace: tableau
baseUri: "https://maersk-tableau.online.tableau.com/api/3.19"
authentication:
type: bearer
token: "$secrets.tableau_token"
resources:
- name: datasources
path: "/sites/{{site_id}}/datasources"
operations:
- name: publish-datasource
method: POST
Records container inspection results and archives the report in SharePoint with a Teams notification.
naftiko: "0.5"
info:
label: "Container Inspection Report Pipeline"
description: "Records container inspection results and archives the report in SharePoint with a Teams notification."
tags:
- shipping
- quality
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: shipping
port: 8080
tools:
- name: container-inspection-report-pipeline
description: "Save inspection results, archive to SharePoint, and notify via Teams."
inputParameters:
- name: container_number
in: body
type: string
description: "Container number."
- name: inspection_results
in: body
type: string
description: "Inspection results data."
steps:
- name: save-inspection
type: call
call: "maersk-quality.save-inspection"
with:
container_number: "{{container_number}}"
results: "{{inspection_results}}"
- name: archive
type: call
call: "sharepoint.upload-document"
with:
library: "inspection-reports"
content: "{{save-inspection.report}}"
- name: notify
type: call
call: "teams.send-message"
with:
channel_id: "quality-ops"
message: "Inspection complete for {{container_number}}: {{save-inspection.grade}}"
consumes:
- type: http
namespace: maersk-quality
baseUri: "https://api.maersk.com/quality/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: inspections
path: "/inspections"
operations:
- name: save-inspection
method: POST
- type: http
namespace: sharepoint
baseUri: "https://maersk.sharepoint.com/_api/v2.0"
authentication:
type: bearer
token: "$secrets.sharepoint_token"
resources:
- name: documents
path: "/documents"
operations:
- name: upload-document
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Analyzes empty container imbalances across regions and creates repositioning orders with Slack notification.
naftiko: "0.5"
info:
label: "Container Repositioning Optimizer"
description: "Analyzes empty container imbalances across regions and creates repositioning orders with Slack notification."
tags:
- shipping
- fleet-management
- slack
capability:
exposes:
- type: mcp
namespace: shipping
port: 8080
tools:
- name: container-repositioning-optimizer
description: "Analyze container imbalances and create repositioning orders."
inputParameters:
- name: region
in: body
type: string
description: "Geographic region."
steps:
- name: analyze
type: call
call: "maersk-fleet.analyze-imbalance"
with:
region: "{{region}}"
- name: create-order
type: call
call: "maersk-fleet.create-repositioning"
with:
recommendations: "{{analyze.recommendations}}"
- name: notify
type: call
call: "slack.post-message"
with:
channel: "#fleet-ops"
text: "Repositioning orders created for {{region}}: {{create-order.order_count}} orders"
consumes:
- type: http
namespace: maersk-fleet
baseUri: "https://api.maersk.com/fleet/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: imbalance
path: "/imbalance"
operations:
- name: analyze-imbalance
method: GET
- name: repositioning
path: "/repositioning"
operations:
- name: create-repositioning
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Subscribes to container tracking events, filters for milestone events, and pushes updates to a Datadog dashboard.
naftiko: "0.5"
info:
label: "Container Tracking Event Stream"
description: "Subscribes to container tracking events, filters for milestone events, and pushes updates to a Datadog dashboard."
tags:
- shipping
- tracking
- datadog
capability:
exposes:
- type: mcp
namespace: shipping
port: 8080
tools:
- name: container-tracking-event-stream
description: "Stream container milestone events to Datadog."
inputParameters:
- name: container_number
in: body
type: string
description: "Container number."
steps:
- name: get-events
type: call
call: "maersk-tracking.get-container-events"
with:
container_number: "{{container_number}}"
event_type: "milestone"
- name: push-metrics
type: call
call: "datadog.submit-metrics"
with:
metric_name: "container.milestone_events"
tags: "container:{{container_number}}"
data: "{{get-events.milestones}}"
consumes:
- type: http
namespace: maersk-tracking
baseUri: "https://api.maersk.com/tracking/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: container-events
path: "/containers/events"
operations:
- name: get-container-events
method: GET
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v2"
authentication:
type: bearer
token: "$secrets.datadog_token"
resources:
- name: metrics
path: "/series"
operations:
- name: submit-metrics
method: POST
Retrieves real-time container location, vessel, and estimated arrival from Maersk tracking APIs given a container or booking number.
naftiko: "0.5"
info:
label: "Container Tracking Lookup"
description: "Retrieves real-time container location, vessel, and estimated arrival from Maersk tracking APIs given a container or booking number."
tags:
- shipping
- container-tracking
- salesforce
capability:
exposes:
- type: mcp
namespace: container-tracking
port: 8080
tools:
- name: get-container-status
description: "Look up a shipping container by number and return vessel name, current port, and ETA."
inputParameters:
- name: container_number
in: body
type: string
description: "The container ID or booking reference."
call: "maersk-tracking.get-container"
with:
container_id: "{{container_number}}"
outputParameters:
- name: vessel
type: string
mapping: "$.vessel.name"
- name: current_port
type: string
mapping: "$.location.port"
- name: eta
type: string
mapping: "$.eta"
consumes:
- type: http
namespace: maersk-tracking
baseUri: "https://api.maersk.com/track/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: containers
path: "/containers/{{container_id}}"
inputParameters:
- name: container_id
in: path
operations:
- name: get-container
method: GET
Retrieves verified gross mass data for a container.
naftiko: "0.5"
info:
label: "Container Weight Verification"
description: "Retrieves verified gross mass data for a container."
tags:
- shipping
- compliance
capability:
exposes:
- type: mcp
namespace: vgm-svc
port: 8080
tools:
- name: get-vgm
description: "Retrieve verified gross mass for a container."
inputParameters:
- name: container_number
in: body
type: string
description: "Container number."
call: "vgm-svc.get-vgm"
with:
container_number: "{{container_number}}"
consumes:
- type: http
namespace: vgm-svc
baseUri: "https://api.maersk.com/compliance/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: vgm
path: "/containers/{{container_number}}/vgm"
inputParameters:
- name: container_number
in: path
operations:
- name: get-vgm
method: GET
Checks crew member certification expiry dates and creates renewal tasks in Workday.
naftiko: "0.5"
info:
label: "Crew Certification Renewal Pipeline"
description: "Checks crew member certification expiry dates and creates renewal tasks in Workday."
tags:
- shipping
- crew-management
- workday
capability:
exposes:
- type: mcp
namespace: shipping
port: 8080
tools:
- name: crew-certification-renewal-pipeline
description: "Check crew certifications and create Workday renewal tasks."
inputParameters:
- name: vessel_id
in: body
type: string
description: "Vessel identifier."
steps:
- name: check-certs
type: call
call: "maersk-crew.check-certifications"
with:
vessel_id: "{{vessel_id}}"
- name: create-renewals
type: call
call: "workday.create-task"
with:
task_type: "certification_renewal"
assignments: "{{check-certs.expiring_certs}}"
consumes:
- type: http
namespace: maersk-crew
baseUri: "https://api.maersk.com/crew/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: certifications
path: "/certifications"
operations:
- name: check-certifications
method: GET
- type: http
namespace: workday
baseUri: "https://wd3-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: tasks
path: "/tasks"
operations:
- name: create-task
method: POST
Provisions a new customer account with credit setup, Salesforce record, and welcome communication via Teams.
naftiko: "0.5"
info:
label: "Customer Onboarding Pipeline"
description: "Provisions a new customer account with credit setup, Salesforce record, and welcome communication via Teams."
tags:
- shipping
- onboarding
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: shipping
port: 8080
tools:
- name: customer-onboarding-pipeline
description: "Provision customer account, create Salesforce record, and welcome via Teams."
inputParameters:
- name: company_name
in: body
type: string
description: "Company name."
- name: contact_email
in: body
type: string
description: "Primary contact email."
steps:
- name: provision
type: call
call: "maersk-accounts.create-customer"
with:
company_name: "{{company_name}}"
contact_email: "{{contact_email}}"
- name: create-sf-record
type: call
call: "salesforce.create-account"
with:
name: "{{company_name}}"
account_number: "{{provision.account_id}}"
- name: welcome-msg
type: call
call: "teams.send-message"
with:
channel_id: "customer-success"
message: "New customer onboarded: {{company_name}} ({{provision.account_id}})"
consumes:
- type: http
namespace: maersk-accounts
baseUri: "https://api.maersk.com/accounts/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: customers
path: "/customers"
operations:
- name: create-customer
method: POST
- type: http
namespace: salesforce
baseUri: "https://maersk.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account"
operations:
- name: create-account
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Prepares customs clearance documents, submits to customs authority API, and notifies operations team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Customs Clearance Orchestrator"
description: "Prepares customs clearance documents, submits to customs authority API, and notifies operations team via Microsoft Teams."
tags:
- shipping
- customs
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: shipping
port: 8080
tools:
- name: customs-clearance-orchestrator
description: "Prepare customs documents and notify ops team via Teams."
inputParameters:
- name: shipment_id
in: body
type: string
description: "Shipment identifier."
- name: destination_country
in: body
type: string
description: "Destination country code."
steps:
- name: prepare-docs
type: call
call: "maersk-customs.prepare-clearance"
with:
shipment_id: "{{shipment_id}}"
destination_country: "{{destination_country}}"
- name: notify-team
type: call
call: "teams.send-message"
with:
channel_id: "customs-ops"
message: "Customs clearance submitted for {{shipment_id}} to {{destination_country}}: {{prepare-docs.status}}"
consumes:
- type: http
namespace: maersk-customs
baseUri: "https://api.maersk.com/customs/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: clearance
path: "/clearance"
operations:
- name: prepare-clearance
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Generates customs declaration documents by pulling shipment data from Maersk booking, enriching with HS codes from Oracle E-Business Suite, and filing to SharePoint.
naftiko: "0.5"
info:
label: "Customs Document Generator"
description: "Generates customs declaration documents by pulling shipment data from Maersk booking, enriching with HS codes from Oracle E-Business Suite, and filing to SharePoint."
tags:
- customs
- trade-compliance
- oracle-e-business-suite
- sharepoint
capability:
exposes:
- type: mcp
namespace: customs-docs
port: 8080
tools:
- name: generate-customs-declaration
description: "Given a booking reference, pull shipment details, look up HS codes, generate customs declaration, and store in SharePoint."
inputParameters:
- name: booking_ref
in: body
type: string
description: "The Maersk booking reference number."
- name: destination_country
in: body
type: string
description: "The ISO country code of the destination."
steps:
- name: get-booking
type: call
call: "maersk-booking.get-booking"
with:
booking_id: "{{booking_ref}}"
- name: lookup-hs-codes
type: call
call: "oracle-ebs.get-hs-codes"
with:
commodity: "{{get-booking.commodity_description}}"
country: "{{destination_country}}"
- name: store-declaration
type: call
call: "sharepoint.upload-file"
with:
site_id: "customs_declarations"
folder_path: "Declarations/{{destination_country}}/{{booking_ref}}"
content: "HS Code: {{lookup-hs-codes.hs_code}} | Commodity: {{get-booking.commodity_description}} | Weight: {{get-booking.gross_weight}}"
consumes:
- type: http
namespace: maersk-booking
baseUri: "https://api.maersk.com/booking/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: bookings
path: "/bookings/{{booking_id}}"
inputParameters:
- name: booking_id
in: path
operations:
- name: get-booking
method: GET
- type: http
namespace: oracle-ebs
baseUri: "https://maersk-ebs.oraclecloud.com/webservices/rest"
authentication:
type: basic
username: "$secrets.oracle_ebs_user"
password: "$secrets.oracle_ebs_password"
resources:
- name: hs-codes
path: "/trade/hs-codes"
inputParameters:
- name: commodity
in: query
- name: country
in: query
operations:
- name: get-hs-codes
method: GET
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: drive-items
path: "/{{site_id}}/drive/root:/{{folder_path}}"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
operations:
- name: upload-file
method: PUT
Fetches dangerous goods declaration details for a specific shipment.
naftiko: "0.5"
info:
label: "Dangerous Goods Declaration Lookup"
description: "Fetches dangerous goods declaration details for a specific shipment."
tags:
- shipping
- hazmat
- compliance
capability:
exposes:
- type: mcp
namespace: dg-svc
port: 8080
tools:
- name: get-declaration
description: "Retrieve dangerous goods declaration for a shipment."
inputParameters:
- name: shipment_id
in: body
type: string
description: "Shipment identifier."
call: "dg-svc.get-declaration"
with:
shipment_id: "{{shipment_id}}"
consumes:
- type: http
namespace: dg-svc
baseUri: "https://api.maersk.com/dangerous-goods/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: declarations
path: "/declarations/{{shipment_id}}"
inputParameters:
- name: shipment_id
in: path
operations:
- name: get-declaration
method: GET
Monitors container dwell time at port and sends Microsoft Teams alerts to operations when containers approach demurrage thresholds.
naftiko: "0.5"
info:
label: "Demurrage Alert Notifier"
description: "Monitors container dwell time at port and sends Microsoft Teams alerts to operations when containers approach demurrage thresholds."
tags:
- demurrage
- port-operations
- microsoft-teams
- alerts
capability:
exposes:
- type: mcp
namespace: demurrage-alerts
port: 8080
tools:
- name: check-demurrage-risk
description: "Check containers at a port for demurrage risk and notify the operations team in Microsoft Teams."
inputParameters:
- name: port_code
in: body
type: string
description: "The port UN/LOCODE to check."
- name: threshold_days
in: body
type: integer
description: "Number of free days before demurrage triggers."
steps:
- name: get-dwell-times
type: call
call: "maersk-tracking.get-port-containers"
with:
port: "{{port_code}}"
min_dwell_days: "{{threshold_days}}"
- name: notify-ops
type: call
call: "msteams.send-message"
with:
channel_id: "ops-demurrage-alerts"
text: "Demurrage risk at {{port_code}}: {{get-dwell-times.count}} containers exceeding {{threshold_days}} free days. Total estimated charges: {{get-dwell-times.estimated_charges}}."
consumes:
- type: http
namespace: maersk-tracking
baseUri: "https://api.maersk.com/track/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: port-containers
path: "/ports/{{port}}/containers"
inputParameters:
- name: port
in: path
- name: min_dwell_days
in: query
operations:
- name: get-port-containers
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/General/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Processes demurrage dispute claims by gathering container event history and creating a resolution case.
naftiko: "0.5"
info:
label: "Demurrage Dispute Resolution Pipeline"
description: "Processes demurrage dispute claims by gathering container event history and creating a resolution case."
tags:
- shipping
- demurrage
- salesforce
capability:
exposes:
- type: mcp
namespace: shipping
port: 8080
tools:
- name: demurrage-dispute-resolution-pipeline
description: "Gather container history and create a Salesforce dispute case."
inputParameters:
- name: container_number
in: body
type: string
description: "Container number."
- name: booking_number
in: body
type: string
description: "Booking reference."
steps:
- name: get-history
type: call
call: "maersk-tracking.get-container-history"
with:
container_number: "{{container_number}}"
booking_number: "{{booking_number}}"
- name: create-case
type: call
call: "salesforce.create-case"
with:
subject: "Demurrage dispute: {{container_number}}"
event_history: "{{get-history.events}}"
consumes:
- type: http
namespace: maersk-tracking
baseUri: "https://api.maersk.com/tracking/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: container-history
path: "/container-history"
operations:
- name: get-container-history
method: GET
- type: http
namespace: salesforce
baseUri: "https://maersk.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/sobjects/Case"
operations:
- name: create-case
method: POST
Queries Dynatrace for application health metrics including response time, error rate, and throughput for Maersk digital platforms.
naftiko: "0.5"
info:
label: "Dynatrace Application Health Check"
description: "Queries Dynatrace for application health metrics including response time, error rate, and throughput for Maersk digital platforms."
tags:
- monitoring
- dynatrace
- application-health
capability:
exposes:
- type: mcp
namespace: app-health
port: 8080
tools:
- name: get-app-health
description: "Retrieve application health metrics from Dynatrace for a specified application."
inputParameters:
- name: application_id
in: body
type: string
description: "The Dynatrace application entity ID."
call: "dynatrace.get-app-metrics"
with:
entity_id: "{{application_id}}"
consumes:
- type: http
namespace: dynatrace
baseUri: "https://maersk.live.dynatrace.com/api/v2"
authentication:
type: bearer
token: "$secrets.dynatrace_token"
resources:
- name: metrics
path: "/metrics/query"
inputParameters:
- name: entity_id
in: query
operations:
- name: get-app-metrics
method: GET
Parses incoming EDI 315 (status) messages, extracts container events, and updates the Maersk tracking system and Salesforce shipment records.
naftiko: "0.5"
info:
label: "EDI Document Processor"
description: "Parses incoming EDI 315 (status) messages, extracts container events, and updates the Maersk tracking system and Salesforce shipment records."
tags:
- edi
- electronic-data-interchange
- salesforce
- shipping
capability:
exposes:
- type: mcp
namespace: edi-processing
port: 8080
tools:
- name: process-edi-315
description: "Parse an EDI 315 status message and update tracking and CRM systems."
inputParameters:
- name: edi_payload
in: body
type: string
description: "The raw EDI 315 message content."
- name: booking_ref
in: body
type: string
description: "The associated booking reference."
steps:
- name: update-tracking
type: call
call: "maersk-tracking.update-event"
with:
booking_ref: "{{booking_ref}}"
edi_data: "{{edi_payload}}"
- name: update-salesforce
type: call
call: "salesforce.update-shipment"
with:
booking_ref: "{{booking_ref}}"
status: "{{update-tracking.latest_status}}"
location: "{{update-tracking.current_location}}"
consumes:
- type: http
namespace: maersk-tracking
baseUri: "https://api.maersk.com/track/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: events
path: "/shipments/{{booking_ref}}/events"
inputParameters:
- name: booking_ref
in: path
operations:
- name: update-event
method: POST
- type: http
namespace: salesforce
baseUri: "https://maersk.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: shipments
path: "/sobjects/Shipment__c"
operations:
- name: update-shipment
method: PATCH
Checks availability of empty containers at a specified depot location.
naftiko: "0.5"
info:
label: "Empty Container Availability Check"
description: "Checks availability of empty containers at a specified depot location."
tags:
- shipping
- container-management
capability:
exposes:
- type: mcp
namespace: container-ops
port: 8080
tools:
- name: check-availability
description: "Check empty container availability at a depot."
inputParameters:
- name: depot_code
in: body
type: string
description: "Container depot code."
- name: container_type
in: body
type: string
description: "Container type e.g. 20GP, 40HC."
call: "container-ops.check-availability"
with:
depot_code: "{{depot_code}}"
container_type: "{{container_type}}"
consumes:
- type: http
namespace: container-ops
baseUri: "https://api.maersk.com/containers/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: availability
path: "/depots/{{depot_code}}/availability"
inputParameters:
- name: depot_code
in: path
- name: container_type
in: query
operations:
- name: check-availability
method: GET
Checks the status of export documentation processing for a shipment.
naftiko: "0.5"
info:
label: "Export Documentation Status"
description: "Checks the status of export documentation processing for a shipment."
tags:
- shipping
- documentation
capability:
exposes:
- type: mcp
namespace: docs
port: 8080
tools:
- name: get-export-status
description: "Retrieve export documentation status for a shipment."
inputParameters:
- name: shipment_id
in: body
type: string
description: "Shipment identifier."
call: "docs.get-export-status"
with:
shipment_id: "{{shipment_id}}"
consumes:
- type: http
namespace: docs
baseUri: "https://api.maersk.com/documentation/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: export-status
path: "/export-status/{{shipment_id}}"
inputParameters:
- name: shipment_id
in: path
operations:
- name: get-export-status
method: GET
Queries F5 Networks load balancer status for Maersk application pools, returning active members, health status, and connection counts.
naftiko: "0.5"
info:
label: "F5 Load Balancer Health Check"
description: "Queries F5 Networks load balancer status for Maersk application pools, returning active members, health status, and connection counts."
tags:
- infrastructure
- f5-networks
- load-balancing
capability:
exposes:
- type: mcp
namespace: lb-health
port: 8080
tools:
- name: check-pool-health
description: "Check F5 load balancer pool health for an application."
inputParameters:
- name: pool_name
in: body
type: string
description: "The F5 pool name to check."
call: "f5.get-pool-status"
with:
pool: "{{pool_name}}"
consumes:
- type: http
namespace: f5
baseUri: "https://maersk-f5.com/mgmt/tm"
authentication:
type: basic
username: "$secrets.f5_user"
password: "$secrets.f5_password"
resources:
- name: pools
path: "/ltm/pool/{{pool}}/members"
inputParameters:
- name: pool
in: path
operations:
- name: get-pool-status
method: GET
Identifies optimal feeder vessel connections for transshipment cargo and updates the booking in SAP.
naftiko: "0.5"
info:
label: "Feeder Vessel Connection Planner"
description: "Identifies optimal feeder vessel connections for transshipment cargo and updates the booking in SAP."
tags:
- shipping
- transshipment
- sap
capability:
exposes:
- type: mcp
namespace: shipping
port: 8080
tools:
- name: feeder-vessel-connection-planner
description: "Find optimal feeder connections and update SAP booking."
inputParameters:
- name: origin_port
in: body
type: string
description: "Origin port code."
- name: hub_port
in: body
type: string
description: "Hub port code."
- name: destination_port
in: body
type: string
description: "Destination port code."
- name: booking_id
in: body
type: string
description: "Booking ID."
steps:
- name: find-connections
type: call
call: "maersk-schedules.find-feeder-connections"
with:
origin_port: "{{origin_port}}"
hub_port: "{{hub_port}}"
destination_port: "{{destination_port}}"
- name: update-booking
type: call
call: "sap.update-transport-order"
with:
booking_id: "{{booking_id}}"
feeder_details: "{{find-connections.best_option}}"
consumes:
- type: http
namespace: maersk-schedules
baseUri: "https://api.maersk.com/schedules/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: feeder-connections
path: "/feeder-connections"
operations:
- name: find-feeder-connections
method: GET
- type: http
namespace: sap
baseUri: "https://maersk-sap.s4hana.cloud.sap/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: transport-orders
path: "/transport-orders"
operations:
- name: update-transport-order
method: PUT
Aggregates fleet-wide CO2 emissions data and generates sustainability reports in Confluence.
naftiko: "0.5"
info:
label: "Fleet Emissions Reporting Pipeline"
description: "Aggregates fleet-wide CO2 emissions data and generates sustainability reports in Confluence."
tags:
- shipping
- sustainability
- confluence
capability:
exposes:
- type: mcp
namespace: shipping
port: 8080
tools:
- name: fleet-emissions-reporting-pipeline
description: "Aggregate fleet emissions and publish report to Confluence."
inputParameters:
- name: period
in: body
type: string
description: "Reporting period."
- name: region
in: body
type: string
description: "Geographic region."
steps:
- name: get-emissions
type: call
call: "maersk-sustainability.get-fleet-emissions"
with:
period: "{{period}}"
region: "{{region}}"
- name: publish-report
type: call
call: "confluence.create-page"
with:
space: "SUSTAINABILITY"
title: "Fleet Emissions Report {{region}} {{period}}"
content: "{{get-emissions.report}}"
consumes:
- type: http
namespace: maersk-sustainability
baseUri: "https://api.maersk.com/sustainability/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: fleet-emissions
path: "/fleet-emissions"
operations:
- name: get-fleet-emissions
method: GET
- type: http
namespace: confluence
baseUri: "https://maersk.atlassian.net/wiki/rest/api"
authentication:
type: bearer
token: "$secrets.confluence_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
Compares freight invoices against booking rates and flags discrepancies in a Jira ticket.
naftiko: "0.5"
info:
label: "Freight Invoice Reconciliation Pipeline"
description: "Compares freight invoices against booking rates and flags discrepancies in a Jira ticket."
tags:
- shipping
- finance
- jira
capability:
exposes:
- type: mcp
namespace: shipping
port: 8080
tools:
- name: freight-invoice-reconciliation-pipeline
description: "Reconcile freight invoices and create Jira tickets for discrepancies."
inputParameters:
- name: invoice_number
in: body
type: string
description: "Invoice number."
steps:
- name: reconcile
type: call
call: "maersk-finance.reconcile-invoice"
with:
invoice_number: "{{invoice_number}}"
- name: create-ticket
type: call
call: "jira.create-issue"
with:
project: "FIN"
summary: "Invoice discrepancy: {{invoice_number}}"
description: "{{reconcile.discrepancy_details}}"
consumes:
- type: http
namespace: maersk-finance
baseUri: "https://api.maersk.com/finance/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: invoices
path: "/invoices/reconcile"
operations:
- name: reconcile-invoice
method: POST
- type: http
namespace: jira
baseUri: "https://maersk.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Fetches spot freight rates from the Maersk rate API for a given trade lane, container type, and date, then logs the quote in Salesforce as an opportunity.
naftiko: "0.5"
info:
label: "Freight Rate Quotation Engine"
description: "Fetches spot freight rates from the Maersk rate API for a given trade lane, container type, and date, then logs the quote in Salesforce as an opportunity."
tags:
- freight-rates
- sales
- salesforce
- logistics
capability:
exposes:
- type: mcp
namespace: freight-rates
port: 8080
tools:
- name: get-rate-and-log
description: "Retrieve a spot freight rate for a trade lane and create a Salesforce opportunity with the quoted amount."
inputParameters:
- name: origin_port
in: body
type: string
description: "Origin port UN/LOCODE."
- name: destination_port
in: body
type: string
description: "Destination port UN/LOCODE."
- name: container_type
in: body
type: string
description: "Container type code (e.g., 40HC)."
- name: customer_account_id
in: body
type: string
description: "Salesforce account ID for the customer."
steps:
- name: fetch-rate
type: call
call: "maersk-rates.get-spot-rate"
with:
origin: "{{origin_port}}"
destination: "{{destination_port}}"
equipment: "{{container_type}}"
- name: create-opportunity
type: call
call: "salesforce.create-opportunity"
with:
account_id: "{{customer_account_id}}"
name: "Freight Quote {{origin_port}}-{{destination_port}}"
amount: "{{fetch-rate.total_rate}}"
stage: "Qualification"
consumes:
- type: http
namespace: maersk-rates
baseUri: "https://api.maersk.com/rates/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: spot-rates
path: "/spot"
inputParameters:
- name: origin
in: query
- name: destination
in: query
- name: equipment
in: query
operations:
- name: get-spot-rate
method: GET
- type: http
namespace: salesforce
baseUri: "https://maersk.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity"
operations:
- name: create-opportunity
method: POST
Retrieves bunker fuel prices from Bloomberg Enterprise Data and logs procurement costs against SAP purchase orders for fleet fuel management.
naftiko: "0.5"
info:
label: "Fuel Procurement Cost Tracker"
description: "Retrieves bunker fuel prices from Bloomberg Enterprise Data and logs procurement costs against SAP purchase orders for fleet fuel management."
tags:
- fuel
- procurement
- bloomberg-enterprise-data
- sap
capability:
exposes:
- type: mcp
namespace: fuel-procurement
port: 8080
tools:
- name: track-fuel-cost
description: "Get current bunker fuel prices and match against a SAP purchase order for cost tracking."
inputParameters:
- name: fuel_type
in: body
type: string
description: "Fuel type (e.g., VLSFO, HSFO, MGO)."
- name: po_number
in: body
type: string
description: "SAP purchase order number for fuel."
steps:
- name: get-fuel-price
type: call
call: "bloomberg.get-commodity-price"
with:
commodity: "{{fuel_type}}"
- name: get-po-details
type: call
call: "sap.get-po"
with:
po_number: "{{po_number}}"
consumes:
- type: http
namespace: bloomberg
baseUri: "https://api.bloomberg.com/eap/v1"
authentication:
type: bearer
token: "$secrets.bloomberg_token"
resources:
- name: commodities
path: "/catalogs/commodities/{{commodity}}/price"
inputParameters:
- name: commodity
in: path
operations:
- name: get-commodity-price
method: GET
- type: http
namespace: sap
baseUri: "https://maersk-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: purchase-orders
path: "/A_PurchaseOrder('{{po_number}}')"
inputParameters:
- name: po_number
in: path
operations:
- name: get-po
method: GET
Monitors GitHub Actions workflow runs for Maersk repositories, reporting build failures to Slack for quick developer response.
naftiko: "0.5"
info:
label: "GitHub Actions CI Pipeline Monitor"
description: "Monitors GitHub Actions workflow runs for Maersk repositories, reporting build failures to Slack for quick developer response."
tags:
- devops
- github-actions
- slack
- ci-cd
capability:
exposes:
- type: mcp
namespace: ci-monitor
port: 8080
tools:
- name: monitor-ci-pipeline
description: "Check GitHub Actions workflow status and alert Slack on failures."
inputParameters:
- name: repo_name
in: body
type: string
description: "The GitHub repository name (org/repo format)."
- name: workflow_name
in: body
type: string
description: "The workflow file name."
steps:
- name: get-workflow-runs
type: call
call: "github.get-workflow-runs"
with:
repo: "{{repo_name}}"
workflow: "{{workflow_name}}"
- name: notify-failure
type: call
call: "slack.post-message"
with:
channel: "ci-alerts"
text: "CI failure in {{repo_name}}/{{workflow_name}}: {{get-workflow-runs.latest_run.conclusion}}. Commit: {{get-workflow-runs.latest_run.head_sha}}."
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: workflow-runs
path: "/repos/{{repo}}/actions/workflows/{{workflow}}/runs"
inputParameters:
- name: repo
in: path
- name: workflow
in: path
operations:
- name: get-workflow-runs
method: GET
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Retrieves recorded sales calls from Gong, extracting key topics and action items for shipping and logistics deal reviews.
naftiko: "0.5"
info:
label: "Gong Sales Call Analyzer"
description: "Retrieves recorded sales calls from Gong, extracting key topics and action items for shipping and logistics deal reviews."
tags:
- sales
- gong
- call-analytics
capability:
exposes:
- type: mcp
namespace: call-analysis
port: 8080
tools:
- name: analyze-call
description: "Get a Gong call recording analysis with key topics and action items."
inputParameters:
- name: call_id
in: body
type: string
description: "The Gong call ID."
call: "gong.get-call-analysis"
with:
call_id: "{{call_id}}"
consumes:
- type: http
namespace: gong
baseUri: "https://api.gong.io/v2"
authentication:
type: bearer
token: "$secrets.gong_token"
resources:
- name: calls
path: "/calls/{{call_id}}/transcript"
inputParameters:
- name: call_id
in: path
operations:
- name: get-call-analysis
method: GET
Pulls website traffic metrics from Google Analytics for Maersk.com, including sessions, bounce rate, and top pages.
naftiko: "0.5"
info:
label: "Google Analytics Traffic Reporter"
description: "Pulls website traffic metrics from Google Analytics for Maersk.com, including sessions, bounce rate, and top pages."
tags:
- marketing
- google-analytics
- web-analytics
capability:
exposes:
- type: mcp
namespace: web-analytics
port: 8080
tools:
- name: get-traffic-report
description: "Retrieve traffic summary from Google Analytics for a date range."
inputParameters:
- name: start_date
in: body
type: string
description: "Start date in YYYY-MM-DD format."
- name: end_date
in: body
type: string
description: "End date in YYYY-MM-DD format."
call: "ga.get-report"
with:
start_date: "{{start_date}}"
end_date: "{{end_date}}"
consumes:
- type: http
namespace: ga
baseUri: "https://analyticsdata.googleapis.com/v1beta"
authentication:
type: bearer
token: "$secrets.google_analytics_token"
resources:
- name: reports
path: "/properties/{{property_id}}:runReport"
operations:
- name: get-report
method: POST
Validates dangerous goods shipment details against IMDG code and creates an approval workflow in ServiceNow.
naftiko: "0.5"
info:
label: "Hazmat Shipment Approval Pipeline"
description: "Validates dangerous goods shipment details against IMDG code and creates an approval workflow in ServiceNow."
tags:
- shipping
- hazmat
- servicenow
capability:
exposes:
- type: mcp
namespace: shipping
port: 8080
tools:
- name: hazmat-shipment-approval-pipeline
description: "Validate DG shipment and create ServiceNow approval."
inputParameters:
- name: shipment_id
in: body
type: string
description: "Shipment identifier."
steps:
- name: validate-dg
type: call
call: "maersk-dg.validate-shipment"
with:
shipment_id: "{{shipment_id}}"
- name: create-approval
type: call
call: "servicenow.create-request"
with:
type: "approval"
short_description: "DG approval: {{shipment_id}}"
details: "{{validate-dg.validation_result}}"
consumes:
- type: http
namespace: maersk-dg
baseUri: "https://api.maersk.com/dangerous-goods/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: validation
path: "/validate"
operations:
- name: validate-shipment
method: POST
- type: http
namespace: servicenow
baseUri: "https://maersk.service-now.com/api/now/v1"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: requests
path: "/table/sc_request"
operations:
- name: create-request
method: POST
Retrieves campaign performance metrics from HubSpot including open rates, click rates, and conversions for Maersk marketing campaigns.
naftiko: "0.5"
info:
label: "HubSpot Marketing Campaign Tracker"
description: "Retrieves campaign performance metrics from HubSpot including open rates, click rates, and conversions for Maersk marketing campaigns."
tags:
- marketing
- hubspot
- campaign-analytics
capability:
exposes:
- type: mcp
namespace: marketing-campaigns
port: 8080
tools:
- name: get-campaign-metrics
description: "Retrieve HubSpot campaign performance metrics by campaign ID."
inputParameters:
- name: campaign_id
in: body
type: string
description: "The HubSpot campaign ID."
call: "hubspot.get-campaign"
with:
campaign_id: "{{campaign_id}}"
consumes:
- type: http
namespace: hubspot
baseUri: "https://api.hubapi.com"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: campaigns
path: "/marketing/v3/campaigns/{{campaign_id}}"
inputParameters:
- name: campaign_id
in: path
operations:
- name: get-campaign
method: GET
Triggers an Informatica data quality job to cleanse and validate shipping master data, then updates results in Oracle E-Business Suite.
naftiko: "0.5"
info:
label: "Informatica Data Quality Pipeline"
description: "Triggers an Informatica data quality job to cleanse and validate shipping master data, then updates results in Oracle E-Business Suite."
tags:
- data-quality
- informatica
- oracle-e-business-suite
capability:
exposes:
- type: mcp
namespace: data-quality
port: 8080
tools:
- name: run-data-quality-check
description: "Run an Informatica data quality job on shipping master data and update Oracle EBS with cleansed records."
inputParameters:
- name: job_name
in: body
type: string
description: "The Informatica job name to execute."
- name: data_domain
in: body
type: string
description: "Data domain (e.g., vessel_master, port_master, customer_master)."
steps:
- name: run-dq-job
type: call
call: "informatica.run-job"
with:
job_name: "{{job_name}}"
domain: "{{data_domain}}"
- name: update-master-data
type: call
call: "oracle-ebs.update-master"
with:
domain: "{{data_domain}}"
cleansed_data: "{{run-dq-job.output}}"
consumes:
- type: http
namespace: informatica
baseUri: "https://maersk-iics.informatica.com/saas/api/v2"
authentication:
type: bearer
token: "$secrets.informatica_token"
resources:
- name: jobs
path: "/job"
operations:
- name: run-job
method: POST
- type: http
namespace: oracle-ebs
baseUri: "https://maersk-ebs.oraclecloud.com/webservices/rest"
authentication:
type: basic
username: "$secrets.oracle_ebs_user"
password: "$secrets.oracle_ebs_password"
resources:
- name: master-data
path: "/master/{{domain}}"
inputParameters:
- name: domain
in: path
operations:
- name: update-master
method: PUT
Tracks inland delivery progress from port to final destination and sends milestone updates via Microsoft Teams.
naftiko: "0.5"
info:
label: "Inland Delivery Tracking Pipeline"
description: "Tracks inland delivery progress from port to final destination and sends milestone updates via Microsoft Teams."
tags:
- shipping
- inland-logistics
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: shipping
port: 8080
tools:
- name: inland-delivery-tracking-pipeline
description: "Track inland deliveries and send Teams notifications."
inputParameters:
- name: delivery_order
in: body
type: string
description: "Delivery order number."
steps:
- name: track-delivery
type: call
call: "maersk-inland.track-delivery"
with:
delivery_order: "{{delivery_order}}"
- name: notify
type: call
call: "teams.send-message"
with:
channel_id: "inland-ops"
message: "Delivery {{delivery_order}} status: {{track-delivery.current_status}} - ETA: {{track-delivery.eta}}"
consumes:
- type: http
namespace: maersk-inland
baseUri: "https://api.maersk.com/inland/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: deliveries
path: "/deliveries"
operations:
- name: track-delivery
method: GET
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Fetches inland transportation rate quotes for door-to-port or port-to-door moves.
naftiko: "0.5"
info:
label: "Inland Transport Rate Query"
description: "Fetches inland transportation rate quotes for door-to-port or port-to-door moves."
tags:
- shipping
- inland-logistics
capability:
exposes:
- type: mcp
namespace: rates
port: 8080
tools:
- name: get-inland-rate
description: "Retrieve inland transport rate for a given origin and destination."
inputParameters:
- name: origin
in: body
type: string
description: "Origin location."
- name: destination
in: body
type: string
description: "Destination location."
- name: cargo_type
in: body
type: string
description: "Cargo type."
call: "rates.get-inland-rate"
with:
origin: "{{origin}}"
destination: "{{destination}}"
cargo_type: "{{cargo_type}}"
consumes:
- type: http
namespace: rates
baseUri: "https://api.maersk.com/rates/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: inland-rates
path: "/inland-rates"
inputParameters:
- name: origin
in: query
- name: destination
in: query
- name: cargo_type
in: query
operations:
- name: get-inland-rate
method: GET
Publishes approved Maersk brand content to Instagram, pulling creative assets from Adobe Creative Cloud and scheduling posts.
naftiko: "0.5"
info:
label: "Instagram Social Media Post Publisher"
description: "Publishes approved Maersk brand content to Instagram, pulling creative assets from Adobe Creative Cloud and scheduling posts."
tags:
- social-media
- instagram
- adobe-creative-cloud
- marketing
capability:
exposes:
- type: mcp
namespace: social-publishing
port: 8080
tools:
- name: publish-instagram-post
description: "Pull a creative asset from Adobe Creative Cloud and publish to Instagram."
inputParameters:
- name: asset_id
in: body
type: string
description: "Adobe Creative Cloud asset ID."
- name: caption
in: body
type: string
description: "Instagram post caption."
- name: scheduled_time
in: body
type: string
description: "Scheduled publish time in ISO 8601 format."
steps:
- name: get-asset
type: call
call: "adobe-cc.get-asset"
with:
asset_id: "{{asset_id}}"
- name: publish-post
type: call
call: "instagram.create-media"
with:
image_url: "{{get-asset.download_url}}"
caption: "{{caption}}"
scheduled_time: "{{scheduled_time}}"
consumes:
- type: http
namespace: adobe-cc
baseUri: "https://cc-api-storage.adobe.io/v1"
authentication:
type: bearer
token: "$secrets.adobe_cc_token"
resources:
- name: assets
path: "/assets/{{asset_id}}"
inputParameters:
- name: asset_id
in: path
operations:
- name: get-asset
method: GET
- type: http
namespace: instagram
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.instagram_token"
resources:
- name: media
path: "/{{ig_user_id}}/media"
operations:
- name: create-media
method: POST
Creates an intermodal booking combining ocean and inland legs, then sends confirmation via Slack.
naftiko: "0.5"
info:
label: "Intermodal Booking Creation Pipeline"
description: "Creates an intermodal booking combining ocean and inland legs, then sends confirmation via Slack."
tags:
- shipping
- intermodal
- slack
capability:
exposes:
- type: mcp
namespace: shipping
port: 8080
tools:
- name: intermodal-booking-creation-pipeline
description: "Create intermodal booking and notify via Slack."
inputParameters:
- name: origin
in: body
type: string
description: "Origin address."
- name: destination
in: body
type: string
description: "Destination address."
- name: commodity
in: body
type: string
description: "Commodity description."
steps:
- name: create-booking
type: call
call: "maersk-booking.create-intermodal"
with:
origin: "{{origin}}"
destination: "{{destination}}"
commodity: "{{commodity}}"
- name: notify
type: call
call: "slack.post-message"
with:
channel: "#bookings"
text: "Intermodal booking created: {{create-booking.booking_number}}"
consumes:
- type: http
namespace: maersk-booking
baseUri: "https://api.maersk.com/bookings/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: intermodal
path: "/intermodal"
operations:
- name: create-intermodal
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Combines ocean schedule data with inland transport options to find the optimal intermodal route, then logs the recommendation in Salesforce.
naftiko: "0.5"
info:
label: "Intermodal Route Optimizer"
description: "Combines ocean schedule data with inland transport options to find the optimal intermodal route, then logs the recommendation in Salesforce."
tags:
- logistics
- intermodal
- route-optimization
- salesforce
capability:
exposes:
- type: mcp
namespace: route-optimizer
port: 8080
tools:
- name: optimize-route
description: "Find optimal intermodal route from origin to final destination and log in Salesforce."
inputParameters:
- name: origin_address
in: body
type: string
description: "Full origin address."
- name: destination_address
in: body
type: string
description: "Full destination address."
- name: weight_kg
in: body
type: number
description: "Total shipment weight in kg."
- name: opportunity_id
in: body
type: string
description: "Salesforce opportunity ID."
steps:
- name: geocode-origin
type: call
call: "google-maps.geocode"
with:
address: "{{origin_address}}"
- name: geocode-dest
type: call
call: "google-maps.geocode"
with:
address: "{{destination_address}}"
- name: find-route
type: call
call: "maersk-routing.get-intermodal-route"
with:
origin_lat: "{{geocode-origin.lat}}"
origin_lng: "{{geocode-origin.lng}}"
dest_lat: "{{geocode-dest.lat}}"
dest_lng: "{{geocode-dest.lng}}"
weight: "{{weight_kg}}"
- name: log-recommendation
type: call
call: "salesforce.update-opportunity"
with:
opportunity_id: "{{opportunity_id}}"
description: "Recommended route: {{find-route.summary}}. Transit time: {{find-route.transit_days}} days. Cost: {{find-route.estimated_cost}}."
consumes:
- type: http
namespace: google-maps
baseUri: "https://maps.googleapis.com/maps/api"
authentication:
type: apiKey
key: "$secrets.google_maps_key"
resources:
- name: geocode
path: "/geocode/json"
inputParameters:
- name: address
in: query
operations:
- name: geocode
method: GET
- type: http
namespace: maersk-routing
baseUri: "https://api.maersk.com/routing/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: intermodal
path: "/intermodal"
operations:
- name: get-intermodal-route
method: POST
- type: http
namespace: salesforce
baseUri: "https://maersk.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity/{{opportunity_id}}"
inputParameters:
- name: opportunity_id
in: path
operations:
- name: update-opportunity
method: PATCH
Publishes approved job requisitions from Workday to LinkedIn recruiting, creating sponsored job posts for maritime and logistics roles.
naftiko: "0.5"
info:
label: "LinkedIn Job Posting Publisher"
description: "Publishes approved job requisitions from Workday to LinkedIn recruiting, creating sponsored job posts for maritime and logistics roles."
tags:
- recruiting
- linkedin
- workday
capability:
exposes:
- type: mcp
namespace: recruiting-publisher
port: 8080
tools:
- name: publish-job
description: "Pull a job requisition from Workday and publish it to LinkedIn as a sponsored job post."
inputParameters:
- name: requisition_id
in: body
type: string
description: "The Workday job requisition ID."
steps:
- name: get-requisition
type: call
call: "workday.get-requisition"
with:
req_id: "{{requisition_id}}"
- name: post-to-linkedin
type: call
call: "linkedin.create-job-post"
with:
title: "{{get-requisition.title}}"
description: "{{get-requisition.description}}"
location: "{{get-requisition.location}}"
company_id: "maersk"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: requisitions
path: "/recruiting/requisitions/{{req_id}}"
inputParameters:
- name: req_id
in: path
operations:
- name: get-requisition
method: GET
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: job-posts
path: "/jobPosts"
operations:
- name: create-job-post
method: POST
Sends targeted shipping updates and newsletters to customer segments via MailChimp, pulling contact lists from Salesforce.
naftiko: "0.5"
info:
label: "MailChimp Customer Newsletter Sender"
description: "Sends targeted shipping updates and newsletters to customer segments via MailChimp, pulling contact lists from Salesforce."
tags:
- marketing
- mailchimp
- salesforce
- newsletters
capability:
exposes:
- type: mcp
namespace: newsletters
port: 8080
tools:
- name: send-newsletter
description: "Pull a customer segment from Salesforce and send a MailChimp newsletter."
inputParameters:
- name: segment_name
in: body
type: string
description: "Salesforce contact list/segment name."
- name: campaign_name
in: body
type: string
description: "MailChimp campaign name."
- name: subject_line
in: body
type: string
description: "Email subject line."
steps:
- name: get-contacts
type: call
call: "salesforce.get-contact-list"
with:
segment: "{{segment_name}}"
- name: send-campaign
type: call
call: "mailchimp.send-campaign"
with:
campaign_name: "{{campaign_name}}"
subject: "{{subject_line}}"
recipients: "{{get-contacts.emails}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://maersk.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: contacts
path: "/sobjects/Contact"
operations:
- name: get-contact-list
method: GET
- type: http
namespace: mailchimp
baseUri: "https://us1.api.mailchimp.com/3.0"
authentication:
type: basic
username: "anystring"
password: "$secrets.mailchimp_api_key"
resources:
- name: campaigns
path: "/campaigns"
operations:
- name: send-campaign
method: POST
Fetches marine weather forecast data for a voyage route and posts optimal routing advice to Slack.
naftiko: "0.5"
info:
label: "Marine Weather Routing Advisor"
description: "Fetches marine weather forecast data for a voyage route and posts optimal routing advice to Slack."
tags:
- shipping
- weather
- slack
capability:
exposes:
- type: mcp
namespace: shipping
port: 8080
tools:
- name: marine-weather-routing-advisor
description: "Get weather forecast for voyage and post advisory to Slack."
inputParameters:
- name: voyage_number
in: body
type: string
description: "Voyage reference number."
steps:
- name: get-weather
type: call
call: "maersk-weather.get-route-forecast"
with:
voyage_number: "{{voyage_number}}"
- name: post-advisory
type: call
call: "slack.post-message"
with:
channel: "#voyage-planning"
text: "Weather advisory for voyage {{voyage_number}}: {{get-weather.recommendation}}"
consumes:
- type: http
namespace: maersk-weather
baseUri: "https://api.maersk.com/weather/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: route-forecast
path: "/route-forecast"
operations:
- name: get-route-forecast
method: GET
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Generates a Microsoft Excel report of weekly shipping volumes by trade lane using data from Teradata and delivers it via Microsoft Outlook email.
naftiko: "0.5"
info:
label: "Microsoft Excel Report Generator"
description: "Generates a Microsoft Excel report of weekly shipping volumes by trade lane using data from Teradata and delivers it via Microsoft Outlook email."
tags:
- reporting
- microsoft-excel
- teradata
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: excel-reports
port: 8080
tools:
- name: generate-weekly-volume-report
description: "Query Teradata for weekly shipping volumes and email an Excel report to stakeholders."
inputParameters:
- name: week_start
in: body
type: string
description: "Start of the reporting week in YYYY-MM-DD format."
- name: recipient_email
in: body
type: string
description: "Email address to send the report to."
steps:
- name: query-volumes
type: call
call: "teradata.run-query"
with:
query: "SELECT trade_lane, SUM(teu) as total_teu FROM shipping_volumes WHERE week_start = '{{week_start}}' GROUP BY trade_lane"
- name: send-report
type: call
call: "outlook.send-email"
with:
to: "{{recipient_email}}"
subject: "Weekly Shipping Volume Report - {{week_start}}"
body: "Weekly shipping volumes by trade lane attached. Total TEU: {{query-volumes.total_teu}}."
consumes:
- type: http
namespace: teradata
baseUri: "https://maersk-td.teradata.com/api/v1"
authentication:
type: basic
username: "$secrets.teradata_user"
password: "$secrets.teradata_password"
resources:
- name: queries
path: "/queries"
operations:
- name: run-query
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: send-mail
path: "/me/sendMail"
operations:
- name: send-email
method: POST
Creates tasks in Microsoft Planner for port operations teams based on incoming vessel arrival notifications.
naftiko: "0.5"
info:
label: "Microsoft Planner Task Creator"
description: "Creates tasks in Microsoft Planner for port operations teams based on incoming vessel arrival notifications."
tags:
- task-management
- microsoft-planner
- port-operations
capability:
exposes:
- type: mcp
namespace: port-tasks
port: 8080
tools:
- name: create-arrival-tasks
description: "Create Planner tasks for vessel arrival operations including berth allocation, crane assignment, and customs notification."
inputParameters:
- name: vessel_name
in: body
type: string
description: "Name of the arriving vessel."
- name: eta
in: body
type: string
description: "Estimated time of arrival in ISO 8601 format."
- name: port_code
in: body
type: string
description: "Port UN/LOCODE."
- name: plan_id
in: body
type: string
description: "Microsoft Planner plan ID."
call: "planner.create-task"
with:
plan_id: "{{plan_id}}"
title: "Vessel arrival ops: {{vessel_name}} at {{port_code}} - ETA {{eta}}"
due_date: "{{eta}}"
consumes:
- type: http
namespace: planner
baseUri: "https://graph.microsoft.com/v1.0/planner"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: tasks
path: "/tasks"
operations:
- name: create-task
method: POST
Triggers a Microsoft Power Automate flow to process incoming booking confirmations, routing them to the correct operations team.
naftiko: "0.5"
info:
label: "Microsoft Power Automate Workflow Trigger"
description: "Triggers a Microsoft Power Automate flow to process incoming booking confirmations, routing them to the correct operations team."
tags:
- automation
- microsoft-power-automate
- booking
capability:
exposes:
- type: mcp
namespace: flow-trigger
port: 8080
tools:
- name: trigger-booking-flow
description: "Trigger a Power Automate flow for booking confirmation processing."
inputParameters:
- name: booking_ref
in: body
type: string
description: "The booking reference number."
- name: trade_lane
in: body
type: string
description: "The trade lane for routing."
call: "powerautomate.trigger-flow"
with:
booking_ref: "{{booking_ref}}"
trade_lane: "{{trade_lane}}"
consumes:
- type: http
namespace: powerautomate
baseUri: "https://prod-123.westus.logic.azure.com/workflows"
authentication:
type: apiKey
key: "$secrets.power_automate_key"
resources:
- name: flows
path: "/booking-confirmation/triggers/manual/paths/invoke"
operations:
- name: trigger-flow
method: POST
Posts a daily operations standup summary to Microsoft Teams by aggregating open ServiceNow incidents, delayed shipments, and port congestion alerts.
naftiko: "0.5"
info:
label: "Microsoft Teams Operations Standup Bot"
description: "Posts a daily operations standup summary to Microsoft Teams by aggregating open ServiceNow incidents, delayed shipments, and port congestion alerts."
tags:
- operations
- microsoft-teams
- servicenow
- daily-standup
capability:
exposes:
- type: mcp
namespace: ops-standup
port: 8080
tools:
- name: post-standup-summary
description: "Aggregate operational metrics and post daily standup summary to Microsoft Teams."
inputParameters:
- name: team_channel_id
in: body
type: string
description: "The Microsoft Teams channel ID for the standup."
steps:
- name: get-open-incidents
type: call
call: "servicenow.get-incidents"
with:
state: "open"
category: "logistics"
- name: get-delayed-shipments
type: call
call: "maersk-tracking.get-delays"
with:
min_delay_hours: "24"
- name: post-summary
type: call
call: "msteams.send-message"
with:
channel_id: "{{team_channel_id}}"
text: "Daily Ops Standup: {{get-open-incidents.count}} open incidents | {{get-delayed-shipments.count}} delayed shipments (>24h)"
consumes:
- type: http
namespace: servicenow
baseUri: "https://maersk.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: get-incidents
method: GET
- type: http
namespace: maersk-tracking
baseUri: "https://api.maersk.com/track/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: delays
path: "/shipments/delays"
inputParameters:
- name: min_delay_hours
in: query
operations:
- name: get-delays
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/General/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Runs a credit check on a new customer, creates a Salesforce account, and notifies the sales team via Slack.
naftiko: "0.5"
info:
label: "New Customer Credit Check Pipeline"
description: "Runs a credit check on a new customer, creates a Salesforce account, and notifies the sales team via Slack."
tags:
- shipping
- credit
- salesforce
- slack
capability:
exposes:
- type: mcp
namespace: shipping
port: 8080
tools:
- name: new-customer-credit-check-pipeline
description: "Run credit check, create Salesforce account, and notify sales."
inputParameters:
- name: company_name
in: body
type: string
description: "Company name."
- name: registration_number
in: body
type: string
description: "Company registration number."
steps:
- name: run-credit
type: call
call: "maersk-credit.check-customer"
with:
company_name: "{{company_name}}"
registration_number: "{{registration_number}}"
- name: create-account
type: call
call: "salesforce.create-account"
with:
name: "{{company_name}}"
credit_score: "{{run-credit.score}}"
- name: notify-sales
type: call
call: "slack.post-message"
with:
channel: "#new-customers"
text: "New customer {{company_name}} credit score: {{run-credit.score}}"
consumes:
- type: http
namespace: maersk-credit
baseUri: "https://api.maersk.com/credit/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: customers
path: "/customers/check"
operations:
- name: check-customer
method: POST
- type: http
namespace: salesforce
baseUri: "https://maersk.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account"
operations:
- name: create-account
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
On new hire creation in Workday, provisions a ServiceNow onboarding ticket, creates a SharePoint folder for documents, and sends a Microsoft Teams welcome message.
naftiko: "0.5"
info:
label: "New Hire Onboarding Orchestrator"
description: "On new hire creation in Workday, provisions a ServiceNow onboarding ticket, creates a SharePoint folder for documents, and sends a Microsoft Teams welcome message."
tags:
- hr
- onboarding
- workday
- servicenow
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-onboarding
port: 8080
tools:
- name: trigger-onboarding
description: "Orchestrate the full onboarding sequence for a new Maersk hire."
inputParameters:
- name: workday_employee_id
in: body
type: string
description: "The Workday worker ID for the new hire."
- name: start_date
in: body
type: string
description: "The employee start date in YYYY-MM-DD format."
- name: department
in: body
type: string
description: "Department or business unit."
steps:
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{workday_employee_id}}"
- name: open-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "New hire onboarding: {{get-employee.full_name}}"
category: "hr_onboarding"
assigned_group: "IT_Onboarding"
- name: provision-folder
type: call
call: "sharepoint.create-folder"
with:
site_id: "hr_onboarding_site"
folder_path: "OnboardingDocs/{{get-employee.full_name}}_{{start_date}}"
- name: send-welcome
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{get-employee.work_email}}"
text: "Welcome to Maersk, {{get-employee.first_name}}! Your IT onboarding ticket is {{open-ticket.number}}."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://maersk.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: drive-items
path: "/{{site_id}}/drive/root:/{{folder_path}}"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
operations:
- name: create-folder
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Queries New Relic for performance anomalies in Maersk web applications and creates ServiceNow incidents for critical deviations.
naftiko: "0.5"
info:
label: "New Relic Performance Anomaly Detector"
description: "Queries New Relic for performance anomalies in Maersk web applications and creates ServiceNow incidents for critical deviations."
tags:
- monitoring
- new-relic
- servicenow
- anomaly-detection
capability:
exposes:
- type: mcp
namespace: perf-anomaly
port: 8080
tools:
- name: detect-and-escalate
description: "Check New Relic for performance anomalies and create ServiceNow incidents for critical ones."
inputParameters:
- name: application_name
in: body
type: string
description: "The New Relic application name."
- name: threshold_ms
in: body
type: integer
description: "Response time threshold in milliseconds."
steps:
- name: check-anomalies
type: call
call: "newrelic.get-anomalies"
with:
app_name: "{{application_name}}"
threshold: "{{threshold_ms}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Performance anomaly: {{application_name}}"
category: "application"
priority: "2"
description: "Response time exceeded {{threshold_ms}}ms. Current: {{check-anomalies.current_response_time}}ms. Error rate: {{check-anomalies.error_rate}}%."
consumes:
- type: http
namespace: newrelic
baseUri: "https://api.newrelic.com/v2"
authentication:
type: apiKey
key: "$secrets.newrelic_api_key"
resources:
- name: anomalies
path: "/applications/{{app_name}}/metrics"
inputParameters:
- name: app_name
in: path
operations:
- name: get-anomalies
method: GET
- type: http
namespace: servicenow
baseUri: "https://maersk.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
Monitors Maersk shipping API health metrics in New Relic and escalates degraded performance to Slack.
naftiko: "0.5"
info:
label: "New Relic Shipping API Health Monitor"
description: "Monitors Maersk shipping API health metrics in New Relic and escalates degraded performance to Slack."
tags:
- shipping
- monitoring
- new-relic
- slack
capability:
exposes:
- type: mcp
namespace: shipping
port: 8080
tools:
- name: new-relic-shipping-api-health-monitor
description: "Check API health in New Relic and escalate to Slack."
steps:
- name: check-health
type: call
call: "newrelic.get-application-metrics"
with:
app_name: "maersk-shipping-api"
- name: escalate
type: call
call: "slack.post-message"
with:
channel: "#api-monitoring"
text: "API health: response_time={{check-health.avg_response_time}}ms error_rate={{check-health.error_rate}}pct"
consumes:
- type: http
namespace: newrelic
baseUri: "https://api.newrelic.com/v2"
authentication:
type: bearer
token: "$secrets.newrelic_token"
resources:
- name: application-metrics
path: "/applications/metrics"
operations:
- name: get-application-metrics
method: GET
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Monitors Oracle Cloud infrastructure health and resource utilization for Maersk enterprise applications.
naftiko: "0.5"
info:
label: "Oracle Cloud Infrastructure Monitor"
description: "Monitors Oracle Cloud infrastructure health and resource utilization for Maersk enterprise applications."
tags:
- infrastructure
- oracle-cloud
- monitoring
capability:
exposes:
- type: mcp
namespace: oci-monitor
port: 8080
tools:
- name: get-infra-health
description: "Check Oracle Cloud infrastructure health metrics for a compartment."
inputParameters:
- name: compartment_id
in: body
type: string
description: "The Oracle Cloud compartment OCID."
call: "oraclecloud.get-metrics"
with:
compartment_id: "{{compartment_id}}"
consumes:
- type: http
namespace: oraclecloud
baseUri: "https://telemetry.us-ashburn-1.oraclecloud.com/20180401"
authentication:
type: bearer
token: "$secrets.oracle_cloud_token"
resources:
- name: metrics
path: "/metrics/actions/summarizeMetricsData"
operations:
- name: get-metrics
method: POST
Confirms cargo receipt at origin warehouse, generates receipt documents, and updates SAP.
naftiko: "0.5"
info:
label: "Origin Cargo Receipt Pipeline"
description: "Confirms cargo receipt at origin warehouse, generates receipt documents, and updates SAP."
tags:
- shipping
- cargo-operations
- sap
capability:
exposes:
- type: mcp
namespace: shipping
port: 8080
tools:
- name: origin-cargo-receipt-pipeline
description: "Confirm cargo receipt and update SAP goods receipt."
inputParameters:
- name: cargo_id
in: body
type: string
description: "Cargo identifier."
- name: warehouse_code
in: body
type: string
description: "Warehouse code."
steps:
- name: confirm-receipt
type: call
call: "maersk-warehouse.confirm-receipt"
with:
cargo_id: "{{cargo_id}}"
warehouse_code: "{{warehouse_code}}"
- name: update-sap
type: call
call: "sap.update-goods-receipt"
with:
material_doc: "{{confirm-receipt.material_document}}"
warehouse: "{{warehouse_code}}"
consumes:
- type: http
namespace: maersk-warehouse
baseUri: "https://api.maersk.com/warehouse/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: receipts
path: "/receipts"
operations:
- name: confirm-receipt
method: POST
- type: http
namespace: sap
baseUri: "https://maersk-sap.s4hana.cloud.sap/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: goods-receipts
path: "/goods-receipts"
operations:
- name: update-goods-receipt
method: PUT
Retrieves firewall rule configurations from Palo Alto Networks for compliance auditing of Maersk network security policies.
naftiko: "0.5"
info:
label: "Palo Alto Firewall Rule Auditor"
description: "Retrieves firewall rule configurations from Palo Alto Networks for compliance auditing of Maersk network security policies."
tags:
- security
- palo-alto-networks
- compliance
capability:
exposes:
- type: mcp
namespace: firewall-audit
port: 8080
tools:
- name: audit-firewall-rules
description: "Retrieve and audit Palo Alto firewall rules for a given device group."
inputParameters:
- name: device_group
in: body
type: string
description: "The Palo Alto device group name."
call: "paloalto.get-security-rules"
with:
device_group: "{{device_group}}"
consumes:
- type: http
namespace: paloalto
baseUri: "https://maersk-panorama.paloaltonetworks.com/restapi/v10.2"
authentication:
type: apiKey
key: "$secrets.paloalto_api_key"
resources:
- name: security-rules
path: "/Policies/SecurityRules"
inputParameters:
- name: device_group
in: query
operations:
- name: get-security-rules
method: GET
Analyzes port call schedules, optimizes berth windows, and updates the plan in Oracle Cloud.
naftiko: "0.5"
info:
label: "Port Call Optimization Pipeline"
description: "Analyzes port call schedules, optimizes berth windows, and updates the plan in Oracle Cloud."
tags:
- shipping
- port-operations
- oracle-cloud
capability:
exposes:
- type: mcp
namespace: shipping
port: 8080
tools:
- name: port-call-optimization-pipeline
description: "Optimize port call schedule and update Oracle Cloud."
inputParameters:
- name: vessel_id
in: body
type: string
description: "Vessel identifier."
- name: port_code
in: body
type: string
description: "Port code."
steps:
- name: optimize
type: call
call: "maersk-portops.optimize-port-call"
with:
vessel_id: "{{vessel_id}}"
port_code: "{{port_code}}"
- name: update-plan
type: call
call: "oracle-cloud.update-record"
with:
module: "port_operations"
record_id: "{{vessel_id}}_{{port_code}}"
data: "{{optimize.optimized_schedule}}"
consumes:
- type: http
namespace: maersk-portops
baseUri: "https://api.maersk.com/port-operations/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: port-call
path: "/port-call/optimize"
operations:
- name: optimize-port-call
method: POST
- type: http
namespace: oracle-cloud
baseUri: "https://maersk.oraclecloud.com/api/v1"
authentication:
type: bearer
token: "$secrets.oracle_cloud_token"
resources:
- name: records
path: "/records"
operations:
- name: update-record
method: PUT
Monitors port congestion levels and sends Slack alerts when wait times exceed thresholds.
naftiko: "0.5"
info:
label: "Port Congestion Alert Pipeline"
description: "Monitors port congestion levels and sends Slack alerts when wait times exceed thresholds."
tags:
- shipping
- port-operations
- slack
capability:
exposes:
- type: mcp
namespace: shipping
port: 8080
tools:
- name: port-congestion-alert-pipeline
description: "Monitor port congestion and send Slack alerts."
inputParameters:
- name: port_code
in: body
type: string
description: "Port code to monitor."
steps:
- name: get-congestion
type: call
call: "maersk-portops.get-congestion-data"
with:
port_code: "{{port_code}}"
- name: send-alert
type: call
call: "slack.post-message"
with:
channel: "#port-ops-alerts"
text: "Port congestion alert for {{port_code}}: {{get-congestion.wait_time_hours}}h wait"
consumes:
- type: http
namespace: maersk-portops
baseUri: "https://api.maersk.com/port-operations/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: congestion-data
path: "/congestion"
operations:
- name: get-congestion-data
method: GET
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Checks current port congestion levels and average wait times from Bloomberg Enterprise Data terminal feeds, returning queue depth and average anchorage days.
naftiko: "0.5"
info:
label: "Port Congestion Monitor"
description: "Checks current port congestion levels and average wait times from Bloomberg Enterprise Data terminal feeds, returning queue depth and average anchorage days."
tags:
- port-operations
- congestion
- bloomberg-enterprise-data
capability:
exposes:
- type: mcp
namespace: port-congestion
port: 8080
tools:
- name: get-port-congestion
description: "Retrieve congestion metrics for a given port, including vessel queue and average anchorage wait."
inputParameters:
- name: port_code
in: body
type: string
description: "The UN/LOCODE of the port to check."
call: "bloomberg.get-port-data"
with:
port: "{{port_code}}"
consumes:
- type: http
namespace: bloomberg
baseUri: "https://api.bloomberg.com/eap/v1"
authentication:
type: bearer
token: "$secrets.bloomberg_token"
resources:
- name: port-data
path: "/catalogs/shipping/ports/{{port}}/congestion"
inputParameters:
- name: port
in: path
operations:
- name: get-port-data
method: GET
Retrieves real-time capacity and berth availability data for a specified port terminal.
naftiko: "0.5"
info:
label: "Port Terminal Capacity Lookup"
description: "Retrieves real-time capacity and berth availability data for a specified port terminal."
tags:
- shipping
- port-operations
capability:
exposes:
- type: mcp
namespace: port-ops
port: 8080
tools:
- name: get-terminal-capacity
description: "Retrieve terminal capacity and berth availability by terminal code."
inputParameters:
- name: terminal_code
in: body
type: string
description: "Port terminal code."
call: "port-ops.get-terminal-capacity"
with:
terminal_code: "{{terminal_code}}"
consumes:
- type: http
namespace: port-ops
baseUri: "https://api.maersk.com/port-operations/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: terminal-capacity
path: "/terminals/{{terminal_code}}/capacity"
inputParameters:
- name: terminal_code
in: path
operations:
- name: get-terminal-capacity
method: GET
Triggers a dataset refresh in Power BI for the shipping operations dashboard, pulling latest data from Teradata warehouse.
naftiko: "0.5"
info:
label: "Power BI Shipping Dashboard Refresh"
description: "Triggers a dataset refresh in Power BI for the shipping operations dashboard, pulling latest data from Teradata warehouse."
tags:
- reporting
- power-bi
- teradata
- shipping
capability:
exposes:
- type: mcp
namespace: bi-refresh
port: 8080
tools:
- name: refresh-shipping-dashboard
description: "Trigger a Power BI dataset refresh for the shipping operations dashboard."
inputParameters:
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID to refresh."
steps:
- name: validate-teradata
type: call
call: "teradata.check-connection"
with:
database: "shipping_dw"
- name: trigger-refresh
type: call
call: "powerbi.refresh-dataset"
with:
dataset_id: "{{dataset_id}}"
consumes:
- type: http
namespace: teradata
baseUri: "https://maersk-td.teradata.com/api/v1"
authentication:
type: basic
username: "$secrets.teradata_user"
password: "$secrets.teradata_password"
resources:
- name: connections
path: "/systems/shipping_dw/health"
operations:
- name: check-connection
method: GET
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
Evaluates vendor performance scores from SAP and generates a vendor scorecard report in Box.
naftiko: "0.5"
info:
label: "Procurement Vendor Evaluation Pipeline"
description: "Evaluates vendor performance scores from SAP and generates a vendor scorecard report in Box."
tags:
- shipping
- procurement
- sap
- box
capability:
exposes:
- type: mcp
namespace: shipping
port: 8080
tools:
- name: procurement-vendor-evaluation-pipeline
description: "Evaluate vendor scores from SAP and upload scorecard to Box."
inputParameters:
- name: vendor_id
in: body
type: string
description: "Vendor identifier."
- name: period
in: body
type: string
description: "Evaluation period."
steps:
- name: get-scores
type: call
call: "sap.get-vendor-scores"
with:
vendor_id: "{{vendor_id}}"
period: "{{period}}"
- name: upload-scorecard
type: call
call: "box.upload-file"
with:
folder_id: "vendor-scorecards"
filename: "scorecard_{{vendor_id}}_{{period}}.pdf"
content: "{{get-scores.report}}"
consumes:
- type: http
namespace: sap
baseUri: "https://maersk-sap.s4hana.cloud.sap/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: vendor-scores
path: "/vendor-scores"
operations:
- name: get-vendor-scores
method: GET
- type: http
namespace: box
baseUri: "https://api.box.com/2.0"
authentication:
type: bearer
token: "$secrets.box_token"
resources:
- name: files
path: "/files/content"
operations:
- name: upload-file
method: POST
Retrieves current market rates, compares with contract rates, and creates a HubSpot deal for rate negotiation.
naftiko: "0.5"
info:
label: "Rate Negotiation Workflow"
description: "Retrieves current market rates, compares with contract rates, and creates a HubSpot deal for rate negotiation."
tags:
- shipping
- rates
- hubspot
capability:
exposes:
- type: mcp
namespace: shipping
port: 8080
tools:
- name: rate-negotiation-workflow
description: "Compare market and contract rates and create HubSpot deal."
inputParameters:
- name: trade_lane
in: body
type: string
description: "Trade lane identifier."
- name: contract_id
in: body
type: string
description: "Contract identifier."
steps:
- name: get-rates
type: call
call: "maersk-rates.get-market-comparison"
with:
trade_lane: "{{trade_lane}}"
contract_id: "{{contract_id}}"
- name: create-deal
type: call
call: "hubspot.create-deal"
with:
name: "Rate renegotiation: {{trade_lane}}"
amount: "{{get-rates.potential_savings}}"
consumes:
- type: http
namespace: maersk-rates
baseUri: "https://api.maersk.com/rates/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: market-comparison
path: "/market-comparison"
operations:
- name: get-market-comparison
method: GET
- type: http
namespace: hubspot
baseUri: "https://api.hubapi.com/crm/v3"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: deals
path: "/objects/deals"
operations:
- name: create-deal
method: POST
Queries Maersk IoT sensors for refrigerated container temperature readings and flags deviations to a Datadog dashboard.
naftiko: "0.5"
info:
label: "Reefer Container Temperature Monitor"
description: "Queries Maersk IoT sensors for refrigerated container temperature readings and flags deviations to a Datadog dashboard."
tags:
- reefer
- cold-chain
- datadog
- monitoring
capability:
exposes:
- type: mcp
namespace: reefer-monitoring
port: 8080
tools:
- name: check-reefer-temp
description: "Retrieve temperature readings for a reefer container and push anomalies to Datadog."
inputParameters:
- name: container_number
in: body
type: string
description: "The reefer container ID."
- name: temp_threshold_c
in: body
type: number
description: "Maximum acceptable temperature in Celsius."
steps:
- name: get-temp
type: call
call: "maersk-iot.get-temperature"
with:
container_id: "{{container_number}}"
- name: log-anomaly
type: call
call: "datadog.post-event"
with:
title: "Reefer temp alert: {{container_number}}"
text: "Current temp {{get-temp.current_celsius}}C exceeds threshold {{temp_threshold_c}}C."
alert_type: "warning"
tags: "container:{{container_number}},reefer:true"
consumes:
- type: http
namespace: maersk-iot
baseUri: "https://api.maersk.com/iot/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: temperature
path: "/containers/{{container_id}}/temperature"
inputParameters:
- name: container_id
in: path
operations:
- name: get-temperature
method: GET
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
resources:
- name: events
path: "/events"
operations:
- name: post-event
method: POST
Converts an incoming trade inquiry into a Salesforce lead with company details, trade lane interest, and estimated volume.
naftiko: "0.5"
info:
label: "Salesforce Lead from Trade Inquiry"
description: "Converts an incoming trade inquiry into a Salesforce lead with company details, trade lane interest, and estimated volume."
tags:
- sales
- salesforce
- lead-management
capability:
exposes:
- type: mcp
namespace: sales-leads
port: 8080
tools:
- name: create-lead
description: "Create a Salesforce lead from a trade inquiry."
inputParameters:
- name: company_name
in: body
type: string
description: "Name of the prospective customer."
- name: contact_email
in: body
type: string
description: "Contact email address."
- name: trade_lane
in: body
type: string
description: "Trade lane of interest."
- name: estimated_teu
in: body
type: integer
description: "Estimated annual TEU volume."
call: "salesforce.create-lead"
with:
company: "{{company_name}}"
email: "{{contact_email}}"
description: "Trade lane: {{trade_lane}}, Est. TEU: {{estimated_teu}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://maersk.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: leads
path: "/sobjects/Lead"
operations:
- name: create-lead
method: POST
Looks up a SAP purchase order by number for Maersk procurement, returning header status, vendor, total value, and delivery date.
naftiko: "0.5"
info:
label: "SAP Purchase Order Status"
description: "Looks up a SAP purchase order by number for Maersk procurement, returning header status, vendor, total value, and delivery date."
tags:
- procurement
- erp
- sap
capability:
exposes:
- type: mcp
namespace: erp-procurement
port: 8080
tools:
- name: get-purchase-order
description: "Look up a SAP purchase order by PO number. Returns status, vendor, and total value."
inputParameters:
- name: po_number
in: body
type: string
description: "The SAP purchase order number."
call: "sap.get-po"
with:
po_number: "{{po_number}}"
outputParameters:
- name: status
type: string
mapping: "$.d.OverallStatus"
- name: vendor
type: string
mapping: "$.d.Supplier.CompanyName"
- name: total_value
type: string
mapping: "$.d.TotalAmount"
consumes:
- type: http
namespace: sap
baseUri: "https://maersk-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: purchase-orders
path: "/A_PurchaseOrder('{{po_number}}')"
inputParameters:
- name: po_number
in: path
operations:
- name: get-po
method: GET
Identifies expiring service contracts, prepares renewal terms, and creates opportunities in Salesforce.
naftiko: "0.5"
info:
label: "Service Contract Renewal Pipeline"
description: "Identifies expiring service contracts, prepares renewal terms, and creates opportunities in Salesforce."
tags:
- shipping
- contracts
- salesforce
capability:
exposes:
- type: mcp
namespace: shipping
port: 8080
tools:
- name: service-contract-renewal-pipeline
description: "Find expiring contracts and create Salesforce renewal opportunities."
inputParameters:
- name: days_ahead
in: body
type: string
description: "Number of days to look ahead."
steps:
- name: check-expiring
type: call
call: "maersk-contracts.get-expiring"
with:
days_ahead: "{{days_ahead}}"
- name: create-opportunities
type: call
call: "salesforce.create-opportunity"
with:
name: "Contract renewal batch"
contracts: "{{check-expiring.contracts}}"
consumes:
- type: http
namespace: maersk-contracts
baseUri: "https://api.maersk.com/contracts/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: expiring
path: "/expiring"
operations:
- name: get-expiring
method: GET
- type: http
namespace: salesforce
baseUri: "https://maersk.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity"
operations:
- name: create-opportunity
method: POST
Opens a new ServiceNow incident for IT or operational issues at Maersk facilities, assigning category and priority.
naftiko: "0.5"
info:
label: "ServiceNow Incident Creator"
description: "Opens a new ServiceNow incident for IT or operational issues at Maersk facilities, assigning category and priority."
tags:
- it-support
- servicenow
- incident-management
capability:
exposes:
- type: mcp
namespace: it-incidents
port: 8080
tools:
- name: create-incident
description: "Create a new ServiceNow incident with description, category, and priority."
inputParameters:
- name: short_description
in: body
type: string
description: "Brief summary of the incident."
- name: category
in: body
type: string
description: "Incident category (e.g., network, application, hardware)."
- name: priority
in: body
type: string
description: "Priority level (1-Critical through 5-Planning)."
call: "servicenow.create-incident"
with:
short_description: "{{short_description}}"
category: "{{category}}"
priority: "{{priority}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://maersk.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
Creates a new ocean freight booking in the Maersk booking system with origin, destination, commodity, and container type details.
naftiko: "0.5"
info:
label: "Shipment Booking Creator"
description: "Creates a new ocean freight booking in the Maersk booking system with origin, destination, commodity, and container type details."
tags:
- shipping
- booking
- logistics
capability:
exposes:
- type: mcp
namespace: shipment-booking
port: 8080
tools:
- name: create-booking
description: "Submit a new ocean freight booking with origin port, destination port, commodity, and container size."
inputParameters:
- name: origin_port
in: body
type: string
description: "The UN/LOCODE of the origin port."
- name: destination_port
in: body
type: string
description: "The UN/LOCODE of the destination port."
- name: commodity
in: body
type: string
description: "Description of goods being shipped."
- name: container_type
in: body
type: string
description: "Container size/type code (e.g., 40HC, 20DV)."
call: "maersk-booking.create-booking"
with:
origin: "{{origin_port}}"
destination: "{{destination_port}}"
commodity: "{{commodity}}"
equipment_type: "{{container_type}}"
consumes:
- type: http
namespace: maersk-booking
baseUri: "https://api.maersk.com/booking/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: bookings
path: "/bookings"
operations:
- name: create-booking
method: POST
Calculates CO2 emissions for a shipment route and publishes the sustainability report to Box.
naftiko: "0.5"
info:
label: "Shipment Carbon Footprint Reporter"
description: "Calculates CO2 emissions for a shipment route and publishes the sustainability report to Box."
tags:
- shipping
- sustainability
- box
capability:
exposes:
- type: mcp
namespace: shipping
port: 8080
tools:
- name: shipment-carbon-footprint-reporter
description: "Calculate shipment emissions and upload report to Box."
inputParameters:
- name: shipment_id
in: body
type: string
description: "Shipment identifier."
steps:
- name: calc-emissions
type: call
call: "maersk-sustainability.calculate-emissions"
with:
shipment_id: "{{shipment_id}}"
- name: upload-report
type: call
call: "box.upload-file"
with:
folder_id: "sustainability_reports"
filename: "carbon_{{shipment_id}}.pdf"
content: "{{calc-emissions.report}}"
consumes:
- type: http
namespace: maersk-sustainability
baseUri: "https://api.maersk.com/sustainability/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: emissions
path: "/emissions/calculate"
operations:
- name: calculate-emissions
method: POST
- type: http
namespace: box
baseUri: "https://api.box.com/2.0"
authentication:
type: bearer
token: "$secrets.box_token"
resources:
- name: files
path: "/files/content"
operations:
- name: upload-file
method: POST
When a shipment is delayed beyond SLA, creates a ServiceNow incident, updates the Salesforce opportunity, and notifies the account manager via Microsoft Teams.
naftiko: "0.5"
info:
label: "Shipment Delay Escalation Pipeline"
description: "When a shipment is delayed beyond SLA, creates a ServiceNow incident, updates the Salesforce opportunity, and notifies the account manager via Microsoft Teams."
tags:
- shipping
- sla
- servicenow
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: delay-escalation
port: 8080
tools:
- name: escalate-delay
description: "Escalate a shipment delay: create incident, update CRM, and notify account manager."
inputParameters:
- name: booking_ref
in: body
type: string
description: "The booking reference of the delayed shipment."
- name: delay_days
in: body
type: integer
description: "Number of days the shipment is delayed."
- name: account_manager_email
in: body
type: string
description: "Email of the account manager to notify."
steps:
- name: get-shipment
type: call
call: "maersk-tracking.get-shipment"
with:
booking_ref: "{{booking_ref}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Shipment delay: {{booking_ref}} - {{delay_days}} days late"
category: "logistics"
priority: "2"
description: "Vessel {{get-shipment.vessel_name}} delayed. Original ETA: {{get-shipment.original_eta}}. Revised ETA: {{get-shipment.revised_eta}}."
- name: update-opportunity
type: call
call: "salesforce.update-opportunity"
with:
opportunity_id: "{{get-shipment.sfdc_opportunity_id}}"
description: "Delay of {{delay_days}} days. Incident: {{create-incident.number}}"
- name: notify-manager
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{account_manager_email}}"
text: "Shipment {{booking_ref}} delayed {{delay_days}} days. Incident {{create-incident.number}} opened. Revised ETA: {{get-shipment.revised_eta}}."
consumes:
- type: http
namespace: maersk-tracking
baseUri: "https://api.maersk.com/track/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: shipments
path: "/shipments/{{booking_ref}}"
inputParameters:
- name: booking_ref
in: path
operations:
- name: get-shipment
method: GET
- type: http
namespace: servicenow
baseUri: "https://maersk.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: salesforce
baseUri: "https://maersk.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity/{{opportunity_id}}"
inputParameters:
- name: opportunity_id
in: path
operations:
- name: update-opportunity
method: PATCH
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Collects shipper booking patterns and on-time delivery rates, generates a scorecard in Power BI.
naftiko: "0.5"
info:
label: "Shipper Performance Scorecard Pipeline"
description: "Collects shipper booking patterns and on-time delivery rates, generates a scorecard in Power BI."
tags:
- shipping
- analytics
- power-bi
capability:
exposes:
- type: mcp
namespace: shipping
port: 8080
tools:
- name: shipper-performance-scorecard-pipeline
description: "Collect shipper metrics and publish scorecard to Power BI."
inputParameters:
- name: shipper_id
in: body
type: string
description: "Shipper account ID."
- name: period
in: body
type: string
description: "Reporting period."
steps:
- name: get-metrics
type: call
call: "maersk-analytics.get-shipper-metrics"
with:
shipper_id: "{{shipper_id}}"
period: "{{period}}"
- name: refresh
type: call
call: "powerbi.refresh-dataset"
with:
dataset_id: "shipper_scorecards"
data: "{{get-metrics.scorecard}}"
consumes:
- type: http
namespace: maersk-analytics
baseUri: "https://api.maersk.com/analytics/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: shipper-metrics
path: "/shipper-metrics"
operations:
- name: get-shipper-metrics
method: GET
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets"
operations:
- name: refresh-dataset
method: POST
Returns the current processing status of shipping instructions for a booking.
naftiko: "0.5"
info:
label: "Shipping Instruction Status"
description: "Returns the current processing status of shipping instructions for a booking."
tags:
- shipping
- documentation
capability:
exposes:
- type: mcp
namespace: si-svc
port: 8080
tools:
- name: get-status
description: "Retrieve shipping instruction processing status."
inputParameters:
- name: si_reference
in: body
type: string
description: "Shipping instruction reference."
call: "si-svc.get-status"
with:
si_reference: "{{si_reference}}"
consumes:
- type: http
namespace: si-svc
baseUri: "https://api.maersk.com/shipping-instructions/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: instructions
path: "/instructions/{{si_reference}}/status"
inputParameters:
- name: si_reference
in: path
operations:
- name: get-status
method: GET
Routes operational alerts from Datadog to the appropriate Slack channel based on alert severity and service category.
naftiko: "0.5"
info:
label: "Slack Channel Alert Router"
description: "Routes operational alerts from Datadog to the appropriate Slack channel based on alert severity and service category."
tags:
- alerting
- slack
- datadog
- operations
capability:
exposes:
- type: mcp
namespace: alert-router
port: 8080
tools:
- name: route-alert
description: "Route a Datadog alert to the correct Slack channel based on severity and category."
inputParameters:
- name: alert_title
in: body
type: string
description: "The Datadog alert title."
- name: severity
in: body
type: string
description: "Alert severity (critical, warning, info)."
- name: service_category
in: body
type: string
description: "Service category (shipping, port-ops, it-infra)."
steps:
- name: get-alert-details
type: call
call: "datadog.get-event"
with:
title: "{{alert_title}}"
- name: post-to-slack
type: call
call: "slack.post-message"
with:
channel: "alerts-{{service_category}}"
text: "[{{severity}}] {{alert_title}}: {{get-alert-details.message}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
resources:
- name: events
path: "/events"
operations:
- name: get-event
method: GET
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Retrieves network device health and uptime metrics from SolarWinds for Maersk port and terminal network infrastructure.
naftiko: "0.5"
info:
label: "SolarWinds Network Health Monitor"
description: "Retrieves network device health and uptime metrics from SolarWinds for Maersk port and terminal network infrastructure."
tags:
- network
- solarwinds
- port-infrastructure
capability:
exposes:
- type: mcp
namespace: network-health
port: 8080
tools:
- name: get-network-status
description: "Check SolarWinds for network device health at a specific port or terminal location."
inputParameters:
- name: location_name
in: body
type: string
description: "The port or terminal location name."
call: "solarwinds.get-nodes"
with:
location: "{{location_name}}"
consumes:
- type: http
namespace: solarwinds
baseUri: "https://maersk-solarwinds.com/SolarWinds/InformationService/v3/Json"
authentication:
type: basic
username: "$secrets.solarwinds_user"
password: "$secrets.solarwinds_password"
resources:
- name: nodes
path: "/Query"
inputParameters:
- name: location
in: query
operations:
- name: get-nodes
method: POST
Aggregates shipment milestone data across multiple bookings and syncs to Tableau for supply chain visibility.
naftiko: "0.5"
info:
label: "Supply Chain Visibility Dashboard Sync"
description: "Aggregates shipment milestone data across multiple bookings and syncs to Tableau for supply chain visibility."
tags:
- shipping
- analytics
- tableau
capability:
exposes:
- type: mcp
namespace: shipping
port: 8080
tools:
- name: supply-chain-visibility-dashboard-sync
description: "Aggregate shipment milestones and sync to Tableau."
inputParameters:
- name: customer_id
in: body
type: string
description: "Customer account ID."
- name: date_range
in: body
type: string
description: "Date range for milestones."
steps:
- name: get-milestones
type: call
call: "maersk-tracking.get-milestones"
with:
customer_id: "{{customer_id}}"
date_range: "{{date_range}}"
- name: publish-data
type: call
call: "tableau.publish-datasource"
with:
project_id: "supply_chain_visibility"
datasource_name: "milestones_{{customer_id}}"
data: "{{get-milestones.events}}"
consumes:
- type: http
namespace: maersk-tracking
baseUri: "https://api.maersk.com/tracking/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: milestones
path: "/milestones"
operations:
- name: get-milestones
method: GET
- type: http
namespace: tableau
baseUri: "https://maersk-tableau.online.tableau.com/api/3.19"
authentication:
type: bearer
token: "$secrets.tableau_token"
resources:
- name: datasources
path: "/sites/{{site_id}}/datasources"
operations:
- name: publish-datasource
method: POST
Retrieves applicable tariff rates for a given commodity and trade lane.
naftiko: "0.5"
info:
label: "Tariff Rate Lookup"
description: "Retrieves applicable tariff rates for a given commodity and trade lane."
tags:
- shipping
- tariffs
capability:
exposes:
- type: mcp
namespace: tariffs
port: 8080
tools:
- name: get-rate
description: "Retrieve tariff rates for a commodity and trade lane."
inputParameters:
- name: commodity_code
in: body
type: string
description: "HS commodity code."
- name: trade_lane
in: body
type: string
description: "Trade lane identifier."
call: "tariffs.get-rate"
with:
commodity_code: "{{commodity_code}}"
trade_lane: "{{trade_lane}}"
consumes:
- type: http
namespace: tariffs
baseUri: "https://api.maersk.com/tariffs/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: rates
path: "/rates"
inputParameters:
- name: commodity_code
in: query
- name: trade_lane
in: query
operations:
- name: get-rate
method: GET
Retrieves expected container arrivals at a terminal and creates a yard planning page in Confluence.
naftiko: "0.5"
info:
label: "Terminal Yard Planning Pipeline"
description: "Retrieves expected container arrivals at a terminal and creates a yard planning page in Confluence."
tags:
- shipping
- terminal-operations
- confluence
capability:
exposes:
- type: mcp
namespace: shipping
port: 8080
tools:
- name: terminal-yard-planning-pipeline
description: "Plan terminal yard operations and publish to Confluence."
inputParameters:
- name: terminal_code
in: body
type: string
description: "Terminal code."
- name: date
in: body
type: string
description: "Planning date."
steps:
- name: get-arrivals
type: call
call: "maersk-terminal.get-expected-arrivals"
with:
terminal_code: "{{terminal_code}}"
date: "{{date}}"
- name: publish-plan
type: call
call: "confluence.create-page"
with:
space: "TERMINAL-OPS"
title: "Yard Plan {{terminal_code}} {{date}}"
content: "{{get-arrivals.yard_plan}}"
consumes:
- type: http
namespace: maersk-terminal
baseUri: "https://api.maersk.com/terminal/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: expected-arrivals
path: "/expected-arrivals"
operations:
- name: get-expected-arrivals
method: GET
- type: http
namespace: confluence
baseUri: "https://maersk.atlassian.net/wiki/rest/api"
authentication:
type: bearer
token: "$secrets.confluence_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
Validates trade documents against regulatory requirements and publishes results to SharePoint.
naftiko: "0.5"
info:
label: "Trade Document Compliance Checker"
description: "Validates trade documents against regulatory requirements and publishes results to SharePoint."
tags:
- shipping
- compliance
- sharepoint
capability:
exposes:
- type: mcp
namespace: shipping
port: 8080
tools:
- name: trade-document-compliance-checker
description: "Validate trade documents and publish compliance report to SharePoint."
inputParameters:
- name: shipment_id
in: body
type: string
description: "Shipment identifier."
steps:
- name: validate-docs
type: call
call: "maersk-compliance.validate-documents"
with:
shipment_id: "{{shipment_id}}"
- name: upload-report
type: call
call: "sharepoint.upload-document"
with:
library: "compliance-reports"
content: "{{validate-docs.report}}"
consumes:
- type: http
namespace: maersk-compliance
baseUri: "https://api.maersk.com/compliance/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: documents
path: "/documents/validate"
operations:
- name: validate-documents
method: POST
- type: http
namespace: sharepoint
baseUri: "https://maersk.sharepoint.com/_api/v2.0"
authentication:
type: bearer
token: "$secrets.sharepoint_token"
resources:
- name: documents
path: "/documents"
operations:
- name: upload-document
method: POST
Returns average transit times for a specified origin-destination trade lane pair.
naftiko: "0.5"
info:
label: "Trade Lane Transit Time Lookup"
description: "Returns average transit times for a specified origin-destination trade lane pair."
tags:
- shipping
- trade-lanes
capability:
exposes:
- type: mcp
namespace: trade-lanes
port: 8080
tools:
- name: get-transit-time
description: "Retrieve average transit times for a trade lane."
inputParameters:
- name: origin_port
in: body
type: string
description: "Origin port code."
- name: destination_port
in: body
type: string
description: "Destination port code."
call: "trade-lanes.get-transit-time"
with:
origin_port: "{{origin_port}}"
destination_port: "{{destination_port}}"
consumes:
- type: http
namespace: trade-lanes
baseUri: "https://api.maersk.com/trade-lanes/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: transit-times
path: "/transit-times"
inputParameters:
- name: origin_port
in: query
- name: destination_port
in: query
operations:
- name: get-transit-time
method: GET
When a new vendor is approved, creates the vendor record in Oracle E-Business Suite, opens a ServiceNow onboarding ticket, and notifies procurement via Slack.
naftiko: "0.5"
info:
label: "Vendor Onboarding Pipeline"
description: "When a new vendor is approved, creates the vendor record in Oracle E-Business Suite, opens a ServiceNow onboarding ticket, and notifies procurement via Slack."
tags:
- procurement
- vendor-management
- oracle-e-business-suite
- servicenow
- slack
capability:
exposes:
- type: mcp
namespace: vendor-onboarding
port: 8080
tools:
- name: onboard-vendor
description: "Create vendor in Oracle EBS, open ServiceNow ticket, and notify procurement team."
inputParameters:
- name: vendor_name
in: body
type: string
description: "Legal name of the vendor."
- name: vendor_category
in: body
type: string
description: "Category (e.g., port_services, fuel, maintenance)."
- name: contact_email
in: body
type: string
description: "Primary contact email."
steps:
- name: create-vendor
type: call
call: "oracle-ebs.create-vendor"
with:
vendor_name: "{{vendor_name}}"
category: "{{vendor_category}}"
email: "{{contact_email}}"
- name: open-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "Vendor onboarding: {{vendor_name}}"
category: "procurement"
description: "New vendor {{vendor_name}} ({{vendor_category}}). Oracle vendor ID: {{create-vendor.vendor_id}}."
- name: notify-procurement
type: call
call: "slack.post-message"
with:
channel: "procurement-ops"
text: "New vendor onboarded: {{vendor_name}} ({{vendor_category}}). Oracle ID: {{create-vendor.vendor_id}}. ServiceNow ticket: {{open-ticket.number}}."
consumes:
- type: http
namespace: oracle-ebs
baseUri: "https://maersk-ebs.oraclecloud.com/webservices/rest"
authentication:
type: basic
username: "$secrets.oracle_ebs_user"
password: "$secrets.oracle_ebs_password"
resources:
- name: vendors
path: "/vendors"
operations:
- name: create-vendor
method: POST
- type: http
namespace: servicenow
baseUri: "https://maersk.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Fetches current bunker fuel levels for a vessel by IMO number.
naftiko: "0.5"
info:
label: "Vessel Bunker Fuel Level Query"
description: "Fetches current bunker fuel levels for a vessel by IMO number."
tags:
- shipping
- fuel-management
capability:
exposes:
- type: mcp
namespace: vessel-ops
port: 8080
tools:
- name: get-fuel-level
description: "Retrieve current bunker fuel levels for a vessel."
inputParameters:
- name: imo_number
in: body
type: string
description: "IMO number of the vessel."
call: "vessel-ops.get-fuel-level"
with:
imo_number: "{{imo_number}}"
consumes:
- type: http
namespace: vessel-ops
baseUri: "https://api.maersk.com/vessels/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: fuel-levels
path: "/vessels/{{imo_number}}/fuel-levels"
inputParameters:
- name: imo_number
in: path
operations:
- name: get-fuel-level
method: GET
Retrieves draft survey measurement results for cargo loaded onto a vessel.
naftiko: "0.5"
info:
label: "Vessel Draft Survey Result"
description: "Retrieves draft survey measurement results for cargo loaded onto a vessel."
tags:
- shipping
- cargo-operations
capability:
exposes:
- type: mcp
namespace: cargo-ops
port: 8080
tools:
- name: get-draft-survey
description: "Retrieve draft survey results for a voyage at a port."
inputParameters:
- name: voyage_number
in: body
type: string
description: "Voyage reference."
- name: port_code
in: body
type: string
description: "Port of loading."
call: "cargo-ops.get-draft-survey"
with:
voyage_number: "{{voyage_number}}"
port_code: "{{port_code}}"
consumes:
- type: http
namespace: cargo-ops
baseUri: "https://api.maersk.com/cargo-operations/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: draft-surveys
path: "/voyages/{{voyage_number}}/draft-surveys"
inputParameters:
- name: voyage_number
in: path
- name: port_code
in: query
operations:
- name: get-draft-survey
method: GET
Retrieves vessel maintenance schedule, identifies upcoming dry dock needs, and creates project tasks in Microsoft Planner.
naftiko: "0.5"
info:
label: "Vessel Dry Dock Planning Pipeline"
description: "Retrieves vessel maintenance schedule, identifies upcoming dry dock needs, and creates project tasks in Microsoft Planner."
tags:
- shipping
- maintenance
- microsoft-planner
capability:
exposes:
- type: mcp
namespace: shipping
port: 8080
tools:
- name: vessel-dry-dock-planning-pipeline
description: "Retrieve maintenance schedule and create dry dock planning tasks."
inputParameters:
- name: imo_number
in: body
type: string
description: "Vessel IMO number."
steps:
- name: get-schedule
type: call
call: "maersk-maintenance.get-drydock-schedule"
with:
imo_number: "{{imo_number}}"
- name: create-tasks
type: call
call: "planner.create-task"
with:
plan_id: "drydock_planning"
title: "Dry dock: {{imo_number}}"
details: "{{get-schedule.maintenance_items}}"
consumes:
- type: http
namespace: maersk-maintenance
baseUri: "https://api.maersk.com/maintenance/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: drydock-schedules
path: "/drydock-schedules"
operations:
- name: get-drydock-schedule
method: GET
- type: http
namespace: planner
baseUri: "https://graph.microsoft.com/v1.0/planner"
authentication:
type: bearer
token: "$secrets.planner_token"
resources:
- name: tasks
path: "/tasks"
operations:
- name: create-task
method: POST
Returns the estimated time of arrival for a vessel at a specific port.
naftiko: "0.5"
info:
label: "Vessel ETA Lookup"
description: "Returns the estimated time of arrival for a vessel at a specific port."
tags:
- shipping
- vessel-tracking
capability:
exposes:
- type: mcp
namespace: vessel-tracking
port: 8080
tools:
- name: get-eta
description: "Retrieve the ETA for a vessel at a given port."
inputParameters:
- name: vessel_name
in: body
type: string
description: "Name of the vessel."
- name: port_code
in: body
type: string
description: "Destination port code."
call: "vessel-tracking.get-eta"
with:
vessel_name: "{{vessel_name}}"
port_code: "{{port_code}}"
consumes:
- type: http
namespace: vessel-tracking
baseUri: "https://api.maersk.com/vessel-tracking/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: eta
path: "/vessels/eta"
inputParameters:
- name: vessel_name
in: query
- name: port_code
in: query
operations:
- name: get-eta
method: GET
Collects vessel performance data including fuel consumption and speed, then publishes KPIs to a Power BI dashboard.
naftiko: "0.5"
info:
label: "Vessel Performance Analytics Pipeline"
description: "Collects vessel performance data including fuel consumption and speed, then publishes KPIs to a Power BI dashboard."
tags:
- shipping
- analytics
- power-bi
capability:
exposes:
- type: mcp
namespace: shipping
port: 8080
tools:
- name: vessel-performance-analytics-pipeline
description: "Collect vessel performance data and push KPIs to Power BI."
inputParameters:
- name: imo_number
in: body
type: string
description: "Vessel IMO number."
- name: period
in: body
type: string
description: "Reporting period."
steps:
- name: get-performance
type: call
call: "maersk-analytics.get-vessel-performance"
with:
imo_number: "{{imo_number}}"
period: "{{period}}"
- name: refresh-dashboard
type: call
call: "powerbi.refresh-dataset"
with:
dataset_id: "vessel_performance"
data: "{{get-performance.kpis}}"
consumes:
- type: http
namespace: maersk-analytics
baseUri: "https://api.maersk.com/analytics/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: vessel-performance
path: "/vessel-performance"
operations:
- name: get-vessel-performance
method: GET
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets"
operations:
- name: refresh-dataset
method: POST
Queries the Maersk vessel schedule API for upcoming sailings between two ports, returning departure dates, transit times, and vessel names.
naftiko: "0.5"
info:
label: "Vessel Schedule Lookup"
description: "Queries the Maersk vessel schedule API for upcoming sailings between two ports, returning departure dates, transit times, and vessel names."
tags:
- shipping
- vessel-schedule
- logistics
capability:
exposes:
- type: mcp
namespace: vessel-schedule
port: 8080
tools:
- name: get-schedules
description: "Find upcoming vessel sailings between an origin and destination port."
inputParameters:
- name: origin_port
in: body
type: string
description: "The UN/LOCODE of the origin port."
- name: destination_port
in: body
type: string
description: "The UN/LOCODE of the destination port."
call: "maersk-schedule.list-schedules"
with:
origin: "{{origin_port}}"
destination: "{{destination_port}}"
consumes:
- type: http
namespace: maersk-schedule
baseUri: "https://api.maersk.com/schedules/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: schedules
path: "/port-pairs"
inputParameters:
- name: origin
in: query
- name: destination
in: query
operations:
- name: list-schedules
method: GET
Returns the full port rotation schedule for a given vessel voyage.
naftiko: "0.5"
info:
label: "Vessel Schedule Route Query"
description: "Returns the full port rotation schedule for a given vessel voyage."
tags:
- shipping
- vessel-scheduling
capability:
exposes:
- type: mcp
namespace: schedules
port: 8080
tools:
- name: get-route
description: "Retrieve port rotation schedule for a voyage."
inputParameters:
- name: voyage_number
in: body
type: string
description: "Voyage reference number."
call: "schedules.get-route"
with:
voyage_number: "{{voyage_number}}"
consumes:
- type: http
namespace: schedules
baseUri: "https://api.maersk.com/schedules/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: routes
path: "/voyages/{{voyage_number}}/route"
inputParameters:
- name: voyage_number
in: path
operations:
- name: get-route
method: GET
Calculates voyage profit and loss by aggregating revenue and cost data, then publishes to Tableau.
naftiko: "0.5"
info:
label: "Voyage Profit Loss Analyzer"
description: "Calculates voyage profit and loss by aggregating revenue and cost data, then publishes to Tableau."
tags:
- shipping
- finance
- tableau
capability:
exposes:
- type: mcp
namespace: shipping
port: 8080
tools:
- name: voyage-profit-loss-analyzer
description: "Calculate voyage P&L and publish to Tableau."
inputParameters:
- name: voyage_number
in: body
type: string
description: "Voyage reference number."
steps:
- name: get-pnl
type: call
call: "maersk-finance.get-voyage-pnl"
with:
voyage_number: "{{voyage_number}}"
- name: publish
type: call
call: "tableau.publish-datasource"
with:
project_id: "voyage_financials"
datasource_name: "pnl_{{voyage_number}}"
data: "{{get-pnl.breakdown}}"
consumes:
- type: http
namespace: maersk-finance
baseUri: "https://api.maersk.com/finance/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: voyage-pnl
path: "/voyage-pnl"
operations:
- name: get-voyage-pnl
method: GET
- type: http
namespace: tableau
baseUri: "https://maersk-tableau.online.tableau.com/api/3.19"
authentication:
type: bearer
token: "$secrets.tableau_token"
resources:
- name: datasources
path: "/sites/{{site_id}}/datasources"
operations:
- name: publish-datasource
method: POST
Synchronizes warehouse inventory levels from Oracle E-Business Suite to a SharePoint tracker, flagging items below reorder threshold.
naftiko: "0.5"
info:
label: "Warehouse Inventory Sync"
description: "Synchronizes warehouse inventory levels from Oracle E-Business Suite to a SharePoint tracker, flagging items below reorder threshold."
tags:
- warehouse
- inventory
- oracle-e-business-suite
- sharepoint
capability:
exposes:
- type: mcp
namespace: warehouse-inventory
port: 8080
tools:
- name: sync-inventory
description: "Pull inventory levels from Oracle EBS for a warehouse and update the SharePoint inventory tracker."
inputParameters:
- name: warehouse_id
in: body
type: string
description: "The Oracle EBS warehouse/organization ID."
steps:
- name: get-inventory
type: call
call: "oracle-ebs.get-inventory"
with:
org_id: "{{warehouse_id}}"
- name: update-tracker
type: call
call: "sharepoint.update-list"
with:
site_id: "warehouse_ops"
list_name: "InventoryLevels"
data: "{{get-inventory.items}}"
consumes:
- type: http
namespace: oracle-ebs
baseUri: "https://maersk-ebs.oraclecloud.com/webservices/rest"
authentication:
type: basic
username: "$secrets.oracle_ebs_user"
password: "$secrets.oracle_ebs_password"
resources:
- name: inventory
path: "/inventory/onhand/{{org_id}}"
inputParameters:
- name: org_id
in: path
operations:
- name: get-inventory
method: GET
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: lists
path: "/{{site_id}}/lists/{{list_name}}/items"
inputParameters:
- name: site_id
in: path
- name: list_name
in: path
operations:
- name: update-list
method: POST
Processes incoming container at warehouse, updates SAP inventory, and sends confirmation via Teams.
naftiko: "0.5"
info:
label: "Warehouse Receiving Orchestrator"
description: "Processes incoming container at warehouse, updates SAP inventory, and sends confirmation via Teams."
tags:
- shipping
- warehousing
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: shipping
port: 8080
tools:
- name: warehouse-receiving-orchestrator
description: "Process container receipt, update SAP, and notify via Teams."
inputParameters:
- name: container_number
in: body
type: string
description: "Container number."
- name: warehouse_code
in: body
type: string
description: "Warehouse code."
steps:
- name: receive-container
type: call
call: "maersk-warehouse.receive"
with:
container_number: "{{container_number}}"
warehouse_code: "{{warehouse_code}}"
- name: update-inventory
type: call
call: "sap.update-inventory"
with:
material: "{{receive-container.materials}}"
warehouse: "{{warehouse_code}}"
- name: notify
type: call
call: "teams.send-message"
with:
channel_id: "warehouse-ops"
message: "Container {{container_number}} received at {{warehouse_code}}"
consumes:
- type: http
namespace: maersk-warehouse
baseUri: "https://api.maersk.com/warehouse/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: receiving
path: "/receiving"
operations:
- name: receive
method: POST
- type: http
namespace: sap
baseUri: "https://maersk-sap.s4hana.cloud.sap/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: inventory
path: "/inventory"
operations:
- name: update-inventory
method: PUT
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Retrieves employee details from Workday by worker ID, including department, manager, and location for operational staffing queries.
naftiko: "0.5"
info:
label: "Workday Employee Directory Lookup"
description: "Retrieves employee details from Workday by worker ID, including department, manager, and location for operational staffing queries."
tags:
- hr
- workday
- employee-directory
capability:
exposes:
- type: mcp
namespace: hr-directory
port: 8080
tools:
- name: get-employee
description: "Look up an employee in Workday by worker ID."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID."
call: "workday.get-worker"
with:
worker_id: "{{worker_id}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
Creates a Zendesk support ticket from customer shipping inquiries, attaching container tracking details for faster resolution.
naftiko: "0.5"
info:
label: "Zendesk Customer Support Ticket Creator"
description: "Creates a Zendesk support ticket from customer shipping inquiries, attaching container tracking details for faster resolution."
tags:
- customer-support
- zendesk
- shipping
capability:
exposes:
- type: mcp
namespace: customer-support
port: 8080
tools:
- name: create-support-ticket
description: "Create a Zendesk ticket with container tracking context for customer support."
inputParameters:
- name: customer_email
in: body
type: string
description: "Customer email address."
- name: subject
in: body
type: string
description: "Ticket subject."
- name: container_number
in: body
type: string
description: "Container number for tracking context."
steps:
- name: get-tracking
type: call
call: "maersk-tracking.get-container"
with:
container_id: "{{container_number}}"
- name: create-ticket
type: call
call: "zendesk.create-ticket"
with:
requester_email: "{{customer_email}}"
subject: "{{subject}}"
description: "Container: {{container_number}} | Vessel: {{get-tracking.vessel.name}} | ETA: {{get-tracking.eta}} | Status: {{get-tracking.status}}"
consumes:
- type: http
namespace: maersk-tracking
baseUri: "https://api.maersk.com/track/v1"
authentication:
type: bearer
token: "$secrets.maersk_api_token"
resources:
- name: containers
path: "/containers/{{container_id}}"
inputParameters:
- name: container_id
in: path
operations:
- name: get-container
method: GET
- type: http
namespace: zendesk
baseUri: "https://maersk.zendesk.com/api/v2"
authentication:
type: bearer
token: "$secrets.zendesk_token"
resources:
- name: tickets
path: "/tickets"
operations:
- name: create-ticket
method: POST
Enriches Salesforce account records with firmographic data from ZoomInfo, including company size, revenue, and industry classification.
naftiko: "0.5"
info:
label: "ZoomInfo Account Enrichment"
description: "Enriches Salesforce account records with firmographic data from ZoomInfo, including company size, revenue, and industry classification."
tags:
- sales
- zoominfo
- salesforce
- data-enrichment
capability:
exposes:
- type: mcp
namespace: account-enrichment
port: 8080
tools:
- name: enrich-account
description: "Pull firmographic data from ZoomInfo and update the Salesforce account record."
inputParameters:
- name: account_id
in: body
type: string
description: "The Salesforce account ID to enrich."
- name: company_domain
in: body
type: string
description: "The company website domain for ZoomInfo lookup."
steps:
- name: get-firmographics
type: call
call: "zoominfo.enrich-company"
with:
domain: "{{company_domain}}"
- name: update-account
type: call
call: "salesforce.update-account"
with:
account_id: "{{account_id}}"
employee_count: "{{get-firmographics.employee_count}}"
annual_revenue: "{{get-firmographics.revenue}}"
industry: "{{get-firmographics.industry}}"
consumes:
- type: http
namespace: zoominfo
baseUri: "https://api.zoominfo.com"
authentication:
type: bearer
token: "$secrets.zoominfo_token"
resources:
- name: companies
path: "/enrich/company"
operations:
- name: enrich-company
method: POST
- type: http
namespace: salesforce
baseUri: "https://maersk.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: update-account
method: PATCH