Hapag-Lloyd Capabilities
Naftiko 0.5 capability definitions for Hapag-Lloyd - 100 capabilities showing integration workflows and service orchestrations.
Retrieves payroll summary data from ADP for a given pay period, returning total gross, net, and headcount.
naftiko: "0.5"
info:
label: "ADP Payroll Summary"
description: "Retrieves payroll summary data from ADP for a given pay period, returning total gross, net, and headcount."
tags:
- hr
- payroll
- adp
capability:
exposes:
- type: mcp
namespace: hr-payroll
port: 8080
tools:
- name: get-payroll-summary
description: "Get payroll summary from ADP for a pay period."
inputParameters:
- name: pay_period
in: body
type: string
description: "The pay period identifier (e.g. 2026-03-15)."
call: "adp.get-payroll"
with:
pay_period: "{{pay_period}}"
outputParameters:
- name: total_gross
type: string
mapping: "$.payrollSummary.totalGross"
- name: total_net
type: string
mapping: "$.payrollSummary.totalNet"
- name: employee_count
type: integer
mapping: "$.payrollSummary.headcount"
consumes:
- type: http
namespace: adp
baseUri: "https://api.adp.com/hr/v2"
authentication:
type: bearer
token: "$secrets.adp_token"
resources:
- name: payroll
path: "/payroll-outputs?payPeriod={{pay_period}}"
inputParameters:
- name: pay_period
in: query
operations:
- name: get-payroll
method: GET
Manages annual shipping contract renewals by pulling contract data from SAP, generating renewal proposals in SharePoint, notifying account managers via Microsoft Outlook, and tracking in Jira.
naftiko: "0.5"
info:
label: "Annual Contract Renewal Orchestrator"
description: "Manages annual shipping contract renewals by pulling contract data from SAP, generating renewal proposals in SharePoint, notifying account managers via Microsoft Outlook, and tracking in Jira."
tags:
- sales
- contracts
- sap
- sharepoint
- microsoft-outlook
- jira
capability:
exposes:
- type: mcp
namespace: contract-renewal
port: 8080
tools:
- name: process-contract-renewal
description: "Process annual contract renewal."
inputParameters:
- name: contract_id
in: body
type: string
description: "The SAP contract ID."
- name: customer_id
in: body
type: string
description: "The customer account ID."
steps:
- name: get-contract
type: call
call: "sap.get-contract"
with:
contract: "{{contract_id}}"
- name: generate-proposal
type: call
call: "sharepoint.create-file"
with:
site_id: "sales_site"
file_path: "Renewals/{{contract_id}}_proposal.pdf"
- name: notify-account-mgr
type: call
call: "outlook.send-email"
with:
to: "{{get-contract.accountManagerEmail}}"
subject: "Contract Renewal Due - {{contract_id}}"
body: "Contract {{contract_id}} for {{get-contract.customerName}} expires {{get-contract.expiryDate}}. Volume: {{get-contract.annualVolume}} TEU. Proposal: {{generate-proposal.url}}"
- name: create-jira-task
type: call
call: "jira.create-issue"
with:
project: "SALES"
summary: "Contract renewal: {{contract_id}} - {{get-contract.customerName}}"
description: "Expiry: {{get-contract.expiryDate}}. Current volume: {{get-contract.annualVolume}} TEU."
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSD_CONTRACT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0/me"
authentication:
type: bearer
token: "$secrets.msgraph_token"
- type: http
namespace: jira
baseUri: "https://hapag-lloyd.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
Retrieves the latest build status for a given Azure DevOps pipeline, returning build number, result, and duration.
naftiko: "0.5"
info:
label: "Azure DevOps Build Status"
description: "Retrieves the latest build status for a given Azure DevOps pipeline, returning build number, result, and duration."
tags:
- devops
- ci-cd
- azure-devops
capability:
exposes:
- type: mcp
namespace: cicd-status
port: 8080
tools:
- name: get-build-status
description: "Get 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: "azdo.get-builds"
with:
project: "{{project_name}}"
definition_id: "{{pipeline_id}}"
outputParameters:
- name: build_number
type: string
mapping: "$.value[0].buildNumber"
- name: result
type: string
mapping: "$.value[0].result"
- name: duration
type: string
mapping: "$.value[0].finishTime"
consumes:
- type: http
namespace: azdo
baseUri: "https://dev.azure.com/hapag-lloyd"
authentication:
type: basic
username: ""
password: "$secrets.azdo_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-builds
method: GET
On shipment departure, pulls booking and container data from SAP, generates a bill of lading document in SharePoint, and logs an event in ServiceNow.
naftiko: "0.5"
info:
label: "Bill of Lading Generator"
description: "On shipment departure, pulls booking and container data from SAP, generates a bill of lading document in SharePoint, and logs an event in ServiceNow."
tags:
- shipping
- documentation
- sap
- sharepoint
- servicenow
capability:
exposes:
- type: mcp
namespace: shipping-docs
port: 8080
tools:
- name: generate-bill-of-lading
description: "Generate a bill of lading for a shipment, store it, and create a ServiceNow record."
inputParameters:
- name: shipment_id
in: body
type: string
description: "The SAP shipment ID."
steps:
- name: get-shipment
type: call
call: "sap.get-shipment"
with:
shipment_id: "{{shipment_id}}"
- name: store-bol
type: call
call: "sharepoint.create-file"
with:
site_id: "shipping_docs_site"
file_path: "BillsOfLading/BOL_{{get-shipment.BookingRef}}.pdf"
- name: log-event
type: call
call: "servicenow.create-record"
with:
table: "u_shipping_events"
short_description: "B/L generated for {{get-shipment.BookingRef}}"
description: "Bill of lading created for shipment {{shipment_id}}. Document: {{store-bol.url}}"
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_SHIPMENT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: shipments
path: "/ShipmentSet('{{shipment_id}}')"
inputParameters:
- name: shipment_id
in: path
operations:
- name: get-shipment
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:/{{file_path}}"
inputParameters:
- name: site_id
in: path
- name: file_path
in: path
operations:
- name: create-file
method: PUT
- type: http
namespace: servicenow
baseUri: "https://hapag-lloyd.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST
When a blank sailing is announced, identifies affected bookings in SAP, rebooks cargo on alternative vessels, notifies customers via Microsoft Outlook, and updates Salesforce accounts.
naftiko: "0.5"
info:
label: "Blank Sailing Impact Processor"
description: "When a blank sailing is announced, identifies affected bookings in SAP, rebooks cargo on alternative vessels, notifies customers via Microsoft Outlook, and updates Salesforce accounts."
tags:
- shipping
- blank-sailing
- sap
- microsoft-outlook
- salesforce
capability:
exposes:
- type: mcp
namespace: blank-sailing
port: 8080
tools:
- name: process-blank-sailing
description: "Process blank sailing impact."
inputParameters:
- name: vessel_id
in: body
type: string
description: "The cancelled vessel."
- name: voyage_number
in: body
type: string
description: "The cancelled voyage."
steps:
- name: get-affected-bookings
type: call
call: "sap.get-voyage-bookings"
with:
vessel: "{{vessel_id}}"
voyage: "{{voyage_number}}"
- name: rebook-cargo
type: call
call: "sap.auto-rebook"
with:
bookings: "{{get-affected-bookings.bookingList}}"
cancelled_voyage: "{{voyage_number}}"
- name: notify-customers
type: call
call: "outlook.send-email"
with:
to: "{{get-affected-bookings.customerEmails}}"
subject: "Schedule Change - Voyage {{voyage_number}}"
body: "Due to a schedule adjustment, your cargo has been rebooked. New vessel: {{rebook-cargo.newVessel}}. New ETD: {{rebook-cargo.newETD}}."
- name: update-salesforce
type: call
call: "salesforce.update-accounts"
with:
accounts: "{{get-affected-bookings.customerIds}}"
note: "Blank sailing {{voyage_number}} - cargo rebooked to {{rebook-cargo.newVessel}}."
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_BOOKING_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0/me"
authentication:
type: bearer
token: "$secrets.msgraph_token"
- type: http
namespace: salesforce
baseUri: "https://hapag-lloyd.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
When a new booking is created in SAP, generates a booking confirmation PDF in SharePoint, sends a Microsoft Teams notification to the operations team, and emails the customer via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Booking Confirmation Orchestrator"
description: "When a new booking is created in SAP, generates a booking confirmation PDF in SharePoint, sends a Microsoft Teams notification to the operations team, and emails the customer via Microsoft Outlook."
tags:
- shipping
- booking
- sap
- sharepoint
- microsoft-teams
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: booking-confirmation
port: 8080
tools:
- name: confirm-booking
description: "Given a SAP booking ID, generate a confirmation document, notify operations, and email the customer."
inputParameters:
- name: booking_id
in: body
type: string
description: "The SAP booking reference number."
- name: customer_email
in: body
type: string
description: "The customer email address for confirmation delivery."
steps:
- name: get-booking
type: call
call: "sap.get-booking"
with:
booking_id: "{{booking_id}}"
- name: store-confirmation
type: call
call: "sharepoint.create-file"
with:
site_id: "operations_site"
file_path: "Bookings/{{get-booking.BookingRef}}_confirmation.pdf"
- name: notify-ops
type: call
call: "msteams.send-message"
with:
channel_id: "operations-bookings"
text: "Booking {{get-booking.BookingRef}} confirmed for {{get-booking.CustomerName}}. Vessel: {{get-booking.VesselName}}, ETD: {{get-booking.DepartureDate}}."
- name: email-customer
type: call
call: "outlook.send-email"
with:
to: "{{customer_email}}"
subject: "Booking Confirmation - {{get-booking.BookingRef}}"
body: "Your booking {{get-booking.BookingRef}} on vessel {{get-booking.VesselName}} departing {{get-booking.DepartureDate}} has been confirmed. Document: {{store-confirmation.url}}"
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_BOOKING_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: bookings
path: "/BookingSet('{{booking_id}}')"
inputParameters:
- name: booking_id
in: path
operations:
- name: get-booking
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:/{{file_path}}"
inputParameters:
- name: site_id
in: path
- name: file_path
in: path
operations:
- name: create-file
method: PUT
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0/me"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/sendMail"
operations:
- name: send-email
method: POST
Archives a completed shipment document from SharePoint to Box for long-term retention, tagging it with shipment metadata.
naftiko: "0.5"
info:
label: "Box Document Archive"
description: "Archives a completed shipment document from SharePoint to Box for long-term retention, tagging it with shipment metadata."
tags:
- document-management
- archival
- sharepoint
- box
capability:
exposes:
- type: mcp
namespace: doc-archival
port: 8080
tools:
- name: archive-to-box
description: "Move a SharePoint document to Box for long-term archival."
inputParameters:
- name: site_id
in: body
type: string
description: "The SharePoint site ID."
- name: file_path
in: body
type: string
description: "The file path in SharePoint."
- name: box_folder_id
in: body
type: string
description: "The target Box folder ID."
steps:
- name: get-file
type: call
call: "sharepoint.get-file-content"
with:
site_id: "{{site_id}}"
file_path: "{{file_path}}"
- name: upload-to-box
type: call
call: "box.upload-file"
with:
folder_id: "{{box_folder_id}}"
file_name: "{{file_path}}"
content: "{{get-file.content}}"
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:/{{file_path}}:/content"
inputParameters:
- name: site_id
in: path
- name: file_path
in: path
operations:
- name: get-file-content
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 estimated CO2 emissions for a shipment route using the sustainability platform.
naftiko: "0.5"
info:
label: "Carbon Emissions Calculator"
description: "Calculates estimated CO2 emissions for a shipment route using the sustainability platform."
tags:
- sustainability
- emissions
- shipping
capability:
exposes:
- type: mcp
namespace: sustainability-calc
port: 8080
tools:
- name: calculate-emissions
description: "Calculate CO2 emissions for a shipping route."
inputParameters:
- name: origin_port
in: body
type: string
description: "UN/LOCODE of origin port."
- name: destination_port
in: body
type: string
description: "UN/LOCODE of destination port."
- name: container_count
in: body
type: integer
description: "Number of containers."
call: "sustainability.calc-emissions"
with:
origin: "{{origin_port}}"
destination: "{{destination_port}}"
containers: "{{container_count}}"
outputParameters:
- name: co2_tonnes
type: number
mapping: "$.co2Tonnes"
- name: distance_nm
type: number
mapping: "$.distanceNauticalMiles"
consumes:
- type: http
namespace: sustainability
baseUri: "https://hapag-lloyd-sustainability.azure.com/api/v1"
authentication:
type: bearer
token: "$secrets.sustainability_token"
resources:
- name: emissions
path: "/emissions/calculate"
inputParameters:
- name: origin
in: query
- name: destination
in: query
- name: containers
in: query
operations:
- name: calc-emissions
method: GET
Retrieves verified gross mass declaration for a container from SAP by booking reference.
naftiko: "0.5"
info:
label: "Cargo Weight Declaration Lookup"
description: "Retrieves verified gross mass declaration for a container from SAP by booking reference."
tags:
- shipping
- vgm
- sap
capability:
exposes:
- type: mcp
namespace: shipping-vgm
port: 8080
tools:
- name: get-vgm-declaration
description: "Look up the verified gross mass declaration for a specific booking."
inputParameters:
- name: booking_ref
in: body
type: string
description: "The booking reference number."
call: "sap.get-vgm"
with:
booking_id: "{{booking_ref}}"
outputParameters:
- name: gross_mass
type: string
mapping: "$.d.GrossMass"
- name: unit
type: string
mapping: "$.d.Unit"
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_VGM_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: vgm-declarations
path: "/VGMSet('{{booking_id}}')"
inputParameters:
- name: booking_id
in: path
operations:
- name: get-vgm
method: GET
Pulls alliance partner vessel schedules from SAP, merges with Hapag-Lloyd routes, and updates a shared Google Sheets schedule.
naftiko: "0.5"
info:
label: "Carrier Alliance Schedule Sync"
description: "Pulls alliance partner vessel schedules from SAP, merges with Hapag-Lloyd routes, and updates a shared Google Sheets schedule."
tags:
- logistics
- alliance
- sap
- google-sheets
capability:
exposes:
- type: mcp
namespace: alliance-schedules
port: 8080
tools:
- name: sync-alliance-schedule
description: "Merge alliance partner schedules with Hapag-Lloyd data and update Google Sheets."
inputParameters:
- name: trade_lane
in: body
type: string
description: "The trade lane to sync."
- name: spreadsheet_id
in: body
type: string
description: "The target Google Sheets ID."
steps:
- name: get-hl-schedule
type: call
call: "sap.get-hl-schedules"
with:
trade_lane: "{{trade_lane}}"
- name: get-partner-schedule
type: call
call: "sap.get-partner-schedules"
with:
trade_lane: "{{trade_lane}}"
- name: update-sheet
type: call
call: "gsheets.update-values"
with:
spreadsheet_id: "{{spreadsheet_id}}"
range: "Alliance!A1"
values:
- - "Trade Lane"
- "HL Sailings"
- "Partner Sailings"
- "Total Capacity"
- - "{{trade_lane}}"
- "{{get-hl-schedule.sailing_count}}"
- "{{get-partner-schedule.sailing_count}}"
- "{{get-hl-schedule.total_teu}}"
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_SCHEDULE_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: hl-schedules
path: "/HLScheduleSet?$filter=TradeLane eq '{{trade_lane}}'"
inputParameters:
- name: trade_lane
in: query
operations:
- name: get-hl-schedules
method: GET
- name: partner-schedules
path: "/PartnerScheduleSet?$filter=TradeLane eq '{{trade_lane}}'"
inputParameters:
- name: trade_lane
in: query
operations:
- name: get-partner-schedules
method: GET
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4/spreadsheets"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: values
path: "/{{spreadsheet_id}}/values/{{range}}"
inputParameters:
- name: spreadsheet_id
in: path
- name: range
in: path
operations:
- name: update-values
method: PUT
Processes charter party agreements by extracting terms, creating entries in SAP, generating contract documents in SharePoint, and notifying the legal team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Charter Party Agreement Processor"
description: "Processes charter party agreements by extracting terms, creating entries in SAP, generating contract documents in SharePoint, and notifying the legal team via Microsoft Teams."
tags:
- shipping
- charter
- legal
- sap
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: charter-processing
port: 8080
tools:
- name: process-charter-agreement
description: "Process a charter party agreement."
inputParameters:
- name: charter_id
in: body
type: string
description: "The charter agreement reference."
- name: vessel_name
in: body
type: string
description: "The vessel name."
steps:
- name: extract-terms
type: call
call: "sap.get-charter-terms"
with:
charter: "{{charter_id}}"
- name: create-sap-entry
type: call
call: "sap.create-charter-record"
with:
charter: "{{charter_id}}"
vessel: "{{vessel_name}}"
terms: "{{extract-terms.summary}}"
- name: generate-contract
type: call
call: "sharepoint.create-file"
with:
site_id: "legal_site"
file_path: "Charters/{{charter_id}}_agreement.pdf"
- name: notify-legal
type: call
call: "msteams.send-message"
with:
channel_id: "legal-shipping"
text: "Charter {{charter_id}} for vessel {{vessel_name}} processed. Terms: {{extract-terms.duration}} days at {{extract-terms.dailyRate}}/day. Contract: {{generate-contract.url}}"
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_CHARTER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
Checks Cloudflare DNS health for Hapag-Lloyd web properties and returns zone status, SSL certificate expiry, and recent threat count.
naftiko: "0.5"
info:
label: "Cloudflare DNS Health Monitor"
description: "Checks Cloudflare DNS health for Hapag-Lloyd web properties and returns zone status, SSL certificate expiry, and recent threat count."
tags:
- security
- dns
- cloudflare
capability:
exposes:
- type: mcp
namespace: dns-health
port: 8080
tools:
- name: check-dns-health
description: "Check DNS and security health for a Cloudflare zone."
inputParameters:
- name: zone_id
in: body
type: string
description: "The Cloudflare zone ID."
call: "cloudflare.get-zone"
with:
zone_id: "{{zone_id}}"
outputParameters:
- name: zone_status
type: string
mapping: "$.result.status"
- name: ssl_status
type: string
mapping: "$.result.ssl.status"
- name: threat_count
type: integer
mapping: "$.result.meta.threat_score"
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}}"
inputParameters:
- name: zone_id
in: path
operations:
- name: get-zone
method: GET
Creates or updates a Confluence page with shipping operational content, used for knowledge base articles and SOPs.
naftiko: "0.5"
info:
label: "Confluence Knowledge Base Publisher"
description: "Creates or updates a Confluence page with shipping operational content, used for knowledge base articles and SOPs."
tags:
- knowledge-management
- confluence
- documentation
capability:
exposes:
- type: mcp
namespace: knowledge-base
port: 8080
tools:
- name: publish-kb-article
description: "Create or update a Confluence knowledge base page."
inputParameters:
- name: space_key
in: body
type: string
description: "The Confluence space key."
- name: title
in: body
type: string
description: "The page title."
- name: content
in: body
type: string
description: "The page content in Confluence storage format."
call: "confluence.create-page"
with:
space_key: "{{space_key}}"
title: "{{title}}"
body: "{{content}}"
consumes:
- type: http
namespace: confluence
baseUri: "https://hapag-lloyd.atlassian.net/wiki/api/v2"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/pages"
operations:
- name: create-page
method: POST
When a container damage claim is filed, retrieves container history from SAP, creates a Salesforce case, opens a ServiceNow insurance claim, and notifies the claims team in Microsoft Teams.
naftiko: "0.5"
info:
label: "Container Damage Claim Processor"
description: "When a container damage claim is filed, retrieves container history from SAP, creates a Salesforce case, opens a ServiceNow insurance claim, and notifies the claims team in Microsoft Teams."
tags:
- claims
- container
- sap
- salesforce
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: damage-claims
port: 8080
tools:
- name: process-damage-claim
description: "Process a container damage claim across SAP, Salesforce, ServiceNow, and Teams."
inputParameters:
- name: container_number
in: body
type: string
description: "The damaged container number."
- name: damage_description
in: body
type: string
description: "Description of the damage."
- name: customer_account_id
in: body
type: string
description: "The Salesforce customer account ID."
steps:
- name: get-container-history
type: call
call: "sap.get-container-history"
with:
container_id: "{{container_number}}"
- name: create-sf-case
type: call
call: "salesforce.create-case"
with:
account_id: "{{customer_account_id}}"
subject: "Container damage: {{container_number}}"
description: "{{damage_description}}. Last vessel: {{get-container-history.last_vessel}}. Last port: {{get-container-history.last_port}}."
- name: open-insurance-claim
type: call
call: "servicenow.create-record"
with:
table: "u_insurance_claims"
short_description: "Insurance claim: container {{container_number}}"
description: "Damage: {{damage_description}}. SF Case: {{create-sf-case.id}}. Container age: {{get-container-history.age_years}} years."
- name: notify-claims
type: call
call: "msteams.send-message"
with:
channel_id: "claims-team"
text: "New damage claim for container {{container_number}}. SF Case: {{create-sf-case.CaseNumber}}. ServiceNow: {{open-insurance-claim.number}}."
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_CONTAINER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: container-history
path: "/ContainerHistorySet('{{container_id}}')"
inputParameters:
- name: container_id
in: path
operations:
- name: get-container-history
method: GET
- type: http
namespace: salesforce
baseUri: "https://hapag-lloyd.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: servicenow
baseUri: "https://hapag-lloyd.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Pulls container fleet data from SAP, calculates utilization metrics, and pushes a summary dashboard to Power BI.
naftiko: "0.5"
info:
label: "Container Fleet Utilization Report"
description: "Pulls container fleet data from SAP, calculates utilization metrics, and pushes a summary dashboard to Power BI."
tags:
- logistics
- fleet
- sap
- power-bi
- reporting
capability:
exposes:
- type: mcp
namespace: fleet-utilization
port: 8080
tools:
- name: sync-fleet-utilization
description: "Pull SAP fleet data and push utilization metrics to Power BI."
inputParameters:
- name: region_code
in: body
type: string
description: "The regional fleet code (e.g. APAC, EMEA, AMER)."
steps:
- name: get-fleet
type: call
call: "sap.get-fleet-data"
with:
region: "{{region_code}}"
- name: push-metrics
type: call
call: "powerbi.push-rows"
with:
dataset_id: "fleet_utilization_ds"
table_name: "Utilization"
rows:
- region: "{{region_code}}"
total_containers: "{{get-fleet.total_count}}"
in_use: "{{get-fleet.in_use_count}}"
utilization_pct: "{{get-fleet.utilization_pct}}"
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_FLEET_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: fleet
path: "/FleetDataSet(Region='{{region}}')"
inputParameters:
- name: region
in: path
operations:
- name: get-fleet-data
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}}/tables/{{table_name}}/rows"
inputParameters:
- name: dataset_id
in: path
- name: table_name
in: path
operations:
- name: push-rows
method: POST
Manages container pre-trip inspections by creating inspection tasks in ServiceNow, recording results in SAP, uploading photos to Box, and notifying the equipment team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Container Inspection Workflow"
description: "Manages container pre-trip inspections by creating inspection tasks in ServiceNow, recording results in SAP, uploading photos to Box, and notifying the equipment team via Microsoft Teams."
tags:
- equipment
- inspection
- servicenow
- sap
- box
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: container-inspection
port: 8080
tools:
- name: process-inspection
description: "Process container inspection workflow."
inputParameters:
- name: container_number
in: body
type: string
description: "The container number."
- name: inspection_type
in: body
type: string
description: "Type of inspection."
steps:
- name: create-task
type: call
call: "servicenow.create-task"
with:
short_description: "Inspect container {{container_number}}"
description: "{{inspection_type}} inspection required for container {{container_number}}."
- name: record-results
type: call
call: "sap.record-inspection"
with:
container: "{{container_number}}"
type: "{{inspection_type}}"
task_ref: "{{create-task.taskNumber}}"
- name: upload-photos
type: call
call: "box.upload-file"
with:
folder_id: "container_inspections"
filename: "{{container_number}}_{{inspection_type}}.zip"
- name: notify-equipment
type: call
call: "msteams.send-message"
with:
channel_id: "equipment-team"
text: "Inspection completed for {{container_number}} ({{inspection_type}}). Task: {{create-task.taskNumber}}. Photos: {{upload-photos.url}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://hapag-lloyd.service-now.com/api/now/table/sc_task"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_EQUIP_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
- type: http
namespace: box
baseUri: "https://api.box.com/2.0"
authentication:
type: bearer
token: "$secrets.box_token"
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
Manages leased container returns by checking condition in SAP, calculating repair costs, notifying the lessor via Microsoft Outlook, and updating the fleet dashboard in Google Sheets.
naftiko: "0.5"
info:
label: "Container Leasing Return Orchestrator"
description: "Manages leased container returns by checking condition in SAP, calculating repair costs, notifying the lessor via Microsoft Outlook, and updating the fleet dashboard in Google Sheets."
tags:
- equipment
- leasing
- sap
- microsoft-outlook
- google-sheets
capability:
exposes:
- type: mcp
namespace: leasing-return
port: 8080
tools:
- name: process-lease-return
description: "Process leased container return."
inputParameters:
- name: container_number
in: body
type: string
description: "The container number."
- name: lessor_id
in: body
type: string
description: "The leasing company ID."
steps:
- name: check-condition
type: call
call: "sap.inspect-container"
with:
container: "{{container_number}}"
- name: calculate-costs
type: call
call: "sap.calculate-repair"
with:
container: "{{container_number}}"
damages: "{{check-condition.damages}}"
- name: notify-lessor
type: call
call: "outlook.send-email"
with:
to: "{{check-condition.lessorEmail}}"
subject: "Container Return - {{container_number}}"
body: "Container {{container_number}} returned. Condition: {{check-condition.grade}}. Repair estimate: {{calculate-costs.totalCost}} {{calculate-costs.currency}}."
- name: update-fleet-dashboard
type: call
call: "gsheets.update-range"
with:
spreadsheet_id: "fleet_dashboard"
range: "Leases!A2"
values: "{{container_number}},returned,{{check-condition.grade}},{{calculate-costs.totalCost}}"
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_EQUIP_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0/me"
authentication:
type: bearer
token: "$secrets.msgraph_token"
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4/spreadsheets"
authentication:
type: bearer
token: "$secrets.google_token"
Processes container release by verifying payment in SAP, generating release order, notifying the terminal via the port system, and updating the customer through Microsoft Outlook.
naftiko: "0.5"
info:
label: "Container Release Orchestrator"
description: "Processes container release by verifying payment in SAP, generating release order, notifying the terminal via the port system, and updating the customer through Microsoft Outlook."
tags:
- shipping
- container
- release
- sap
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: container-release
port: 8080
tools:
- name: release-container
description: "Process a container release request."
inputParameters:
- name: container_number
in: body
type: string
description: "The container number."
- name: customer_id
in: body
type: string
description: "The customer account ID."
steps:
- name: verify-payment
type: call
call: "sap.check-payment"
with:
container: "{{container_number}}"
customer: "{{customer_id}}"
- name: generate-release
type: call
call: "sap.create-release-order"
with:
container: "{{container_number}}"
payment_ref: "{{verify-payment.paymentRef}}"
- name: notify-terminal
type: call
call: "portapi.send-release"
with:
container: "{{container_number}}"
release_id: "{{generate-release.releaseId}}"
- name: email-customer
type: call
call: "outlook.send-email"
with:
to: "{{verify-payment.customerEmail}}"
subject: "Container Release - {{container_number}}"
body: "Container {{container_number}} has been released. Release ID: {{generate-release.releaseId}}."
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_RELEASE_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
- type: http
namespace: portapi
baseUri: "https://hapag-lloyd-port.azure.com/api/v1"
authentication:
type: bearer
token: "$secrets.port_api_token"
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0/me"
authentication:
type: bearer
token: "$secrets.msgraph_token"
Looks up real-time container tracking status from SAP by container number and returns vessel name, current port, ETA, and shipment status.
naftiko: "0.5"
info:
label: "Container Shipment Tracking"
description: "Looks up real-time container tracking status from SAP by container number and returns vessel name, current port, ETA, and shipment status."
tags:
- shipping
- tracking
- sap
- container
capability:
exposes:
- type: mcp
namespace: shipping-tracking
port: 8080
tools:
- name: get-container-status
description: "Look up a container by number and return its current location, vessel, ETA, and status."
inputParameters:
- name: container_number
in: body
type: string
description: "The ISO 6346 container number."
call: "sap.get-container"
with:
container_id: "{{container_number}}"
outputParameters:
- name: vessel_name
type: string
mapping: "$.d.VesselName"
- name: current_port
type: string
mapping: "$.d.CurrentPort"
- name: eta
type: string
mapping: "$.d.EstimatedArrival"
- name: status
type: string
mapping: "$.d.ShipmentStatus"
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_CONTAINER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: containers
path: "/ContainerSet('{{container_id}}')"
inputParameters:
- name: container_id
in: path
operations:
- name: get-container
method: GET
Checks available container types at a given depot location from the equipment system.
naftiko: "0.5"
info:
label: "Container Type Availability Check"
description: "Checks available container types at a given depot location from the equipment system."
tags:
- shipping
- equipment
- container
capability:
exposes:
- type: mcp
namespace: shipping-equipment
port: 8080
tools:
- name: check-container-availability
description: "Check available container types at a specific depot."
inputParameters:
- name: depot_code
in: body
type: string
description: "The depot location code."
call: "equipment.get-availability"
with:
depot: "{{depot_code}}"
outputParameters:
- name: available_units
type: array
mapping: "$.units"
- name: depot_name
type: string
mapping: "$.depotName"
consumes:
- type: http
namespace: equipment
baseUri: "https://hapag-lloyd-equip.azure.com/api/v1"
authentication:
type: bearer
token: "$secrets.equipment_token"
resources:
- name: depot-availability
path: "/depots/{{depot}}/availability"
inputParameters:
- name: depot
in: path
operations:
- name: get-availability
method: GET
Looks up crew certification expiry dates from the maritime HR system.
naftiko: "0.5"
info:
label: "Crew Certification Expiry Checker"
description: "Looks up crew certification expiry dates from the maritime HR system."
tags:
- maritime
- crew
- compliance
capability:
exposes:
- type: mcp
namespace: crew-mgmt
port: 8080
tools:
- name: get-cert-expiry
description: "Check crew certification expiry dates for a vessel."
inputParameters:
- name: vessel_id
in: body
type: string
description: "The vessel IMO number."
call: "crew.get-certs"
with:
vessel: "{{vessel_id}}"
outputParameters:
- name: expiring_soon
type: array
mapping: "$.expiringSoon"
- name: total_crew
type: integer
mapping: "$.totalCrew"
consumes:
- type: http
namespace: crew
baseUri: "https://hapag-lloyd-crew.azure.com/api/v1"
authentication:
type: bearer
token: "$secrets.crew_mgmt_token"
resources:
- name: vessel-certifications
path: "/vessels/{{vessel}}/certifications"
inputParameters:
- name: vessel
in: path
operations:
- name: get-certs
method: GET
When a customer complaint arrives via Zendesk, retrieves shipment details from SAP, opens a ServiceNow investigation case, and notifies the account manager in Microsoft Teams.
naftiko: "0.5"
info:
label: "Customer Complaint Handler"
description: "When a customer complaint arrives via Zendesk, retrieves shipment details from SAP, opens a ServiceNow investigation case, and notifies the account manager in Microsoft Teams."
tags:
- customer-service
- zendesk
- sap
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: complaint-handling
port: 8080
tools:
- name: handle-complaint
description: "Process a Zendesk complaint by pulling shipment data, creating a ServiceNow case, and notifying the account manager."
inputParameters:
- name: zendesk_ticket_id
in: body
type: string
description: "The Zendesk ticket ID."
- name: shipment_ref
in: body
type: string
description: "The related SAP shipment reference."
steps:
- name: get-ticket
type: call
call: "zendesk.get-ticket"
with:
ticket_id: "{{zendesk_ticket_id}}"
- name: get-shipment
type: call
call: "sap.get-shipment"
with:
shipment_ref: "{{shipment_ref}}"
- name: create-case
type: call
call: "servicenow.create-incident"
with:
short_description: "Complaint: {{get-ticket.subject}}"
category: "shipping_complaint"
description: "Zendesk #{{zendesk_ticket_id}}: {{get-ticket.description}}. Shipment {{shipment_ref}}, Vessel: {{get-shipment.VesselName}}, Status: {{get-shipment.Status}}."
- name: notify-manager
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{get-shipment.AccountManagerEmail}}"
text: "Complaint received for shipment {{shipment_ref}}. ServiceNow case: {{create-case.number}}. Zendesk ticket: {{zendesk_ticket_id}}."
consumes:
- type: http
namespace: zendesk
baseUri: "https://hapag-lloyd.zendesk.com/api/v2"
authentication:
type: bearer
token: "$secrets.zendesk_token"
resources:
- name: tickets
path: "/tickets/{{ticket_id}}"
inputParameters:
- name: ticket_id
in: path
operations:
- name: get-ticket
method: GET
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_SHIPMENT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: shipments
path: "/ShipmentSet('{{shipment_ref}}')"
inputParameters:
- name: shipment_ref
in: path
operations:
- name: get-shipment
method: GET
- type: http
namespace: servicenow
baseUri: "https://hapag-lloyd.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Reviews customer credit limits by pulling financial data from SAP, checking payment history, generating a risk report in Google Sheets, and notifying the credit team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Customer Credit Review Pipeline"
description: "Reviews customer credit limits by pulling financial data from SAP, checking payment history, generating a risk report in Google Sheets, and notifying the credit team via Microsoft Teams."
tags:
- finance
- credit
- sap
- google-sheets
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: credit-review
port: 8080
tools:
- name: review-customer-credit
description: "Process customer credit limit review."
inputParameters:
- name: customer_id
in: body
type: string
description: "The SAP customer account ID."
steps:
- name: get-financials
type: call
call: "sap.get-customer-financials"
with:
customer: "{{customer_id}}"
- name: get-payment-history
type: call
call: "sap.get-payment-history"
with:
customer: "{{customer_id}}"
- name: update-risk-report
type: call
call: "gsheets.update-range"
with:
spreadsheet_id: "credit_dashboard"
range: "Reviews!A2"
values: "{{customer_id}},{{get-financials.creditLimit}},{{get-payment-history.avgDaysToPay}},{{get-financials.outstandingBalance}}"
- name: notify-credit-team
type: call
call: "msteams.send-message"
with:
channel_id: "credit-management"
text: "Credit review for {{customer_id}}: Limit {{get-financials.creditLimit}}, Outstanding {{get-financials.outstandingBalance}}, Avg days to pay: {{get-payment-history.avgDaysToPay}}."
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZFI_CREDIT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4/spreadsheets"
authentication:
type: bearer
token: "$secrets.google_token"
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
Supports customer rate negotiations by pulling historical volume data from SAP, benchmarking against market rates, generating a rate proposal in SharePoint, and notifying the commercial team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Customer Rate Negotiation Workflow"
description: "Supports customer rate negotiations by pulling historical volume data from SAP, benchmarking against market rates, generating a rate proposal in SharePoint, and notifying the commercial team via Microsoft Teams."
tags:
- commercial
- pricing
- sap
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: rate-negotiation
port: 8080
tools:
- name: prepare-rate-negotiation
description: "Prepare materials for customer rate negotiation."
inputParameters:
- name: customer_id
in: body
type: string
description: "The customer account ID."
- name: trade_lane
in: body
type: string
description: "The trade lane code."
steps:
- name: get-volume-history
type: call
call: "sap.get-customer-volumes"
with:
customer: "{{customer_id}}"
lane: "{{trade_lane}}"
- name: benchmark-rates
type: call
call: "pricing.get-market-benchmark"
with:
lane: "{{trade_lane}}"
volume: "{{get-volume-history.annualTEU}}"
- name: generate-proposal
type: call
call: "sharepoint.create-file"
with:
site_id: "commercial_site"
file_path: "Proposals/{{customer_id}}_{{trade_lane}}_rate_proposal.pdf"
- name: notify-commercial
type: call
call: "msteams.send-message"
with:
channel_id: "commercial-rates"
text: "Rate proposal for {{customer_id}} on {{trade_lane}}: Historical volume {{get-volume-history.annualTEU}} TEU. Market benchmark: {{benchmark-rates.marketRate}}. Proposal: {{generate-proposal.url}}"
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSD_VOLUME_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
- type: http
namespace: pricing
baseUri: "https://hapag-lloyd-pricing.azure.com/api/v1"
authentication:
type: bearer
token: "$secrets.pricing_token"
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
Manages customs clearance by preparing documentation in SAP, submitting declarations to customs authorities, storing clearance certificates in SharePoint, and notifying the logistics team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Customs Clearance Orchestrator"
description: "Manages customs clearance by preparing documentation in SAP, submitting declarations to customs authorities, storing clearance certificates in SharePoint, and notifying the logistics team via Microsoft Teams."
tags:
- customs
- compliance
- sap
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: customs-clearance
port: 8080
tools:
- name: process-customs-clearance
description: "Process customs clearance for a shipment."
inputParameters:
- name: shipment_id
in: body
type: string
description: "The shipment reference."
- name: destination_country
in: body
type: string
description: "The destination country code."
steps:
- name: prepare-docs
type: call
call: "sap.prepare-customs-docs"
with:
shipment: "{{shipment_id}}"
country: "{{destination_country}}"
- name: submit-declaration
type: call
call: "customs.submit-declaration"
with:
shipment: "{{shipment_id}}"
docs: "{{prepare-docs.documentPack}}"
country: "{{destination_country}}"
- name: store-certificate
type: call
call: "sharepoint.create-file"
with:
site_id: "customs_site"
file_path: "Clearances/{{shipment_id}}_clearance.pdf"
- name: notify-logistics
type: call
call: "msteams.send-message"
with:
channel_id: "logistics-customs"
text: "Customs clearance for {{shipment_id}} to {{destination_country}}: {{submit-declaration.status}}. Reference: {{submit-declaration.clearanceRef}}."
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_CUSTOMS_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
- type: http
namespace: customs
baseUri: "https://hapag-lloyd-customs.azure.com/api/v1"
authentication:
type: bearer
token: "$secrets.customs_token"
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
Pulls shipment and cargo data from SAP, generates customs pre-clearance documents in SharePoint, and files a ServiceNow task for the customs broker team.
naftiko: "0.5"
info:
label: "Customs Documentation Preparer"
description: "Pulls shipment and cargo data from SAP, generates customs pre-clearance documents in SharePoint, and files a ServiceNow task for the customs broker team."
tags:
- customs
- compliance
- sap
- sharepoint
- servicenow
capability:
exposes:
- type: mcp
namespace: customs-docs
port: 8080
tools:
- name: prepare-customs-docs
description: "Prepare customs documentation for a shipment and assign to the broker team."
inputParameters:
- name: shipment_id
in: body
type: string
description: "The SAP shipment ID."
- name: destination_country
in: body
type: string
description: "The ISO country code for customs destination."
steps:
- name: get-cargo
type: call
call: "sap.get-cargo-manifest"
with:
shipment_id: "{{shipment_id}}"
- name: store-docs
type: call
call: "sharepoint.create-file"
with:
site_id: "customs_site"
file_path: "PreClearance/{{shipment_id}}_{{destination_country}}.pdf"
- name: create-task
type: call
call: "servicenow.create-record"
with:
table: "u_customs_tasks"
short_description: "Customs clearance for shipment {{shipment_id}} to {{destination_country}}"
assigned_group: "Customs_Broker_Team"
description: "Cargo manifest items: {{get-cargo.item_count}}. Pre-clearance docs: {{store-docs.url}}"
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_CARGO_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: cargo
path: "/CargoManifestSet('{{shipment_id}}')"
inputParameters:
- name: shipment_id
in: path
operations:
- name: get-cargo-manifest
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:/{{file_path}}"
inputParameters:
- name: site_id
in: path
- name: file_path
in: path
operations:
- name: create-file
method: PUT
- type: http
namespace: servicenow
baseUri: "https://hapag-lloyd.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST
Retrieves dangerous goods data from SAP for a shipment, generates a DG declaration document in SharePoint, and opens a compliance review in ServiceNow.
naftiko: "0.5"
info:
label: "Dangerous Goods Declaration Processor"
description: "Retrieves dangerous goods data from SAP for a shipment, generates a DG declaration document in SharePoint, and opens a compliance review in ServiceNow."
tags:
- compliance
- dangerous-goods
- sap
- sharepoint
- servicenow
capability:
exposes:
- type: mcp
namespace: dg-compliance
port: 8080
tools:
- name: process-dg-declaration
description: "Generate a dangerous goods declaration and open a compliance review."
inputParameters:
- name: shipment_id
in: body
type: string
description: "The SAP shipment ID containing dangerous goods."
steps:
- name: get-dg-data
type: call
call: "sap.get-dg-details"
with:
shipment_id: "{{shipment_id}}"
- name: store-declaration
type: call
call: "sharepoint.create-file"
with:
site_id: "compliance_site"
file_path: "DGDeclarations/DG_{{shipment_id}}.pdf"
- name: open-review
type: call
call: "servicenow.create-record"
with:
table: "u_compliance_reviews"
short_description: "DG compliance review: shipment {{shipment_id}}"
description: "UN classes: {{get-dg-data.un_classes}}. Total DG containers: {{get-dg-data.dg_count}}. Declaration: {{store-declaration.url}}"
assigned_group: "DG_Compliance_Team"
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_DG_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: dg-details
path: "/DGDetailsSet('{{shipment_id}}')"
inputParameters:
- name: shipment_id
in: path
operations:
- name: get-dg-details
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:/{{file_path}}"
inputParameters:
- name: site_id
in: path
- name: file_path
in: path
operations:
- name: create-file
method: PUT
- type: http
namespace: servicenow
baseUri: "https://hapag-lloyd.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST
Retrieves infrastructure health metrics from Datadog for a given service and returns CPU, memory, and error rate.
naftiko: "0.5"
info:
label: "Datadog Infrastructure Health Check"
description: "Retrieves infrastructure health metrics from Datadog for a given service and returns CPU, memory, and error rate."
tags:
- it-operations
- monitoring
- datadog
capability:
exposes:
- type: mcp
namespace: infra-monitoring
port: 8080
tools:
- name: get-service-health
description: "Get infrastructure health metrics for a service from Datadog."
inputParameters:
- name: service_name
in: body
type: string
description: "The Datadog service name."
call: "datadog.get-metrics"
with:
service: "{{service_name}}"
outputParameters:
- name: cpu_usage
type: string
mapping: "$.series[0].pointlist[-1][1]"
- name: memory_usage
type: string
mapping: "$.series[1].pointlist[-1][1]"
- name: error_rate
type: string
mapping: "$.series[2].pointlist[-1][1]"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
headerName: "DD-API-KEY"
resources:
- name: metrics
path: "/query?query=avg:system.cpu.user{service:{{service}}}"
inputParameters:
- name: service
in: path
operations:
- name: get-metrics
method: GET
When a container exceeds free time at port, retrieves detention data from SAP, creates a Jira ticket for the logistics team, and sends an alert to Microsoft Teams.
naftiko: "0.5"
info:
label: "Demurrage and Detention Alert"
description: "When a container exceeds free time at port, retrieves detention data from SAP, creates a Jira ticket for the logistics team, and sends an alert to Microsoft Teams."
tags:
- logistics
- demurrage
- sap
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: demurrage-alerts
port: 8080
tools:
- name: alert-demurrage
description: "Check container demurrage status, create a Jira ticket, and alert the logistics team."
inputParameters:
- name: container_number
in: body
type: string
description: "The container number to check for demurrage."
steps:
- name: get-detention
type: call
call: "sap.get-detention"
with:
container_id: "{{container_number}}"
- name: create-ticket
type: call
call: "jira.create-issue"
with:
project_key: "LOG"
summary: "Demurrage alert: {{container_number}} - {{get-detention.days_over}} days over free time"
issue_type: "Task"
description: "Container {{container_number}} at {{get-detention.port_name}} has exceeded free time by {{get-detention.days_over}} days. Estimated charges: {{get-detention.estimated_cost}} {{get-detention.currency}}."
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "logistics-alerts"
text: "Demurrage Alert: Container {{container_number}} is {{get-detention.days_over}} days over free time at {{get-detention.port_name}}. Jira: {{create-ticket.key}}."
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_DETENTION_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: detention
path: "/DetentionSet('{{container_id}}')"
inputParameters:
- name: container_id
in: path
operations:
- name: get-detention
method: GET
- type: http
namespace: jira
baseUri: "https://hapag-lloyd.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Synchronizes vessel digital twin data by pulling sensor readings from the IoT platform, updating the vessel model in SAP, refreshing the Datadog monitoring dashboard, and notifying engineering via Microsoft Teams.
naftiko: "0.5"
info:
label: "Digital Twin Vessel Sync"
description: "Synchronizes vessel digital twin data by pulling sensor readings from the IoT platform, updating the vessel model in SAP, refreshing the Datadog monitoring dashboard, and notifying engineering via Microsoft Teams."
tags:
- fleet
- digital-twin
- iot
- sap
- datadog
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: digital-twin-sync
port: 8080
tools:
- name: sync-vessel-twin
description: "Synchronize vessel digital twin data."
inputParameters:
- name: vessel_id
in: body
type: string
description: "The vessel IMO number."
steps:
- name: get-sensor-data
type: call
call: "iot.get-vessel-sensors"
with:
vessel: "{{vessel_id}}"
- name: update-model
type: call
call: "sap.update-vessel-twin"
with:
vessel: "{{vessel_id}}"
sensors: "{{get-sensor-data.readings}}"
- name: refresh-dashboard
type: call
call: "datadog.post-metrics"
with:
series: "vessel.{{vessel_id}}"
points: "{{get-sensor-data.metrics}}"
- name: notify-engineering
type: call
call: "msteams.send-message"
with:
channel_id: "engineering-digital"
text: "Digital twin updated for {{vessel_id}}. Engine hours: {{get-sensor-data.engineHours}}. Fuel efficiency: {{get-sensor-data.fuelEfficiency}}%."
consumes:
- type: http
namespace: iot
baseUri: "https://hapag-lloyd-iot.azure.com/api/v1"
authentication:
type: bearer
token: "$secrets.iot_token"
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_TWIN_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
Retrieves application performance metrics from Dynatrace for a specified service, returning response time, error rate, and throughput.
naftiko: "0.5"
info:
label: "Dynatrace Application Performance Check"
description: "Retrieves application performance metrics from Dynatrace for a specified service, returning response time, error rate, and throughput."
tags:
- it-operations
- apm
- dynatrace
capability:
exposes:
- type: mcp
namespace: apm-monitoring
port: 8080
tools:
- name: get-app-performance
description: "Get application performance metrics from Dynatrace for a service."
inputParameters:
- name: service_id
in: body
type: string
description: "The Dynatrace service entity ID."
call: "dynatrace.get-metrics"
with:
entity_id: "{{service_id}}"
outputParameters:
- name: response_time_ms
type: number
mapping: "$.result[0].data[0].values[0]"
- name: error_rate_pct
type: number
mapping: "$.result[1].data[0].values[0]"
- name: throughput
type: number
mapping: "$.result[2].data[0].values[0]"
consumes:
- type: http
namespace: dynatrace
baseUri: "https://hapag-lloyd.live.dynatrace.com/api/v2"
authentication:
type: bearer
token: "$secrets.dynatrace_token"
resources:
- name: metrics
path: "/metrics/query?metricSelector=builtin:service.response.time&entitySelector=entityId({{entity_id}})"
inputParameters:
- name: entity_id
in: path
operations:
- name: get-metrics
method: GET
Integrates e-commerce platform orders with shipping bookings by syncing orders from the platform, creating bookings in SAP, generating shipping labels, and notifying sellers via Microsoft Outlook.
naftiko: "0.5"
info:
label: "E-Commerce Shipment Integration Pipeline"
description: "Integrates e-commerce platform orders with shipping bookings by syncing orders from the platform, creating bookings in SAP, generating shipping labels, and notifying sellers via Microsoft Outlook."
tags:
- e-commerce
- shipping
- integration
- sap
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: ecommerce-integration
port: 8080
tools:
- name: sync-ecommerce-shipments
description: "Integrate e-commerce orders with shipping."
inputParameters:
- name: platform_id
in: body
type: string
description: "The e-commerce platform ID."
- name: order_batch
in: body
type: string
description: "The order batch reference."
steps:
- name: fetch-orders
type: call
call: "ecommerce.get-orders"
with:
platform: "{{platform_id}}"
batch: "{{order_batch}}"
- name: create-bookings
type: call
call: "sap.batch-create-bookings"
with:
orders: "{{fetch-orders.orderList}}"
- name: generate-labels
type: call
call: "sap.generate-shipping-labels"
with:
bookings: "{{create-bookings.bookingList}}"
- name: notify-sellers
type: call
call: "outlook.send-email"
with:
to: "{{fetch-orders.sellerEmails}}"
subject: "Shipment Bookings Created - Batch {{order_batch}}"
body: "{{create-bookings.count}} bookings created for batch {{order_batch}}. Tracking numbers will follow."
consumes:
- type: http
namespace: ecommerce
baseUri: "https://hapag-lloyd-ecommerce.azure.com/api/v1"
authentication:
type: bearer
token: "$secrets.ecommerce_token"
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_BOOKING_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0/me"
authentication:
type: bearer
token: "$secrets.msgraph_token"
Receives an EDI booking message, parses it via Oracle Integration, creates a booking in SAP, and sends a confirmation via Microsoft Outlook.
naftiko: "0.5"
info:
label: "EDI Message Processor"
description: "Receives an EDI booking message, parses it via Oracle Integration, creates a booking in SAP, and sends a confirmation via Microsoft Outlook."
tags:
- edi
- integration
- oracle-integration
- sap
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: edi-processing
port: 8080
tools:
- name: process-edi-booking
description: "Parse an EDI booking message, create a SAP booking, and confirm to the sender."
inputParameters:
- name: edi_message_id
in: body
type: string
description: "The EDI message identifier."
- name: sender_email
in: body
type: string
description: "The sender email for confirmation."
steps:
- name: parse-edi
type: call
call: "oic.parse-edi"
with:
message_id: "{{edi_message_id}}"
- name: create-booking
type: call
call: "sap.create-booking"
with:
origin: "{{parse-edi.origin_port}}"
destination: "{{parse-edi.destination_port}}"
container_type: "{{parse-edi.container_type}}"
quantity: "{{parse-edi.quantity}}"
- name: send-confirmation
type: call
call: "outlook.send-email"
with:
to: "{{sender_email}}"
subject: "EDI Booking Confirmation: {{create-booking.booking_ref}}"
body: "Your EDI booking has been processed. Reference: {{create-booking.booking_ref}}. Origin: {{parse-edi.origin_port}}. Destination: {{parse-edi.destination_port}}."
consumes:
- type: http
namespace: oic
baseUri: "https://hapag-lloyd-oic.integration.ocp.oraclecloud.com/ic/api/integration/v1"
authentication:
type: basic
username: "$secrets.oic_user"
password: "$secrets.oic_password"
resources:
- name: edi-flows
path: "/flows/rest/PARSE_EDI/1.0/messages/{{message_id}}"
inputParameters:
- name: message_id
in: path
operations:
- name: parse-edi
method: GET
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_BOOKING_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: bookings
path: "/BookingSet"
operations:
- name: create-booking
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0/me"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/sendMail"
operations:
- name: send-email
method: POST
On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint folder, and sends a Microsoft Teams welcome message.
naftiko: "0.5"
info:
label: "Employee Onboarding Orchestrator"
description: "On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint folder, and sends a Microsoft Teams welcome message."
tags:
- hr
- onboarding
- workday
- servicenow
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-onboarding
port: 8080
tools:
- name: trigger-onboarding
description: "Orchestrate onboarding for a new Hapag-Lloyd employee across Workday, ServiceNow, SharePoint, and Teams."
inputParameters:
- name: workday_employee_id
in: body
type: string
description: "The Workday worker ID."
- name: start_date
in: body
type: string
description: "Start date in YYYY-MM-DD format."
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: "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 Hapag-Lloyd, {{get-employee.first_name}}! Your onboarding ticket: {{open-ticket.number}}. Documents: {{provision-folder.url}}."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://hapag-lloyd.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
Checks the repositioning status of empty containers between depots.
naftiko: "0.5"
info:
label: "Empty Container Repositioning Status"
description: "Checks the repositioning status of empty containers between depots."
tags:
- shipping
- equipment
- repositioning
capability:
exposes:
- type: mcp
namespace: equipment-reposition
port: 8080
tools:
- name: get-reposition-status
description: "Look up the repositioning status for empty containers."
inputParameters:
- name: container_number
in: body
type: string
description: "The container number to track."
call: "equipment.get-reposition"
with:
container_id: "{{container_number}}"
outputParameters:
- name: origin_depot
type: string
mapping: "$.originDepot"
- name: destination_depot
type: string
mapping: "$.destinationDepot"
- name: status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: equipment
baseUri: "https://hapag-lloyd-equip.azure.com/api/v1"
authentication:
type: bearer
token: "$secrets.equipment_token"
resources:
- name: container-reposition
path: "/containers/{{container_id}}/reposition"
inputParameters:
- name: container_id
in: path
operations:
- name: get-reposition
method: GET
Generates environmental compliance reports by collecting emissions data from SAP, calculating EU ETS obligations, filing reports via SharePoint, and notifying the sustainability team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Environmental Compliance Reporting Pipeline"
description: "Generates environmental compliance reports by collecting emissions data from SAP, calculating EU ETS obligations, filing reports via SharePoint, and notifying the sustainability team via Microsoft Teams."
tags:
- sustainability
- compliance
- emissions
- sap
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: env-compliance
port: 8080
tools:
- name: generate-env-compliance-report
description: "Generate environmental compliance report."
inputParameters:
- name: reporting_period
in: body
type: string
description: "The reporting period (e.g., 2026-Q1)."
- name: vessel_id
in: body
type: string
description: "The vessel IMO number."
steps:
- name: collect-emissions
type: call
call: "sap.get-vessel-emissions"
with:
vessel: "{{vessel_id}}"
period: "{{reporting_period}}"
- name: calculate-ets
type: call
call: "sustainability.calculate-ets-obligation"
with:
emissions: "{{collect-emissions.co2Total}}"
voyages: "{{collect-emissions.euVoyages}}"
- name: file-report
type: call
call: "sharepoint.create-file"
with:
site_id: "sustainability_site"
file_path: "ETS/{{vessel_id}}_{{reporting_period}}_report.pdf"
- name: notify-sustainability
type: call
call: "msteams.send-message"
with:
channel_id: "sustainability-team"
text: "Environmental report for {{vessel_id}} ({{reporting_period}}): CO2 {{collect-emissions.co2Total}} tonnes. EU ETS obligation: {{calculate-ets.allowancesRequired}} allowances. Report: {{file-report.url}}"
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_EMISSIONS_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
- type: http
namespace: sustainability
baseUri: "https://hapag-lloyd-sustainability.azure.com/api/v1"
authentication:
type: bearer
token: "$secrets.sustainability_token"
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
Coordinates feeder vessel connections by matching mainline schedules in SAP, notifying terminal operators, and updating the Confluence operations handbook.
naftiko: "0.5"
info:
label: "Feeder Vessel Coordination Pipeline"
description: "Coordinates feeder vessel connections by matching mainline schedules in SAP, notifying terminal operators, and updating the Confluence operations handbook."
tags:
- shipping
- feeder
- logistics
- sap
- confluence
capability:
exposes:
- type: mcp
namespace: feeder-coordination
port: 8080
tools:
- name: coordinate-feeder
description: "Coordinate feeder vessel connections."
inputParameters:
- name: mainline_vessel
in: body
type: string
description: "The mainline vessel IMO number."
- name: feeder_port
in: body
type: string
description: "The feeder port UN/LOCODE."
steps:
- name: get-mainline-schedule
type: call
call: "sap.get-vessel-eta"
with:
vessel: "{{mainline_vessel}}"
port: "{{feeder_port}}"
- name: match-feeder
type: call
call: "routing.find-feeder"
with:
port: "{{feeder_port}}"
arrival: "{{get-mainline-schedule.eta}}"
- name: notify-terminal
type: call
call: "portapi.send-notification"
with:
port: "{{feeder_port}}"
message: "Feeder {{match-feeder.feederVessel}} connecting with {{mainline_vessel}}. ETA: {{match-feeder.feederEta}}."
- name: update-handbook
type: call
call: "confluence.update-page"
with:
space: "OPS"
title: "Feeder Connections - {{feeder_port}}"
body: "Updated: {{mainline_vessel}} connects to {{match-feeder.feederVessel}} at {{feeder_port}}."
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_SCHEDULE_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
- type: http
namespace: routing
baseUri: "https://hapag-lloyd-routing.azure.com/api/v1"
authentication:
type: bearer
token: "$secrets.routing_token"
- type: http
namespace: portapi
baseUri: "https://hapag-lloyd-port.azure.com/api/v1"
authentication:
type: bearer
token: "$secrets.port_api_token"
- type: http
namespace: confluence
baseUri: "https://hapag-lloyd.atlassian.net/wiki/rest/api"
authentication:
type: bearer
token: "$secrets.confluence_token"
Schedules vessel maintenance by checking fleet availability in SAP, booking dry dock slots, notifying engineering via Microsoft Teams, and creating work orders in ServiceNow.
naftiko: "0.5"
info:
label: "Fleet Maintenance Scheduling Pipeline"
description: "Schedules vessel maintenance by checking fleet availability in SAP, booking dry dock slots, notifying engineering via Microsoft Teams, and creating work orders in ServiceNow."
tags:
- fleet
- maintenance
- sap
- microsoft-teams
- servicenow
capability:
exposes:
- type: mcp
namespace: fleet-maintenance
port: 8080
tools:
- name: schedule-maintenance
description: "Schedule vessel maintenance."
inputParameters:
- name: vessel_id
in: body
type: string
description: "The vessel IMO number."
- name: maintenance_type
in: body
type: string
description: "Type of maintenance required."
steps:
- name: check-fleet-availability
type: call
call: "sap.get-vessel-schedule"
with:
vessel: "{{vessel_id}}"
- name: book-dry-dock
type: call
call: "drydock.reserve-slot"
with:
vessel: "{{vessel_id}}"
type: "{{maintenance_type}}"
available_from: "{{check-fleet-availability.nextAvailable}}"
- name: notify-engineering
type: call
call: "msteams.send-message"
with:
channel_id: "engineering-fleet"
text: "Maintenance scheduled for vessel {{vessel_id}}: {{maintenance_type}} at {{book-dry-dock.yardName}} from {{book-dry-dock.startDate}}."
- name: create-work-order
type: call
call: "servicenow.create-change"
with:
short_description: "Vessel maintenance: {{vessel_id}} - {{maintenance_type}}"
description: "Dry dock: {{book-dry-dock.yardName}}. Start: {{book-dry-dock.startDate}}. Duration: {{book-dry-dock.durationDays}} days."
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_FLEET_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
- type: http
namespace: drydock
baseUri: "https://hapag-lloyd-drydock.azure.com/api/v1"
authentication:
type: bearer
token: "$secrets.drydock_token"
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
- type: http
namespace: servicenow
baseUri: "https://hapag-lloyd.service-now.com/api/now/table/change_request"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
Processes freight damage claims by logging in SAP, attaching evidence to SharePoint, creating a Jira tracking issue, and notifying the claims team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Freight Claim Processing Pipeline"
description: "Processes freight damage claims by logging in SAP, attaching evidence to SharePoint, creating a Jira tracking issue, and notifying the claims team via Microsoft Teams."
tags:
- shipping
- claims
- sap
- sharepoint
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: freight-claims
port: 8080
tools:
- name: process-freight-claim
description: "Process a freight damage claim."
inputParameters:
- name: booking_ref
in: body
type: string
description: "The booking reference."
- name: claim_amount
in: body
type: number
description: "The claim amount."
- name: description
in: body
type: string
description: "Description of damage."
steps:
- name: log-claim
type: call
call: "sap.create-claim"
with:
booking: "{{booking_ref}}"
amount: "{{claim_amount}}"
description: "{{description}}"
- name: store-evidence
type: call
call: "sharepoint.create-file"
with:
site_id: "claims_site"
file_path: "Claims/{{booking_ref}}_evidence.pdf"
- name: create-jira
type: call
call: "jira.create-issue"
with:
project: "CLAIMS"
summary: "Freight claim: {{booking_ref}} - {{claim_amount}}"
description: "{{description}}. SAP Ref: {{log-claim.claimNumber}}."
- name: notify-claims
type: call
call: "msteams.send-message"
with:
channel_id: "claims-team"
text: "New freight claim: {{booking_ref}}. Amount: {{claim_amount}}. Claim#: {{log-claim.claimNumber}}. Jira: {{create-jira.key}}."
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_CLAIMS_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
- type: http
namespace: jira
baseUri: "https://hapag-lloyd.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
Retrieves a freight rate quote from SAP for a given origin, destination, and container type, returning price, transit time, and surcharges.
naftiko: "0.5"
info:
label: "Freight Rate Quote Lookup"
description: "Retrieves a freight rate quote from SAP for a given origin, destination, and container type, returning price, transit time, and surcharges."
tags:
- shipping
- pricing
- sap
- freight
capability:
exposes:
- type: mcp
namespace: freight-rates
port: 8080
tools:
- name: get-freight-rate
description: "Look up a freight rate by origin port, destination port, and container type."
inputParameters:
- name: origin_port
in: body
type: string
description: "The UN/LOCODE origin port."
- name: destination_port
in: body
type: string
description: "The UN/LOCODE destination port."
- name: container_type
in: body
type: string
description: "Container type code (e.g. 20GP, 40HC)."
call: "sap.get-rate"
with:
origin: "{{origin_port}}"
destination: "{{destination_port}}"
container_type: "{{container_type}}"
outputParameters:
- name: base_rate
type: string
mapping: "$.d.BaseRate"
- name: currency
type: string
mapping: "$.d.Currency"
- name: transit_days
type: string
mapping: "$.d.TransitDays"
- name: surcharges
type: array
mapping: "$.d.Surcharges.results"
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_RATE_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: rates
path: "/RateQuoteSet(Origin='{{origin}}',Destination='{{destination}}',ContainerType='{{container_type}}')"
inputParameters:
- name: origin
in: path
- name: destination
in: path
- name: container_type
in: path
operations:
- name: get-rate
method: GET
Uploads a document to a specified Google Drive folder, returning the file ID and shareable link.
naftiko: "0.5"
info:
label: "Google Drive Document Uploader"
description: "Uploads a document to a specified Google Drive folder, returning the file ID and shareable link."
tags:
- document-management
- google-drive
capability:
exposes:
- type: mcp
namespace: gdrive-docs
port: 8080
tools:
- name: upload-document
description: "Upload a document to Google Drive."
inputParameters:
- name: folder_id
in: body
type: string
description: "The Google Drive folder ID."
- name: file_name
in: body
type: string
description: "The file name to upload."
- name: content
in: body
type: string
description: "The file content."
call: "gdrive.upload-file"
with:
folder_id: "{{folder_id}}"
name: "{{file_name}}"
content: "{{content}}"
outputParameters:
- name: file_id
type: string
mapping: "$.id"
- name: web_view_link
type: string
mapping: "$.webViewLink"
consumes:
- type: http
namespace: gdrive
baseUri: "https://www.googleapis.com/upload/drive/v3"
authentication:
type: bearer
token: "$secrets.google_drive_token"
resources:
- name: files
path: "/files?uploadType=multipart"
operations:
- name: upload-file
method: POST
Calculates the sea route distance between two ports using Google Maps Distance Matrix API and returns distance in nautical miles and estimated transit time.
naftiko: "0.5"
info:
label: "Google Maps Route Distance Calculator"
description: "Calculates the sea route distance between two ports using Google Maps Distance Matrix API and returns distance in nautical miles and estimated transit time."
tags:
- logistics
- routing
- google-maps
capability:
exposes:
- type: mcp
namespace: route-planning
port: 8080
tools:
- name: calculate-route-distance
description: "Calculate distance and transit time between two ports using Google Maps."
inputParameters:
- name: origin_port
in: body
type: string
description: "Origin port name or coordinates."
- name: destination_port
in: body
type: string
description: "Destination port name or coordinates."
call: "gmaps.get-distance"
with:
origins: "{{origin_port}}"
destinations: "{{destination_port}}"
outputParameters:
- name: distance_nm
type: string
mapping: "$.rows[0].elements[0].distance.text"
- name: estimated_duration
type: string
mapping: "$.rows[0].elements[0].duration.text"
consumes:
- type: http
namespace: gmaps
baseUri: "https://maps.googleapis.com/maps/api"
authentication:
type: apiKey
key: "$secrets.google_maps_api_key"
paramName: "key"
resources:
- name: distance-matrix
path: "/distancematrix/json?origins={{origins}}&destinations={{destinations}}"
inputParameters:
- name: origins
in: query
- name: destinations
in: query
operations:
- name: get-distance
method: GET
Reads operational metrics from SAP and writes them to a Google Sheets dashboard for team visibility.
naftiko: "0.5"
info:
label: "Google Sheets Operational Dashboard Sync"
description: "Reads operational metrics from SAP and writes them to a Google Sheets dashboard for team visibility."
tags:
- reporting
- google-sheets
- sap
capability:
exposes:
- type: mcp
namespace: sheets-sync
port: 8080
tools:
- name: sync-ops-dashboard
description: "Pull SAP metrics and update a Google Sheets dashboard."
inputParameters:
- name: spreadsheet_id
in: body
type: string
description: "The Google Sheets spreadsheet ID."
- name: metric_type
in: body
type: string
description: "The metric category to sync."
steps:
- name: get-metrics
type: call
call: "sap.get-ops-metrics"
with:
metric_type: "{{metric_type}}"
- name: update-sheet
type: call
call: "gsheets.update-values"
with:
spreadsheet_id: "{{spreadsheet_id}}"
range: "Dashboard!A2:D2"
values:
- - "{{get-metrics.metric_name}}"
- "{{get-metrics.current_value}}"
- "{{get-metrics.target_value}}"
- "{{get-metrics.last_updated}}"
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_OPS_METRICS_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: metrics
path: "/OpsMetricSet('{{metric_type}}')"
inputParameters:
- name: metric_type
in: path
operations:
- name: get-ops-metrics
method: GET
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4/spreadsheets"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: values
path: "/{{spreadsheet_id}}/values/{{range}}"
inputParameters:
- name: spreadsheet_id
in: path
- name: range
in: path
operations:
- name: update-values
method: PUT
Validates hazardous cargo declarations against IMDG regulations, checks vessel stowage compatibility, generates compliance documents in SharePoint, and notifies the compliance team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Hazardous Cargo Compliance Pipeline"
description: "Validates hazardous cargo declarations against IMDG regulations, checks vessel stowage compatibility, generates compliance documents in SharePoint, and notifies the compliance team via Microsoft Teams."
tags:
- shipping
- hazmat
- compliance
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hazmat-compliance
port: 8080
tools:
- name: validate-hazmat-cargo
description: "Validate and process hazardous cargo compliance."
inputParameters:
- name: booking_ref
in: body
type: string
description: "The booking reference."
- name: dg_class
in: body
type: string
description: "The dangerous goods class."
steps:
- name: validate-declaration
type: call
call: "compliance.check-imdg"
with:
booking: "{{booking_ref}}"
class: "{{dg_class}}"
- name: check-stowage
type: call
call: "sap.check-stowage-compatibility"
with:
booking: "{{booking_ref}}"
class: "{{dg_class}}"
- name: store-docs
type: call
call: "sharepoint.create-file"
with:
site_id: "compliance_site"
file_path: "DG/{{booking_ref}}_compliance.pdf"
- name: notify-compliance
type: call
call: "msteams.send-message"
with:
channel_id: "compliance-team"
text: "Hazmat booking {{booking_ref}} (Class {{dg_class}}) validated. Stowage: {{check-stowage.location}}. Docs: {{store-docs.url}}"
consumes:
- type: http
namespace: compliance
baseUri: "https://hapag-lloyd-compliance.azure.com/api/v1"
authentication:
type: bearer
token: "$secrets.compliance_api_token"
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_STOWAGE_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
Retrieves a HubSpot lead by email, enriches with Salesforce account data and shipping volume from SAP, and updates the HubSpot contact.
naftiko: "0.5"
info:
label: "HubSpot Lead Enrichment for Shipping"
description: "Retrieves a HubSpot lead by email, enriches with Salesforce account data and shipping volume from SAP, and updates the HubSpot contact."
tags:
- sales
- lead-management
- hubspot
- salesforce
- sap
capability:
exposes:
- type: mcp
namespace: lead-enrichment
port: 8080
tools:
- name: enrich-lead
description: "Enrich a HubSpot lead with Salesforce account data and SAP shipping volume."
inputParameters:
- name: lead_email
in: body
type: string
description: "The lead's email address."
steps:
- name: get-hubspot-contact
type: call
call: "hubspot.get-contact"
with:
email: "{{lead_email}}"
- name: get-sf-account
type: call
call: "salesforce.get-account-by-email"
with:
email: "{{lead_email}}"
- name: get-volume
type: call
call: "sap.get-customer-volume"
with:
customer_id: "{{get-sf-account.Id}}"
- name: update-hubspot
type: call
call: "hubspot.update-contact"
with:
contact_id: "{{get-hubspot-contact.id}}"
properties:
company: "{{get-sf-account.Name}}"
annual_teu_volume: "{{get-volume.annual_teu}}"
contract_status: "{{get-sf-account.Contract_Status__c}}"
consumes:
- type: http
namespace: hubspot
baseUri: "https://api.hubapi.com/crm/v3"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: contacts
path: "/objects/contacts/{{email}}"
inputParameters:
- name: email
in: path
operations:
- name: get-contact
method: GET
- name: update-contact
method: PATCH
- type: http
namespace: salesforce
baseUri: "https://hapag-lloyd.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/parameterizedSearch/?q={{email}}&sobject=Account"
inputParameters:
- name: email
in: path
operations:
- name: get-account-by-email
method: GET
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_CUSTOMER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: customers
path: "/CustomerVolumeSet('{{customer_id}}')"
inputParameters:
- name: customer_id
in: path
operations:
- name: get-customer-volume
method: GET
When a critical ServiceNow incident is raised, retrieves vessel and container data from SAP, escalates in Jira, and notifies senior operations via Microsoft Teams.
naftiko: "0.5"
info:
label: "Incident Escalation Pipeline"
description: "When a critical ServiceNow incident is raised, retrieves vessel and container data from SAP, escalates in Jira, and notifies senior operations via Microsoft Teams."
tags:
- operations
- incident
- servicenow
- sap
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: incident-escalation
port: 8080
tools:
- name: escalate-incident
description: "Escalate a ServiceNow shipping incident by enriching it with SAP data, creating a Jira escalation, and alerting senior ops."
inputParameters:
- name: incident_number
in: body
type: string
description: "The ServiceNow incident number."
- name: shipment_ref
in: body
type: string
description: "Related SAP shipment reference."
steps:
- name: get-incident
type: call
call: "servicenow.get-incident"
with:
incident_number: "{{incident_number}}"
- name: get-shipment
type: call
call: "sap.get-shipment"
with:
shipment_ref: "{{shipment_ref}}"
- name: create-escalation
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
summary: "ESCALATION: {{get-incident.short_description}}"
issue_type: "Bug"
priority: "Critical"
description: "ServiceNow {{incident_number}}: {{get-incident.description}}. Vessel: {{get-shipment.VesselName}}, Port: {{get-shipment.CurrentPort}}."
- name: alert-senior-ops
type: call
call: "msteams.send-message"
with:
channel_id: "senior-ops-alerts"
text: "ESCALATION: {{get-incident.short_description}}. Vessel: {{get-shipment.VesselName}}. Jira: {{create-escalation.key}}. ServiceNow: {{incident_number}}."
consumes:
- type: http
namespace: servicenow
baseUri: "https://hapag-lloyd.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident?sysparm_query=number={{incident_number}}"
inputParameters:
- name: incident_number
in: path
operations:
- name: get-incident
method: GET
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_SHIPMENT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: shipments
path: "/ShipmentSet('{{shipment_ref}}')"
inputParameters:
- name: shipment_ref
in: path
operations:
- name: get-shipment
method: GET
- type: http
namespace: jira
baseUri: "https://hapag-lloyd.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Coordinates inland transport by matching container arrivals with truck or rail bookings, updating SAP logistics, and notifying the transport team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Inland Transport Coordination Pipeline"
description: "Coordinates inland transport by matching container arrivals with truck or rail bookings, updating SAP logistics, and notifying the transport team via Microsoft Teams."
tags:
- logistics
- inland-transport
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: inland-transport
port: 8080
tools:
- name: coordinate-inland-transport
description: "Coordinate inland transport for containers."
inputParameters:
- name: container_number
in: body
type: string
description: "The container number."
- name: delivery_address
in: body
type: string
description: "The final delivery address."
steps:
- name: get-container-arrival
type: call
call: "sap.get-container-eta"
with:
container: "{{container_number}}"
- name: book-transport
type: call
call: "logistics.book-inland"
with:
container: "{{container_number}}"
pickup_date: "{{get-container-arrival.arrivalDate}}"
delivery: "{{delivery_address}}"
- name: update-sap
type: call
call: "sap.update-inland-booking"
with:
container: "{{container_number}}"
transport_ref: "{{book-transport.bookingRef}}"
- name: notify-transport
type: call
call: "msteams.send-message"
with:
channel_id: "transport-operations"
text: "Inland transport booked for {{container_number}}. Pickup: {{get-container-arrival.arrivalDate}}. Delivery: {{delivery_address}}. Ref: {{book-transport.bookingRef}}."
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_LOGISTICS_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
- type: http
namespace: logistics
baseUri: "https://hapag-lloyd-logistics.azure.com/api/v1"
authentication:
type: bearer
token: "$secrets.logistics_token"
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
Retrieves rail connection schedules for intermodal transport from the logistics platform.
naftiko: "0.5"
info:
label: "Intermodal Rail Schedule Lookup"
description: "Retrieves rail connection schedules for intermodal transport from the logistics platform."
tags:
- logistics
- intermodal
- rail
capability:
exposes:
- type: mcp
namespace: logistics-rail
port: 8080
tools:
- name: get-rail-schedule
description: "Look up rail schedules for a given route."
inputParameters:
- name: origin_terminal
in: body
type: string
description: "The origin rail terminal code."
- name: destination_terminal
in: body
type: string
description: "The destination rail terminal code."
call: "logistics.get-rail"
with:
origin: "{{origin_terminal}}"
destination: "{{destination_terminal}}"
outputParameters:
- name: departures
type: array
mapping: "$.departures"
- name: carrier
type: string
mapping: "$.carrier"
consumes:
- type: http
namespace: logistics
baseUri: "https://hapag-lloyd-logistics.azure.com/api/v1"
authentication:
type: bearer
token: "$secrets.logistics_token"
resources:
- name: rail-schedules
path: "/rail-schedules?origin={{origin}}&dest={{destination}}"
inputParameters:
- name: origin
in: query
- name: destination
in: query
operations:
- name: get-rail
method: GET
Retrieves the status summary of a Jira project, returning total issues, open issues, and sprint progress.
naftiko: "0.5"
info:
label: "Jira Shipping Project Status"
description: "Retrieves the status summary of a Jira project, returning total issues, open issues, and sprint progress."
tags:
- project-management
- jira
capability:
exposes:
- type: mcp
namespace: project-tracking
port: 8080
tools:
- name: get-project-status
description: "Get a summary of a Jira project including issue counts and sprint progress."
inputParameters:
- name: project_key
in: body
type: string
description: "The Jira project key."
call: "jira.get-project"
with:
project_key: "{{project_key}}"
outputParameters:
- name: total_issues
type: integer
mapping: "$.total"
- name: open_issues
type: integer
mapping: "$.open_count"
- name: sprint_name
type: string
mapping: "$.active_sprint.name"
consumes:
- type: http
namespace: jira
baseUri: "https://hapag-lloyd.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: projects
path: "/search?jql=project={{project_key}}"
inputParameters:
- name: project_key
in: path
operations:
- name: get-project
method: GET
Retrieves company metrics from SAP, formats a branded post, and publishes to the Hapag-Lloyd LinkedIn company page.
naftiko: "0.5"
info:
label: "LinkedIn Shipping Industry Post"
description: "Retrieves company metrics from SAP, formats a branded post, and publishes to the Hapag-Lloyd LinkedIn company page."
tags:
- marketing
- social-media
- linkedin
- sap
capability:
exposes:
- type: mcp
namespace: social-publishing
port: 8080
tools:
- name: publish-linkedin-update
description: "Pull operational metrics from SAP and publish a branded update to LinkedIn."
inputParameters:
- name: metric_type
in: body
type: string
description: "The type of metric to highlight (e.g. on_time_delivery, teu_volume)."
- name: period
in: body
type: string
description: "The reporting period (e.g. Q1-2026)."
steps:
- name: get-metrics
type: call
call: "sap.get-kpis"
with:
metric_type: "{{metric_type}}"
period: "{{period}}"
- name: post-update
type: call
call: "linkedin.create-post"
with:
author: "urn:li:organization:hapag-lloyd"
text: "Hapag-Lloyd {{period}} Update: Our {{metric_type}} reached {{get-metrics.value}}{{get-metrics.unit}}. #Shipping #Logistics #ContainerShipping"
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_KPI_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: kpis
path: "/KPISet(MetricType='{{metric_type}}',Period='{{period}}')"
inputParameters:
- name: metric_type
in: path
- name: period
in: path
operations:
- name: get-kpis
method: GET
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: posts
path: "/ugcPosts"
operations:
- name: create-post
method: POST
Pulls the latest shipping schedule highlights from SAP, formats them into a MailChimp campaign, and sends to the customer subscriber list.
naftiko: "0.5"
info:
label: "MailChimp Shipping Newsletter Publisher"
description: "Pulls the latest shipping schedule highlights from SAP, formats them into a MailChimp campaign, and sends to the customer subscriber list."
tags:
- marketing
- newsletter
- mailchimp
- sap
capability:
exposes:
- type: mcp
namespace: newsletter-publishing
port: 8080
tools:
- name: publish-newsletter
description: "Create and send a shipping newsletter via MailChimp with SAP schedule highlights."
inputParameters:
- name: list_id
in: body
type: string
description: "The MailChimp audience list ID."
- name: period
in: body
type: string
description: "The schedule period to highlight."
steps:
- name: get-highlights
type: call
call: "sap.get-schedule-highlights"
with:
period: "{{period}}"
- name: create-campaign
type: call
call: "mailchimp.create-campaign"
with:
list_id: "{{list_id}}"
subject: "Hapag-Lloyd Shipping Update - {{period}}"
body: "New services: {{get-highlights.new_services}}. Schedule changes: {{get-highlights.changes}}. Key routes: {{get-highlights.key_routes}}."
- name: send-campaign
type: call
call: "mailchimp.send-campaign"
with:
campaign_id: "{{create-campaign.id}}"
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_SCHEDULE_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: highlights
path: "/ScheduleHighlightSet('{{period}}')"
inputParameters:
- name: period
in: path
operations:
- name: get-schedule-highlights
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: create-campaign
method: POST
- name: campaign-actions
path: "/campaigns/{{campaign_id}}/actions/send"
inputParameters:
- name: campaign_id
in: path
operations:
- name: send-campaign
method: POST
Retrieves marine cargo insurance certificate details from the insurance management system.
naftiko: "0.5"
info:
label: "Marine Insurance Certificate Lookup"
description: "Retrieves marine cargo insurance certificate details from the insurance management system."
tags:
- shipping
- insurance
- compliance
capability:
exposes:
- type: mcp
namespace: insurance-mgmt
port: 8080
tools:
- name: get-insurance-cert
description: "Look up insurance certificate for a shipment."
inputParameters:
- name: shipment_id
in: body
type: string
description: "The shipment reference number."
call: "insurance.get-cert"
with:
shipment: "{{shipment_id}}"
outputParameters:
- name: policy_number
type: string
mapping: "$.policyNumber"
- name: coverage_amount
type: string
mapping: "$.coverageAmount"
- name: valid_until
type: string
mapping: "$.validUntil"
consumes:
- type: http
namespace: insurance
baseUri: "https://hapag-lloyd-insurance.azure.com/api/v1"
authentication:
type: bearer
token: "$secrets.insurance_token"
resources:
- name: certificates
path: "/certificates/{{shipment}}"
inputParameters:
- name: shipment
in: path
operations:
- name: get-cert
method: GET
Sends a formatted email via Microsoft Outlook on behalf of a user, used for automated customer and internal communications.
naftiko: "0.5"
info:
label: "Microsoft Outlook Email Sender"
description: "Sends a formatted email via Microsoft Outlook on behalf of a user, used for automated customer and internal communications."
tags:
- communications
- email
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: email-sending
port: 8080
tools:
- name: send-email
description: "Send an email via Microsoft Outlook."
inputParameters:
- name: to_address
in: body
type: string
description: "The recipient email address."
- name: subject
in: body
type: string
description: "The email subject."
- name: body_text
in: body
type: string
description: "The email body."
call: "outlook.send-mail"
with:
to: "{{to_address}}"
subject: "{{subject}}"
body: "{{body_text}}"
consumes:
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0/me"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/sendMail"
operations:
- name: send-mail
method: POST
Sends a formatted message to a specified Microsoft Teams channel, used for operational alerts and status updates.
naftiko: "0.5"
info:
label: "Microsoft Teams Channel Notifier"
description: "Sends a formatted message to a specified Microsoft Teams channel, used for operational alerts and status updates."
tags:
- communications
- microsoft-teams
- notifications
capability:
exposes:
- type: mcp
namespace: team-notifications
port: 8080
tools:
- name: send-channel-notification
description: "Send a message to a Microsoft Teams channel."
inputParameters:
- name: channel_id
in: body
type: string
description: "The Teams channel ID."
- name: message_text
in: body
type: string
description: "The notification message text."
call: "msteams.send-channel-message"
with:
channel_id: "{{channel_id}}"
text: "{{message_text}}"
consumes:
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Tracks shipments across ocean, rail, and truck segments by aggregating data from SAP, the logistics platform, and Google Maps, then updating the customer via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Multi-Modal Shipment Tracker"
description: "Tracks shipments across ocean, rail, and truck segments by aggregating data from SAP, the logistics platform, and Google Maps, then updating the customer via Microsoft Outlook."
tags:
- logistics
- multi-modal
- tracking
- sap
- google-maps
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: multimodal-tracking
port: 8080
tools:
- name: track-multimodal-shipment
description: "Track a multi-modal shipment end-to-end."
inputParameters:
- name: shipment_id
in: body
type: string
description: "The shipment reference."
steps:
- name: get-ocean-leg
type: call
call: "sap.get-shipment-ocean"
with:
shipment: "{{shipment_id}}"
- name: get-inland-leg
type: call
call: "logistics.get-inland-status"
with:
shipment: "{{shipment_id}}"
- name: get-route-eta
type: call
call: "gmaps.get-directions"
with:
origin: "{{get-inland-leg.currentLocation}}"
destination: "{{get-inland-leg.finalDestination}}"
- name: notify-customer
type: call
call: "outlook.send-email"
with:
to: "{{get-ocean-leg.customerEmail}}"
subject: "Shipment Update - {{shipment_id}}"
body: "Ocean: {{get-ocean-leg.status}}. Inland: {{get-inland-leg.status}}. Current location: {{get-inland-leg.currentLocation}}. ETA: {{get-route-eta.eta}}."
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_SHIPMENT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
- type: http
namespace: logistics
baseUri: "https://hapag-lloyd-logistics.azure.com/api/v1"
authentication:
type: bearer
token: "$secrets.logistics_token"
- type: http
namespace: gmaps
baseUri: "https://maps.googleapis.com/maps/api"
authentication:
type: apiKey
key: "$secrets.google_maps_key"
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0/me"
authentication:
type: bearer
token: "$secrets.msgraph_token"
When a customer submits a booking request, validates availability in SAP, creates the booking, notifies the sales team via Microsoft Teams, and sends confirmation via Microsoft Outlook.
naftiko: "0.5"
info:
label: "New Booking Request Pipeline"
description: "When a customer submits a booking request, validates availability in SAP, creates the booking, notifies the sales team via Microsoft Teams, and sends confirmation via Microsoft Outlook."
tags:
- shipping
- booking
- sap
- microsoft-teams
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: booking-pipeline
port: 8080
tools:
- name: process-booking-request
description: "Process a new booking request end-to-end."
inputParameters:
- name: customer_id
in: body
type: string
description: "The customer account ID."
- 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."
steps:
- name: check-availability
type: call
call: "sap.check-slot"
with:
customer: "{{customer_id}}"
origin: "{{origin_port}}"
dest: "{{destination_port}}"
type: "{{container_type}}"
- name: create-booking
type: call
call: "sap.create-booking"
with:
customer: "{{customer_id}}"
origin: "{{origin_port}}"
dest: "{{destination_port}}"
type: "{{container_type}}"
slot: "{{check-availability.slotId}}"
- name: notify-sales
type: call
call: "msteams.send-message"
with:
channel_id: "sales-bookings"
text: "New booking {{create-booking.BookingRef}} created for customer {{customer_id}}. Route: {{origin_port}} to {{destination_port}}."
- name: email-confirmation
type: call
call: "outlook.send-email"
with:
to: "{{check-availability.customerEmail}}"
subject: "Booking Confirmation - {{create-booking.BookingRef}}"
body: "Your booking {{create-booking.BookingRef}} from {{origin_port}} to {{destination_port}} has been confirmed."
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_BOOKING_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0/me"
authentication:
type: bearer
token: "$secrets.msgraph_token"
Orchestrates the launch of a new trade lane by configuring routes in SAP, publishing schedules to the website CMS, announcing on LinkedIn, and notifying the commercial team via Microsoft Teams.
naftiko: "0.5"
info:
label: "New Trade Lane Launch Orchestrator"
description: "Orchestrates the launch of a new trade lane by configuring routes in SAP, publishing schedules to the website CMS, announcing on LinkedIn, and notifying the commercial team via Microsoft Teams."
tags:
- commercial
- trade-lane
- sap
- linkedin
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: trade-lane-launch
port: 8080
tools:
- name: launch-trade-lane
description: "Launch a new trade lane."
inputParameters:
- name: trade_lane_code
in: body
type: string
description: "The new trade lane code."
- name: service_name
in: body
type: string
description: "The service name."
steps:
- name: configure-route
type: call
call: "sap.create-trade-lane"
with:
code: "{{trade_lane_code}}"
service: "{{service_name}}"
- name: publish-schedule
type: call
call: "cms.publish-schedule"
with:
trade_lane: "{{trade_lane_code}}"
ports: "{{configure-route.portList}}"
frequency: "{{configure-route.frequency}}"
- name: announce-linkedin
type: call
call: "linkedin.create-post"
with:
text: "Hapag-Lloyd launches {{service_name}} connecting {{configure-route.portList}}. Weekly service starting {{configure-route.startDate}}."
- name: notify-commercial
type: call
call: "msteams.send-message"
with:
channel_id: "commercial-team"
text: "New trade lane {{trade_lane_code}} ({{service_name}}) launched. Ports: {{configure-route.portList}}. Start: {{configure-route.startDate}}."
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_TRADELANE_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
- type: http
namespace: cms
baseUri: "https://hapag-lloyd-cms.azure.com/api/v1"
authentication:
type: bearer
token: "$secrets.cms_token"
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
Retrieves applicable surcharges for a specific trade lane from the pricing system.
naftiko: "0.5"
info:
label: "Ocean Freight Surcharge Lookup"
description: "Retrieves applicable surcharges for a specific trade lane from the pricing system."
tags:
- shipping
- pricing
- surcharges
capability:
exposes:
- type: mcp
namespace: pricing-surcharge
port: 8080
tools:
- name: get-surcharges
description: "Look up surcharges for a trade lane."
inputParameters:
- name: trade_lane
in: body
type: string
description: "The trade lane code."
- name: container_type
in: body
type: string
description: "Container type code (20GP, 40HC, etc.)."
call: "pricing.get-surcharges"
with:
lane: "{{trade_lane}}"
type: "{{container_type}}"
outputParameters:
- name: surcharges
type: array
mapping: "$.surcharges"
- name: total_amount
type: number
mapping: "$.totalAmount"
- name: currency
type: string
mapping: "$.currency"
consumes:
- type: http
namespace: pricing
baseUri: "https://hapag-lloyd-pricing.azure.com/api/v1"
authentication:
type: bearer
token: "$secrets.pricing_token"
resources:
- name: surcharges
path: "/surcharges?lane={{lane}}&type={{type}}"
inputParameters:
- name: lane
in: query
- name: type
in: query
operations:
- name: get-surcharges
method: GET
Pulls outstanding invoices from Oracle E-Business Suite, matches with SAP shipment records, and publishes a reconciliation report to Confluence.
naftiko: "0.5"
info:
label: "Oracle E-Business Suite Invoice Sync"
description: "Pulls outstanding invoices from Oracle E-Business Suite, matches with SAP shipment records, and publishes a reconciliation report to Confluence."
tags:
- finance
- oracle-ebs
- sap
- confluence
- reconciliation
capability:
exposes:
- type: mcp
namespace: invoice-reconciliation
port: 8080
tools:
- name: reconcile-invoices
description: "Match Oracle EBS invoices with SAP shipment records and publish a reconciliation report."
inputParameters:
- name: period
in: body
type: string
description: "The billing period in YYYY-MM format."
steps:
- name: get-oracle-invoices
type: call
call: "oracle-ebs.get-invoices"
with:
period: "{{period}}"
- name: get-sap-shipments
type: call
call: "sap.get-shipments-by-period"
with:
period: "{{period}}"
- name: publish-report
type: call
call: "confluence.create-page"
with:
space_key: "FIN"
title: "Invoice Reconciliation: {{period}}"
body: "Oracle invoices: {{get-oracle-invoices.count}}. SAP shipments: {{get-sap-shipments.count}}. Matched: {{get-oracle-invoices.matched_count}}. Unmatched: {{get-oracle-invoices.unmatched_count}}."
consumes:
- type: http
namespace: oracle-ebs
baseUri: "https://hapag-lloyd-ebs.oracle.com/webservices/rest"
authentication:
type: basic
username: "$secrets.oracle_ebs_user"
password: "$secrets.oracle_ebs_password"
resources:
- name: invoices
path: "/ap/invoices?period={{period}}"
inputParameters:
- name: period
in: query
operations:
- name: get-invoices
method: GET
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_SHIPMENT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: shipments
path: "/ShipmentSet?$filter=Period eq '{{period}}'"
inputParameters:
- name: period
in: query
operations:
- name: get-shipments-by-period
method: GET
- type: http
namespace: confluence
baseUri: "https://hapag-lloyd.atlassian.net/wiki/api/v2"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/pages"
operations:
- name: create-page
method: POST
Assesses piracy risk for vessel routes by checking threat intelligence, updating vessel security plans in SharePoint, notifying the security team via Microsoft Teams, and logging in ServiceNow.
naftiko: "0.5"
info:
label: "Piracy Risk Assessment Pipeline"
description: "Assesses piracy risk for vessel routes by checking threat intelligence, updating vessel security plans in SharePoint, notifying the security team via Microsoft Teams, and logging in ServiceNow."
tags:
- security
- maritime
- risk
- sharepoint
- microsoft-teams
- servicenow
capability:
exposes:
- type: mcp
namespace: piracy-risk
port: 8080
tools:
- name: assess-piracy-risk
description: "Assess piracy risk for vessel routes."
inputParameters:
- name: vessel_id
in: body
type: string
description: "The vessel IMO number."
- name: route
in: body
type: string
description: "The planned route waypoints."
steps:
- name: check-threat-intel
type: call
call: "security.get-piracy-risk"
with:
route: "{{route}}"
- name: update-security-plan
type: call
call: "sharepoint.create-file"
with:
site_id: "security_site"
file_path: "SecurityPlans/{{vessel_id}}_risk_assessment.pdf"
- name: notify-security
type: call
call: "msteams.send-message"
with:
channel_id: "maritime-security"
text: "Piracy risk assessment for {{vessel_id}}: Level {{check-threat-intel.riskLevel}}. High-risk zones: {{check-threat-intel.hotspots}}."
- name: log-assessment
type: call
call: "servicenow.create-record"
with:
table: "u_security_assessment"
vessel: "{{vessel_id}}"
risk_level: "{{check-threat-intel.riskLevel}}"
consumes:
- type: http
namespace: security
baseUri: "https://hapag-lloyd-security.azure.com/api/v1"
authentication:
type: bearer
token: "$secrets.security_token"
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
- type: http
namespace: servicenow
baseUri: "https://hapag-lloyd.service-now.com/api/now/table"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
Optimizes port call sequences by analyzing vessel schedules in SAP, running optimization algorithms, updating routes, and notifying the fleet management team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Port Call Optimization Pipeline"
description: "Optimizes port call sequences by analyzing vessel schedules in SAP, running optimization algorithms, updating routes, and notifying the fleet management team via Microsoft Teams."
tags:
- shipping
- optimization
- fleet
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: port-optimization
port: 8080
tools:
- name: optimize-port-calls
description: "Optimize vessel port call sequence."
inputParameters:
- name: vessel_id
in: body
type: string
description: "The vessel IMO number."
- name: voyage_number
in: body
type: string
description: "The voyage number."
steps:
- name: get-current-schedule
type: call
call: "sap.get-voyage-schedule"
with:
vessel: "{{vessel_id}}"
voyage: "{{voyage_number}}"
- name: run-optimization
type: call
call: "optimization.optimize-route"
with:
ports: "{{get-current-schedule.portList}}"
constraints: "{{get-current-schedule.constraints}}"
- name: update-schedule
type: call
call: "sap.update-voyage-schedule"
with:
vessel: "{{vessel_id}}"
voyage: "{{voyage_number}}"
new_ports: "{{run-optimization.optimizedRoute}}"
- name: notify-fleet-mgmt
type: call
call: "msteams.send-message"
with:
channel_id: "fleet-management"
text: "Port call optimized for {{vessel_id}} voyage {{voyage_number}}. Savings: {{run-optimization.fuelSavings}} tonnes fuel, {{run-optimization.timeSavingsHours}} hours."
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_VOYAGE_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
- type: http
namespace: optimization
baseUri: "https://hapag-lloyd-optimization.azure.com/api/v1"
authentication:
type: bearer
token: "$secrets.optimization_token"
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
Fetches current port congestion metrics from Google Analytics, enriches with vessel queue data from SAP, and pushes a summary to Power BI for operations visibility.
naftiko: "0.5"
info:
label: "Port Congestion Dashboard Sync"
description: "Fetches current port congestion metrics from Google Analytics, enriches with vessel queue data from SAP, and pushes a summary to Power BI for operations visibility."
tags:
- logistics
- port-operations
- google-analytics
- sap
- power-bi
capability:
exposes:
- type: mcp
namespace: port-congestion
port: 8080
tools:
- name: sync-port-congestion
description: "Pull port congestion analytics, enrich with SAP vessel data, and push to Power BI."
inputParameters:
- name: port_code
in: body
type: string
description: "The UN/LOCODE port code."
steps:
- name: get-analytics
type: call
call: "ga.get-port-metrics"
with:
port_code: "{{port_code}}"
- name: get-vessel-queue
type: call
call: "sap.get-port-queue"
with:
port_code: "{{port_code}}"
- name: push-to-bi
type: call
call: "powerbi.push-rows"
with:
dataset_id: "port_congestion_ds"
table_name: "CongestionMetrics"
rows:
- port_code: "{{port_code}}"
avg_wait_hours: "{{get-analytics.avg_wait_time}}"
vessels_queued: "{{get-vessel-queue.queue_count}}"
consumes:
- type: http
namespace: ga
baseUri: "https://analyticsdata.googleapis.com/v1beta"
authentication:
type: bearer
token: "$secrets.google_analytics_token"
resources:
- name: reports
path: "/properties/{{property_id}}:runReport"
inputParameters:
- name: property_id
in: path
operations:
- name: get-port-metrics
method: POST
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_PORT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: port-queue
path: "/PortQueueSet('{{port_code}}')"
inputParameters:
- name: port_code
in: path
operations:
- name: get-port-queue
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}}/tables/{{table_name}}/rows"
inputParameters:
- name: dataset_id
in: path
- name: table_name
in: path
operations:
- name: push-rows
method: POST
When port congestion exceeds thresholds, reroutes affected vessels, updates bookings in SAP, notifies customers via Microsoft Outlook, and updates the Datadog monitoring dashboard.
naftiko: "0.5"
info:
label: "Port Congestion Response Orchestrator"
description: "When port congestion exceeds thresholds, reroutes affected vessels, updates bookings in SAP, notifies customers via Microsoft Outlook, and updates the Datadog monitoring dashboard."
tags:
- shipping
- port
- congestion
- sap
- microsoft-outlook
- datadog
capability:
exposes:
- type: mcp
namespace: congestion-response
port: 8080
tools:
- name: handle-port-congestion
description: "Manage port congestion response."
inputParameters:
- name: port_code
in: body
type: string
description: "The congested port UN/LOCODE."
- name: congestion_level
in: body
type: string
description: "Congestion severity level."
steps:
- name: get-affected-vessels
type: call
call: "sap.get-port-vessels"
with:
port: "{{port_code}}"
- name: reroute-vessels
type: call
call: "routing.suggest-alternatives"
with:
port: "{{port_code}}"
vessels: "{{get-affected-vessels.vesselList}}"
- name: update-bookings
type: call
call: "sap.batch-update-port"
with:
port: "{{port_code}}"
alternatives: "{{reroute-vessels.alternatives}}"
- name: notify-customers
type: call
call: "outlook.send-email"
with:
to: "{{update-bookings.affectedEmails}}"
subject: "Port Congestion Advisory - {{port_code}}"
body: "Due to congestion at {{port_code}}, your shipment routing has been updated."
- name: update-monitoring
type: call
call: "datadog.post-event"
with:
title: "Port Congestion: {{port_code}}"
text: "Level: {{congestion_level}}. Affected vessels: {{get-affected-vessels.count}}."
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_PORT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
- type: http
namespace: routing
baseUri: "https://hapag-lloyd-routing.azure.com/api/v1"
authentication:
type: bearer
token: "$secrets.routing_token"
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0/me"
authentication:
type: bearer
token: "$secrets.msgraph_token"
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
Returns estimated transit time between two ports from the routing database.
naftiko: "0.5"
info:
label: "Port Pair Transit Time Lookup"
description: "Returns estimated transit time between two ports from the routing database."
tags:
- shipping
- transit-time
- routing
capability:
exposes:
- type: mcp
namespace: shipping-transit
port: 8080
tools:
- name: get-transit-time
description: "Get estimated transit days between an origin and destination port."
inputParameters:
- name: origin_port
in: body
type: string
description: "UN/LOCODE of the origin port."
- name: destination_port
in: body
type: string
description: "UN/LOCODE of the destination port."
call: "routing.get-transit"
with:
origin: "{{origin_port}}"
destination: "{{destination_port}}"
outputParameters:
- name: transit_days
type: integer
mapping: "$.transitDays"
- name: service_name
type: string
mapping: "$.serviceName"
consumes:
- type: http
namespace: routing
baseUri: "https://hapag-lloyd-routing.azure.com/api/v1"
authentication:
type: bearer
token: "$secrets.routing_token"
resources:
- name: transit-times
path: "/transit-times?origin={{origin}}&destination={{destination}}"
inputParameters:
- name: origin
in: query
- name: destination
in: query
operations:
- name: get-transit
method: GET
Returns current gate operating hours for a specified port terminal.
naftiko: "0.5"
info:
label: "Port Terminal Gate Hours Lookup"
description: "Returns current gate operating hours for a specified port terminal."
tags:
- shipping
- port
- terminal
capability:
exposes:
- type: mcp
namespace: port-info
port: 8080
tools:
- name: get-gate-hours
description: "Look up terminal gate operating hours."
inputParameters:
- name: terminal_code
in: body
type: string
description: "The terminal facility code."
call: "portinfo.get-hours"
with:
terminal: "{{terminal_code}}"
outputParameters:
- name: opening_time
type: string
mapping: "$.openingTime"
- name: closing_time
type: string
mapping: "$.closingTime"
- name: days
type: string
mapping: "$.operatingDays"
consumes:
- type: http
namespace: portinfo
baseUri: "https://hapag-lloyd-portinfo.azure.com/api/v1"
authentication:
type: bearer
token: "$secrets.port_api_token"
resources:
- name: terminal-hours
path: "/terminals/{{terminal}}/gate-hours"
inputParameters:
- name: terminal
in: path
operations:
- name: get-hours
method: GET
Triggers a Qlik Sense app reload for shipping analytics, waits for completion, and notifies the analytics team in Microsoft Teams.
naftiko: "0.5"
info:
label: "Qlik Sense Shipping Dashboard Refresh"
description: "Triggers a Qlik Sense app reload for shipping analytics, waits for completion, and notifies the analytics team in Microsoft Teams."
tags:
- analytics
- qlik-sense
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: analytics-refresh
port: 8080
tools:
- name: refresh-qlik-dashboard
description: "Trigger a Qlik Sense app reload and notify the analytics team."
inputParameters:
- name: app_id
in: body
type: string
description: "The Qlik Sense app ID."
steps:
- name: trigger-reload
type: call
call: "qlik.reload-app"
with:
app_id: "{{app_id}}"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "analytics-team"
text: "Qlik Sense dashboard {{app_id}} reload triggered. Reload ID: {{trigger-reload.reloadId}}."
consumes:
- type: http
namespace: qlik
baseUri: "https://hapag-lloyd.us.qlikcloud.com/api/v1"
authentication:
type: bearer
token: "$secrets.qlik_token"
resources:
- name: reloads
path: "/reloads"
operations:
- name: reload-app
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Generates quarterly business review reports by pulling KPIs from SAP, creating presentation data in Google Sheets, generating slides via SharePoint, and distributing to leadership via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Quarterly Business Review Generator"
description: "Generates quarterly business review reports by pulling KPIs from SAP, creating presentation data in Google Sheets, generating slides via SharePoint, and distributing to leadership via Microsoft Outlook."
tags:
- business
- reporting
- sap
- google-sheets
- sharepoint
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: qbr-generator
port: 8080
tools:
- name: generate-qbr
description: "Generate quarterly business review."
inputParameters:
- name: quarter
in: body
type: string
description: "The quarter (Q1-Q4)."
- name: year
in: body
type: string
description: "The fiscal year."
steps:
- name: pull-kpis
type: call
call: "sap.get-quarterly-kpis"
with:
quarter: "{{quarter}}"
year: "{{year}}"
- name: update-dashboard
type: call
call: "gsheets.update-range"
with:
spreadsheet_id: "qbr_data"
range: "{{quarter}}{{year}}!A1"
values: "{{pull-kpis.summary}}"
- name: generate-report
type: call
call: "sharepoint.create-file"
with:
site_id: "executive_reports"
file_path: "QBR/{{year}}_{{quarter}}_review.pdf"
- name: distribute-report
type: call
call: "outlook.send-email"
with:
to: "leadership@hapag-lloyd.com"
subject: "{{quarter}} {{year}} Business Review"
body: "The quarterly business review is ready. TEU volume: {{pull-kpis.totalTEU}}, Revenue: {{pull-kpis.revenue}}. Report: {{generate-report.url}}"
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZBI_KPI_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4/spreadsheets"
authentication:
type: bearer
token: "$secrets.google_token"
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0/me"
authentication:
type: bearer
token: "$secrets.msgraph_token"
When a reefer container temperature breaches thresholds, logs the event in SAP, creates a ServiceNow incident, notifies the cold chain team via Microsoft Teams, and emails the customer.
naftiko: "0.5"
info:
label: "Reefer Cargo Exception Handler"
description: "When a reefer container temperature breaches thresholds, logs the event in SAP, creates a ServiceNow incident, notifies the cold chain team via Microsoft Teams, and emails the customer."
tags:
- shipping
- reefer
- cold-chain
- sap
- servicenow
- microsoft-teams
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: reefer-exception
port: 8080
tools:
- name: handle-reefer-exception
description: "Handle reefer container temperature exceptions."
inputParameters:
- name: container_number
in: body
type: string
description: "The reefer container number."
- name: temperature
in: body
type: number
description: "The recorded temperature."
steps:
- name: log-event
type: call
call: "sap.log-reefer-exception"
with:
container: "{{container_number}}"
temp: "{{temperature}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Reefer exception: {{container_number}}"
description: "Temperature {{temperature}} exceeds threshold. Cargo: {{log-event.cargoDescription}}."
- name: notify-cold-chain
type: call
call: "msteams.send-message"
with:
channel_id: "cold-chain-alerts"
text: "ALERT: Reefer {{container_number}} at {{temperature}}C. Threshold: {{log-event.threshold}}C. Cargo: {{log-event.cargoDescription}}."
- name: email-customer
type: call
call: "outlook.send-email"
with:
to: "{{log-event.customerEmail}}"
subject: "Reefer Alert - Container {{container_number}}"
body: "A temperature exception has been detected for container {{container_number}}. Current: {{temperature}}C. Our team is investigating."
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_REEFER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
- type: http
namespace: servicenow
baseUri: "https://hapag-lloyd.service-now.com/api/now/table/incident"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0/me"
authentication:
type: bearer
token: "$secrets.msgraph_token"
Pulls reefer container telemetry from SAP, checks temperature thresholds, creates a Jira alert if out of range, and notifies operations via Microsoft Teams.
naftiko: "0.5"
info:
label: "Reefer Container Temperature Monitor"
description: "Pulls reefer container telemetry from SAP, checks temperature thresholds, creates a Jira alert if out of range, and notifies operations via Microsoft Teams."
tags:
- logistics
- reefer
- sap
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: reefer-monitoring
port: 8080
tools:
- name: check-reefer-temperature
description: "Check reefer container temperature and alert if out of range."
inputParameters:
- name: container_number
in: body
type: string
description: "The reefer container number."
- name: max_temp_celsius
in: body
type: number
description: "The maximum allowed temperature in Celsius."
steps:
- name: get-telemetry
type: call
call: "sap.get-reefer-telemetry"
with:
container_id: "{{container_number}}"
- name: create-alert
type: call
call: "jira.create-issue"
with:
project_key: "REEFER"
summary: "Temperature alert: {{container_number}} at {{get-telemetry.current_temp}}C (max: {{max_temp_celsius}}C)"
issue_type: "Bug"
priority: "High"
description: "Container {{container_number}} current temperature: {{get-telemetry.current_temp}}C. Set point: {{get-telemetry.set_point}}C. Location: {{get-telemetry.current_location}}."
- name: notify-ops
type: call
call: "msteams.send-message"
with:
channel_id: "reefer-alerts"
text: "REEFER ALERT: {{container_number}} at {{get-telemetry.current_temp}}C (max {{max_temp_celsius}}C). Location: {{get-telemetry.current_location}}. Jira: {{create-alert.key}}."
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_REEFER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: telemetry
path: "/ReeferTelemetrySet('{{container_id}}')"
inputParameters:
- name: container_id
in: path
operations:
- name: get-reefer-telemetry
method: GET
- type: http
namespace: jira
baseUri: "https://hapag-lloyd.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Prepares for port state control inspections by gathering vessel certificates from SAP, compiling documents in SharePoint, notifying the captain via Microsoft Outlook, and alerting the compliance team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Regulatory Port State Control Pipeline"
description: "Prepares for port state control inspections by gathering vessel certificates from SAP, compiling documents in SharePoint, notifying the captain via Microsoft Outlook, and alerting the compliance team via Microsoft Teams."
tags:
- compliance
- regulatory
- maritime
- sap
- sharepoint
- microsoft-outlook
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: psc-preparation
port: 8080
tools:
- name: prepare-psc-inspection
description: "Prepare for port state control inspection."
inputParameters:
- name: vessel_id
in: body
type: string
description: "The vessel IMO number."
- name: port_code
in: body
type: string
description: "The inspection port."
steps:
- name: gather-certificates
type: call
call: "sap.get-vessel-certs"
with:
vessel: "{{vessel_id}}"
- name: compile-documents
type: call
call: "sharepoint.create-file"
with:
site_id: "marine_compliance"
file_path: "PSC/{{vessel_id}}_{{port_code}}_docs.pdf"
- name: notify-captain
type: call
call: "outlook.send-email"
with:
to: "{{gather-certificates.captainEmail}}"
subject: "PSC Inspection Preparation - {{port_code}}"
body: "Port state control inspection expected at {{port_code}}. Document package: {{compile-documents.url}}. Expiring certificates: {{gather-certificates.expiringCount}}."
- name: alert-compliance
type: call
call: "msteams.send-message"
with:
channel_id: "marine-compliance"
text: "PSC prep for {{vessel_id}} at {{port_code}}. Certificates: {{gather-certificates.totalCerts}} valid, {{gather-certificates.expiringCount}} expiring soon."
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_MARINE_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0/me"
authentication:
type: bearer
token: "$secrets.msgraph_token"
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
Retrieves a customer account from Salesforce by account ID, returning company name, contract status, volume tier, and primary contact.
naftiko: "0.5"
info:
label: "Salesforce Customer Account Lookup"
description: "Retrieves a customer account from Salesforce by account ID, returning company name, contract status, volume tier, and primary contact."
tags:
- sales
- crm
- salesforce
- customer
capability:
exposes:
- type: mcp
namespace: crm-accounts
port: 8080
tools:
- name: get-customer-account
description: "Look up a Salesforce customer account by ID. Returns company name, contract status, volume tier, and contact."
inputParameters:
- name: account_id
in: body
type: string
description: "The Salesforce account ID."
call: "salesforce.get-account"
with:
account_id: "{{account_id}}"
outputParameters:
- name: company_name
type: string
mapping: "$.Name"
- name: contract_status
type: string
mapping: "$.Contract_Status__c"
- name: volume_tier
type: string
mapping: "$.Volume_Tier__c"
- name: primary_contact
type: string
mapping: "$.Primary_Contact__c"
consumes:
- type: http
namespace: salesforce
baseUri: "https://hapag-lloyd.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: get-account
method: GET
When a SAP Ariba requisition exceeds a spend threshold, routes for approval via Workday manager lookup and notifies the requestor in Microsoft Teams.
naftiko: "0.5"
info:
label: "SAP Ariba Requisition Approval Pipeline"
description: "When a SAP Ariba requisition exceeds a spend threshold, routes for approval via Workday manager lookup and notifies the requestor in Microsoft Teams."
tags:
- procurement
- sap-ariba
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: procurement-approval
port: 8080
tools:
- name: route-requisition-approval
description: "Route a SAP Ariba requisition for manager approval and notify the requestor."
inputParameters:
- name: requisition_id
in: body
type: string
description: "The SAP Ariba requisition ID."
steps:
- name: get-requisition
type: call
call: "ariba.get-requisition"
with:
req_id: "{{requisition_id}}"
- name: get-manager
type: call
call: "workday.get-manager"
with:
worker_id: "{{get-requisition.requestor_id}}"
- name: notify-requestor
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{get-requisition.requestor_email}}"
text: "Your requisition {{requisition_id}} ({{get-requisition.total_amount}} {{get-requisition.currency}}) has been routed to {{get-manager.full_name}} for approval."
consumes:
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/procurement/v2"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: requisitions
path: "/requisitions/{{req_id}}"
inputParameters:
- name: req_id
in: path
operations:
- name: get-requisition
method: GET
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: managers
path: "/workers/{{worker_id}}/manager"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-manager
method: GET
- 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
Retrieves key shipping performance indicators from SAP BW including on-time delivery rate, average transit time, and TEU throughput.
naftiko: "0.5"
info:
label: "SAP BW Shipping KPI Extractor"
description: "Retrieves key shipping performance indicators from SAP BW including on-time delivery rate, average transit time, and TEU throughput."
tags:
- analytics
- sap-bw
- kpi
- reporting
capability:
exposes:
- type: mcp
namespace: shipping-kpis
port: 8080
tools:
- name: get-shipping-kpis
description: "Extract shipping KPIs from SAP BW for a given period."
inputParameters:
- name: period
in: body
type: string
description: "The reporting period (e.g. 2026-Q1)."
call: "sapbw.get-kpis"
with:
period: "{{period}}"
outputParameters:
- name: on_time_rate
type: string
mapping: "$.d.OnTimeDeliveryRate"
- name: avg_transit_days
type: string
mapping: "$.d.AvgTransitDays"
- name: teu_throughput
type: integer
mapping: "$.d.TEUThroughput"
consumes:
- type: http
namespace: sapbw
baseUri: "https://hapag-lloyd-bw.sap.com/sap/opu/odata/sap/ZSH_KPI_BW_SRV"
authentication:
type: basic
username: "$secrets.sap_bw_user"
password: "$secrets.sap_bw_password"
resources:
- name: kpis
path: "/ShippingKPISet('{{period}}')"
inputParameters:
- name: period
in: path
operations:
- name: get-kpis
method: GET
Retrieves a travel expense report from SAP Concur, validates against Workday employee data, and creates a Jira approval task for out-of-policy expenses.
naftiko: "0.5"
info:
label: "SAP Concur Travel Expense Processor"
description: "Retrieves a travel expense report from SAP Concur, validates against Workday employee data, and creates a Jira approval task for out-of-policy expenses."
tags:
- finance
- travel
- sap-concur
- workday
- jira
capability:
exposes:
- type: mcp
namespace: travel-expenses
port: 8080
tools:
- name: process-expense-report
description: "Validate a Concur expense report and route out-of-policy items for approval."
inputParameters:
- name: report_id
in: body
type: string
description: "The SAP Concur expense report ID."
steps:
- name: get-report
type: call
call: "concur.get-expense-report"
with:
report_id: "{{report_id}}"
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{get-report.employee_id}}"
- name: create-approval
type: call
call: "jira.create-issue"
with:
project_key: "FIN"
summary: "Expense review: {{get-employee.full_name}} - {{get-report.total_amount}} {{get-report.currency}}"
issue_type: "Task"
description: "Expense report {{report_id}} from {{get-employee.full_name}} ({{get-employee.department}}). Total: {{get-report.total_amount}} {{get-report.currency}}. Out-of-policy items: {{get-report.flagged_count}}."
consumes:
- type: http
namespace: concur
baseUri: "https://us.api.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_token"
resources:
- name: reports
path: "/expense/reports/{{report_id}}"
inputParameters:
- name: report_id
in: path
operations:
- name: get-expense-report
method: GET
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: jira
baseUri: "https://hapag-lloyd.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Looks up goods receipt status for a purchase order in SAP.
naftiko: "0.5"
info:
label: "SAP Goods Receipt Status"
description: "Looks up goods receipt status for a purchase order in SAP."
tags:
- procurement
- sap
- goods-receipt
capability:
exposes:
- type: mcp
namespace: procurement-gr
port: 8080
tools:
- name: get-goods-receipt
description: "Check goods receipt status for a SAP purchase order."
inputParameters:
- name: po_number
in: body
type: string
description: "The SAP purchase order number."
call: "sap.get-gr-status"
with:
po_id: "{{po_number}}"
outputParameters:
- name: receipt_date
type: string
mapping: "$.d.ReceiptDate"
- name: status
type: string
mapping: "$.d.Status"
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZMM_GR_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: goods-receipts
path: "/GoodsReceiptSet('{{po_id}}')"
inputParameters:
- name: po_id
in: path
operations:
- name: get-gr-status
method: GET
Runs a cargo volume analytics query against SAP HANA and returns aggregated TEU counts by trade lane and period.
naftiko: "0.5"
info:
label: "SAP HANA Cargo Analytics Query"
description: "Runs a cargo volume analytics query against SAP HANA and returns aggregated TEU counts by trade lane and period."
tags:
- analytics
- sap-hana
- cargo
capability:
exposes:
- type: mcp
namespace: cargo-analytics
port: 8080
tools:
- name: query-cargo-volume
description: "Query SAP HANA for cargo volume by trade lane and time period."
inputParameters:
- name: trade_lane
in: body
type: string
description: "The trade lane code (e.g. ASIA-EUR, TPAC)."
- name: period
in: body
type: string
description: "The period in YYYY-MM format."
call: "saphana.query-volume"
with:
trade_lane: "{{trade_lane}}"
period: "{{period}}"
outputParameters:
- name: total_teu
type: integer
mapping: "$.d.results[0].TotalTEU"
- name: full_containers
type: integer
mapping: "$.d.results[0].FullContainers"
- name: empty_containers
type: integer
mapping: "$.d.results[0].EmptyContainers"
consumes:
- type: http
namespace: saphana
baseUri: "https://hapag-lloyd-hana.sap.com/sap/opu/odata/sap/ZSH_CARGO_ANALYTICS_SRV"
authentication:
type: basic
username: "$secrets.sap_hana_user"
password: "$secrets.sap_hana_password"
resources:
- name: volumes
path: "/CargoVolumeSet(TradeLane='{{trade_lane}}',Period='{{period}}')"
inputParameters:
- name: trade_lane
in: path
- name: period
in: path
operations:
- name: query-volume
method: GET
Looks up a SAP S/4HANA purchase order by number and returns header status, vendor, total value, and delivery date for procurement visibility.
naftiko: "0.5"
info:
label: "SAP Purchase Order Status"
description: "Looks up a SAP S/4HANA purchase order by number and returns header status, vendor, total value, and delivery date for procurement visibility."
tags:
- procurement
- sap
- purchase-order
- finance
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, value, and delivery date."
inputParameters:
- name: po_number
in: body
type: string
description: "The SAP purchase order number."
call: "sap.get-po"
with:
po_number: "{{po_number}}"
outputParameters:
- name: status
type: string
mapping: "$.d.OverallStatus"
- name: vendor
type: string
mapping: "$.d.Supplier.CompanyName"
- name: total_value
type: string
mapping: "$.d.TotalAmount"
- name: delivery_date
type: string
mapping: "$.d.DeliveryDate"
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-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
Synchronizes transport management orders between SAP TM and operational systems, validates routes, updates the logistics dashboard in Power BI, and notifies planners via Microsoft Teams.
naftiko: "0.5"
info:
label: "SAP Transport Management Order Sync"
description: "Synchronizes transport management orders between SAP TM and operational systems, validates routes, updates the logistics dashboard in Power BI, and notifies planners via Microsoft Teams."
tags:
- logistics
- sap
- transport-management
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: tm-order-sync
port: 8080
tools:
- name: sync-transport-orders
description: "Synchronize SAP transport management orders."
inputParameters:
- name: tm_order_id
in: body
type: string
description: "The SAP TM order ID."
steps:
- name: get-tm-order
type: call
call: "sap.get-tm-order"
with:
order_id: "{{tm_order_id}}"
- name: validate-route
type: call
call: "routing.validate-route"
with:
origin: "{{get-tm-order.origin}}"
destination: "{{get-tm-order.destination}}"
mode: "{{get-tm-order.transportMode}}"
- name: refresh-dashboard
type: call
call: "powerbi.refresh-dataset"
with:
dataset_id: "logistics_dashboard"
- name: notify-planners
type: call
call: "msteams.send-message"
with:
channel_id: "logistics-planning"
text: "TM order {{tm_order_id}} synced. Route: {{get-tm-order.origin}} to {{get-tm-order.destination}}. Mode: {{get-tm-order.transportMode}}."
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZTM_ORDER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
- type: http
namespace: routing
baseUri: "https://hapag-lloyd-routing.azure.com/api/v1"
authentication:
type: bearer
token: "$secrets.routing_token"
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
Retrieves vendor master data from SAP by vendor number.
naftiko: "0.5"
info:
label: "SAP Vendor Master Lookup"
description: "Retrieves vendor master data from SAP by vendor number."
tags:
- procurement
- sap
- vendor
capability:
exposes:
- type: mcp
namespace: procurement-vendor
port: 8080
tools:
- name: get-vendor
description: "Look up vendor master data in SAP."
inputParameters:
- name: vendor_number
in: body
type: string
description: "The SAP vendor number."
call: "sap.get-vendor"
with:
vendor_id: "{{vendor_number}}"
outputParameters:
- name: vendor_name
type: string
mapping: "$.d.VendorName"
- name: country
type: string
mapping: "$.d.Country"
- name: payment_terms
type: string
mapping: "$.d.PaymentTerms"
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZMM_VENDOR_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: vendors
path: "/VendorSet('{{vendor_id}}')"
inputParameters:
- name: vendor_id
in: path
operations:
- name: get-vendor
method: GET
Retrieves a ServiceNow incident by number, returning its state, priority, assigned group, and last update timestamp.
naftiko: "0.5"
info:
label: "ServiceNow Ticket Status"
description: "Retrieves a ServiceNow incident by number, returning its state, priority, assigned group, and last update timestamp."
tags:
- it-service
- servicenow
- incident
capability:
exposes:
- type: mcp
namespace: itsm-tickets
port: 8080
tools:
- name: get-ticket-status
description: "Look up a ServiceNow incident by number and return its current state and assignment."
inputParameters:
- name: incident_number
in: body
type: string
description: "The ServiceNow incident number (e.g. INC0012345)."
call: "servicenow.get-incident"
with:
incident_number: "{{incident_number}}"
outputParameters:
- name: state
type: string
mapping: "$.result[0].state"
- name: priority
type: string
mapping: "$.result[0].priority"
- name: assigned_group
type: string
mapping: "$.result[0].assignment_group.display_value"
- name: updated_on
type: string
mapping: "$.result[0].sys_updated_on"
consumes:
- type: http
namespace: servicenow
baseUri: "https://hapag-lloyd.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident?sysparm_query=number={{incident_number}}"
inputParameters:
- name: incident_number
in: path
operations:
- name: get-incident
method: GET
Retrieves a document from a SharePoint site by path and returns the download URL and metadata.
naftiko: "0.5"
info:
label: "SharePoint Document Retrieval"
description: "Retrieves a document from a SharePoint site by path and returns the download URL and metadata."
tags:
- document-management
- sharepoint
capability:
exposes:
- type: mcp
namespace: doc-management
port: 8080
tools:
- name: get-document
description: "Retrieve a document from SharePoint by site and path."
inputParameters:
- name: site_id
in: body
type: string
description: "The SharePoint site ID."
- name: file_path
in: body
type: string
description: "The file path within the document library."
call: "sharepoint.get-file-metadata"
with:
site_id: "{{site_id}}"
file_path: "{{file_path}}"
outputParameters:
- name: download_url
type: string
mapping: "$.['@microsoft.graph.downloadUrl']"
- name: last_modified
type: string
mapping: "$.lastModifiedDateTime"
- name: size_bytes
type: integer
mapping: "$.size"
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:/{{file_path}}"
inputParameters:
- name: site_id
in: path
- name: file_path
in: path
operations:
- name: get-file-metadata
method: GET
When a vessel delay is detected, updates the shipment status in SAP, notifies affected customers via Microsoft Outlook, and posts an alert to the operations Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Shipment Delay Notification Pipeline"
description: "When a vessel delay is detected, updates the shipment status in SAP, notifies affected customers via Microsoft Outlook, and posts an alert to the operations Microsoft Teams channel."
tags:
- shipping
- delay
- sap
- microsoft-outlook
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: delay-notification
port: 8080
tools:
- name: handle-shipment-delay
description: "Process a shipment delay notification."
inputParameters:
- name: vessel_id
in: body
type: string
description: "The vessel IMO number."
- name: new_eta
in: body
type: string
description: "The revised ETA."
steps:
- name: get-affected-shipments
type: call
call: "sap.get-vessel-shipments"
with:
vessel: "{{vessel_id}}"
- name: update-eta
type: call
call: "sap.update-shipment-eta"
with:
vessel: "{{vessel_id}}"
eta: "{{new_eta}}"
- name: notify-ops
type: call
call: "msteams.send-message"
with:
channel_id: "operations-alerts"
text: "Vessel {{vessel_id}} delayed. New ETA: {{new_eta}}. Affected shipments: {{get-affected-shipments.count}}."
- name: email-customers
type: call
call: "outlook.send-email"
with:
to: "{{get-affected-shipments.customerEmails}}"
subject: "Shipment Delay Notification - Vessel {{vessel_id}}"
body: "Your shipment has been delayed. Revised ETA: {{new_eta}}."
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_SHIPMENT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0/me"
authentication:
type: bearer
token: "$secrets.msgraph_token"
Checks the status of shipping documents like bill of lading and manifest in SAP.
naftiko: "0.5"
info:
label: "Shipping Document Status Lookup"
description: "Checks the status of shipping documents like bill of lading and manifest in SAP."
tags:
- shipping
- documentation
- sap
capability:
exposes:
- type: mcp
namespace: shipping-docs
port: 8080
tools:
- name: get-doc-status
description: "Look up the status of shipping documents for a booking."
inputParameters:
- name: booking_ref
in: body
type: string
description: "The booking reference number."
call: "sap.get-doc-status"
with:
booking_id: "{{booking_ref}}"
outputParameters:
- name: bl_status
type: string
mapping: "$.d.BLStatus"
- name: manifest_status
type: string
mapping: "$.d.ManifestStatus"
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_DOC_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: documents
path: "/DocumentSet('{{booking_id}}')"
inputParameters:
- name: booking_id
in: path
operations:
- name: get-doc-status
method: GET
When a new supplier invoice arrives in SAP, matches it against the purchase order, creates a Jira approval task if there is a variance, and notifies finance via Microsoft Teams.
naftiko: "0.5"
info:
label: "Supplier Invoice Processor"
description: "When a new supplier invoice arrives in SAP, matches it against the purchase order, creates a Jira approval task if there is a variance, and notifies finance via Microsoft Teams."
tags:
- finance
- invoicing
- sap
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: invoice-processing
port: 8080
tools:
- name: process-invoice
description: "Match a supplier invoice against its PO and route for approval if variance is detected."
inputParameters:
- name: invoice_number
in: body
type: string
description: "The SAP invoice document number."
- name: po_number
in: body
type: string
description: "The related purchase order number."
steps:
- name: get-invoice
type: call
call: "sap.get-invoice"
with:
invoice_number: "{{invoice_number}}"
- name: get-po
type: call
call: "sap.get-po"
with:
po_number: "{{po_number}}"
- name: create-approval
type: call
call: "jira.create-issue"
with:
project_key: "FIN"
summary: "Invoice variance: {{invoice_number}} vs PO {{po_number}}"
issue_type: "Task"
description: "Invoice amount: {{get-invoice.total_amount}} {{get-invoice.currency}}. PO amount: {{get-po.TotalAmount}}. Variance requires approval."
- name: notify-finance
type: call
call: "msteams.send-message"
with:
channel_id: "finance-approvals"
text: "Invoice {{invoice_number}} for PO {{po_number}} requires approval. Jira: {{create-approval.key}}."
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/API_SUPPLIER_INVOICE_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: invoices
path: "/A_SupplierInvoice('{{invoice_number}}')"
inputParameters:
- name: invoice_number
in: path
operations:
- name: get-invoice
method: GET
- name: purchase-orders
path: "/A_PurchaseOrder('{{po_number}}')"
inputParameters:
- name: po_number
in: path
operations:
- name: get-po
method: GET
- type: http
namespace: jira
baseUri: "https://hapag-lloyd.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Synchronizes end-to-end supply chain visibility by pulling shipment data from SAP, aggregating metrics in Teradata, refreshing the Qlik Sense dashboard, and alerting stakeholders via Microsoft Teams on exceptions.
naftiko: "0.5"
info:
label: "Supply Chain Visibility Dashboard Sync"
description: "Synchronizes end-to-end supply chain visibility by pulling shipment data from SAP, aggregating metrics in Teradata, refreshing the Qlik Sense dashboard, and alerting stakeholders via Microsoft Teams on exceptions."
tags:
- supply-chain
- visibility
- sap
- teradata
- qlik-sense
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: sc-visibility
port: 8080
tools:
- name: sync-visibility-dashboard
description: "Sync supply chain visibility dashboard."
inputParameters:
- name: region
in: body
type: string
description: "The region to sync."
steps:
- name: pull-shipment-data
type: call
call: "sap.get-regional-shipments"
with:
region: "{{region}}"
- name: aggregate-metrics
type: call
call: "teradata.execute-query"
with:
query: "CALL sp_refresh_sc_metrics('{{region}}')"
- name: refresh-dashboard
type: call
call: "qlik.reload-app"
with:
app_id: "sc_visibility_{{region}}"
- name: alert-exceptions
type: call
call: "msteams.send-message"
with:
channel_id: "supply-chain-ops"
text: "SC visibility updated for {{region}}. Active shipments: {{pull-shipment-data.activeCount}}. Exceptions: {{pull-shipment-data.exceptionCount}}."
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_SC_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
- type: http
namespace: teradata
baseUri: "https://hapag-lloyd-teradata.azure.com/api/v1"
authentication:
type: bearer
token: "$secrets.teradata_token"
- type: http
namespace: qlik
baseUri: "https://hapag-lloyd.eu.qlikcloud.com/api/v1"
authentication:
type: bearer
token: "$secrets.qlik_token"
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
Pulls vessel emissions data from SAP, enriches with voyage details, and publishes a sustainability report to Confluence and notifies ESG stakeholders via Microsoft Teams.
naftiko: "0.5"
info:
label: "Sustainability Emissions Report"
description: "Pulls vessel emissions data from SAP, enriches with voyage details, and publishes a sustainability report to Confluence and notifies ESG stakeholders via Microsoft Teams."
tags:
- sustainability
- emissions
- sap
- confluence
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: sustainability-reporting
port: 8080
tools:
- name: generate-emissions-report
description: "Generate a vessel emissions report and publish to Confluence."
inputParameters:
- name: voyage_id
in: body
type: string
description: "The SAP voyage ID."
steps:
- name: get-emissions
type: call
call: "sap.get-emissions"
with:
voyage_id: "{{voyage_id}}"
- name: publish-report
type: call
call: "confluence.create-page"
with:
space_key: "ESG"
title: "Emissions Report: Voyage {{voyage_id}}"
body: "CO2: {{get-emissions.co2_tonnes}} tonnes. SOx: {{get-emissions.sox_tonnes}} tonnes. NOx: {{get-emissions.nox_tonnes}} tonnes. Fuel consumed: {{get-emissions.fuel_mt}} MT."
- name: notify-esg
type: call
call: "msteams.send-message"
with:
channel_id: "esg-reporting"
text: "Emissions report published for voyage {{voyage_id}}. CO2: {{get-emissions.co2_tonnes}}t. Report: {{publish-report.url}}."
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_EMISSIONS_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: emissions
path: "/EmissionsSet('{{voyage_id}}')"
inputParameters:
- name: voyage_id
in: path
operations:
- name: get-emissions
method: GET
- type: http
namespace: confluence
baseUri: "https://hapag-lloyd.atlassian.net/wiki/api/v2"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/pages"
operations:
- name: create-page
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Queries the Teradata cargo data warehouse for historical shipment volumes by trade lane and returns trend data.
naftiko: "0.5"
info:
label: "Teradata Cargo Data Warehouse Query"
description: "Queries the Teradata cargo data warehouse for historical shipment volumes by trade lane and returns trend data."
tags:
- analytics
- data-warehouse
- teradata
capability:
exposes:
- type: mcp
namespace: cargo-dwh
port: 8080
tools:
- name: query-cargo-trends
description: "Query Teradata for historical cargo volume trends."
inputParameters:
- name: trade_lane
in: body
type: string
description: "The trade lane code."
- name: start_date
in: body
type: string
description: "Start date for the trend query (YYYY-MM-DD)."
- name: end_date
in: body
type: string
description: "End date for the trend query (YYYY-MM-DD)."
call: "teradata.query-volumes"
with:
trade_lane: "{{trade_lane}}"
start_date: "{{start_date}}"
end_date: "{{end_date}}"
outputParameters:
- name: data_points
type: array
mapping: "$.results"
- name: total_teu
type: integer
mapping: "$.summary.total_teu"
consumes:
- type: http
namespace: teradata
baseUri: "https://hapag-lloyd-td.teradata.com/api/query/v1"
authentication:
type: bearer
token: "$secrets.teradata_token"
resources:
- name: queries
path: "/execute"
operations:
- name: query-volumes
method: POST
Optimizes terminal berth allocation by analyzing vessel arrival times, coordinating with terminal operators, updating SAP schedules, and notifying operations via Microsoft Teams.
naftiko: "0.5"
info:
label: "Terminal Berth Allocation Optimizer"
description: "Optimizes terminal berth allocation by analyzing vessel arrival times, coordinating with terminal operators, updating SAP schedules, and notifying operations via Microsoft Teams."
tags:
- shipping
- terminal
- optimization
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: berth-allocation
port: 8080
tools:
- name: optimize-berth-allocation
description: "Optimize terminal berth allocation."
inputParameters:
- name: terminal_code
in: body
type: string
description: "The terminal facility code."
- name: date_range
in: body
type: string
description: "The date range for optimization."
steps:
- name: get-vessel-arrivals
type: call
call: "sap.get-terminal-arrivals"
with:
terminal: "{{terminal_code}}"
dates: "{{date_range}}"
- name: optimize-berths
type: call
call: "optimization.allocate-berths"
with:
arrivals: "{{get-vessel-arrivals.vesselList}}"
capacity: "{{get-vessel-arrivals.berthCount}}"
- name: update-schedules
type: call
call: "sap.update-berth-assignments"
with:
terminal: "{{terminal_code}}"
assignments: "{{optimize-berths.allocation}}"
- name: notify-operations
type: call
call: "msteams.send-message"
with:
channel_id: "terminal-operations"
text: "Berth allocation optimized for {{terminal_code}}. Period: {{date_range}}. Vessels: {{get-vessel-arrivals.count}}. Utilization: {{optimize-berths.utilization}}%."
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_TERMINAL_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
- type: http
namespace: optimization
baseUri: "https://hapag-lloyd-optimization.azure.com/api/v1"
authentication:
type: bearer
token: "$secrets.optimization_token"
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
Screens bookings against sanctioned entities, validates export licenses, stores compliance records in SharePoint, and escalates flagged items via ServiceNow.
naftiko: "0.5"
info:
label: "Trade Compliance Screening Pipeline"
description: "Screens bookings against sanctioned entities, validates export licenses, stores compliance records in SharePoint, and escalates flagged items via ServiceNow."
tags:
- compliance
- sanctions
- trade
- sharepoint
- servicenow
capability:
exposes:
- type: mcp
namespace: trade-compliance
port: 8080
tools:
- name: screen-trade-compliance
description: "Screen bookings for trade compliance."
inputParameters:
- name: booking_ref
in: body
type: string
description: "The booking reference."
- name: shipper_name
in: body
type: string
description: "The shipper entity name."
steps:
- name: screen-sanctions
type: call
call: "compliance.screen-entity"
with:
name: "{{shipper_name}}"
booking: "{{booking_ref}}"
- name: validate-license
type: call
call: "compliance.check-export-license"
with:
booking: "{{booking_ref}}"
- name: store-record
type: call
call: "sharepoint.create-file"
with:
site_id: "compliance_site"
file_path: "Screening/{{booking_ref}}_screening.pdf"
- name: escalate-if-flagged
type: call
call: "servicenow.create-incident"
with:
short_description: "Trade compliance flag: {{booking_ref}}"
description: "Booking {{booking_ref}} flagged. Shipper: {{shipper_name}}. Score: {{screen-sanctions.riskScore}}."
consumes:
- type: http
namespace: compliance
baseUri: "https://hapag-lloyd-compliance.azure.com/api/v1"
authentication:
type: bearer
token: "$secrets.compliance_api_token"
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
- type: http
namespace: servicenow
baseUri: "https://hapag-lloyd.service-now.com/api/now/table/incident"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
Combines SAP shipping data with Google Analytics web traffic for a trade lane, pushes consolidated metrics to Power BI, and posts a weekly summary to Microsoft Teams.
naftiko: "0.5"
info:
label: "Trade Lane Performance Analyzer"
description: "Combines SAP shipping data with Google Analytics web traffic for a trade lane, pushes consolidated metrics to Power BI, and posts a weekly summary to Microsoft Teams."
tags:
- analytics
- trade-lane
- sap
- google-analytics
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: trade-lane-analysis
port: 8080
tools:
- name: analyze-trade-lane
description: "Analyze trade lane performance by combining shipping and web analytics data."
inputParameters:
- name: trade_lane
in: body
type: string
description: "The trade lane code."
- name: period
in: body
type: string
description: "The analysis period."
steps:
- name: get-shipping-data
type: call
call: "sap.get-trade-lane-metrics"
with:
trade_lane: "{{trade_lane}}"
period: "{{period}}"
- name: get-web-traffic
type: call
call: "ga.get-trade-lane-traffic"
with:
trade_lane: "{{trade_lane}}"
- name: push-to-bi
type: call
call: "powerbi.push-rows"
with:
dataset_id: "trade_lane_ds"
table_name: "Performance"
rows:
- trade_lane: "{{trade_lane}}"
teu_volume: "{{get-shipping-data.teu_volume}}"
on_time_pct: "{{get-shipping-data.on_time_pct}}"
web_inquiries: "{{get-web-traffic.inquiry_count}}"
- name: post-summary
type: call
call: "msteams.send-message"
with:
channel_id: "trade-lane-ops"
text: "Trade lane {{trade_lane}} ({{period}}): {{get-shipping-data.teu_volume}} TEU, {{get-shipping-data.on_time_pct}}% on-time, {{get-web-traffic.inquiry_count}} web inquiries."
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_TRADE_LANE_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: trade-lanes
path: "/TradeLaneMetricSet(TradeLane='{{trade_lane}}',Period='{{period}}')"
inputParameters:
- name: trade_lane
in: path
- name: period
in: path
operations:
- name: get-trade-lane-metrics
method: GET
- type: http
namespace: ga
baseUri: "https://analyticsdata.googleapis.com/v1beta"
authentication:
type: bearer
token: "$secrets.google_analytics_token"
resources:
- name: reports
path: "/properties/{{property_id}}:runReport"
inputParameters:
- name: property_id
in: path
operations:
- name: get-trade-lane-traffic
method: POST
- 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}}/tables/{{table_name}}/rows"
inputParameters:
- name: dataset_id
in: path
- name: table_name
in: path
operations:
- name: push-rows
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Routes vendor invoices through approval workflow in SAP, validates against purchase orders, posts to the finance Microsoft Teams channel, and archives in Box.
naftiko: "0.5"
info:
label: "Vendor Payment Approval Pipeline"
description: "Routes vendor invoices through approval workflow in SAP, validates against purchase orders, posts to the finance Microsoft Teams channel, and archives in Box."
tags:
- procurement
- finance
- sap
- microsoft-teams
- box
capability:
exposes:
- type: mcp
namespace: vendor-payment
port: 8080
tools:
- name: approve-vendor-payment
description: "Process vendor payment approval."
inputParameters:
- name: invoice_number
in: body
type: string
description: "The vendor invoice number."
- name: vendor_id
in: body
type: string
description: "The SAP vendor ID."
steps:
- name: get-invoice
type: call
call: "sap.get-invoice"
with:
invoice: "{{invoice_number}}"
vendor: "{{vendor_id}}"
- name: validate-po-match
type: call
call: "sap.match-po"
with:
invoice: "{{invoice_number}}"
po: "{{get-invoice.poNumber}}"
- name: notify-finance
type: call
call: "msteams.send-message"
with:
channel_id: "finance-approvals"
text: "Invoice {{invoice_number}} from {{get-invoice.vendorName}} for {{get-invoice.amount}} {{get-invoice.currency}} matched to PO {{get-invoice.poNumber}}."
- name: archive-invoice
type: call
call: "box.upload-file"
with:
folder_id: "vendor_invoices"
filename: "{{invoice_number}}.pdf"
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZFI_INVOICE_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
- type: http
namespace: box
baseUri: "https://api.box.com/2.0"
authentication:
type: bearer
token: "$secrets.box_token"
Retrieves current bunker fuel consumption metrics for a vessel from the fleet management system.
naftiko: "0.5"
info:
label: "Vessel Bunker Consumption Lookup"
description: "Retrieves current bunker fuel consumption metrics for a vessel from the fleet management system."
tags:
- shipping
- fleet
- bunker
capability:
exposes:
- type: mcp
namespace: fleet-management
port: 8080
tools:
- name: get-bunker-consumption
description: "Look up bunker fuel consumption for a specific vessel."
inputParameters:
- name: vessel_id
in: body
type: string
description: "The IMO number of the vessel."
call: "fleet.get-bunker"
with:
vessel: "{{vessel_id}}"
outputParameters:
- name: daily_consumption
type: number
mapping: "$.dailyConsumption"
- name: fuel_type
type: string
mapping: "$.fuelType"
consumes:
- type: http
namespace: fleet
baseUri: "https://hapag-lloyd-fleet.azure.com/api/v1"
authentication:
type: bearer
token: "$secrets.fleet_token"
resources:
- name: vessel-bunker
path: "/vessels/{{vessel}}/bunker"
inputParameters:
- name: vessel
in: path
operations:
- name: get-bunker
method: GET
Plans crew rotations by checking certification status in SAP, booking travel via SAP Concur, notifying crew via Microsoft Outlook, and updating the crew management dashboard in Google Sheets.
naftiko: "0.5"
info:
label: "Vessel Crew Rotation Planner"
description: "Plans crew rotations by checking certification status in SAP, booking travel via SAP Concur, notifying crew via Microsoft Outlook, and updating the crew management dashboard in Google Sheets."
tags:
- maritime
- crew
- sap
- sap-concur
- microsoft-outlook
- google-sheets
capability:
exposes:
- type: mcp
namespace: crew-rotation
port: 8080
tools:
- name: plan-crew-rotation
description: "Plan vessel crew rotation."
inputParameters:
- name: vessel_id
in: body
type: string
description: "The vessel IMO number."
- name: rotation_date
in: body
type: string
description: "The planned rotation date."
steps:
- name: get-crew-status
type: call
call: "sap.get-crew-certs"
with:
vessel: "{{vessel_id}}"
- name: book-travel
type: call
call: "concur.create-trip"
with:
travelers: "{{get-crew-status.rotatingCrew}}"
date: "{{rotation_date}}"
destination: "{{get-crew-status.nextPort}}"
- name: notify-crew
type: call
call: "outlook.send-email"
with:
to: "{{get-crew-status.crewEmails}}"
subject: "Crew Rotation - {{vessel_id}} - {{rotation_date}}"
body: "Your rotation is scheduled for {{rotation_date}} at {{get-crew-status.nextPort}}. Travel booking: {{book-travel.itineraryRef}}."
- name: update-dashboard
type: call
call: "gsheets.update-range"
with:
spreadsheet_id: "crew_dashboard"
range: "Rotations!A2"
values: "{{vessel_id}},{{rotation_date}},{{get-crew-status.rotatingCount}},{{book-travel.itineraryRef}}"
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_CREW_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
- type: http
namespace: concur
baseUri: "https://us.api.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_token"
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0/me"
authentication:
type: bearer
token: "$secrets.msgraph_token"
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4/spreadsheets"
authentication:
type: bearer
token: "$secrets.google_token"
Manages vessel bunker fuel procurement by getting consumption forecasts from SAP, sourcing quotes from suppliers, placing orders, and notifying the procurement team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Vessel Fuel Procurement Pipeline"
description: "Manages vessel bunker fuel procurement by getting consumption forecasts from SAP, sourcing quotes from suppliers, placing orders, and notifying the procurement team via Microsoft Teams."
tags:
- procurement
- bunker
- fuel
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: fuel-procurement
port: 8080
tools:
- name: procure-bunker-fuel
description: "Manage bunker fuel procurement."
inputParameters:
- name: vessel_id
in: body
type: string
description: "The vessel IMO number."
- name: port_code
in: body
type: string
description: "The bunkering port."
steps:
- name: get-forecast
type: call
call: "sap.get-fuel-forecast"
with:
vessel: "{{vessel_id}}"
- name: source-quotes
type: call
call: "procurement.get-bunker-quotes"
with:
port: "{{port_code}}"
quantity: "{{get-forecast.requiredTonnes}}"
fuel_type: "{{get-forecast.fuelType}}"
- name: place-order
type: call
call: "sap.create-bunker-po"
with:
vessel: "{{vessel_id}}"
supplier: "{{source-quotes.bestSupplier}}"
quantity: "{{get-forecast.requiredTonnes}}"
price: "{{source-quotes.bestPrice}}"
- name: notify-procurement
type: call
call: "msteams.send-message"
with:
channel_id: "procurement-bunker"
text: "Bunker order placed for {{vessel_id}} at {{port_code}}. Quantity: {{get-forecast.requiredTonnes}} MT. Supplier: {{source-quotes.bestSupplier}}. Price: {{source-quotes.bestPrice}}/MT."
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZMM_BUNKER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
- type: http
namespace: procurement
baseUri: "https://hapag-lloyd-procurement.azure.com/api/v1"
authentication:
type: bearer
token: "$secrets.procurement_token"
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
When a vessel schedule changes, updates all affected bookings in SAP, refreshes the Google Sheets operational dashboard, and notifies the planning team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Vessel Schedule Change Propagator"
description: "When a vessel schedule changes, updates all affected bookings in SAP, refreshes the Google Sheets operational dashboard, and notifies the planning team via Microsoft Teams."
tags:
- shipping
- schedule
- sap
- google-sheets
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: schedule-change
port: 8080
tools:
- name: propagate-schedule-change
description: "Propagate vessel schedule changes across systems."
inputParameters:
- name: vessel_id
in: body
type: string
description: "The vessel IMO number."
- name: new_schedule
in: body
type: string
description: "The updated schedule JSON."
steps:
- name: update-bookings
type: call
call: "sap.batch-update-schedule"
with:
vessel: "{{vessel_id}}"
schedule: "{{new_schedule}}"
- name: refresh-dashboard
type: call
call: "gsheets.update-range"
with:
spreadsheet_id: "ops_dashboard"
range: "Schedules!A2"
values: "{{update-bookings.summary}}"
- name: notify-planning
type: call
call: "msteams.send-message"
with:
channel_id: "planning-team"
text: "Vessel {{vessel_id}} schedule updated. {{update-bookings.affectedCount}} bookings modified."
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_SCHEDULE_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4/spreadsheets"
authentication:
type: bearer
token: "$secrets.google_token"
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
Retrieves the current vessel schedule from SAP by vessel code, returning port rotation, ETAs, and cargo load percentages.
naftiko: "0.5"
info:
label: "Vessel Schedule Lookup"
description: "Retrieves the current vessel schedule from SAP by vessel code, returning port rotation, ETAs, and cargo load percentages."
tags:
- shipping
- vessel
- sap
- schedule
capability:
exposes:
- type: mcp
namespace: vessel-schedule
port: 8080
tools:
- name: get-vessel-schedule
description: "Look up a vessel schedule by vessel code. Returns port rotation with ETAs and cargo utilization."
inputParameters:
- name: vessel_code
in: body
type: string
description: "The IMO vessel code."
call: "sap.get-vessel-schedule"
with:
vessel_code: "{{vessel_code}}"
outputParameters:
- name: vessel_name
type: string
mapping: "$.d.VesselName"
- name: port_rotation
type: array
mapping: "$.d.PortRotation.results"
- name: utilization_pct
type: string
mapping: "$.d.CargoUtilization"
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_VESSEL_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: vessels
path: "/VesselScheduleSet('{{vessel_code}}')"
inputParameters:
- name: vessel_code
in: path
operations:
- name: get-vessel-schedule
method: GET
Pulls voyage cost actuals from SAP, compares against budget in Microsoft Excel via SharePoint, and posts a variance summary to a Confluence page.
naftiko: "0.5"
info:
label: "Voyage Cost Reconciliation"
description: "Pulls voyage cost actuals from SAP, compares against budget in Microsoft Excel via SharePoint, and posts a variance summary to a Confluence page."
tags:
- finance
- voyage-cost
- sap
- sharepoint
- confluence
capability:
exposes:
- type: mcp
namespace: voyage-costs
port: 8080
tools:
- name: reconcile-voyage-costs
description: "Compare actual voyage costs from SAP against budget and publish a variance report to Confluence."
inputParameters:
- name: voyage_id
in: body
type: string
description: "The SAP voyage identifier."
steps:
- name: get-actuals
type: call
call: "sap.get-voyage-costs"
with:
voyage_id: "{{voyage_id}}"
- name: get-budget
type: call
call: "sharepoint.get-file"
with:
site_id: "finance_site"
file_path: "VoyageBudgets/{{voyage_id}}_budget.xlsx"
- name: publish-report
type: call
call: "confluence.create-page"
with:
space_key: "FIN"
title: "Voyage Cost Reconciliation: {{voyage_id}}"
body: "Actual fuel: {{get-actuals.fuel_cost}}. Actual port: {{get-actuals.port_cost}}. Total actual: {{get-actuals.total_cost}}. Budget: {{get-budget.total_budget}}."
consumes:
- type: http
namespace: sap
baseUri: "https://hapag-lloyd-s4.sap.com/sap/opu/odata/sap/ZSH_VOYAGE_COST_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: voyage-costs
path: "/VoyageCostSet('{{voyage_id}}')"
inputParameters:
- name: voyage_id
in: path
operations:
- name: get-voyage-costs
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:/{{file_path}}:/content"
inputParameters:
- name: site_id
in: path
- name: file_path
in: path
operations:
- name: get-file
method: GET
- type: http
namespace: confluence
baseUri: "https://hapag-lloyd.atlassian.net/wiki/api/v2"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/pages"
operations:
- name: create-page
method: POST
Calculates warehouse storage fees based on container dwell time and location.
naftiko: "0.5"
info:
label: "Warehouse Storage Fee Calculator"
description: "Calculates warehouse storage fees based on container dwell time and location."
tags:
- logistics
- warehouse
- fees
capability:
exposes:
- type: mcp
namespace: warehouse-fees
port: 8080
tools:
- name: calculate-storage-fee
description: "Calculate storage fees for containers at a warehouse."
inputParameters:
- name: container_number
in: body
type: string
description: "The container number."
- name: warehouse_code
in: body
type: string
description: "The warehouse facility code."
call: "warehouse.calc-fee"
with:
container: "{{container_number}}"
warehouse: "{{warehouse_code}}"
outputParameters:
- name: daily_rate
type: number
mapping: "$.dailyRate"
- name: total_days
type: integer
mapping: "$.totalDays"
- name: total_fee
type: number
mapping: "$.totalFee"
consumes:
- type: http
namespace: warehouse
baseUri: "https://hapag-lloyd-warehouse.azure.com/api/v1"
authentication:
type: bearer
token: "$secrets.warehouse_token"
resources:
- name: fee-calculator
path: "/fees/calculate"
inputParameters:
- name: container
in: query
- name: warehouse
in: query
operations:
- name: calc-fee
method: GET
Retrieves current headcount data from Workday by department and returns employee count, open positions, and turnover rate.
naftiko: "0.5"
info:
label: "Workday Headcount Report"
description: "Retrieves current headcount data from Workday by department and returns employee count, open positions, and turnover rate."
tags:
- hr
- workforce
- workday
- reporting
capability:
exposes:
- type: mcp
namespace: hr-reporting
port: 8080
tools:
- name: get-headcount
description: "Get headcount metrics for a department from Workday."
inputParameters:
- name: department_id
in: body
type: string
description: "The Workday department ID."
call: "workday.get-headcount"
with:
department_id: "{{department_id}}"
outputParameters:
- name: employee_count
type: integer
mapping: "$.total_count"
- name: open_positions
type: integer
mapping: "$.open_positions"
- name: turnover_rate
type: string
mapping: "$.turnover_rate"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: headcount
path: "/departments/{{department_id}}/headcount"
inputParameters:
- name: department_id
in: path
operations:
- name: get-headcount
method: GET
Creates a Zoom meeting for a given topic and participants, then sends calendar invites via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Zoom Meeting Scheduler"
description: "Creates a Zoom meeting for a given topic and participants, then sends calendar invites via Microsoft Outlook."
tags:
- communications
- meetings
- zoom
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: meeting-scheduler
port: 8080
tools:
- name: schedule-meeting
description: "Create a Zoom meeting and send calendar invites."
inputParameters:
- name: topic
in: body
type: string
description: "The meeting topic."
- name: start_time
in: body
type: string
description: "Start time in ISO 8601 format."
- name: duration_minutes
in: body
type: integer
description: "Meeting duration in minutes."
- name: attendee_emails
in: body
type: array
description: "List of attendee email addresses."
steps:
- name: create-meeting
type: call
call: "zoom.create-meeting"
with:
topic: "{{topic}}"
start_time: "{{start_time}}"
duration: "{{duration_minutes}}"
- name: send-invite
type: call
call: "outlook.send-email"
with:
to: "{{attendee_emails}}"
subject: "Meeting: {{topic}}"
body: "You are invited to a Zoom meeting. Topic: {{topic}}. Time: {{start_time}}. Join: {{create-meeting.join_url}}"
consumes:
- type: http
namespace: zoom
baseUri: "https://api.zoom.us/v2"
authentication:
type: bearer
token: "$secrets.zoom_token"
resources:
- name: meetings
path: "/users/me/meetings"
operations:
- name: create-meeting
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0/me"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/sendMail"
operations:
- name: send-email
method: POST