CSX Corporation Capabilities
Naftiko 0.5 capability definitions for CSX Corporation - 100 capabilities showing integration workflows and service orchestrations.
Reviews access at CSX via Okta, IAM, and Jira.
naftiko: "0.5"
info:
label: "Access Review Pipeline"
description: "Reviews access at CSX via Okta, IAM, and Jira."
tags:
- security
- access-management
- okta
- compliance
capability:
exposes:
- type: mcp
namespace: access-rev
port: 8080
tools:
- name: review
description: "Review access at CSX."
inputParameters:
- name: dept
in: body
type: string
description: "Department."
steps:
- name: ent
type: call
call: "okta.get-users"
with:
dept: "{{dept}}"
- name: compare
type: call
call: "iam.compare"
with:
data: "{{ent.data}}"
- name: flag
type: call
call: "iam.flag"
with:
violations: "{{compare.violations}}"
- name: fix
type: call
call: "jira.create-issue"
with:
project: "IAM"
summary: "Violations in {{dept}}"
consumes:
- type: http
namespace: okta
baseUri: "https://csx.com.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_api_token"
resources:
- name: users
path: "/users"
operations:
- name: get-users
method: GET
- type: http
namespace: iam
baseUri: "https://iam.csx.com/api/v1"
authentication:
type: bearer
token: "$secrets.iam_token"
resources:
- name: reviews
path: "/compare"
operations:
- name: compare
method: POST
- type: http
namespace: jira
baseUri: "https://csx.com.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Manages API deprecation at CSX via consumer identification, notices, and tracking.
naftiko: "0.5"
info:
label: "API Deprecation Pipeline"
description: "Manages API deprecation at CSX via consumer identification, notices, and tracking."
tags:
- api-management
- communications
- governance
capability:
exposes:
- type: mcp
namespace: api-sunset
port: 8080
tools:
- name: notify-sunset
description: "Manage API sunset at CSX."
inputParameters:
- name: api
in: body
type: string
description: "API name."
- name: date
in: body
type: string
description: "Sunset date."
steps:
- name: consumers
type: call
call: "api-gw.consumers"
with:
api: "{{api}}"
- name: notify
type: call
call: "email.batch"
with:
to: "{{consumers.emails}}"
subject: "{{api}} sunset: {{date}}"
- name: track
type: call
call: "analytics.usage"
with:
api: "{{api}}"
- name: ticket
type: call
call: "jira.create-issue"
with:
project: "API"
summary: "Sunset {{api}} by {{date}}"
consumes:
- type: http
namespace: api-gw
baseUri: "https://api-gw.csx.com/api/v1"
authentication:
type: bearer
token: "$secrets.api_gw_token"
resources:
- name: consumers
path: "/apis/{{api}}/consumers"
inputParameters:
- name: api
in: path
operations:
- name: consumers
method: GET
- type: http
namespace: email
baseUri: "https://email.csx.com/api/v1"
authentication:
type: bearer
token: "$secrets.email_token"
resources:
- name: batch
path: "/send-batch"
operations:
- name: batch
method: POST
- type: http
namespace: analytics
baseUri: "https://analytics.csx.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: usage
path: "/api-usage"
operations:
- name: usage
method: GET
- type: http
namespace: jira
baseUri: "https://csx.com.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Checks build at CSX.
naftiko: "0.5"
info:
label: "Azure DevOps Build Check"
description: "Checks build at CSX."
tags:
- devops
- azure-devops
- ci-cd
capability:
exposes:
- type: mcp
namespace: azdo-build
port: 8080
tools:
- name: check-build
description: "Check build at CSX."
inputParameters:
- name: project
in: body
type: string
description: "Project."
- name: build_id
in: body
type: string
description: "Build ID."
call: "azdo.get-build"
with:
project: "{{project}}"
build_id: "{{build_id}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: azdo
baseUri: "https://dev.azure.com/csx.com"
authentication:
type: bearer
token: "$secrets.azdo_token"
resources:
- name: builds
path: "/{{project}}/_apis/build/builds/{{build_id}}"
inputParameters:
- name: project
in: path
- name: build_id
in: path
operations:
- name: get-build
method: GET
Verifies backups at CSX.
naftiko: "0.5"
info:
label: "Backup Verification Pipeline"
description: "Verifies backups at CSX."
tags:
- database
- backup
- operations
capability:
exposes:
- type: mcp
namespace: backup-verify
port: 8080
tools:
- name: verify-backups
description: "Verify backups at CSX."
inputParameters:
- name: db
in: body
type: string
description: "Database."
- name: date
in: body
type: string
description: "Backup date."
steps:
- name: status
type: call
call: "backup.get-status"
with:
db: "{{db}}"
date: "{{date}}"
- name: verify
type: call
call: "backup.verify"
with:
id: "{{status.backup_id}}"
- name: log
type: call
call: "snowflake.query"
with:
query: "INSERT INTO backup_log VALUES ('{{db}}','{{date}}','{{verify.status}}')"
- name: alert
type: call
call: "slack.post-message"
with:
channel: "#dba"
text: "Backup {{db}}: {{verify.status}}"
consumes:
- type: http
namespace: backup
baseUri: "https://backup.csx.com/api/v1"
authentication:
type: bearer
token: "$secrets.backup_token"
resources:
- name: backups
path: "/databases/{{db}}/status"
inputParameters:
- name: db
in: path
operations:
- name: get-status
method: GET
- type: http
namespace: snowflake
baseUri: "https://csx.com.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a bridge inspection is completed, uploads the report to SharePoint, updates the bridge condition rating in the asset management system, and creates a follow-up task in ServiceNow if remediation is needed.
naftiko: "0.5"
info:
label: "Bridge Inspection Report Pipeline"
description: "When a bridge inspection is completed, uploads the report to SharePoint, updates the bridge condition rating in the asset management system, and creates a follow-up task in ServiceNow if remediation is needed."
tags:
- bridge-engineering
- inspection
- sharepoint
- servicenow
- asset-management
capability:
exposes:
- type: mcp
namespace: bridge-engineering
port: 8080
tools:
- name: process-bridge-inspection
description: "Given inspection results, upload report, update asset condition, and create remediation tasks."
inputParameters:
- name: bridge_id
in: body
type: string
description: "The bridge identifier."
- name: condition_rating
in: body
type: number
description: "The NBI condition rating (0-9)."
- name: inspector_name
in: body
type: string
description: "The inspector's name."
- name: report_content
in: body
type: string
description: "The inspection report content."
steps:
- name: upload-report
type: call
call: "sharepoint.upload-file"
with:
site_id: "bridge_engineering"
file_path: "Inspections/{{bridge_id}}/latest_report.pdf"
content: "{{report_content}}"
- name: update-condition
type: call
call: "asset-mgmt.update-bridge-condition"
with:
bridge_id: "{{bridge_id}}"
condition_rating: "{{condition_rating}}"
inspector: "{{inspector_name}}"
- name: create-remediation
type: call
call: "servicenow.create-task"
with:
short_description: "Bridge remediation review: {{bridge_id}} rated {{condition_rating}}"
category: "bridge_maintenance"
description: "Bridge {{bridge_id}} inspected by {{inspector_name}}. Condition: {{condition_rating}}/9. Report: {{upload-report.url}}."
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: upload-file
method: PUT
- type: http
namespace: asset-mgmt
baseUri: "https://api.internal.csx.com/assets/v1"
authentication:
type: bearer
token: "$secrets.asset_token"
resources:
- name: bridges
path: "/bridges/{{bridge_id}}/condition"
inputParameters:
- name: bridge_id
in: path
operations:
- name: update-bridge-condition
method: PATCH
- type: http
namespace: servicenow
baseUri: "https://csx.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/sc_task"
operations:
- name: create-task
method: POST
Analyzes budget variance at CSX via Oracle, Workday, and Slack.
naftiko: "0.5"
info:
label: "Budget Variance Pipeline"
description: "Analyzes budget variance at CSX via Oracle, Workday, and Slack."
tags:
- finance
- budget
- oracle
- workday
capability:
exposes:
- type: mcp
namespace: budget-var
port: 8080
tools:
- name: analyze-variance
description: "Check budget variance at CSX."
inputParameters:
- name: cc
in: body
type: string
description: "Cost center."
- name: period
in: body
type: string
description: "Period."
steps:
- name: actuals
type: call
call: "oracle.get-actuals"
with:
cc: "{{cc}}"
period: "{{period}}"
- name: budget
type: call
call: "workday.get-budget"
with:
cc: "{{cc}}"
- name: compute
type: call
call: "analytics.variance"
with:
a: "{{actuals.total}}"
b: "{{budget.total}}"
- name: alert
type: call
call: "slack.post-message"
with:
channel: "#finance"
text: "Variance {{cc}}: ${{compute.variance}}"
consumes:
- type: http
namespace: oracle
baseUri: "https://oracle.csx.com/api/v1"
authentication:
type: bearer
token: "$secrets.oracle_token"
resources:
- name: fin
path: "/actuals"
operations:
- name: get-actuals
method: GET
- type: http
namespace: workday
baseUri: "https://wd5.csx.com/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: budgets
path: "/budgets"
operations:
- name: get-budget
method: GET
- type: http
namespace: analytics
baseUri: "https://analytics.csx.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: var
path: "/compute"
operations:
- name: variance
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Coordinates bulk commodity loading by checking railcar availability, scheduling loading windows, and notifying the customer.
naftiko: "0.5"
info:
label: "Bulk Commodity Loading Pipeline"
description: "Coordinates bulk commodity loading by checking railcar availability, scheduling loading windows, and notifying the customer."
tags: [bulk-commodity, loading, scheduling, customer-notification]
capability:
exposes:
- type: mcp
namespace: bulk-ops
port: 8080
tools:
- name: schedule-bulk-loading
description: "Check car availability, schedule loading, and notify customer."
inputParameters:
- name: customer_id
in: body
type: string
description: "The customer ID."
- name: commodity_code
in: body
type: string
description: "STCC commodity code."
- name: car_count
in: body
type: number
description: "Number of railcars needed."
- name: loading_date
in: body
type: string
description: "Requested loading date."
steps:
- name: check-cars
type: call
call: "car-mgmt.check-availability"
with: { commodity: "{{commodity_code}}", count: "{{car_count}}", location: "{{customer_id}}" }
- name: schedule-loading
type: call
call: "dispatch.schedule-placement"
with: { customer_id: "{{customer_id}}", car_count: "{{car_count}}", date: "{{loading_date}}" }
- name: notify-customer
type: call
call: "email-service.send-loading-notice"
with: { customer_id: "{{customer_id}}", cars_assigned: "{{check-cars.assigned_count}}", placement_date: "{{schedule-loading.placement_date}}" }
consumes:
- type: http
namespace: car-mgmt
baseUri: "https://api.internal.csx.com/car-management/v1"
authentication: { type: bearer, token: "$secrets.car_mgmt_token" }
resources:
- name: availability
path: "/availability"
operations: [{ name: check-availability, method: GET }]
- type: http
namespace: dispatch
baseUri: "https://api.internal.csx.com/dispatch/v1"
authentication: { type: bearer, token: "$secrets.dispatch_token" }
resources:
- name: placements
path: "/placements"
operations: [{ name: schedule-placement, method: POST }]
- type: http
namespace: email-service
baseUri: "https://api.internal.csx.com/email/v1"
authentication: { type: bearer, token: "$secrets.email_token" }
resources:
- name: loading-notices
path: "/loading-notices"
operations: [{ name: send-loading-notice, method: POST }]
Plans capacity at CSX by collecting utilization and forecasting.
naftiko: "0.5"
info:
label: "Capacity Planning Pipeline"
description: "Plans capacity at CSX by collecting utilization and forecasting."
tags:
- infrastructure
- capacity-planning
- forecasting
capability:
exposes:
- type: mcp
namespace: capacity
port: 8080
tools:
- name: plan-capacity
description: "Plan capacity at CSX."
inputParameters:
- name: resource
in: body
type: string
description: "Resource type."
- name: months
in: body
type: number
description: "Forecast months."
steps:
- name: util
type: call
call: "monitoring.get-util"
with:
resource: "{{resource}}"
- name: forecast
type: call
call: "analytics.forecast"
with:
current: "{{util.pct}}"
months: "{{months}}"
- name: procure
type: call
call: "servicenow.create-request"
with:
type: "capacity"
resource: "{{resource}}"
- name: dashboard
type: call
call: "power-bi.refresh"
with:
dataset: "capacity"
consumes:
- type: http
namespace: monitoring
baseUri: "https://monitoring.csx.com/api/v1"
authentication:
type: bearer
token: "$secrets.monitoring_token"
resources:
- name: util
path: "/resources/{{resource}}/util"
inputParameters:
- name: resource
in: path
operations:
- name: get-util
method: GET
- type: http
namespace: analytics
baseUri: "https://analytics.csx.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: forecast
path: "/demand"
operations:
- name: forecast
method: POST
- type: http
namespace: servicenow
baseUri: "https://csx.com.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: requests
path: "/table/sc_request"
operations:
- name: create-request
method: POST
- type: http
namespace: power-bi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.power_bi_token"
resources:
- name: datasets
path: "/datasets/{{dataset}}/refreshes"
inputParameters:
- name: dataset
in: path
operations:
- name: refresh
method: POST
Monitors cert expiry at CSX.
naftiko: "0.5"
info:
label: "Certificate Expiry Pipeline"
description: "Monitors cert expiry at CSX."
tags:
- security
- certificates
- monitoring
capability:
exposes:
- type: mcp
namespace: cert-monitor
port: 8080
tools:
- name: check-certs
description: "Monitor certs at CSX."
inputParameters:
- name: domains
in: body
type: string
description: "Domains to check."
steps:
- name: scan
type: call
call: "cert-scanner.scan"
with:
domains: "{{domains}}"
- name: filter
type: call
call: "analytics.filter-expiring"
with:
certs: "{{scan.results}}"
- name: ticket
type: call
call: "jira.create-issue"
with:
project: "SEC"
summary: "{{filter.count}} certs expiring"
- name: alert
type: call
call: "slack.post-message"
with:
channel: "#security"
text: "Cert alert: {{filter.count}} expiring"
consumes:
- type: http
namespace: cert-scanner
baseUri: "https://certs.csx.com/api/v1"
authentication:
type: bearer
token: "$secrets.cert_token"
resources:
- name: scans
path: "/scan"
operations:
- name: scan
method: POST
- type: http
namespace: jira
baseUri: "https://csx.com.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Routes changes at CSX through ServiceNow and CAB approval.
naftiko: "0.5"
info:
label: "Change Management Pipeline"
description: "Routes changes at CSX through ServiceNow and CAB approval."
tags:
- change-management
- servicenow
- itil
capability:
exposes:
- type: mcp
namespace: change-mgmt
port: 8080
tools:
- name: process-change
description: "Process changes at CSX."
inputParameters:
- name: change_id
in: body
type: string
description: "Change ID."
- name: date
in: body
type: string
description: "Date."
steps:
- name: get
type: call
call: "servicenow.get-change"
with:
id: "{{change_id}}"
- name: conflicts
type: call
call: "servicenow.check-conflicts"
with:
date: "{{date}}"
- name: submit
type: call
call: "servicenow.update"
with:
id: "{{change_id}}"
state: "approval"
- name: notify
type: call
call: "email.send"
with:
to: "cab@co.com"
subject: "CAB: {{change_id}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://csx.com.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: changes
path: "/table/change_request/{{id}}"
inputParameters:
- name: id
in: path
operations:
- name: get-change
method: GET
- type: http
namespace: email
baseUri: "https://email.csx.com/api/v1"
authentication:
type: bearer
token: "$secrets.email_token"
resources:
- name: messages
path: "/send"
operations:
- name: send
method: POST
Optimizes cloud costs at CSX via Azure, FinOps, Jira, and Power BI.
naftiko: "0.5"
info:
label: "Cloud Cost Optimization Pipeline"
description: "Optimizes cloud costs at CSX via Azure, FinOps, Jira, and Power BI."
tags:
- cloud
- cost-management
- finops
capability:
exposes:
- type: mcp
namespace: cloud-opt
port: 8080
tools:
- name: optimize
description: "Optimize cloud costs at CSX."
inputParameters:
- name: provider
in: body
type: string
description: "Provider."
- name: range
in: body
type: string
description: "Range."
steps:
- name: spend
type: call
call: "cloud.get-costs"
with:
provider: "{{provider}}"
range: "{{range}}"
- name: savings
type: call
call: "finops.analyze"
with:
data: "{{spend.data}}"
- name: action
type: call
call: "jira.create-issue"
with:
project: "FINOPS"
summary: "Save ${{savings.potential}}"
- name: report
type: call
call: "power-bi.refresh"
with:
dataset: "cloud"
consumes:
- type: http
namespace: cloud
baseUri: "https://management.azure.com"
authentication:
type: bearer
token: "$secrets.azure_token"
resources:
- name: costs
path: "/providers/Microsoft.CostManagement/query"
operations:
- name: get-costs
method: POST
- type: http
namespace: finops
baseUri: "https://finops.csx.com/api/v1"
authentication:
type: bearer
token: "$secrets.finops_token"
resources:
- name: analysis
path: "/savings"
operations:
- name: analyze
method: POST
- type: http
namespace: jira
baseUri: "https://csx.com.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: power-bi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.power_bi_token"
resources:
- name: datasets
path: "/datasets/{{dataset}}/refreshes"
inputParameters:
- name: dataset
in: path
operations:
- name: refresh
method: POST
Searches Confluence at CSX.
naftiko: "0.5"
info:
label: "Confluence Article Search"
description: "Searches Confluence at CSX."
tags:
- knowledge-management
- confluence
- documentation
capability:
exposes:
- type: mcp
namespace: confluence-search
port: 8080
tools:
- name: search-articles
description: "Search Confluence at CSX."
inputParameters:
- name: query
in: body
type: string
description: "Query."
call: "confluence.search"
with:
query: "{{query}}"
outputParameters:
- name: title
type: string
mapping: "$.results[0].title"
consumes:
- type: http
namespace: confluence
baseUri: "https://csx.com.atlassian.net/wiki/rest/api"
authentication:
type: bearer
token: "$secrets.confluence_token"
resources:
- name: content
path: "/content/search"
operations:
- name: search
method: GET
Tracks contract renewals at CSX via contracts system, email, Jira, and Salesforce.
naftiko: "0.5"
info:
label: "Contract Renewal Pipeline"
description: "Tracks contract renewals at CSX via contracts system, email, Jira, and Salesforce."
tags:
- procurement
- contracts
- salesforce
- jira
capability:
exposes:
- type: mcp
namespace: contract-renew
port: 8080
tools:
- name: track
description: "Track renewals at CSX."
inputParameters:
- name: contract_id
in: body
type: string
description: "Contract ID."
- name: owner
in: body
type: string
description: "Owner email."
steps:
- name: get
type: call
call: "contracts.get"
with:
id: "{{contract_id}}"
- name: remind
type: call
call: "email.send"
with:
to: "{{owner}}"
subject: "Renewal: {{contract_id}}"
- name: task
type: call
call: "jira.create-issue"
with:
project: "PROC"
summary: "Renew {{contract_id}}"
- name: crm
type: call
call: "salesforce.update"
with:
id: "{{contract_id}}"
stage: "Renewal"
consumes:
- type: http
namespace: contracts
baseUri: "https://contracts.csx.com/api/v1"
authentication:
type: bearer
token: "$secrets.contracts_token"
resources:
- name: contracts
path: "/contracts/{{id}}"
inputParameters:
- name: id
in: path
operations:
- name: get
method: GET
- type: http
namespace: email
baseUri: "https://email.csx.com/api/v1"
authentication:
type: bearer
token: "$secrets.email_token"
resources:
- name: messages
path: "/send"
operations:
- name: send
method: POST
- type: http
namespace: jira
baseUri: "https://csx.com.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: salesforce
baseUri: "https://csx.com.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opps
path: "/sobjects/Opportunity"
operations:
- name: update
method: PATCH
Reallocates costs at CSX.
naftiko: "0.5"
info:
label: "Cost Reallocation Pipeline"
description: "Reallocates costs at CSX."
tags:
- finance
- cost-allocation
- oracle
capability:
exposes:
- type: mcp
namespace: cost-realloc
port: 8080
tools:
- name: reallocate
description: "Reallocate costs at CSX."
inputParameters:
- name: source
in: body
type: string
description: "Source CC."
- name: target
in: body
type: string
description: "Target CC."
- name: amount
in: body
type: number
description: "Amount."
steps:
- name: current
type: call
call: "oracle.get-alloc"
with:
cc: "{{source}}"
- name: compute
type: call
call: "analytics.realloc"
with:
source: "{{source}}"
target: "{{target}}"
amount: "{{amount}}"
- name: post
type: call
call: "oracle.post-journal"
with:
entries: "{{compute.entries}}"
- name: notify
type: call
call: "slack.post-message"
with:
channel: "#finance"
text: "Reallocated ${{amount}} from {{source}} to {{target}}"
consumes:
- type: http
namespace: oracle
baseUri: "https://oracle.csx.com/api/v1"
authentication:
type: bearer
token: "$secrets.oracle_token"
resources:
- name: allocations
path: "/cost-centers/{{cc}}/allocations"
inputParameters:
- name: cc
in: path
operations:
- name: get-alloc
method: GET
- type: http
namespace: analytics
baseUri: "https://analytics.csx.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: realloc
path: "/compute"
operations:
- name: realloc
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Monitors crew hours of service, identifies crews approaching limits, and coordinates relief crew assignments.
naftiko: "0.5"
info:
label: "Crew Hours of Service Compliance Pipeline"
description: "Monitors crew hours of service, identifies crews approaching limits, and coordinates relief crew assignments."
tags: [crew-management, hours-of-service, compliance, safety]
capability:
exposes:
- type: mcp
namespace: hos-compliance
port: 8080
tools:
- name: check-hos-compliance
description: "Check HOS for active crews on a subdivision, identify at-risk crews, and assign relief."
inputParameters:
- name: subdivision
in: body
type: string
description: "The subdivision to check."
steps:
- name: get-active-crews
type: call
call: "crew-mgmt.get-active-crews"
with: { subdivision: "{{subdivision}}" }
- name: identify-at-risk
type: call
call: "crew-mgmt.check-hos-limits"
with: { crews: "{{get-active-crews.crew_list}}" }
- name: assign-relief
type: call
call: "crew-mgmt.assign-relief-crews"
with: { at_risk_crews: "{{identify-at-risk.at_risk_list}}", subdivision: "{{subdivision}}" }
consumes:
- type: http
namespace: crew-mgmt
baseUri: "https://api.internal.csx.com/crew/v1"
authentication: { type: bearer, token: "$secrets.crew_token" }
resources:
- name: active
path: "/subdivisions/{{subdivision}}/active-crews"
inputParameters: [{ name: subdivision, in: path }]
operations: [{ name: get-active-crews, method: GET }]
- name: hos
path: "/hos/check"
operations: [{ name: check-hos-limits, method: POST }]
- name: relief
path: "/relief-assignments"
operations: [{ name: assign-relief-crews, method: POST }]
Retrieves the crew assignment for a given train, returning engineer name, conductor name, on-duty time, and hours of service remaining.
naftiko: "0.5"
info:
label: "Crew Scheduling Lookup"
description: "Retrieves the crew assignment for a given train, returning engineer name, conductor name, on-duty time, and hours of service remaining."
tags:
- crew-management
- scheduling
- hours-of-service
capability:
exposes:
- type: mcp
namespace: crew-scheduling
port: 8080
tools:
- name: get-crew-assignment
description: "Look up crew assignment for a train. Returns engineer, conductor, on-duty time, and HOS remaining."
inputParameters:
- name: train_symbol
in: body
type: string
description: "The train symbol."
call: "crew-mgmt.get-assignment"
with:
train_symbol: "{{train_symbol}}"
outputParameters:
- name: engineer
type: string
mapping: "$.assignment.engineer.name"
- name: conductor
type: string
mapping: "$.assignment.conductor.name"
- name: on_duty_time
type: string
mapping: "$.assignment.onDutyTime"
- name: hos_remaining_hours
type: number
mapping: "$.assignment.hosRemainingHours"
consumes:
- type: http
namespace: crew-mgmt
baseUri: "https://api.internal.csx.com/crew/v1"
authentication:
type: bearer
token: "$secrets.crew_token"
resources:
- name: assignments
path: "/trains/{{train_symbol}}/crew"
inputParameters:
- name: train_symbol
in: path
operations:
- name: get-assignment
method: GET
When a railcar exceeds free time at a customer facility, calculates demurrage charges, creates an invoice in SAP, and notifies the customer service team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Customer Demurrage Billing Pipeline"
description: "When a railcar exceeds free time at a customer facility, calculates demurrage charges, creates an invoice in SAP, and notifies the customer service team via Microsoft Teams."
tags:
- demurrage
- billing
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: demurrage-billing
port: 8080
tools:
- name: calculate-demurrage
description: "Given a railcar and release date, calculate demurrage, create SAP invoice, and notify customer service."
inputParameters:
- name: reporting_mark
in: body
type: string
description: "The railcar reporting mark."
- name: waybill_number
in: body
type: string
description: "The waybill number."
- name: actual_release_date
in: body
type: string
description: "The actual release date."
steps:
- name: get-waybill
type: call
call: "sap.get-waybill"
with:
waybill_number: "{{waybill_number}}"
- name: calculate-charges
type: call
call: "billing.calculate-demurrage"
with:
reporting_mark: "{{reporting_mark}}"
free_time_end: "{{get-waybill.free_time_end}}"
release_date: "{{actual_release_date}}"
tariff_id: "{{get-waybill.tariff_id}}"
- name: create-invoice
type: call
call: "sap.create-invoice"
with:
customer_id: "{{get-waybill.customer_id}}"
amount: "{{calculate-charges.total}}"
description: "Demurrage: {{reporting_mark}} on WB {{waybill_number}}"
- name: notify-cs
type: call
call: "msteams.send-message"
with:
channel_id: "customer-service"
text: "Demurrage invoice: {{create-invoice.invoice_number}} for ${{calculate-charges.total}}. Car: {{reporting_mark}}. Days held: {{calculate-charges.chargeable_days}}."
consumes:
- type: http
namespace: sap
baseUri: "https://csx-s4.sap.com/sap/opu/odata/sap/API_FREIGHT_ORDER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: waybills
path: "/A_FreightOrder('{{waybill_number}}')"
inputParameters:
- name: waybill_number
in: path
operations:
- name: get-waybill
method: GET
- type: http
namespace: billing
baseUri: "https://api.internal.csx.com/billing/v1"
authentication:
type: bearer
token: "$secrets.billing_token"
resources:
- name: demurrage
path: "/demurrage/calculate"
operations:
- name: calculate-demurrage
method: POST
- type: http
namespace: sap
baseUri: "https://csx-s4.sap.com/sap/opu/odata/sap/API_BILLING_DOCUMENT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: invoices
path: "/A_BillingDocument"
operations:
- name: create-invoice
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves a freight rate quote for a customer lane, returning base rate, fuel surcharge, and total per-car charge.
naftiko: "0.5"
info:
label: "Customer Rate Quote Lookup"
description: "Retrieves a freight rate quote for a customer lane, returning base rate, fuel surcharge, and total per-car charge."
tags: [pricing, commercial, freight-rates]
capability:
exposes:
- type: mcp
namespace: commercial-pricing
port: 8080
tools:
- name: get-freight-rate
description: "Look up freight rate for a lane. Returns base rate, fuel surcharge, and total."
inputParameters:
- name: origin_station
in: body
type: string
description: "Origin station code."
- name: destination_station
in: body
type: string
description: "Destination station code."
- name: commodity_code
in: body
type: string
description: "STCC commodity code."
call: "pricing.get-rate"
with: { origin: "{{origin_station}}", destination: "{{destination_station}}", commodity: "{{commodity_code}}" }
outputParameters:
- name: base_rate
type: number
mapping: "$.rate.baseRate"
- name: fuel_surcharge
type: number
mapping: "$.rate.fuelSurcharge"
- name: total_per_car
type: number
mapping: "$.rate.totalPerCar"
consumes:
- type: http
namespace: pricing
baseUri: "https://api.internal.csx.com/pricing/v1"
authentication: { type: bearer, token: "$secrets.pricing_token" }
resources:
- name: rates
path: "/rates/quote"
operations: [{ name: get-rate, method: GET }]
Retrieves estimated time of arrival for a customer shipment, returning current location, ETA, and transit status.
naftiko: "0.5"
info:
label: "Customer Shipment ETA Lookup"
description: "Retrieves estimated time of arrival for a customer shipment, returning current location, ETA, and transit status."
tags: [customer-service, tracking, eta]
capability:
exposes:
- type: mcp
namespace: customer-tracking
port: 8080
tools:
- name: get-shipment-eta
description: "Look up shipment ETA. Returns location, ETA, and transit status."
inputParameters:
- name: waybill_number
in: body
type: string
description: "The waybill number."
call: "tracking.get-shipment-eta"
with: { waybill: "{{waybill_number}}" }
outputParameters:
- name: current_location
type: string
mapping: "$.shipment.currentLocation"
- name: eta
type: string
mapping: "$.shipment.estimatedArrival"
- name: transit_status
type: string
mapping: "$.shipment.transitStatus"
consumes:
- type: http
namespace: tracking
baseUri: "https://api.internal.csx.com/tracking/v1"
authentication: { type: bearer, token: "$secrets.tracking_token" }
resources:
- name: shipments
path: "/shipments/{{waybill}}/eta"
inputParameters: [{ name: waybill, in: path }]
operations: [{ name: get-shipment-eta, method: GET }]
Monitors data pipelines at CSX via Databricks, Snowflake, Slack, and ServiceNow.
naftiko: "0.5"
info:
label: "Data Pipeline Monitor Pipeline"
description: "Monitors data pipelines at CSX via Databricks, Snowflake, Slack, and ServiceNow."
tags:
- data-engineering
- databricks
- monitoring
- slack
capability:
exposes:
- type: mcp
namespace: pipeline-mon
port: 8080
tools:
- name: monitor
description: "Monitor pipelines at CSX."
inputParameters:
- name: pipeline_id
in: body
type: string
description: "Pipeline ID."
steps:
- name: status
type: call
call: "databricks.get-run"
with:
id: "{{pipeline_id}}"
- name: quality
type: call
call: "snowflake.query"
with:
query: "SELECT COUNT(*) FROM out WHERE p='{{pipeline_id}}'"
- name: alert
type: call
call: "slack.post-message"
with:
channel: "#data"
text: "Pipeline {{pipeline_id}}: {{status.state}}"
- name: incident
type: call
call: "servicenow.create-incident"
with:
desc: "Pipeline {{pipeline_id}} issue"
consumes:
- type: http
namespace: databricks
baseUri: "https://csx.com.cloud.databricks.com/api/2.1"
authentication:
type: bearer
token: "$secrets.databricks_token"
resources:
- name: jobs
path: "/jobs/runs/get"
operations:
- name: get-run
method: GET
- type: http
namespace: snowflake
baseUri: "https://csx.com.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
- type: http
namespace: servicenow
baseUri: "https://csx.com.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
Checks Datadog monitor at CSX.
naftiko: "0.5"
info:
label: "Datadog Monitor Check"
description: "Checks Datadog monitor at CSX."
tags:
- monitoring
- datadog
- observability
capability:
exposes:
- type: mcp
namespace: dd-monitor
port: 8080
tools:
- name: check-monitor
description: "Check monitor at CSX."
inputParameters:
- name: monitor_id
in: body
type: string
description: "Monitor ID."
call: "datadog.get-monitor"
with:
monitor_id: "{{monitor_id}}"
outputParameters:
- name: status
type: string
mapping: "$.overall_state"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: monitors
path: "/monitor/{{monitor_id}}"
inputParameters:
- name: monitor_id
in: path
operations:
- name: get-monitor
method: GET
Retrieves the dispatch communication log for a train, returning messages, timestamps, and dispatcher ID.
naftiko: "0.5"
info:
label: "Dispatch Communication Log"
description: "Retrieves the dispatch communication log for a train, returning messages, timestamps, and dispatcher ID."
tags: [dispatch, communication, train-operations]
capability:
exposes:
- type: mcp
namespace: dispatch-comms
port: 8080
tools:
- name: get-dispatch-log
description: "Look up dispatch comm log for a train. Returns messages, timestamps, and dispatcher."
inputParameters:
- name: train_symbol
in: body
type: string
description: "The train symbol."
call: "dispatch.get-comm-log"
with: { train_symbol: "{{train_symbol}}" }
outputParameters:
- name: message_count
type: number
mapping: "$.log.messageCount"
- name: latest_message
type: string
mapping: "$.log.messages[0].text"
- name: dispatcher
type: string
mapping: "$.log.messages[0].dispatcher"
consumes:
- type: http
namespace: dispatch
baseUri: "https://api.internal.csx.com/dispatch/v1"
authentication: { type: bearer, token: "$secrets.dispatch_token" }
resources:
- name: comm-logs
path: "/trains/{{train_symbol}}/comm-log"
inputParameters: [{ name: train_symbol, in: path }]
operations: [{ name: get-comm-log, method: GET }]
Tests disaster recovery at CSX via failover, health checks, and reporting.
naftiko: "0.5"
info:
label: "DR Test Pipeline"
description: "Tests disaster recovery at CSX via failover, health checks, and reporting."
tags:
- disaster-recovery
- business-continuity
- testing
capability:
exposes:
- type: mcp
namespace: dr-test
port: 8080
tools:
- name: test-dr
description: "Test DR at CSX."
inputParameters:
- name: plan_id
in: body
type: string
description: "Plan ID."
- name: type
in: body
type: string
description: "Test type."
steps:
- name: failover
type: call
call: "dr.failover"
with:
plan: "{{plan_id}}"
type: "{{type}}"
- name: validate
type: call
call: "monitoring.check"
with:
scope: "critical"
- name: measure
type: call
call: "dr.metrics"
with:
id: "{{failover.id}}"
- name: report
type: call
call: "confluence.create-page"
with:
title: "DR - {{plan_id}}"
body: "RTO:{{measure.rto}}m RPO:{{measure.rpo}}m"
consumes:
- type: http
namespace: dr
baseUri: "https://dr.csx.com/api/v1"
authentication:
type: bearer
token: "$secrets.dr_token"
resources:
- name: failovers
path: "/failovers"
operations:
- name: failover
method: POST
- type: http
namespace: monitoring
baseUri: "https://monitoring.csx.com/api/v1"
authentication:
type: bearer
token: "$secrets.monitoring_token"
resources:
- name: health
path: "/checks"
operations:
- name: check
method: POST
- type: http
namespace: confluence
baseUri: "https://csx.com.atlassian.net/wiki/rest/api"
authentication:
type: bearer
token: "$secrets.confluence_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
Detects infrastructure drift at CSX via Terraform, Slack, and Jira.
naftiko: "0.5"
info:
label: "Drift Detection Pipeline"
description: "Detects infrastructure drift at CSX via Terraform, Slack, and Jira."
tags:
- infrastructure
- terraform
- drift-detection
- devops
capability:
exposes:
- type: mcp
namespace: drift-det
port: 8080
tools:
- name: detect
description: "Detect drift at CSX."
inputParameters:
- name: ws_id
in: body
type: string
description: "Workspace ID."
- name: env
in: body
type: string
description: "Environment."
steps:
- name: plan
type: call
call: "terraform.run"
with:
ws: "{{ws_id}}"
- name: check
type: call
call: "terraform.get-plan"
with:
run: "{{plan.id}}"
- name: alert
type: call
call: "slack.post-message"
with:
channel: "#infra"
text: "Drift {{env}}: {{check.changes}} changes"
- name: ticket
type: call
call: "jira.create-issue"
with:
project: "INFRA"
summary: "Drift in {{env}}"
consumes:
- type: http
namespace: terraform
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: runs
path: "/runs"
operations:
- name: run
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
- type: http
namespace: jira
baseUri: "https://csx.com.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Receives an EDI 417 waybill, validates commodity and routing, creates the shipment in the dispatch system, and sends EDI 404 acknowledgement.
naftiko: "0.5"
info:
label: "EDI Waybill Processing Pipeline"
description: "Receives an EDI 417 waybill, validates commodity and routing, creates the shipment in the dispatch system, and sends EDI 404 acknowledgement."
tags: [edi, waybill, dispatch, electronic-data-interchange]
capability:
exposes:
- type: mcp
namespace: edi-processing
port: 8080
tools:
- name: process-edi-waybill
description: "Parse EDI waybill, validate, create shipment, and send acknowledgement."
inputParameters:
- name: message_id
in: body
type: string
description: "The EDI message ID."
steps:
- name: parse-message
type: call
call: "edi-gateway.parse-417"
with: { message_id: "{{message_id}}" }
- name: create-shipment
type: call
call: "dispatch.create-shipment"
with: { origin: "{{parse-message.origin}}", destination: "{{parse-message.destination}}", commodity: "{{parse-message.commodity}}" }
- name: send-ack
type: call
call: "edi-gateway.send-404"
with: { partner_id: "{{parse-message.sender_id}}", waybill: "{{create-shipment.waybill_number}}" }
consumes:
- type: http
namespace: edi-gateway
baseUri: "https://api.internal.csx.com/edi/v1"
authentication: { type: bearer, token: "$secrets.edi_token" }
resources:
- name: messages
path: "/messages/{{message_id}}"
inputParameters: [{ name: message_id, in: path }]
operations: [{ name: parse-417, method: GET }]
- name: outbound
path: "/messages/send"
operations: [{ name: send-404, method: POST }]
- type: http
namespace: dispatch
baseUri: "https://api.internal.csx.com/dispatch/v1"
authentication: { type: bearer, token: "$secrets.dispatch_token" }
resources:
- name: shipments
path: "/shipments"
operations: [{ name: create-shipment, method: POST }]
Checks ES index at CSX.
naftiko: "0.5"
info:
label: "ES Index Health"
description: "Checks ES index at CSX."
tags:
- search
- elasticsearch
- infrastructure
capability:
exposes:
- type: mcp
namespace: es-health
port: 8080
tools:
- name: check-index
description: "Check ES index at CSX."
inputParameters:
- name: index
in: body
type: string
description: "Index name."
call: "es.get-health"
with:
index: "{{index}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: docs
type: number
mapping: "$.docs.count"
consumes:
- type: http
namespace: es
baseUri: "https://es.csx.com:9200"
authentication:
type: bearer
token: "$secrets.es_token"
resources:
- name: indices
path: "/{{index}}/_stats"
inputParameters:
- name: index
in: path
operations:
- name: get-health
method: GET
Pulls locomotive fuel consumption data, calculates CO2 emissions per EPA guidelines, and submits the report to the environmental compliance system.
naftiko: "0.5"
info:
label: "Emissions Reporting Pipeline"
description: "Pulls locomotive fuel consumption data, calculates CO2 emissions per EPA guidelines, and submits the report to the environmental compliance system."
tags:
- emissions
- sustainability
- epa
- compliance
capability:
exposes:
- type: mcp
namespace: emissions-reporting
port: 8080
tools:
- name: generate-emissions-report
description: "Given a reporting period, calculate fleet emissions and submit the compliance report."
inputParameters:
- name: reporting_year
in: body
type: string
description: "The reporting year."
- name: region
in: body
type: string
description: "The operating region."
steps:
- name: get-fuel-data
type: call
call: "fuel-mgmt.get-fleet-consumption"
with:
year: "{{reporting_year}}"
region: "{{region}}"
- name: calculate-emissions
type: call
call: "emissions-engine.calculate"
with:
diesel_gallons: "{{get-fuel-data.total_diesel_gallons}}"
biodiesel_gallons: "{{get-fuel-data.biodiesel_gallons}}"
ton_miles: "{{get-fuel-data.total_ton_miles}}"
- name: submit-report
type: call
call: "compliance.submit-epa-report"
with:
year: "{{reporting_year}}"
region: "{{region}}"
co2_tons: "{{calculate-emissions.co2_total}}"
intensity: "{{calculate-emissions.co2_per_ton_mile}}"
consumes:
- type: http
namespace: fuel-mgmt
baseUri: "https://api.internal.csx.com/fuel/v1"
authentication:
type: bearer
token: "$secrets.fuel_token"
resources:
- name: fleet
path: "/fleet/consumption"
operations:
- name: get-fleet-consumption
method: GET
- type: http
namespace: emissions-engine
baseUri: "https://api.internal.csx.com/emissions/v1"
authentication:
type: bearer
token: "$secrets.emissions_token"
resources:
- name: calculations
path: "/calculate"
operations:
- name: calculate
method: POST
- type: http
namespace: compliance
baseUri: "https://api.internal.csx.com/compliance/v1"
authentication:
type: bearer
token: "$secrets.compliance_token"
resources:
- name: epa-reports
path: "/epa-reports"
operations:
- name: submit-epa-report
method: POST
Offboards employees at CSX via Okta, Slack, ServiceNow, and storage.
naftiko: "0.5"
info:
label: "Employee Offboarding Pipeline"
description: "Offboards employees at CSX via Okta, Slack, ServiceNow, and storage."
tags:
- hr
- offboarding
- okta
- servicenow
capability:
exposes:
- type: mcp
namespace: offboarding
port: 8080
tools:
- name: offboard
description: "Offboard employees at CSX."
inputParameters:
- name: emp_id
in: body
type: string
description: "Employee ID."
- name: last_day
in: body
type: string
description: "Last day."
steps:
- name: disable
type: call
call: "okta.deactivate"
with:
user: "{{emp_id}}"
- name: revoke
type: call
call: "slack.remove"
with:
user: "{{emp_id}}"
- name: return
type: call
call: "servicenow.create-request"
with:
type: "return"
emp: "{{emp_id}}"
- name: archive
type: call
call: "storage.archive"
with:
user: "{{emp_id}}"
consumes:
- type: http
namespace: okta
baseUri: "https://csx.com.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_api_token"
resources:
- name: users
path: "/users/{{user}}/lifecycle/deactivate"
inputParameters:
- name: user
in: path
operations:
- name: deactivate
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: users
path: "/users.admin.remove"
operations:
- name: remove
method: POST
- type: http
namespace: servicenow
baseUri: "https://csx.com.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: requests
path: "/table/sc_request"
operations:
- name: create-request
method: POST
- type: http
namespace: storage
baseUri: "https://storage.csx.com/api/v1"
authentication:
type: bearer
token: "$secrets.storage_token"
resources:
- name: archives
path: "/archive"
operations:
- name: archive
method: POST
On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint folder, and sends a Microsoft Teams welcome message.
naftiko: "0.5"
info:
label: "Employee Onboarding Orchestrator"
description: "On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint folder, and sends a Microsoft Teams welcome message."
tags:
- hr
- onboarding
- workday
- servicenow
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-onboarding
port: 8080
tools:
- name: trigger-onboarding
description: "Given a Workday employee ID, orchestrate onboarding across ServiceNow, SharePoint, and Microsoft Teams."
inputParameters:
- name: workday_employee_id
in: body
type: string
description: "The Workday worker ID."
- name: start_date
in: body
type: string
description: "The employee start date."
- name: department
in: body
type: string
description: "The department."
steps:
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{workday_employee_id}}"
- name: open-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "New hire onboarding: {{get-employee.full_name}}"
category: "hr_onboarding"
assigned_group: "IT_Onboarding"
- name: provision-folder
type: call
call: "sharepoint.create-folder"
with:
site_id: "hr_onboarding"
folder_path: "OnboardingDocs/{{get-employee.full_name}}_{{start_date}}"
- name: send-welcome
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{get-employee.work_email}}"
text: "Welcome to CSX, {{get-employee.first_name}}! IT ticket: {{open-ticket.number}}. Docs: {{provision-folder.url}}."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://csx.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: drive-items
path: "/{{site_id}}/drive/root:/{{folder_path}}"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
operations:
- name: create-folder
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Audits expenses at CSX via Concur, compliance checks, and email.
naftiko: "0.5"
info:
label: "Expense Audit Pipeline"
description: "Audits expenses at CSX via Concur, compliance checks, and email."
tags:
- finance
- travel
- sap-concur
- compliance
capability:
exposes:
- type: mcp
namespace: expense-audit
port: 8080
tools:
- name: audit
description: "Audit expenses at CSX."
inputParameters:
- name: report_id
in: body
type: string
description: "Report ID."
steps:
- name: get
type: call
call: "concur.get-report"
with:
id: "{{report_id}}"
- name: check
type: call
call: "compliance.check"
with:
expenses: "{{get.entries}}"
- name: flag
type: call
call: "workflow.flag"
with:
id: "{{report_id}}"
violations: "{{check.violations}}"
- name: notify
type: call
call: "email.send"
with:
to: "{{get.approver}}"
subject: "Expense {{report_id}} violations"
consumes:
- type: http
namespace: concur
baseUri: "https://us.api.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_token"
resources:
- name: reports
path: "/expense/reports/{{id}}"
inputParameters:
- name: id
in: path
operations:
- name: get-report
method: GET
- type: http
namespace: compliance
baseUri: "https://compliance.csx.com/api/v1"
authentication:
type: bearer
token: "$secrets.compliance_token"
resources:
- name: policies
path: "/check"
operations:
- name: check
method: POST
- type: http
namespace: workflow
baseUri: "https://workflow.csx.com/api/v1"
authentication:
type: bearer
token: "$secrets.workflow_token"
resources:
- name: reviews
path: "/flag"
operations:
- name: flag
method: POST
- type: http
namespace: email
baseUri: "https://email.csx.com/api/v1"
authentication:
type: bearer
token: "$secrets.email_token"
resources:
- name: messages
path: "/send"
operations:
- name: send
method: POST
Analyzes feedback at CSX via surveys, AI sentiment, and Power BI.
naftiko: "0.5"
info:
label: "Customer Feedback Pipeline"
description: "Analyzes feedback at CSX via surveys, AI sentiment, and Power BI."
tags:
- customer-experience
- analytics
- sentiment-analysis
capability:
exposes:
- type: mcp
namespace: feedback
port: 8080
tools:
- name: analyze
description: "Analyze feedback at CSX."
inputParameters:
- name: survey_id
in: body
type: string
description: "Survey ID."
steps:
- name: collect
type: call
call: "survey.get"
with:
id: "{{survey_id}}"
- name: sentiment
type: call
call: "ai.analyze"
with:
text: "{{collect.responses}}"
- name: themes
type: call
call: "ai.themes"
with:
data: "{{collect.responses}}"
- name: dashboard
type: call
call: "power-bi.refresh"
with:
dataset: "cx"
consumes:
- type: http
namespace: survey
baseUri: "https://surveys.csx.com/api/v1"
authentication:
type: bearer
token: "$secrets.survey_token"
resources:
- name: responses
path: "/surveys/{{id}}/responses"
inputParameters:
- name: id
in: path
operations:
- name: get
method: GET
- type: http
namespace: ai
baseUri: "https://api.openai.com/v1"
authentication:
type: bearer
token: "$secrets.openai_api_key"
resources:
- name: completions
path: "/chat/completions"
operations:
- name: analyze
method: POST
- type: http
namespace: power-bi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.power_bi_token"
resources:
- name: datasets
path: "/datasets/{{dataset}}/refreshes"
inputParameters:
- name: dataset
in: path
operations:
- name: refresh
method: POST
Compiles FRA safety reporting data, generates the monthly report, uploads to SharePoint, and notifies the safety team.
naftiko: "0.5"
info:
label: "FRA Safety Report Pipeline"
description: "Compiles FRA safety reporting data, generates the monthly report, uploads to SharePoint, and notifies the safety team."
tags: [fra-reporting, safety, sharepoint, microsoft-teams]
capability:
exposes:
- type: mcp
namespace: fra-safety
port: 8080
tools:
- name: generate-fra-safety-report
description: "Compile FRA data, generate report, upload, and notify safety team."
inputParameters:
- name: report_month
in: body
type: string
description: "The reporting month in YYYY-MM format."
steps:
- name: compile-data
type: call
call: "fra-reporting.compile-monthly"
with: { month: "{{report_month}}" }
- name: upload-report
type: call
call: "sharepoint.upload-file"
with: { site_id: "safety_reports", file_path: "FRA/{{report_month}}_safety.xlsx", content: "{{compile-data.report_content}}" }
- name: notify-safety
type: call
call: "msteams.send-message"
with: { channel_id: "safety-ops", text: "FRA safety report for {{report_month}} generated. Incidents: {{compile-data.incident_count}}. Report: {{upload-report.url}}." }
consumes:
- type: http
namespace: fra-reporting
baseUri: "https://api.internal.csx.com/fra/v1"
authentication: { type: bearer, token: "$secrets.fra_token" }
resources:
- name: monthly
path: "/reports/monthly"
operations: [{ name: compile-monthly, method: POST }]
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication: { type: bearer, token: "$secrets.msgraph_token" }
resources:
- name: drive-items
path: "/{{site_id}}/drive/root:/{{file_path}}:/content"
inputParameters: [{ name: site_id, in: path }, { name: file_path, in: path }]
operations: [{ name: upload-file, method: PUT }]
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication: { type: bearer, token: "$secrets.msgraph_token" }
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters: [{ name: channel_id, in: path }]
operations: [{ name: send-message, method: POST }]
Retrieves maintenance history for a railcar from SAP, returning completed work orders, repair costs, and last shop date.
naftiko: "0.5"
info:
label: "Freight Car Maintenance History"
description: "Retrieves maintenance history for a railcar from SAP, returning completed work orders, repair costs, and last shop date."
tags: [railcar, maintenance, sap]
capability:
exposes:
- type: mcp
namespace: car-maintenance
port: 8080
tools:
- name: get-car-maintenance-history
description: "Look up railcar maintenance history. Returns completed WOs, costs, and last shop."
inputParameters:
- name: reporting_mark
in: body
type: string
description: "The railcar reporting mark."
call: "sap.get-car-maintenance"
with: { reporting_mark: "{{reporting_mark}}" }
outputParameters:
- name: completed_orders
type: number
mapping: "$.maintenance.completedCount"
- name: total_cost
type: number
mapping: "$.maintenance.totalCost"
- name: last_shop_date
type: string
mapping: "$.maintenance.lastShopDate"
consumes:
- type: http
namespace: sap
baseUri: "https://csx-s4.sap.com/sap/opu/odata/sap/API_MAINTENANCEORDER"
authentication: { type: basic, username: "$secrets.sap_user", password: "$secrets.sap_password" }
resources:
- name: car-maintenance
path: "/MaintenanceOrder"
operations: [{ name: get-car-maintenance, method: GET }]
Retrieves locomotive fuel consumption data from the fuel management system, returning gallons consumed, miles traveled, and fuel efficiency in ton-miles per gallon.
naftiko: "0.5"
info:
label: "Fuel Consumption Analytics"
description: "Retrieves locomotive fuel consumption data from the fuel management system, returning gallons consumed, miles traveled, and fuel efficiency in ton-miles per gallon."
tags:
- fuel-management
- analytics
- locomotive
capability:
exposes:
- type: mcp
namespace: fuel-analytics
port: 8080
tools:
- name: get-fuel-consumption
description: "Look up locomotive fuel consumption. Returns gallons, miles, and efficiency."
inputParameters:
- name: locomotive_id
in: body
type: string
description: "The locomotive unit number."
- name: period
in: body
type: string
description: "The reporting period (e.g., last30days, last90days)."
call: "fuel-mgmt.get-consumption"
with:
unit_id: "{{locomotive_id}}"
period: "{{period}}"
outputParameters:
- name: gallons_consumed
type: number
mapping: "$.consumption.totalGallons"
- name: miles_traveled
type: number
mapping: "$.consumption.totalMiles"
- name: ton_miles_per_gallon
type: number
mapping: "$.consumption.efficiency"
consumes:
- type: http
namespace: fuel-mgmt
baseUri: "https://api.internal.csx.com/fuel/v1"
authentication:
type: bearer
token: "$secrets.fuel_token"
resources:
- name: consumption
path: "/locomotives/{{unit_id}}/consumption"
inputParameters:
- name: unit_id
in: path
operations:
- name: get-consumption
method: GET
Retrieves track asset information from the GIS system, returning milepost, track class, rail weight, and last maintenance date.
naftiko: "0.5"
info:
label: "GIS Track Asset Lookup"
description: "Retrieves track asset information from the GIS system, returning milepost, track class, rail weight, and last maintenance date."
tags:
- gis
- track-assets
- infrastructure
capability:
exposes:
- type: mcp
namespace: track-assets
port: 8080
tools:
- name: get-track-asset
description: "Look up track asset in GIS. Returns milepost, track class, rail weight, and last maintenance."
inputParameters:
- name: subdivision
in: body
type: string
description: "The track subdivision."
- name: milepost
in: body
type: string
description: "The milepost."
call: "gis.get-track-segment"
with:
subdivision: "{{subdivision}}"
milepost: "{{milepost}}"
outputParameters:
- name: track_class
type: string
mapping: "$.properties.trackClass"
- name: rail_weight
type: number
mapping: "$.properties.railWeight"
- name: last_maintenance
type: string
mapping: "$.properties.lastMaintenanceDate"
- name: max_speed
type: number
mapping: "$.properties.maxAuthorizedSpeed"
consumes:
- type: http
namespace: gis
baseUri: "https://gis.internal.csx.com/arcgis/rest/services"
authentication:
type: bearer
token: "$secrets.gis_token"
resources:
- name: track
path: "/TrackAssets/FeatureServer/0/query"
operations:
- name: get-track-segment
method: GET
Checks GitHub repo at CSX.
naftiko: "0.5"
info:
label: "GitHub Repo Check"
description: "Checks GitHub repo at CSX."
tags:
- devops
- github
- version-control
capability:
exposes:
- type: mcp
namespace: gh-repo
port: 8080
tools:
- name: get-branch
description: "Check branch at CSX."
inputParameters:
- name: repo
in: body
type: string
description: "Repo."
- name: branch
in: body
type: string
description: "Branch."
call: "github.get-branch"
with:
repo: "{{repo}}"
branch: "{{branch}}"
outputParameters:
- name: sha
type: string
mapping: "$.commit.sha"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: branches
path: "/repos/org/{{repo}}/branches/{{branch}}"
inputParameters:
- name: repo
in: path
- name: branch
in: path
operations:
- name: get-branch
method: GET
When a grade crossing inspection is due, creates a SAP work order, schedules the inspection crew, updates the FRA reporting system, and notifies the signals team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Grade Crossing Safety Inspection Pipeline"
description: "When a grade crossing inspection is due, creates a SAP work order, schedules the inspection crew, updates the FRA reporting system, and notifies the signals team via Microsoft Teams."
tags:
- grade-crossing
- safety
- sap
- fra-reporting
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: crossing-safety
port: 8080
tools:
- name: schedule-crossing-inspection
description: "Given a crossing ID, create work order, schedule crew, update FRA system, and notify signals team."
inputParameters:
- name: crossing_id
in: body
type: string
description: "The DOT crossing inventory number."
- name: inspection_type
in: body
type: string
description: "The inspection type (routine, triggered, annual)."
- name: inspection_date
in: body
type: string
description: "The planned inspection date."
steps:
- name: create-wo
type: call
call: "sap.create-maintenance-order"
with:
equipment: "XING_{{crossing_id}}"
order_type: "SI01"
activity_type: "{{inspection_type}}"
planned_start: "{{inspection_date}}"
- name: schedule-crew
type: call
call: "workforce.schedule-inspection"
with:
crossing_id: "{{crossing_id}}"
work_order: "{{create-wo.order_number}}"
date: "{{inspection_date}}"
- name: update-fra
type: call
call: "fra-reporting.update-inspection-schedule"
with:
crossing_id: "{{crossing_id}}"
inspection_type: "{{inspection_type}}"
scheduled_date: "{{inspection_date}}"
- name: notify-signals
type: call
call: "msteams.send-message"
with:
channel_id: "signals-engineering"
text: "Grade crossing inspection scheduled: DOT# {{crossing_id}}. Type: {{inspection_type}}. Date: {{inspection_date}}. WO: {{create-wo.order_number}}."
consumes:
- type: http
namespace: sap
baseUri: "https://csx-s4.sap.com/sap/opu/odata/sap/API_MAINTENANCEORDER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: orders
path: "/MaintenanceOrder"
operations:
- name: create-maintenance-order
method: POST
- type: http
namespace: workforce
baseUri: "https://api.internal.csx.com/workforce/v1"
authentication:
type: bearer
token: "$secrets.workforce_token"
resources:
- name: inspections
path: "/inspections/schedule"
operations:
- name: schedule-inspection
method: POST
- type: http
namespace: fra-reporting
baseUri: "https://api.internal.csx.com/fra/v1"
authentication:
type: bearer
token: "$secrets.fra_token"
resources:
- name: inspections
path: "/crossing-inspections"
operations:
- name: update-inspection-schedule
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Checks Grafana dashboard at CSX.
naftiko: "0.5"
info:
label: "Grafana Dashboard Status"
description: "Checks Grafana dashboard at CSX."
tags:
- monitoring
- grafana
- dashboards
capability:
exposes:
- type: mcp
namespace: grafana
port: 8080
tools:
- name: check-dash
description: "Check dashboard at CSX."
inputParameters:
- name: uid
in: body
type: string
description: "Dashboard UID."
call: "grafana.get-dash"
with:
uid: "{{uid}}"
outputParameters:
- name: title
type: string
mapping: "$.dashboard.title"
consumes:
- type: http
namespace: grafana
baseUri: "https://grafana.csx.com/api"
authentication:
type: bearer
token: "$secrets.grafana_token"
resources:
- name: dashboards
path: "/dashboards/uid/{{uid}}"
inputParameters:
- name: uid
in: path
operations:
- name: get-dash
method: GET
Coordinates grain loading by checking elevator capacity, scheduling unit trains, and confirming with the agricultural shipper.
naftiko: "0.5"
info:
label: "Grain Elevator Coordination Pipeline"
description: "Coordinates grain loading by checking elevator capacity, scheduling unit trains, and confirming with the agricultural shipper."
tags: [agriculture, grain, unit-trains, scheduling]
capability:
exposes:
- type: mcp
namespace: grain-ops
port: 8080
tools:
- name: coordinate-grain-loading
description: "Check elevator capacity, schedule unit train, and confirm with shipper."
inputParameters:
- name: elevator_id
in: body
type: string
description: "The grain elevator ID."
- name: car_count
in: body
type: number
description: "Number of hopper cars."
- name: commodity
in: body
type: string
description: "Grain type (corn, wheat, soybeans)."
steps:
- name: check-capacity
type: call
call: "elevator-mgmt.check-capacity"
with: { elevator_id: "{{elevator_id}}", commodity: "{{commodity}}" }
- name: schedule-train
type: call
call: "dispatch.schedule-unit-train"
with: { elevator_id: "{{elevator_id}}", car_count: "{{car_count}}", commodity: "{{commodity}}" }
- name: confirm-shipper
type: call
call: "email-service.send-loading-notice"
with: { elevator_id: "{{elevator_id}}", train_date: "{{schedule-train.loading_date}}", car_count: "{{car_count}}" }
consumes:
- type: http
namespace: elevator-mgmt
baseUri: "https://api.internal.csx.com/elevators/v1"
authentication: { type: bearer, token: "$secrets.elevator_token" }
resources:
- name: capacity
path: "/elevators/{{elevator_id}}/capacity"
inputParameters: [{ name: elevator_id, in: path }]
operations: [{ name: check-capacity, method: GET }]
- type: http
namespace: dispatch
baseUri: "https://api.internal.csx.com/dispatch/v1"
authentication: { type: bearer, token: "$secrets.dispatch_token" }
resources:
- name: unit-trains
path: "/unit-trains"
operations: [{ name: schedule-unit-train, method: POST }]
- type: http
namespace: email-service
baseUri: "https://api.internal.csx.com/email/v1"
authentication: { type: bearer, token: "$secrets.email_token" }
resources:
- name: loading-notices
path: "/loading-notices"
operations: [{ name: send-loading-notice, method: POST }]
When a hazardous materials shipment is tendered, validates placard and routing compliance against DOT regulations, creates the shipping document, and files the required notifications.
naftiko: "0.5"
info:
label: "Hazmat Shipment Compliance Pipeline"
description: "When a hazardous materials shipment is tendered, validates placard and routing compliance against DOT regulations, creates the shipping document, and files the required notifications."
tags:
- hazmat
- compliance
- dot-regulations
- safety
capability:
exposes:
- type: mcp
namespace: hazmat-compliance
port: 8080
tools:
- name: validate-hazmat-shipment
description: "Given hazmat shipment details, validate DOT compliance, create shipping docs, and file notifications."
inputParameters:
- name: waybill_number
in: body
type: string
description: "The waybill number."
- name: un_number
in: body
type: string
description: "The UN hazmat classification number."
- name: quantity
in: body
type: number
description: "The quantity being shipped."
steps:
- name: validate-compliance
type: call
call: "hazmat.validate-shipment"
with:
waybill: "{{waybill_number}}"
un_number: "{{un_number}}"
quantity: "{{quantity}}"
- name: create-shipping-doc
type: call
call: "doc-service.create-hazmat-doc"
with:
waybill: "{{waybill_number}}"
un_number: "{{un_number}}"
placard: "{{validate-compliance.required_placard}}"
route: "{{validate-compliance.approved_route}}"
- name: file-notification
type: call
call: "hazmat.file-notification"
with:
waybill: "{{waybill_number}}"
un_number: "{{un_number}}"
route: "{{validate-compliance.approved_route}}"
consumes:
- type: http
namespace: hazmat
baseUri: "https://api.internal.csx.com/hazmat/v1"
authentication:
type: bearer
token: "$secrets.hazmat_token"
resources:
- name: validation
path: "/validate"
operations:
- name: validate-shipment
method: POST
- name: notifications
path: "/notifications"
operations:
- name: file-notification
method: POST
- type: http
namespace: doc-service
baseUri: "https://api.internal.csx.com/documents/v1"
authentication:
type: bearer
token: "$secrets.doc_token"
resources:
- name: hazmat-docs
path: "/hazmat-documents"
operations:
- name: create-hazmat-doc
method: POST
Retrieves intermodal ramp capacity metrics, returning daily lift count, capacity utilization, and gate turn time.
naftiko: "0.5"
info:
label: "Intermodal Ramp Capacity"
description: "Retrieves intermodal ramp capacity metrics, returning daily lift count, capacity utilization, and gate turn time."
tags: [intermodal, ramp-operations, capacity]
capability:
exposes:
- type: mcp
namespace: ramp-metrics
port: 8080
tools:
- name: get-ramp-capacity
description: "Look up intermodal ramp capacity. Returns lifts, utilization, and gate time."
inputParameters:
- name: ramp_code
in: body
type: string
description: "The intermodal ramp code."
call: "intermodal.get-ramp-metrics"
with: { ramp: "{{ramp_code}}" }
outputParameters:
- name: daily_lifts
type: number
mapping: "$.ramp.dailyLifts"
- name: utilization_pct
type: number
mapping: "$.ramp.utilizationPercentage"
- name: gate_turn_minutes
type: number
mapping: "$.ramp.avgGateTurnMinutes"
consumes:
- type: http
namespace: intermodal
baseUri: "https://api.internal.csx.com/intermodal/v1"
authentication: { type: bearer, token: "$secrets.intermodal_token" }
resources:
- name: ramps
path: "/ramps/{{ramp}}/metrics"
inputParameters: [{ name: ramp, in: path }]
operations: [{ name: get-ramp-metrics, method: GET }]
When a new intermodal shipment booking is created, validates the route in the rail planning system, reserves capacity on the train schedule, creates a SAP sales order, and sends confirmation to the shipper.
naftiko: "0.5"
info:
label: "Intermodal Shipment Booking Pipeline"
description: "When a new intermodal shipment booking is created, validates the route in the rail planning system, reserves capacity on the train schedule, creates a SAP sales order, and sends confirmation to the shipper."
tags:
- intermodal
- booking
- sap
- rail-planning
capability:
exposes:
- type: mcp
namespace: intermodal-booking
port: 8080
tools:
- name: process-intermodal-booking
description: "Given shipment details, validate the route, reserve capacity, create SAP order, and confirm to shipper."
inputParameters:
- name: origin_ramp
in: body
type: string
description: "The origin intermodal ramp code."
- name: destination_ramp
in: body
type: string
description: "The destination intermodal ramp code."
- name: container_count
in: body
type: number
description: "Number of containers to book."
- name: container_type
in: body
type: string
description: "Container type (53ft, 48ft, 40ft)."
- name: customer_id
in: body
type: string
description: "The customer account identifier."
steps:
- name: validate-route
type: call
call: "rail-planning.get-route"
with:
origin: "{{origin_ramp}}"
destination: "{{destination_ramp}}"
- name: reserve-capacity
type: call
call: "train-ops.reserve-slots"
with:
train_id: "{{validate-route.train_id}}"
container_count: "{{container_count}}"
container_type: "{{container_type}}"
- name: create-order
type: call
call: "sap.create-sales-order"
with:
customer_id: "{{customer_id}}"
route_id: "{{validate-route.route_id}}"
container_count: "{{container_count}}"
- name: send-confirmation
type: call
call: "email-service.send-booking-confirmation"
with:
customer_id: "{{customer_id}}"
booking_number: "{{create-order.order_number}}"
origin: "{{origin_ramp}}"
destination: "{{destination_ramp}}"
etd: "{{validate-route.departure_date}}"
eta: "{{validate-route.arrival_date}}"
consumes:
- type: http
namespace: rail-planning
baseUri: "https://api.internal.csx.com/rail-planning/v1"
authentication:
type: bearer
token: "$secrets.rail_planning_token"
resources:
- name: routes
path: "/routes"
operations:
- name: get-route
method: GET
- type: http
namespace: train-ops
baseUri: "https://api.internal.csx.com/train-ops/v1"
authentication:
type: bearer
token: "$secrets.train_ops_token"
resources:
- name: capacity
path: "/capacity/reserve"
operations:
- name: reserve-slots
method: POST
- type: http
namespace: sap
baseUri: "https://csx-s4.sap.com/sap/opu/odata/sap/API_SALES_ORDER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: sales-orders
path: "/A_SalesOrder"
operations:
- name: create-sales-order
method: POST
- type: http
namespace: email-service
baseUri: "https://api.internal.csx.com/email/v1"
authentication:
type: bearer
token: "$secrets.email_token"
resources:
- name: confirmations
path: "/booking-confirmations"
operations:
- name: send-booking-confirmation
method: POST
Escalates IT incidents at CSX via ServiceNow, PagerDuty, and Slack.
naftiko: "0.5"
info:
label: "IT Incident Escalation Pipeline"
description: "Escalates IT incidents at CSX via ServiceNow, PagerDuty, and Slack."
tags:
- incident-management
- servicenow
- pagerduty
- slack
capability:
exposes:
- type: mcp
namespace: incident-escalation
port: 8080
tools:
- name: escalate-incident
description: "Escalate incidents at CSX."
inputParameters:
- name: incident_id
in: body
type: string
description: "Incident ID."
- name: severity
in: body
type: string
description: "Severity."
steps:
- name: get-incident
type: call
call: "servicenow.get-incident"
with:
incident_id: "{{incident_id}}"
- name: page
type: call
call: "pagerduty.create-incident"
with:
title: "{{get-incident.description}}"
urgency: "{{severity}}"
- name: channel
type: call
call: "slack.create-channel"
with:
name: "inc-{{incident_id}}"
- name: notify
type: call
call: "slack.post-message"
with:
channel: "#inc-{{incident_id}}"
text: "P{{severity}}: {{get-incident.description}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://csx.com.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: incidents
path: "/table/incident/{{incident_id}}"
inputParameters:
- name: incident_id
in: path
operations:
- name: get-incident
method: GET
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: channels
path: "/conversations.create"
operations:
- name: create-channel
method: POST
Retrieves sprint progress at CSX.
naftiko: "0.5"
info:
label: "Jira Sprint Progress Lookup"
description: "Retrieves sprint progress at CSX."
tags:
- project-management
- jira
- agile
capability:
exposes:
- type: mcp
namespace: jira-sprint
port: 8080
tools:
- name: get-sprint
description: "Look up sprint at CSX."
inputParameters:
- name: project_key
in: body
type: string
description: "Project key."
call: "jira.get-sprints"
with:
project: "{{project_key}}"
outputParameters:
- name: name
type: string
mapping: "$.values[0].name"
- name: state
type: string
mapping: "$.values[0].state"
consumes:
- type: http
namespace: jira
baseUri: "https://csx.com.atlassian.net/rest/agile/1.0"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: sprints
path: "/board/1/sprint"
operations:
- name: get-sprints
method: GET
Maintains KB at CSX by finding stale articles and notifying owners.
naftiko: "0.5"
info:
label: "Knowledge Base Maintenance Pipeline"
description: "Maintains KB at CSX by finding stale articles and notifying owners."
tags:
- knowledge-management
- confluence
- maintenance
capability:
exposes:
- type: mcp
namespace: kb-maint
port: 8080
tools:
- name: maintain-kb
description: "Maintain KB at CSX."
inputParameters:
- name: space
in: body
type: string
description: "Confluence space."
- name: stale_days
in: body
type: number
description: "Days threshold."
steps:
- name: find
type: call
call: "confluence.search-stale"
with:
space: "{{space}}"
days: "{{stale_days}}"
- name: notify
type: call
call: "email.batch"
with:
to: "{{find.owners}}"
subject: "KB review needed"
- name: flag
type: call
call: "confluence.add-label"
with:
pages: "{{find.ids}}"
label: "needs-review"
- name: report
type: call
call: "slack.post-message"
with:
channel: "#kb"
text: "KB: {{find.count}} stale articles"
consumes:
- type: http
namespace: confluence
baseUri: "https://csx.com.atlassian.net/wiki/rest/api"
authentication:
type: bearer
token: "$secrets.confluence_token"
resources:
- name: content
path: "/content/search"
operations:
- name: search-stale
method: GET
- type: http
namespace: email
baseUri: "https://email.csx.com/api/v1"
authentication:
type: bearer
token: "$secrets.email_token"
resources:
- name: batch
path: "/send-batch"
operations:
- name: batch
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Generates KPI digest at CSX from Snowflake, Oracle, Power BI, and email.
naftiko: "0.5"
info:
label: "Weekly KPI Digest Pipeline"
description: "Generates KPI digest at CSX from Snowflake, Oracle, Power BI, and email."
tags:
- reporting
- kpi
- snowflake
- executive
capability:
exposes:
- type: mcp
namespace: kpi-digest
port: 8080
tools:
- name: gen-digest
description: "Generate KPI digest at CSX."
inputParameters:
- name: week
in: body
type: string
description: "Week ending."
- name: dist
in: body
type: string
description: "Distribution list."
steps:
- name: ops
type: call
call: "snowflake.query"
with:
query: "SELECT * FROM kpis WHERE w='{{week}}'"
- name: fin
type: call
call: "oracle.get-summary"
with:
period: "{{week}}"
- name: refresh
type: call
call: "power-bi.refresh"
with:
dataset: "exec_kpis"
- name: send
type: call
call: "email.send"
with:
to: "{{dist}}"
subject: "KPIs - {{week}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://csx.com.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: oracle
baseUri: "https://oracle.csx.com/api/v1"
authentication:
type: bearer
token: "$secrets.oracle_token"
resources:
- name: fin
path: "/summary"
operations:
- name: get-summary
method: GET
- type: http
namespace: power-bi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.power_bi_token"
resources:
- name: datasets
path: "/datasets/{{dataset}}/refreshes"
inputParameters:
- name: dataset
in: path
operations:
- name: refresh
method: POST
- type: http
namespace: email
baseUri: "https://email.csx.com/api/v1"
authentication:
type: bearer
token: "$secrets.email_token"
resources:
- name: messages
path: "/send"
operations:
- name: send
method: POST
Checks K8s pod health at CSX.
naftiko: "0.5"
info:
label: "K8s Pod Health"
description: "Checks K8s pod health at CSX."
tags:
- containers
- kubernetes
- infrastructure
capability:
exposes:
- type: mcp
namespace: k8s-pod
port: 8080
tools:
- name: check-pod
description: "Check pod at CSX."
inputParameters:
- name: namespace
in: body
type: string
description: "Namespace."
- name: pod
in: body
type: string
description: "Pod name."
call: "k8s.get-pod"
with:
namespace: "{{namespace}}"
pod: "{{pod}}"
outputParameters:
- name: phase
type: string
mapping: "$.status.phase"
consumes:
- type: http
namespace: k8s
baseUri: "https://k8s.csx.com/api/v1"
authentication:
type: bearer
token: "$secrets.k8s_token"
resources:
- name: pods
path: "/namespaces/{{namespace}}/pods/{{pod}}"
inputParameters:
- name: namespace
in: path
- name: pod
in: path
operations:
- name: get-pod
method: GET
Checks license compliance at CSX via scanning, entitlements, and procurement.
naftiko: "0.5"
info:
label: "License Compliance Pipeline"
description: "Checks license compliance at CSX via scanning, entitlements, and procurement."
tags:
- compliance
- licensing
- procurement
capability:
exposes:
- type: mcp
namespace: license-comp
port: 8080
tools:
- name: check-licenses
description: "Check license compliance at CSX."
inputParameters:
- name: software
in: body
type: string
description: "Software."
- name: vendor
in: body
type: string
description: "Vendor."
steps:
- name: scan
type: call
call: "assets.installations"
with:
sw: "{{software}}"
- name: entitlements
type: call
call: "licenses.get"
with:
sw: "{{software}}"
- name: flag
type: call
call: "compliance.flag"
with:
installed: "{{scan.count}}"
entitled: "{{entitlements.count}}"
- name: procure
type: call
call: "servicenow.create-request"
with:
type: "license"
sw: "{{software}}"
consumes:
- type: http
namespace: assets
baseUri: "https://assets.csx.com/api/v1"
authentication:
type: bearer
token: "$secrets.asset_token"
resources:
- name: installations
path: "/installations"
operations:
- name: installations
method: GET
- type: http
namespace: licenses
baseUri: "https://licenses.csx.com/api/v1"
authentication:
type: bearer
token: "$secrets.license_token"
resources:
- name: ent
path: "/entitlements"
operations:
- name: get
method: GET
- type: http
namespace: compliance
baseUri: "https://compliance.csx.com/api/v1"
authentication:
type: bearer
token: "$secrets.compliance_token"
resources:
- name: overages
path: "/flag"
operations:
- name: flag
method: POST
- type: http
namespace: servicenow
baseUri: "https://csx.com.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: requests
path: "/table/sc_request"
operations:
- name: create-request
method: POST
Optimizes locomotive distribution across terminals, assigns power to trains, and notifies dispatch.
naftiko: "0.5"
info:
label: "Locomotive Distribution Pipeline"
description: "Optimizes locomotive distribution across terminals, assigns power to trains, and notifies dispatch."
tags: [locomotive, distribution, dispatch, microsoft-teams]
capability:
exposes:
- type: mcp
namespace: locomotive-distribution
port: 8080
tools:
- name: optimize-locomotive-distribution
description: "Given a terminal, optimize locomotive assignments and notify dispatch."
inputParameters:
- name: terminal_code
in: body
type: string
description: "The terminal code."
steps:
- name: get-available-power
type: call
call: "locomotive-mgmt.get-available"
with: { terminal: "{{terminal_code}}" }
- name: optimize-assignments
type: call
call: "locomotive-mgmt.optimize"
with: { terminal: "{{terminal_code}}", available_units: "{{get-available-power.units}}" }
- name: notify-dispatch
type: call
call: "msteams.send-message"
with: { channel_id: "dispatch-ops", text: "Locomotive distribution: {{terminal_code}}. {{get-available-power.total_units}} units available. {{optimize-assignments.assigned_count}} assigned to departing trains." }
consumes:
- type: http
namespace: locomotive-mgmt
baseUri: "https://api.internal.csx.com/locomotives/v1"
authentication: { type: bearer, token: "$secrets.locomotive_token" }
resources:
- name: available
path: "/terminals/{{terminal}}/available"
inputParameters: [{ name: terminal, in: path }]
operations: [{ name: get-available, method: GET }]
- name: optimize
path: "/optimize"
operations: [{ name: optimize, method: POST }]
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication: { type: bearer, token: "$secrets.msgraph_token" }
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters: [{ name: channel_id, in: path }]
operations: [{ name: send-message, method: POST }]
When locomotive emission testing is due, creates a SAP work order, schedules the test at a maintenance facility, and files results with the compliance system.
naftiko: "0.5"
info:
label: "Locomotive Emission Testing Pipeline"
description: "When locomotive emission testing is due, creates a SAP work order, schedules the test at a maintenance facility, and files results with the compliance system."
tags: [emissions, locomotive, testing, sap, compliance]
capability:
exposes:
- type: mcp
namespace: emission-testing
port: 8080
tools:
- name: schedule-emission-test
description: "Create SAP work order, schedule test, and file compliance results."
inputParameters:
- name: locomotive_id
in: body
type: string
description: "The locomotive unit number."
- name: test_date
in: body
type: string
description: "The planned test date."
steps:
- name: create-wo
type: call
call: "sap.create-maintenance-order"
with: { equipment: "{{locomotive_id}}", order_type: "EM01", planned_start: "{{test_date}}" }
- name: schedule-facility
type: call
call: "facility-mgmt.schedule-test"
with: { locomotive_id: "{{locomotive_id}}", test_type: "emission", date: "{{test_date}}" }
- name: notify-compliance
type: call
call: "msteams.send-message"
with: { channel_id: "environmental", text: "Emission test scheduled: Loco {{locomotive_id}} on {{test_date}}. WO: {{create-wo.order_number}}. Facility: {{schedule-facility.facility_name}}." }
consumes:
- type: http
namespace: sap
baseUri: "https://csx-s4.sap.com/sap/opu/odata/sap/API_MAINTENANCEORDER"
authentication: { type: basic, username: "$secrets.sap_user", password: "$secrets.sap_password" }
resources:
- name: orders
path: "/MaintenanceOrder"
operations: [{ name: create-maintenance-order, method: POST }]
- type: http
namespace: facility-mgmt
baseUri: "https://api.internal.csx.com/facilities/v1"
authentication: { type: bearer, token: "$secrets.facility_token" }
resources:
- name: tests
path: "/emission-tests"
operations: [{ name: schedule-test, method: POST }]
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication: { type: bearer, token: "$secrets.msgraph_token" }
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters: [{ name: channel_id, in: path }]
operations: [{ name: send-message, method: POST }]
Pulls locomotive telemetry from the IoT platform, analyzes engine health metrics, creates a maintenance work order in SAP if anomalies detected, and notifies the mechanical team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Locomotive Health Monitoring Pipeline"
description: "Pulls locomotive telemetry from the IoT platform, analyzes engine health metrics, creates a maintenance work order in SAP if anomalies detected, and notifies the mechanical team via Microsoft Teams."
tags:
- locomotive
- iot
- predictive-maintenance
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: locomotive-health
port: 8080
tools:
- name: check-locomotive-health
description: "Given a locomotive ID, pull telemetry, analyze health, create a work order if needed, and notify the team."
inputParameters:
- name: locomotive_id
in: body
type: string
description: "The locomotive unit number."
steps:
- name: get-telemetry
type: call
call: "iot.get-locomotive-telemetry"
with:
unit_id: "{{locomotive_id}}"
- name: analyze-health
type: call
call: "analytics.evaluate-engine-health"
with:
unit_id: "{{locomotive_id}}"
engine_temp: "{{get-telemetry.engine_temp}}"
oil_pressure: "{{get-telemetry.oil_pressure}}"
fuel_consumption: "{{get-telemetry.fuel_rate}}"
- name: create-work-order
type: call
call: "sap.create-maintenance-order"
with:
equipment: "{{locomotive_id}}"
order_type: "PM01"
description: "Predicted maintenance: {{analyze-health.anomaly_type}}. Health score: {{analyze-health.health_score}}/100."
- name: notify-mechanical
type: call
call: "msteams.send-message"
with:
channel_id: "mechanical-ops"
text: "Locomotive {{locomotive_id}} health alert: {{analyze-health.anomaly_type}}. Health score: {{analyze-health.health_score}}/100. WO: {{create-work-order.order_number}}."
consumes:
- type: http
namespace: iot
baseUri: "https://api.internal.csx.com/iot/v1"
authentication:
type: bearer
token: "$secrets.iot_token"
resources:
- name: locomotives
path: "/locomotives/{{unit_id}}/telemetry"
inputParameters:
- name: unit_id
in: path
operations:
- name: get-locomotive-telemetry
method: GET
- type: http
namespace: analytics
baseUri: "https://api.internal.csx.com/analytics/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: health
path: "/engine-health/evaluate"
operations:
- name: evaluate-engine-health
method: POST
- type: http
namespace: sap
baseUri: "https://csx-s4.sap.com/sap/opu/odata/sap/API_MAINTENANCEORDER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: orders
path: "/MaintenanceOrder"
operations:
- name: create-maintenance-order
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Generates monthly security reports at CSX from Splunk and Qualys.
naftiko: "0.5"
info:
label: "Monthly Security Report Pipeline"
description: "Generates monthly security reports at CSX from Splunk and Qualys."
tags:
- security
- reporting
- splunk
- compliance
capability:
exposes:
- type: mcp
namespace: sec-report
port: 8080
tools:
- name: gen-sec-report
description: "Generate security report at CSX."
inputParameters:
- name: month
in: body
type: string
description: "Month."
steps:
- name: splunk
type: call
call: "splunk.search"
with:
query: "index=security earliest=-30d"
- name: scans
type: call
call: "qualys.results"
with:
month: "{{month}}"
- name: compile
type: call
call: "analytics.compile-security"
with:
events: "{{splunk.count}}"
vulns: "{{scans.critical}}"
- name: send
type: call
call: "email.send"
with:
to: "ciso@co.com"
subject: "Security - {{month}}"
consumes:
- type: http
namespace: splunk
baseUri: "https://splunk.csx.com:8089/services"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: search
path: "/search/jobs"
operations:
- name: search
method: POST
- type: http
namespace: qualys
baseUri: "https://qualysapi.qualys.com/api/v2"
authentication:
type: bearer
token: "$secrets.qualys_token"
resources:
- name: results
path: "/fo/scan/results"
operations:
- name: results
method: GET
- type: http
namespace: analytics
baseUri: "https://analytics.csx.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: security
path: "/compile"
operations:
- name: compile-security
method: POST
- type: http
namespace: email
baseUri: "https://email.csx.com/api/v1"
authentication:
type: bearer
token: "$secrets.email_token"
resources:
- name: messages
path: "/send"
operations:
- name: send
method: POST
Retrieves network velocity metrics, returning cars online, trip plan compliance, and average train speed.
naftiko: "0.5"
info:
label: "Network Velocity Dashboard"
description: "Retrieves network velocity metrics, returning cars online, trip plan compliance, and average train speed."
tags: [network-operations, velocity, kpi]
capability:
exposes:
- type: mcp
namespace: network-velocity
port: 8080
tools:
- name: get-network-velocity
description: "Look up network velocity KPIs. Returns cars online, trip plan compliance, and avg speed."
inputParameters:
- name: region
in: body
type: string
description: "The operating region."
call: "ops-metrics.get-network-velocity"
with: { region: "{{region}}" }
outputParameters:
- name: cars_online
type: number
mapping: "$.velocity.carsOnline"
- name: trip_plan_compliance_pct
type: number
mapping: "$.velocity.tripPlanCompliance"
- name: avg_train_speed_mph
type: number
mapping: "$.velocity.avgTrainSpeed"
consumes:
- type: http
namespace: ops-metrics
baseUri: "https://api.internal.csx.com/operations/v1"
authentication: { type: bearer, token: "$secrets.ops_token" }
resources:
- name: velocity
path: "/network/velocity"
operations: [{ name: get-network-velocity, method: GET }]
Onboards employees at CSX with Okta, ServiceNow, Slack, and calendar.
naftiko: "0.5"
info:
label: "New Employee IT Onboarding Pipeline"
description: "Onboards employees at CSX with Okta, ServiceNow, Slack, and calendar."
tags:
- hr
- onboarding
- okta
- servicenow
- slack
capability:
exposes:
- type: mcp
namespace: it-onboarding
port: 8080
tools:
- name: onboard-employee
description: "Onboard employees at CSX."
inputParameters:
- name: name
in: body
type: string
description: "Name."
- name: dept
in: body
type: string
description: "Department."
- name: start
in: body
type: string
description: "Start date."
steps:
- name: okta
type: call
call: "okta.create-user"
with:
name: "{{name}}"
department: "{{dept}}"
- name: equip
type: call
call: "servicenow.create-request"
with:
type: "new_hire"
for: "{{name}}"
- name: slack
type: call
call: "slack.invite"
with:
email: "{{okta.email}}"
- name: orient
type: call
call: "calendar.create-event"
with:
title: "Orientation - {{name}}"
date: "{{start}}"
consumes:
- type: http
namespace: okta
baseUri: "https://csx.com.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_api_token"
resources:
- name: users
path: "/users"
operations:
- name: create-user
method: POST
- type: http
namespace: servicenow
baseUri: "https://csx.com.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: requests
path: "/table/sc_request"
operations:
- name: create-request
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: users
path: "/users.admin.invite"
operations:
- name: invite
method: POST
- type: http
namespace: calendar
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.microsoft_graph_token"
resources:
- name: events
path: "/users/hr/events"
operations:
- name: create-event
method: POST
Checks New Relic APM at CSX.
naftiko: "0.5"
info:
label: "New Relic APM Check"
description: "Checks New Relic APM at CSX."
tags:
- monitoring
- new-relic
- apm
capability:
exposes:
- type: mcp
namespace: nr-apm
port: 8080
tools:
- name: check-apm
description: "Check APM at CSX."
inputParameters:
- name: app_id
in: body
type: string
description: "App ID."
call: "newrelic.get-app"
with:
app_id: "{{app_id}}"
outputParameters:
- name: health
type: string
mapping: "$.application.health_status"
consumes:
- type: http
namespace: newrelic
baseUri: "https://api.newrelic.com/v2"
authentication:
type: bearer
token: "$secrets.new_relic_api_key"
resources:
- name: applications
path: "/applications/{{app_id}}.json"
inputParameters:
- name: app_id
in: path
operations:
- name: get-app
method: GET
Checks Okta user at CSX.
naftiko: "0.5"
info:
label: "Okta User Check"
description: "Checks Okta user at CSX."
tags:
- identity
- okta
- access-management
capability:
exposes:
- type: mcp
namespace: okta-user
port: 8080
tools:
- name: check-user
description: "Check user at CSX."
inputParameters:
- name: email
in: body
type: string
description: "Email."
call: "okta.get-user"
with:
email: "{{email}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: okta
baseUri: "https://csx.com.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_api_token"
resources:
- name: users
path: "/users/{{email}}"
inputParameters:
- name: email
in: path
operations:
- name: get-user
method: GET
Checks on-call at CSX.
naftiko: "0.5"
info:
label: "PagerDuty On-Call Check"
description: "Checks on-call at CSX."
tags:
- incident-management
- pagerduty
- on-call
capability:
exposes:
- type: mcp
namespace: pd-oncall
port: 8080
tools:
- name: get-oncall
description: "Check on-call at CSX."
inputParameters:
- name: schedule_id
in: body
type: string
description: "Schedule ID."
call: "pagerduty.get-oncall"
with:
schedule_id: "{{schedule_id}}"
outputParameters:
- name: user
type: string
mapping: "$.oncalls[0].user.summary"
consumes:
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: oncalls
path: "/oncalls"
operations:
- name: get-oncall
method: GET
Retrieves the PTC system status for a locomotive, returning PTC mode, territory coverage, and last communication timestamp.
naftiko: "0.5"
info:
label: "Positive Train Control Status"
description: "Retrieves the PTC system status for a locomotive, returning PTC mode, territory coverage, and last communication timestamp."
tags:
- ptc
- safety
- locomotive
capability:
exposes:
- type: mcp
namespace: ptc-monitoring
port: 8080
tools:
- name: get-ptc-status
description: "Look up PTC status for a locomotive. Returns PTC mode, coverage, and last communication."
inputParameters:
- name: locomotive_id
in: body
type: string
description: "The locomotive unit number."
call: "ptc.get-status"
with:
unit_id: "{{locomotive_id}}"
outputParameters:
- name: ptc_mode
type: string
mapping: "$.ptc.currentMode"
- name: territory_coverage
type: string
mapping: "$.ptc.territoryCoverage"
- name: last_comm
type: string
mapping: "$.ptc.lastCommunication"
consumes:
- type: http
namespace: ptc
baseUri: "https://api.internal.csx.com/ptc/v1"
authentication:
type: bearer
token: "$secrets.ptc_token"
resources:
- name: status
path: "/locomotives/{{unit_id}}/status"
inputParameters:
- name: unit_id
in: path
operations:
- name: get-status
method: GET
Creates postmortems at CSX.
naftiko: "0.5"
info:
label: "Incident Postmortem Pipeline"
description: "Creates postmortems at CSX."
tags:
- incident-management
- postmortem
- pagerduty
- confluence
capability:
exposes:
- type: mcp
namespace: postmortem
port: 8080
tools:
- name: create-postmortem
description: "Create postmortem at CSX."
inputParameters:
- name: incident_id
in: body
type: string
description: "Incident ID."
steps:
- name: timeline
type: call
call: "pagerduty.get-log"
with:
id: "{{incident_id}}"
- name: metrics
type: call
call: "datadog.get-metrics"
with:
incident: "{{incident_id}}"
- name: doc
type: call
call: "confluence.create-page"
with:
title: "Postmortem: {{timeline.title}}"
body: "Impact: {{metrics.impact}}"
- name: review
type: call
call: "calendar.create-event"
with:
title: "Review: {{timeline.title}}"
consumes:
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: incidents
path: "/incidents/{{id}}/log_entries"
inputParameters:
- name: id
in: path
operations:
- name: get-log
method: GET
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v2"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: incidents
path: "/incidents"
operations:
- name: get-metrics
method: GET
- type: http
namespace: confluence
baseUri: "https://csx.com.atlassian.net/wiki/rest/api"
authentication:
type: bearer
token: "$secrets.confluence_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
- type: http
namespace: calendar
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.microsoft_graph_token"
resources:
- name: events
path: "/users/sre/events"
operations:
- name: create-event
method: POST
Triggers a Power BI dataset refresh for the railroad operations dashboard and returns the refresh status.
naftiko: "0.5"
info:
label: "Power BI Operations Dashboard Refresh"
description: "Triggers a Power BI dataset refresh for the railroad operations dashboard and returns the refresh status."
tags:
- analytics
- power-bi
- operations
capability:
exposes:
- type: mcp
namespace: ops-analytics
port: 8080
tools:
- name: refresh-ops-dashboard
description: "Trigger a Power BI dataset refresh for operations analytics. Returns refresh status."
inputParameters:
- name: workspace_id
in: body
type: string
description: "The Power BI workspace ID."
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID."
call: "powerbi.refresh-dataset"
with:
workspace_id: "{{workspace_id}}"
dataset_id: "{{dataset_id}}"
outputParameters:
- name: refresh_id
type: string
mapping: "$.id"
- name: status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: workspace_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
Checks Power BI refresh at CSX.
naftiko: "0.5"
info:
label: "Power BI Refresh Check"
description: "Checks Power BI refresh at CSX."
tags:
- analytics
- power-bi
- dashboards
capability:
exposes:
- type: mcp
namespace: pbi-refresh
port: 8080
tools:
- name: check-refresh
description: "Check refresh at CSX."
inputParameters:
- name: dataset_id
in: body
type: string
description: "Dataset ID."
call: "power-bi.get-refresh"
with:
dataset_id: "{{dataset_id}}"
outputParameters:
- name: status
type: string
mapping: "$.value[0].status"
consumes:
- type: http
namespace: power-bi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.power_bi_token"
resources:
- name: datasets
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: get-refresh
method: GET
Generates compliance reports at CSX from Snowflake, Power BI, and email.
naftiko: "0.5"
info:
label: "Quarterly Compliance Report Pipeline"
description: "Generates compliance reports at CSX from Snowflake, Power BI, and email."
tags:
- compliance
- reporting
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: compliance-rpt
port: 8080
tools:
- name: gen-report
description: "Generate compliance reports at CSX."
inputParameters:
- name: quarter
in: body
type: string
description: "Quarter."
- name: type
in: body
type: string
description: "Type."
steps:
- name: data
type: call
call: "snowflake.query"
with:
query: "SELECT * FROM compliance WHERE q='{{quarter}}'"
- name: metrics
type: call
call: "analytics.compute"
with:
data: "{{data.results}}"
- name: refresh
type: call
call: "power-bi.refresh"
with:
dataset: "compliance"
- name: send
type: call
call: "email.send"
with:
to: "compliance@co.com"
subject: "{{type}} - {{quarter}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://csx.com.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: analytics
baseUri: "https://analytics.csx.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: metrics
path: "/compute"
operations:
- name: compute
method: POST
- type: http
namespace: power-bi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.power_bi_token"
resources:
- name: datasets
path: "/datasets/{{dataset}}/refreshes"
inputParameters:
- name: dataset
in: path
operations:
- name: refresh
method: POST
- type: http
namespace: email
baseUri: "https://email.csx.com/api/v1"
authentication:
type: bearer
token: "$secrets.email_token"
resources:
- name: messages
path: "/send"
operations:
- name: send
method: POST
Retrieves corridor capacity metrics, returning daily train count, capacity utilization, and bottleneck locations.
naftiko: "0.5"
info:
label: "Rail Corridor Capacity Utilization"
description: "Retrieves corridor capacity metrics, returning daily train count, capacity utilization, and bottleneck locations."
tags: [capacity-planning, corridor, operations]
capability:
exposes:
- type: mcp
namespace: corridor-capacity
port: 8080
tools:
- name: get-corridor-utilization
description: "Look up rail corridor capacity. Returns train count, utilization, and bottlenecks."
inputParameters:
- name: corridor_id
in: body
type: string
description: "The rail corridor ID."
call: "rail-planning.get-corridor-metrics"
with: { corridor_id: "{{corridor_id}}" }
outputParameters:
- name: daily_trains
type: number
mapping: "$.corridor.dailyTrainCount"
- name: utilization_pct
type: number
mapping: "$.corridor.utilizationPercentage"
- name: bottleneck
type: string
mapping: "$.corridor.primaryBottleneck"
consumes:
- type: http
namespace: rail-planning
baseUri: "https://api.internal.csx.com/rail-planning/v1"
authentication: { type: bearer, token: "$secrets.rail_planning_token" }
resources:
- name: corridors
path: "/corridors/{{corridor_id}}/metrics"
inputParameters: [{ name: corridor_id, in: path }]
operations: [{ name: get-corridor-metrics, method: GET }]
Retrieves the inspection status of a railroad switch, returning last inspection date, condition, and next due date.
naftiko: "0.5"
info:
label: "Rail Switch Inspection Status"
description: "Retrieves the inspection status of a railroad switch, returning last inspection date, condition, and next due date."
tags: [switches, track-maintenance, inspection]
capability:
exposes:
- type: mcp
namespace: switch-maintenance
port: 8080
tools:
- name: get-switch-inspection
description: "Look up switch inspection status. Returns last inspection, condition, and next due."
inputParameters:
- name: switch_id
in: body
type: string
description: "The switch identifier."
call: "track-mgmt.get-switch-status"
with: { switch_id: "{{switch_id}}" }
outputParameters:
- name: last_inspection
type: string
mapping: "$.switch.lastInspectionDate"
- name: condition
type: string
mapping: "$.switch.condition"
- name: next_due
type: string
mapping: "$.switch.nextInspectionDue"
consumes:
- type: http
namespace: track-mgmt
baseUri: "https://api.internal.csx.com/track/v1"
authentication: { type: bearer, token: "$secrets.track_token" }
resources:
- name: switches
path: "/switches/{{switch_id}}/inspection"
inputParameters: [{ name: switch_id, in: path }]
operations: [{ name: get-switch-status, method: GET }]
Retrieves bad-ordered railcars at a location, returning car count, defect types, and estimated repair time.
naftiko: "0.5"
info:
label: "Railcar Bad Order Report"
description: "Retrieves bad-ordered railcars at a location, returning car count, defect types, and estimated repair time."
tags: [railcar, bad-order, maintenance]
capability:
exposes:
- type: mcp
namespace: car-health
port: 8080
tools:
- name: get-bad-order-cars
description: "Look up bad-ordered cars at a location. Returns count, defects, and repair time."
inputParameters:
- name: location_code
in: body
type: string
description: "The terminal or yard location code."
call: "car-mgmt.get-bad-orders"
with: { location: "{{location_code}}" }
outputParameters:
- name: car_count
type: number
mapping: "$.badOrders.totalCount"
- name: top_defect
type: string
mapping: "$.badOrders.topDefectType"
- name: avg_repair_hours
type: number
mapping: "$.badOrders.avgRepairHours"
consumes:
- type: http
namespace: car-mgmt
baseUri: "https://api.internal.csx.com/car-management/v1"
authentication: { type: bearer, token: "$secrets.car_mgmt_token" }
resources:
- name: bad-orders
path: "/locations/{{location}}/bad-orders"
inputParameters: [{ name: location, in: path }]
operations: [{ name: get-bad-orders, method: GET }]
Pulls railcar fleet data from the car management system, generates utilization analytics in the reporting platform, and sends the fleet report to management via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Railcar Fleet Utilization Report Pipeline"
description: "Pulls railcar fleet data from the car management system, generates utilization analytics in the reporting platform, and sends the fleet report to management via Microsoft Outlook."
tags:
- fleet-management
- railcar
- analytics
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: fleet-analytics
port: 8080
tools:
- name: generate-fleet-report
description: "Given a date range, pull fleet data, generate utilization report, and email to management."
inputParameters:
- name: start_date
in: body
type: string
description: "Start date."
- name: end_date
in: body
type: string
description: "End date."
steps:
- name: get-fleet-data
type: call
call: "car-mgmt.get-fleet-utilization"
with:
start: "{{start_date}}"
end: "{{end_date}}"
- name: generate-report
type: call
call: "reporting.generate-fleet-report"
with:
data: "{{get-fleet-data.utilization}}"
period: "{{start_date}} to {{end_date}}"
- name: send-report
type: call
call: "outlook.send-email"
with:
to: "fleet-management@csx.com"
subject: "Fleet Utilization Report: {{start_date}} to {{end_date}}"
body: "Cars in service: {{get-fleet-data.cars_in_service}}. Avg cycle time: {{get-fleet-data.avg_cycle_days}} days. Utilization: {{get-fleet-data.utilization_pct}}%. Report: {{generate-report.url}}."
consumes:
- type: http
namespace: car-mgmt
baseUri: "https://api.internal.csx.com/car-management/v1"
authentication:
type: bearer
token: "$secrets.car_mgmt_token"
resources:
- name: utilization
path: "/fleet/utilization"
operations:
- name: get-fleet-utilization
method: GET
- type: http
namespace: reporting
baseUri: "https://api.internal.csx.com/reporting/v1"
authentication:
type: bearer
token: "$secrets.reporting_token"
resources:
- name: fleet-reports
path: "/fleet-reports"
operations:
- name: generate-fleet-report
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/users/{{from}}/sendMail"
operations:
- name: send-email
method: POST
Retrieves the latest mechanical inspection results for a railcar, returning inspection type, date, defects found, and pass/fail status.
naftiko: "0.5"
info:
label: "Railcar Inspection Report"
description: "Retrieves the latest mechanical inspection results for a railcar, returning inspection type, date, defects found, and pass/fail status."
tags: [railcar, inspection, mechanical]
capability:
exposes:
- type: mcp
namespace: car-inspection
port: 8080
tools:
- name: get-car-inspection
description: "Look up railcar inspection results. Returns type, date, defects, and status."
inputParameters:
- name: reporting_mark
in: body
type: string
description: "The railcar reporting mark."
call: "car-mgmt.get-inspection"
with: { reporting_mark: "{{reporting_mark}}" }
outputParameters:
- name: inspection_type
type: string
mapping: "$.inspection.type"
- name: date
type: string
mapping: "$.inspection.date"
- name: defects_found
type: number
mapping: "$.inspection.defectCount"
- name: status
type: string
mapping: "$.inspection.status"
consumes:
- type: http
namespace: car-mgmt
baseUri: "https://api.internal.csx.com/car-management/v1"
authentication: { type: bearer, token: "$secrets.car_mgmt_token" }
resources:
- name: inspections
path: "/railcars/{{reporting_mark}}/inspection"
inputParameters: [{ name: reporting_mark, in: path }]
operations: [{ name: get-inspection, method: GET }]
Retrieves the current location of a railcar by reporting mark, returning location, train symbol, status, and last event timestamp.
naftiko: "0.5"
info:
label: "Railcar Location Tracking"
description: "Retrieves the current location of a railcar by reporting mark, returning location, train symbol, status, and last event timestamp."
tags:
- railcar-tracking
- visibility
- logistics
capability:
exposes:
- type: mcp
namespace: railcar-tracking
port: 8080
tools:
- name: get-railcar-location
description: "Track a railcar by reporting mark. Returns location, train, status, and last event time."
inputParameters:
- name: reporting_mark
in: body
type: string
description: "The railcar reporting mark (e.g., CSXT 123456)."
call: "tracking.get-railcar"
with:
reporting_mark: "{{reporting_mark}}"
outputParameters:
- name: location
type: string
mapping: "$.railcar.currentLocation"
- name: train_symbol
type: string
mapping: "$.railcar.trainSymbol"
- name: status
type: string
mapping: "$.railcar.status"
- name: last_event
type: string
mapping: "$.railcar.lastEventTimestamp"
consumes:
- type: http
namespace: tracking
baseUri: "https://api.internal.csx.com/tracking/v1"
authentication:
type: bearer
token: "$secrets.tracking_token"
resources:
- name: railcars
path: "/railcars/{{reporting_mark}}"
inputParameters:
- name: reporting_mark
in: path
operations:
- name: get-railcar
method: GET
Checks Redis at CSX.
naftiko: "0.5"
info:
label: "Redis Cache Status"
description: "Checks Redis at CSX."
tags:
- caching
- redis
- infrastructure
capability:
exposes:
- type: mcp
namespace: redis
port: 8080
tools:
- name: check-cache
description: "Check Redis at CSX."
inputParameters:
- name: instance
in: body
type: string
description: "Instance ID."
call: "redis.get-info"
with:
instance: "{{instance}}"
outputParameters:
- name: memory
type: string
mapping: "$.used_memory_human"
consumes:
- type: http
namespace: redis
baseUri: "https://redis.csx.com/api/v1"
authentication:
type: bearer
token: "$secrets.redis_token"
resources:
- name: instances
path: "/instances/{{instance}}/info"
inputParameters:
- name: instance
in: path
operations:
- name: get-info
method: GET
Checks release readiness at CSX.
naftiko: "0.5"
info:
label: "Release Readiness Pipeline"
description: "Checks release readiness at CSX."
tags:
- release-management
- devops
- quality
capability:
exposes:
- type: mcp
namespace: release-ready
port: 8080
tools:
- name: check-release
description: "Check release at CSX."
inputParameters:
- name: release_id
in: body
type: string
description: "Release ID."
- name: project
in: body
type: string
description: "Project."
steps:
- name: tests
type: call
call: "azdo.get-tests"
with:
project: "{{project}}"
release: "{{release_id}}"
- name: quality
type: call
call: "sonarqube.get-gate"
with:
project: "{{project}}"
- name: security
type: call
call: "security.get-scan"
with:
project: "{{project}}"
- name: doc
type: call
call: "confluence.create-page"
with:
title: "Release - {{release_id}}"
body: "Tests: {{tests.pass_rate}}% Quality: {{quality.status}}"
consumes:
- type: http
namespace: azdo
baseUri: "https://dev.azure.com/csx.com"
authentication:
type: bearer
token: "$secrets.azdo_token"
resources:
- name: tests
path: "/{{project}}/_apis/test/runs"
inputParameters:
- name: project
in: path
operations:
- name: get-tests
method: GET
- type: http
namespace: sonarqube
baseUri: "https://sonarqube.csx.com/api"
authentication:
type: bearer
token: "$secrets.sonarqube_token"
resources:
- name: quality
path: "/qualitygates/project_status"
operations:
- name: get-gate
method: GET
- type: http
namespace: security
baseUri: "https://security.csx.com/api/v1"
authentication:
type: bearer
token: "$secrets.security_token"
resources:
- name: scans
path: "/results"
operations:
- name: get-scan
method: GET
- type: http
namespace: confluence
baseUri: "https://csx.com.atlassian.net/wiki/rest/api"
authentication:
type: bearer
token: "$secrets.confluence_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
Retrieves a travel expense report from SAP Concur, returning total amount, approval status, and payment status.
naftiko: "0.5"
info:
label: "SAP Concur Travel Expense Report"
description: "Retrieves a travel expense report from SAP Concur, returning total amount, approval status, and payment status."
tags: [expense-management, sap-concur, finance]
capability:
exposes:
- type: mcp
namespace: expense-management
port: 8080
tools:
- name: get-expense-report
description: "Look up a SAP Concur expense report. Returns total, approval, and payment status."
inputParameters:
- name: report_id
in: body
type: string
description: "The Concur report ID."
call: "concur.get-report"
with: { report_id: "{{report_id}}" }
outputParameters:
- name: total_amount
type: number
mapping: "$.Total"
- name: approval_status
type: string
mapping: "$.ApprovalStatusName"
- name: payment_status
type: string
mapping: "$.PaymentStatusName"
consumes:
- type: http
namespace: concur
baseUri: "https://us2.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-report, method: GET }]
Looks up a SAP freight waybill by number and returns shipment status, commodity, weight, origin, destination, and estimated arrival.
naftiko: "0.5"
info:
label: "SAP Freight Waybill Status"
description: "Looks up a SAP freight waybill by number and returns shipment status, commodity, weight, origin, destination, and estimated arrival."
tags:
- freight
- sap
- waybill
capability:
exposes:
- type: mcp
namespace: freight-ops
port: 8080
tools:
- name: get-waybill
description: "Look up a SAP freight waybill. Returns status, commodity, weight, origin, destination, and ETA."
inputParameters:
- name: waybill_number
in: body
type: string
description: "The SAP waybill number."
call: "sap.get-waybill"
with:
waybill_number: "{{waybill_number}}"
outputParameters:
- name: status
type: string
mapping: "$.d.ShipmentStatus"
- name: commodity
type: string
mapping: "$.d.CommodityDescription"
- name: weight_tons
type: number
mapping: "$.d.GrossWeight"
- name: origin
type: string
mapping: "$.d.OriginStation"
- name: destination
type: string
mapping: "$.d.DestinationStation"
consumes:
- type: http
namespace: sap
baseUri: "https://csx-s4.sap.com/sap/opu/odata/sap/API_FREIGHT_ORDER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: waybills
path: "/A_FreightOrder('{{waybill_number}}')"
inputParameters:
- name: waybill_number
in: path
operations:
- name: get-waybill
method: GET
Checks SAP PO at CSX.
naftiko: "0.5"
info:
label: "SAP PO Check"
description: "Checks SAP PO at CSX."
tags:
- procurement
- sap
- purchase-orders
capability:
exposes:
- type: mcp
namespace: sap-po
port: 8080
tools:
- name: get-po
description: "Check PO at CSX."
inputParameters:
- name: po_number
in: body
type: string
description: "PO number."
call: "sap.get-po"
with:
po_number: "{{po_number}}"
outputParameters:
- name: vendor
type: string
mapping: "$.order.vendor"
- name: status
type: string
mapping: "$.order.status"
consumes:
- type: http
namespace: sap
baseUri: "https://sap.csx.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: purchase-orders
path: "/purchase-orders/{{po_number}}"
inputParameters:
- name: po_number
in: path
operations:
- name: get-po
method: GET
Looks up a SAP purchase order for railroad supplies, returning status, vendor, total value, and delivery date.
naftiko: "0.5"
info:
label: "SAP Purchase Order Status"
description: "Looks up a SAP purchase order for railroad supplies, returning status, vendor, total value, and delivery date."
tags:
- procurement
- sap
- purchase-order
capability:
exposes:
- type: mcp
namespace: procurement
port: 8080
tools:
- name: get-purchase-order
description: "Look up a SAP purchase order. Returns status, vendor, value, and delivery date."
inputParameters:
- name: po_number
in: body
type: string
description: "The SAP purchase order number."
call: "sap.get-po"
with:
po_number: "{{po_number}}"
outputParameters:
- name: status
type: string
mapping: "$.d.OverallStatus"
- name: vendor
type: string
mapping: "$.d.Supplier.CompanyName"
- name: total_value
type: string
mapping: "$.d.TotalAmount"
- name: delivery_date
type: string
mapping: "$.d.DeliveryDate"
consumes:
- type: http
namespace: sap
baseUri: "https://csx-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: purchase-orders
path: "/A_PurchaseOrder('{{po_number}}')"
inputParameters:
- name: po_number
in: path
operations:
- name: get-po
method: GET
Remediates vulnerabilities at CSX via scanning, Jira, and Slack.
naftiko: "0.5"
info:
label: "Security Vulnerability Remediation Pipeline"
description: "Remediates vulnerabilities at CSX via scanning, Jira, and Slack."
tags:
- security
- vulnerability-management
- jira
capability:
exposes:
- type: mcp
namespace: vuln-fix
port: 8080
tools:
- name: remediate
description: "Fix vulnerabilities at CSX."
inputParameters:
- name: target
in: body
type: string
description: "Target."
- name: policy
in: body
type: string
description: "Policy."
steps:
- name: scan
type: call
call: "qualys.scan"
with:
target: "{{target}}"
policy: "{{policy}}"
- name: prioritize
type: call
call: "security.prioritize"
with:
scan: "{{scan.id}}"
- name: ticket
type: call
call: "jira.create-issue"
with:
project: "SEC"
summary: "Vulns: {{prioritize.critical}} critical"
- name: notify
type: call
call: "slack.post-message"
with:
channel: "#security"
text: "Scan: {{prioritize.critical}} critical"
consumes:
- type: http
namespace: qualys
baseUri: "https://qualysapi.qualys.com/api/v2"
authentication:
type: bearer
token: "$secrets.qualys_token"
resources:
- name: scans
path: "/fo/scan"
operations:
- name: scan
method: POST
- type: http
namespace: security
baseUri: "https://security.csx.com/api/v1"
authentication:
type: bearer
token: "$secrets.security_token"
resources:
- name: vulns
path: "/prioritize"
operations:
- name: prioritize
method: POST
- type: http
namespace: jira
baseUri: "https://csx.com.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Retrieves a ServiceNow change request, returning state, approval status, planned start, and risk assessment.
naftiko: "0.5"
info:
label: "ServiceNow Change Request Status"
description: "Retrieves a ServiceNow change request, returning state, approval status, planned start, and risk assessment."
tags:
- change-management
- servicenow
capability:
exposes:
- type: mcp
namespace: change-management
port: 8080
tools:
- name: get-change-request
description: "Look up a ServiceNow change request. Returns state, approval, planned start, and risk."
inputParameters:
- name: change_number
in: body
type: string
description: "The change request number."
call: "servicenow.get-change"
with:
change_number: "{{change_number}}"
outputParameters:
- name: state
type: string
mapping: "$.result.state"
- name: approval
type: string
mapping: "$.result.approval"
- name: planned_start
type: string
mapping: "$.result.start_date"
- name: risk
type: string
mapping: "$.result.risk"
consumes:
- type: http
namespace: servicenow
baseUri: "https://csx.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: changes
path: "/table/change_request"
operations:
- name: get-change
method: GET
Checks IT incident in ServiceNow for CSX.
naftiko: "0.5"
info:
label: "ServiceNow Incident Detail Check"
description: "Checks IT incident in ServiceNow for CSX."
tags:
- it-service
- servicenow
- incident-management
capability:
exposes:
- type: mcp
namespace: snow-incident
port: 8080
tools:
- name: check-incident
description: "Check incident at CSX."
inputParameters:
- name: incident_number
in: body
type: string
description: "Incident number."
call: "servicenow.get-incident"
with:
number: "{{incident_number}}"
outputParameters:
- name: state
type: string
mapping: "$.result.state"
- name: priority
type: string
mapping: "$.result.priority"
consumes:
- type: http
namespace: servicenow
baseUri: "https://csx.com.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: get-incident
method: GET
Retrieves an IT incident from ServiceNow, returning short description, priority, state, and assigned group.
naftiko: "0.5"
info:
label: "ServiceNow IT Incident Lookup"
description: "Retrieves an IT incident from ServiceNow, returning short description, priority, state, and assigned group."
tags:
- it-service
- servicenow
capability:
exposes:
- type: mcp
namespace: it-service
port: 8080
tools:
- name: get-incident
description: "Look up a ServiceNow incident. Returns description, priority, state, and assigned group."
inputParameters:
- name: incident_number
in: body
type: string
description: "The ServiceNow incident number."
call: "servicenow.get-incident"
with:
number: "{{incident_number}}"
outputParameters:
- name: short_description
type: string
mapping: "$.result.short_description"
- name: priority
type: string
mapping: "$.result.priority"
- name: state
type: string
mapping: "$.result.state"
- name: assigned_group
type: string
mapping: "$.result.assignment_group.display_value"
consumes:
- type: http
namespace: servicenow
baseUri: "https://csx.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: get-incident
method: GET
Retrieves SharePoint metadata at CSX.
naftiko: "0.5"
info:
label: "SharePoint File Metadata"
description: "Retrieves SharePoint metadata at CSX."
tags:
- document-management
- sharepoint
- collaboration
capability:
exposes:
- type: mcp
namespace: sp-docs
port: 8080
tools:
- name: get-file
description: "Look up file at CSX."
inputParameters:
- name: site_id
in: body
type: string
description: "Site ID."
- name: file_path
in: body
type: string
description: "Path."
call: "sharepoint.get-file"
with:
site_id: "{{site_id}}"
path: "{{file_path}}"
outputParameters:
- name: name
type: string
mapping: "$.name"
- name: size
type: number
mapping: "$.size"
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.microsoft_graph_token"
resources:
- name: files
path: "/sites/{{site_id}}/drive/root:/{{path}}"
inputParameters:
- name: site_id
in: path
- name: path
in: path
operations:
- name: get-file
method: GET
Retrieves the status of a railroad signal system from the signal monitoring platform, returning signal aspect, battery voltage, and communication status.
naftiko: "0.5"
info:
label: "Signal System Status Lookup"
description: "Retrieves the status of a railroad signal system from the signal monitoring platform, returning signal aspect, battery voltage, and communication status."
tags:
- signals
- safety
- monitoring
capability:
exposes:
- type: mcp
namespace: signal-monitoring
port: 8080
tools:
- name: get-signal-status
description: "Look up signal system status. Returns aspect, battery voltage, and communication status."
inputParameters:
- name: signal_id
in: body
type: string
description: "The signal identifier."
call: "signal-monitor.get-status"
with:
signal_id: "{{signal_id}}"
outputParameters:
- name: aspect
type: string
mapping: "$.signal.currentAspect"
- name: battery_voltage
type: number
mapping: "$.signal.batteryVoltage"
- name: comm_status
type: string
mapping: "$.signal.communicationStatus"
consumes:
- type: http
namespace: signal-monitor
baseUri: "https://api.internal.csx.com/signals/v1"
authentication:
type: bearer
token: "$secrets.signal_token"
resources:
- name: signals
path: "/signals/{{signal_id}}"
inputParameters:
- name: signal_id
in: path
operations:
- name: get-status
method: GET
Monitors SLAs at CSX via Datadog and Slack.
naftiko: "0.5"
info:
label: "SLA Monitoring Pipeline"
description: "Monitors SLAs at CSX via Datadog and Slack."
tags:
- operations
- sla
- datadog
- slack
capability:
exposes:
- type: mcp
namespace: sla-monitor
port: 8080
tools:
- name: check-sla
description: "Monitor SLAs at CSX."
inputParameters:
- name: service
in: body
type: string
description: "Service."
- name: target
in: body
type: number
description: "SLA target %."
steps:
- name: metrics
type: call
call: "datadog.get-sla"
with:
service: "{{service}}"
- name: check
type: call
call: "analytics.check-sla"
with:
uptime: "{{metrics.uptime}}"
target: "{{target}}"
- name: alert
type: call
call: "slack.post-message"
with:
channel: "#ops"
text: "SLA: {{service}} at {{metrics.uptime}}% (target: {{target}}%)"
- name: log
type: call
call: "servicenow.create-incident"
with:
desc: "SLA breach: {{service}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v2"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: metrics
path: "/metrics"
operations:
- name: get-sla
method: GET
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
- type: http
namespace: servicenow
baseUri: "https://csx.com.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
Searches Splunk at CSX.
naftiko: "0.5"
info:
label: "Splunk Log Search"
description: "Searches Splunk at CSX."
tags:
- security
- splunk
- logging
capability:
exposes:
- type: mcp
namespace: splunk-search
port: 8080
tools:
- name: search-logs
description: "Search logs at CSX."
inputParameters:
- name: query
in: body
type: string
description: "SPL query."
call: "splunk.search"
with:
query: "{{query}}"
outputParameters:
- name: count
type: number
mapping: "$.results.count"
consumes:
- type: http
namespace: splunk
baseUri: "https://splunk.csx.com:8089/services"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: search
path: "/search/jobs"
operations:
- name: search
method: POST
Retrieves Teams activity at CSX.
naftiko: "0.5"
info:
label: "Teams Channel Activity"
description: "Retrieves Teams activity at CSX."
tags:
- communications
- microsoft-teams
- analytics
capability:
exposes:
- type: mcp
namespace: teams-activity
port: 8080
tools:
- name: get-activity
description: "Check Teams activity at CSX."
inputParameters:
- name: team_id
in: body
type: string
description: "Team ID."
- name: channel_id
in: body
type: string
description: "Channel ID."
call: "teams.get-messages"
with:
team_id: "{{team_id}}"
channel_id: "{{channel_id}}"
outputParameters:
- name: count
type: number
mapping: "$.value.length"
consumes:
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.microsoft_graph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: get-messages
method: GET
Retrieves average railcar dwell time at a terminal, returning average hours, car count, and longest dwell.
naftiko: "0.5"
info:
label: "Terminal Dwell Time Report"
description: "Retrieves average railcar dwell time at a terminal, returning average hours, car count, and longest dwell."
tags: [terminal, dwell-time, operations-metrics]
capability:
exposes:
- type: mcp
namespace: terminal-metrics
port: 8080
tools:
- name: get-dwell-time
description: "Look up terminal dwell metrics. Returns avg hours, car count, and longest dwell."
inputParameters:
- name: terminal_code
in: body
type: string
description: "The terminal code."
call: "ops-metrics.get-dwell"
with: { terminal: "{{terminal_code}}" }
outputParameters:
- name: avg_dwell_hours
type: number
mapping: "$.dwell.averageHours"
- name: car_count
type: number
mapping: "$.dwell.carCount"
- name: longest_dwell_hours
type: number
mapping: "$.dwell.longestDwellHours"
consumes:
- type: http
namespace: ops-metrics
baseUri: "https://api.internal.csx.com/operations/v1"
authentication: { type: bearer, token: "$secrets.ops_token" }
resources:
- name: dwell
path: "/terminals/{{terminal}}/dwell"
inputParameters: [{ name: terminal, in: path }]
operations: [{ name: get-dwell, method: GET }]
Checks Terraform workspace at CSX.
naftiko: "0.5"
info:
label: "Terraform Workspace Check"
description: "Checks Terraform workspace at CSX."
tags:
- infrastructure
- terraform
- iac
capability:
exposes:
- type: mcp
namespace: tf-ws
port: 8080
tools:
- name: check-ws
description: "Check workspace at CSX."
inputParameters:
- name: workspace_id
in: body
type: string
description: "Workspace ID."
call: "terraform.get-ws"
with:
workspace_id: "{{workspace_id}}"
outputParameters:
- name: name
type: string
mapping: "$.data.attributes.name"
consumes:
- type: http
namespace: terraform
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: workspaces
path: "/workspaces/{{workspace_id}}"
inputParameters:
- name: workspace_id
in: path
operations:
- name: get-ws
method: GET
Identifies track segments needing tie replacement, generates work orders in SAP, and schedules maintenance windows with dispatch.
naftiko: "0.5"
info:
label: "Tie Replacement Planning Pipeline"
description: "Identifies track segments needing tie replacement, generates work orders in SAP, and schedules maintenance windows with dispatch."
tags: [track-maintenance, ties, sap, dispatch]
capability:
exposes:
- type: mcp
namespace: tie-replacement
port: 8080
tools:
- name: plan-tie-replacement
description: "Identify segments, create SAP work orders, and schedule windows."
inputParameters:
- name: subdivision
in: body
type: string
description: "The subdivision."
- name: planned_year
in: body
type: string
description: "The planned replacement year."
steps:
- name: get-deficient-segments
type: call
call: "track-mgmt.get-tie-deficient"
with: { subdivision: "{{subdivision}}" }
- name: create-work-orders
type: call
call: "sap.create-maintenance-order"
with: { equipment: "TRACK_{{subdivision}}", order_type: "TR01", description: "Tie replacement: {{get-deficient-segments.segment_count}} segments" }
- name: schedule-windows
type: call
call: "dispatch.request-maintenance-window"
with: { subdivision: "{{subdivision}}", work_order: "{{create-work-orders.order_number}}", segments: "{{get-deficient-segments.segments}}" }
consumes:
- type: http
namespace: track-mgmt
baseUri: "https://api.internal.csx.com/track/v1"
authentication: { type: bearer, token: "$secrets.track_token" }
resources:
- name: ties
path: "/subdivisions/{{subdivision}}/tie-deficient"
inputParameters: [{ name: subdivision, in: path }]
operations: [{ name: get-tie-deficient, method: GET }]
- type: http
namespace: sap
baseUri: "https://csx-s4.sap.com/sap/opu/odata/sap/API_MAINTENANCEORDER"
authentication: { type: basic, username: "$secrets.sap_user", password: "$secrets.sap_password" }
resources:
- name: orders
path: "/MaintenanceOrder"
operations: [{ name: create-maintenance-order, method: POST }]
- type: http
namespace: dispatch
baseUri: "https://api.internal.csx.com/dispatch/v1"
authentication: { type: bearer, token: "$secrets.dispatch_token" }
resources:
- name: windows
path: "/maintenance-windows"
operations: [{ name: request-maintenance-window, method: POST }]
When a track geometry car identifies a defect, creates a maintenance work order in SAP, dispatches a track maintenance crew, updates the GIS track condition layer, and notifies the engineering team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Track Defect Inspection Pipeline"
description: "When a track geometry car identifies a defect, creates a maintenance work order in SAP, dispatches a track maintenance crew, updates the GIS track condition layer, and notifies the engineering team via Microsoft Teams."
tags:
- track-maintenance
- inspection
- sap
- gis
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: track-maintenance
port: 8080
tools:
- name: process-track-defect
description: "Given a defect location and type, create a work order, dispatch crew, update GIS, and notify engineering."
inputParameters:
- name: milepost
in: body
type: string
description: "The track milepost where defect was found."
- name: subdivision
in: body
type: string
description: "The track subdivision."
- name: defect_type
in: body
type: string
description: "The defect type (e.g., gauge-wide, rail-defect, crossties, ballast)."
- name: severity
in: body
type: string
description: "Defect severity (critical, priority, routine)."
steps:
- name: create-wo
type: call
call: "sap.create-maintenance-order"
with:
equipment: "TRACK_{{subdivision}}_MP{{milepost}}"
order_type: "TM01"
activity_type: "{{defect_type}}"
priority: "{{severity}}"
- name: dispatch-crew
type: call
call: "workforce.dispatch-track-crew"
with:
subdivision: "{{subdivision}}"
milepost: "{{milepost}}"
defect_type: "{{defect_type}}"
work_order: "{{create-wo.order_number}}"
- name: update-gis
type: call
call: "gis.update-track-condition"
with:
subdivision: "{{subdivision}}"
milepost: "{{milepost}}"
condition: "{{defect_type}}"
severity: "{{severity}}"
- name: notify-engineering
type: call
call: "msteams.send-message"
with:
channel_id: "track-engineering"
text: "Track defect: {{defect_type}} ({{severity}}) at MP {{milepost}} on {{subdivision}} Sub. WO: {{create-wo.order_number}}. Crew: {{dispatch-crew.crew_id}}."
consumes:
- type: http
namespace: sap
baseUri: "https://csx-s4.sap.com/sap/opu/odata/sap/API_MAINTENANCEORDER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: orders
path: "/MaintenanceOrder"
operations:
- name: create-maintenance-order
method: POST
- type: http
namespace: workforce
baseUri: "https://api.internal.csx.com/workforce/v1"
authentication:
type: bearer
token: "$secrets.workforce_token"
resources:
- name: dispatch
path: "/track-crews/dispatch"
operations:
- name: dispatch-track-crew
method: POST
- type: http
namespace: gis
baseUri: "https://gis.internal.csx.com/arcgis/rest/services"
authentication:
type: bearer
token: "$secrets.gis_token"
resources:
- name: track-conditions
path: "/TrackConditions/FeatureServer/0/updateFeatures"
operations:
- name: update-track-condition
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When a train is being built, pulls the planned consist from the dispatch system, validates weight and length against route restrictions, and sends the consist report to the crew management system.
naftiko: "0.5"
info:
label: "Train Consist Management Pipeline"
description: "When a train is being built, pulls the planned consist from the dispatch system, validates weight and length against route restrictions, and sends the consist report to the crew management system."
tags:
- train-operations
- dispatch
- consist
- crew-management
capability:
exposes:
- type: mcp
namespace: train-consist
port: 8080
tools:
- name: validate-train-consist
description: "Given a train symbol, validate the consist against route restrictions and forward to crew management."
inputParameters:
- name: train_symbol
in: body
type: string
description: "The train symbol (e.g., Q123)."
- name: origin_yard
in: body
type: string
description: "The origin classification yard."
steps:
- name: get-consist
type: call
call: "dispatch.get-consist"
with:
train_symbol: "{{train_symbol}}"
yard: "{{origin_yard}}"
- name: validate-restrictions
type: call
call: "rail-planning.validate-consist"
with:
train_symbol: "{{train_symbol}}"
total_weight_tons: "{{get-consist.total_weight}}"
total_length_feet: "{{get-consist.total_length}}"
car_count: "{{get-consist.car_count}}"
- name: send-to-crew
type: call
call: "crew-mgmt.assign-consist"
with:
train_symbol: "{{train_symbol}}"
consist_id: "{{get-consist.consist_id}}"
departure_time: "{{get-consist.scheduled_departure}}"
consumes:
- type: http
namespace: dispatch
baseUri: "https://api.internal.csx.com/dispatch/v1"
authentication:
type: bearer
token: "$secrets.dispatch_token"
resources:
- name: consists
path: "/trains/{{train_symbol}}/consist"
inputParameters:
- name: train_symbol
in: path
operations:
- name: get-consist
method: GET
- type: http
namespace: rail-planning
baseUri: "https://api.internal.csx.com/rail-planning/v1"
authentication:
type: bearer
token: "$secrets.rail_planning_token"
resources:
- name: validation
path: "/consist/validate"
operations:
- name: validate-consist
method: POST
- type: http
namespace: crew-mgmt
baseUri: "https://api.internal.csx.com/crew/v1"
authentication:
type: bearer
token: "$secrets.crew_token"
resources:
- name: assignments
path: "/assignments"
operations:
- name: assign-consist
method: POST
When a train is delayed beyond threshold, pulls the delay reason from dispatch, updates customer ETAs in the tracking system, and notifies affected customers via the notification service.
naftiko: "0.5"
info:
label: "Train Delay Notification Pipeline"
description: "When a train is delayed beyond threshold, pulls the delay reason from dispatch, updates customer ETAs in the tracking system, and notifies affected customers via the notification service."
tags:
- train-operations
- delay-management
- customer-notification
capability:
exposes:
- type: mcp
namespace: delay-management
port: 8080
tools:
- name: process-train-delay
description: "Given a train and delay details, update customer ETAs and send delay notifications."
inputParameters:
- name: train_symbol
in: body
type: string
description: "The delayed train symbol."
- name: delay_minutes
in: body
type: number
description: "The delay in minutes."
- name: delay_reason
in: body
type: string
description: "The delay reason code."
steps:
- name: get-affected-shipments
type: call
call: "dispatch.get-train-shipments"
with:
train_symbol: "{{train_symbol}}"
- name: update-etas
type: call
call: "tracking.update-etas"
with:
train_symbol: "{{train_symbol}}"
delay_minutes: "{{delay_minutes}}"
shipments: "{{get-affected-shipments.waybills}}"
- name: notify-customers
type: call
call: "notification-service.send-delay-alerts"
with:
train_symbol: "{{train_symbol}}"
delay_minutes: "{{delay_minutes}}"
reason: "{{delay_reason}}"
affected_shipments: "{{get-affected-shipments.waybills}}"
consumes:
- type: http
namespace: dispatch
baseUri: "https://api.internal.csx.com/dispatch/v1"
authentication:
type: bearer
token: "$secrets.dispatch_token"
resources:
- name: shipments
path: "/trains/{{train_symbol}}/shipments"
inputParameters:
- name: train_symbol
in: path
operations:
- name: get-train-shipments
method: GET
- type: http
namespace: tracking
baseUri: "https://api.internal.csx.com/tracking/v1"
authentication:
type: bearer
token: "$secrets.tracking_token"
resources:
- name: etas
path: "/etas/bulk-update"
operations:
- name: update-etas
method: POST
- type: http
namespace: notification-service
baseUri: "https://api.internal.csx.com/notifications/v1"
authentication:
type: bearer
token: "$secrets.notification_token"
resources:
- name: delays
path: "/delay-alerts"
operations:
- name: send-delay-alerts
method: POST
Retrieves train performance metrics, returning average speed, dwell time, and on-time performance percentage.
naftiko: "0.5"
info:
label: "Train Performance Metrics"
description: "Retrieves train performance metrics, returning average speed, dwell time, and on-time performance percentage."
tags: [train-operations, performance, metrics]
capability:
exposes:
- type: mcp
namespace: train-performance
port: 8080
tools:
- name: get-train-performance
description: "Look up train performance. Returns avg speed, dwell time, and OTP."
inputParameters:
- name: train_symbol
in: body
type: string
description: "The train symbol."
call: "ops-metrics.get-train-perf"
with: { train_symbol: "{{train_symbol}}" }
outputParameters:
- name: avg_speed_mph
type: number
mapping: "$.performance.avgSpeed"
- name: dwell_time_hours
type: number
mapping: "$.performance.avgDwellTime"
- name: otp_pct
type: number
mapping: "$.performance.onTimePercentage"
consumes:
- type: http
namespace: ops-metrics
baseUri: "https://api.internal.csx.com/operations/v1"
authentication: { type: bearer, token: "$secrets.ops_token" }
resources:
- name: performance
path: "/trains/{{train_symbol}}/performance"
inputParameters: [{ name: train_symbol, in: path }]
operations: [{ name: get-train-perf, method: GET }]
Verifies tunnel clearance for an oversized shipment against the route clearance database.
naftiko: "0.5"
info:
label: "Tunnel Clearance Verification"
description: "Verifies tunnel clearance for an oversized shipment against the route clearance database."
tags: [clearance, oversized, route-planning]
capability:
exposes:
- type: mcp
namespace: clearance-ops
port: 8080
tools:
- name: verify-tunnel-clearance
description: "Check tunnel clearance for a shipment. Returns clearance status and restrictions."
inputParameters:
- name: route_id
in: body
type: string
description: "The route identifier."
- name: height_inches
in: body
type: number
description: "The shipment height in inches."
- name: width_inches
in: body
type: number
description: "The shipment width in inches."
call: "rail-planning.check-clearance"
with: { route_id: "{{route_id}}", height: "{{height_inches}}", width: "{{width_inches}}" }
outputParameters:
- name: clearance_status
type: string
mapping: "$.clearance.status"
- name: restrictions
type: string
mapping: "$.clearance.restrictions"
consumes:
- type: http
namespace: rail-planning
baseUri: "https://api.internal.csx.com/rail-planning/v1"
authentication: { type: bearer, token: "$secrets.rail_planning_token" }
resources:
- name: clearance
path: "/clearance/verify"
operations: [{ name: check-clearance, method: POST }]
Checks Vault secret at CSX.
naftiko: "0.5"
info:
label: "Vault Secret Metadata"
description: "Checks Vault secret at CSX."
tags:
- security
- vault
- secrets-management
capability:
exposes:
- type: mcp
namespace: vault
port: 8080
tools:
- name: check-secret
description: "Check secret at CSX."
inputParameters:
- name: path
in: body
type: string
description: "Secret path."
call: "vault.get-metadata"
with:
path: "{{path}}"
outputParameters:
- name: version
type: number
mapping: "$.data.current_version"
consumes:
- type: http
namespace: vault
baseUri: "https://vault.csx.com/v1"
authentication:
type: bearer
token: "$secrets.vault_token"
resources:
- name: secrets
path: "/secret/metadata/{{path}}"
inputParameters:
- name: path
in: path
operations:
- name: get-metadata
method: GET
Processes invoices at CSX via OCR, SAP matching, approval, and Oracle recording.
naftiko: "0.5"
info:
label: "Vendor Invoice Processing Pipeline"
description: "Processes invoices at CSX via OCR, SAP matching, approval, and Oracle recording."
tags:
- finance
- accounts-payable
- sap
- oracle
capability:
exposes:
- type: mcp
namespace: invoice-proc
port: 8080
tools:
- name: process-invoice
description: "Process invoices at CSX."
inputParameters:
- name: invoice_id
in: body
type: string
description: "Invoice ID."
- name: vendor_id
in: body
type: string
description: "Vendor ID."
steps:
- name: extract
type: call
call: "ocr.extract"
with:
doc: "{{invoice_id}}"
- name: match
type: call
call: "sap.match-po"
with:
vendor: "{{vendor_id}}"
amount: "{{extract.total}}"
- name: approve
type: call
call: "workflow.submit"
with:
invoice: "{{invoice_id}}"
- name: record
type: call
call: "oracle.create-payment"
with:
invoice: "{{invoice_id}}"
consumes:
- type: http
namespace: ocr
baseUri: "https://ocr.csx.com/api/v1"
authentication:
type: bearer
token: "$secrets.ocr_token"
resources:
- name: invoices
path: "/extract"
operations:
- name: extract
method: POST
- type: http
namespace: sap
baseUri: "https://sap.csx.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: pos
path: "/match"
operations:
- name: match-po
method: POST
- type: http
namespace: workflow
baseUri: "https://workflow.csx.com/api/v1"
authentication:
type: bearer
token: "$secrets.workflow_token"
resources:
- name: approvals
path: "/submit"
operations:
- name: submit
method: POST
- type: http
namespace: oracle
baseUri: "https://oracle.csx.com/api/v1"
authentication:
type: bearer
token: "$secrets.oracle_token"
resources:
- name: payments
path: "/payments"
operations:
- name: create-payment
method: POST
Reviews vendors at CSX.
naftiko: "0.5"
info:
label: "Quarterly Vendor Review Pipeline"
description: "Reviews vendors at CSX."
tags:
- procurement
- vendor-management
- review
capability:
exposes:
- type: mcp
namespace: vendor-review
port: 8080
tools:
- name: review-vendor
description: "Review vendors at CSX."
inputParameters:
- name: vendor_id
in: body
type: string
description: "Vendor ID."
- name: quarter
in: body
type: string
description: "Quarter."
steps:
- name: perf
type: call
call: "procurement.get-metrics"
with:
vendor: "{{vendor_id}}"
q: "{{quarter}}"
- name: scorecard
type: call
call: "analytics.scorecard"
with:
data: "{{perf.data}}"
- name: invite
type: call
call: "email.send"
with:
to: "{{perf.contact}}"
subject: "QBR - {{quarter}}"
- name: schedule
type: call
call: "calendar.create-event"
with:
title: "QBR - {{perf.name}}"
consumes:
- type: http
namespace: procurement
baseUri: "https://procurement.csx.com/api/v1"
authentication:
type: bearer
token: "$secrets.procurement_token"
resources:
- name: vendors
path: "/vendors/{{vendor}}/metrics"
inputParameters:
- name: vendor
in: path
operations:
- name: get-metrics
method: GET
- type: http
namespace: analytics
baseUri: "https://analytics.csx.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: scorecards
path: "/compute"
operations:
- name: scorecard
method: POST
- type: http
namespace: email
baseUri: "https://email.csx.com/api/v1"
authentication:
type: bearer
token: "$secrets.email_token"
resources:
- name: messages
path: "/send"
operations:
- name: send
method: POST
- type: http
namespace: calendar
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.microsoft_graph_token"
resources:
- name: events
path: "/users/proc/events"
operations:
- name: create-event
method: POST
When a wayside detector flags a hot bearing or dragging equipment, creates a ServiceNow incident, stops the train via dispatch, and notifies the mechanical team.
naftiko: "0.5"
info:
label: "Wayside Detector Alert Pipeline"
description: "When a wayside detector flags a hot bearing or dragging equipment, creates a ServiceNow incident, stops the train via dispatch, and notifies the mechanical team."
tags: [wayside-detection, safety, servicenow, dispatch, microsoft-teams]
capability:
exposes:
- type: mcp
namespace: wayside-safety
port: 8080
tools:
- name: process-detector-alert
description: "Given a detector alert, create incident, stop the train, and notify mechanical."
inputParameters:
- name: detector_id
in: body
type: string
description: "The wayside detector ID."
- name: alert_type
in: body
type: string
description: "Alert type (hot-bearing, dragging-equipment, shifted-load)."
- name: train_symbol
in: body
type: string
description: "The train symbol."
steps:
- name: create-incident
type: call
call: "servicenow.create-incident"
with: { short_description: "Wayside alert: {{alert_type}} on {{train_symbol}}", category: "wayside_detection", priority: "critical" }
- name: stop-train
type: call
call: "dispatch.issue-stop-order"
with: { train_symbol: "{{train_symbol}}", reason: "{{alert_type}}", detector_id: "{{detector_id}}" }
- name: notify-mechanical
type: call
call: "msteams.send-message"
with: { channel_id: "mechanical-ops", text: "WAYSIDE ALERT: {{alert_type}} on {{train_symbol}} at detector {{detector_id}}. Train stopped. Incident: {{create-incident.number}}." }
consumes:
- type: http
namespace: servicenow
baseUri: "https://csx.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: dispatch
baseUri: "https://api.internal.csx.com/dispatch/v1"
authentication: { type: bearer, token: "$secrets.dispatch_token" }
resources:
- name: stop-orders
path: "/stop-orders"
operations: [{ name: issue-stop-order, method: POST }]
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication: { type: bearer, token: "$secrets.msgraph_token" }
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters: [{ name: channel_id, in: path }]
operations: [{ name: send-message, method: POST }]
When severe weather is forecasted, pulls the affected route segments, adjusts train speeds via dispatch, and notifies the operations center via Microsoft Teams.
naftiko: "0.5"
info:
label: "Weather Impact Assessment Pipeline"
description: "When severe weather is forecasted, pulls the affected route segments, adjusts train speeds via dispatch, and notifies the operations center via Microsoft Teams."
tags:
- weather
- operations
- dispatch
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: weather-ops
port: 8080
tools:
- name: assess-weather-impact
description: "Given a weather alert, identify affected routes, adjust operations, and notify the ops center."
inputParameters:
- name: alert_id
in: body
type: string
description: "The weather alert identifier."
- name: alert_type
in: body
type: string
description: "The weather type (flood, snow, wind, heat)."
steps:
- name: get-affected-routes
type: call
call: "weather-service.get-impact"
with:
alert_id: "{{alert_id}}"
- name: issue-speed-restrictions
type: call
call: "dispatch.issue-slow-orders"
with:
subdivisions: "{{get-affected-routes.affected_subdivisions}}"
weather_type: "{{alert_type}}"
max_speed: "{{get-affected-routes.recommended_speed}}"
- name: notify-ops-center
type: call
call: "msteams.send-message"
with:
channel_id: "operations-center"
text: "WEATHER ALERT: {{alert_type}}. Affected subdivisions: {{get-affected-routes.affected_subdivisions}}. Speed restrictions issued: {{get-affected-routes.recommended_speed}} mph. Estimated {{get-affected-routes.affected_trains}} trains impacted."
consumes:
- type: http
namespace: weather-service
baseUri: "https://api.internal.csx.com/weather/v1"
authentication:
type: bearer
token: "$secrets.weather_token"
resources:
- name: impact
path: "/alerts/{{alert_id}}/impact"
inputParameters:
- name: alert_id
in: path
operations:
- name: get-impact
method: GET
- type: http
namespace: dispatch
baseUri: "https://api.internal.csx.com/dispatch/v1"
authentication:
type: bearer
token: "$secrets.dispatch_token"
resources:
- name: slow-orders
path: "/slow-orders"
operations:
- name: issue-slow-orders
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves an employee's compensation details from Workday, returning base pay, railroad retirement, and total compensation.
naftiko: "0.5"
info:
label: "Workday Compensation Lookup"
description: "Retrieves an employee's compensation details from Workday, returning base pay, railroad retirement, and total compensation."
tags:
- hr
- compensation
- workday
capability:
exposes:
- type: mcp
namespace: hr-compensation
port: 8080
tools:
- name: get-employee-compensation
description: "Look up employee compensation in Workday. Returns base pay, benefits, and total."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday employee ID."
call: "workday.get-compensation"
with:
worker_id: "{{employee_id}}"
outputParameters:
- name: base_pay
type: number
mapping: "$.compensationPlans[0].amount"
- name: railroad_retirement
type: number
mapping: "$.benefits.railroadRetirement"
- name: total_compensation
type: number
mapping: "$.totalBasePayAnnualized"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: compensation
path: "/workers/{{worker_id}}/compensation"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-compensation
method: GET
Retrieves employee profile from Workday for CSX.
naftiko: "0.5"
info:
label: "Workday Employee Profile Lookup"
description: "Retrieves employee profile from Workday for CSX."
tags:
- hr
- workday
- employee-directory
capability:
exposes:
- type: mcp
namespace: workday-profile
port: 8080
tools:
- name: get-employee-profile
description: "Look up CSX employee in Workday."
inputParameters:
- name: employee_id
in: body
type: string
description: "Employee ID."
call: "workday.get-worker"
with:
employee_id: "{{employee_id}}"
outputParameters:
- name: name
type: string
mapping: "$.worker.name"
- name: title
type: string
mapping: "$.worker.title"
consumes:
- type: http
namespace: workday
baseUri: "https://wd5.csx.com/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{employee_id}}"
inputParameters:
- name: employee_id
in: path
operations:
- name: get-worker
method: GET
Retrieves an employee's safety training compliance from Workday, returning completed courses, overdue, and compliance percentage.
naftiko: "0.5"
info:
label: "Workday Safety Training Compliance"
description: "Retrieves an employee's safety training compliance from Workday, returning completed courses, overdue, and compliance percentage."
tags:
- safety
- training
- workday
- compliance
capability:
exposes:
- type: mcp
namespace: safety-training
port: 8080
tools:
- name: get-training-compliance
description: "Look up safety training compliance in Workday. Returns completed, overdue, and compliance percentage."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday employee ID."
call: "workday.get-learning-status"
with:
worker_id: "{{employee_id}}"
outputParameters:
- name: completed_courses
type: number
mapping: "$.learning.completedCount"
- name: overdue_courses
type: number
mapping: "$.learning.overdueCount"
- name: compliance_pct
type: number
mapping: "$.learning.compliancePercentage"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: learning
path: "/workers/{{worker_id}}/learning"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-learning-status
method: GET
When a train arrives at a classification yard, processes the consist, assigns switching crews, and notifies the yardmaster via Microsoft Teams with the classification plan.
naftiko: "0.5"
info:
label: "Yard Operations Pipeline"
description: "When a train arrives at a classification yard, processes the consist, assigns switching crews, and notifies the yardmaster via Microsoft Teams with the classification plan."
tags:
- yard-operations
- classification
- dispatch
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: yard-ops
port: 8080
tools:
- name: process-yard-arrival
description: "Given an arriving train, create the classification plan, assign switching crews, and notify the yardmaster."
inputParameters:
- name: train_symbol
in: body
type: string
description: "The arriving train symbol."
- name: yard_code
in: body
type: string
description: "The classification yard code."
steps:
- name: get-consist
type: call
call: "dispatch.get-consist"
with:
train_symbol: "{{train_symbol}}"
- name: create-classification-plan
type: call
call: "yard-mgmt.create-plan"
with:
train_symbol: "{{train_symbol}}"
yard: "{{yard_code}}"
consist: "{{get-consist.cars}}"
- name: assign-switching-crew
type: call
call: "crew-mgmt.assign-switching"
with:
yard: "{{yard_code}}"
plan_id: "{{create-classification-plan.plan_id}}"
- name: notify-yardmaster
type: call
call: "msteams.send-message"
with:
channel_id: "{{yard_code}}-operations"
text: "Train {{train_symbol}} arriving: {{get-consist.car_count}} cars. Classification plan: {{create-classification-plan.plan_id}}. Switching crew: {{assign-switching-crew.crew_id}}."
consumes:
- type: http
namespace: dispatch
baseUri: "https://api.internal.csx.com/dispatch/v1"
authentication:
type: bearer
token: "$secrets.dispatch_token"
resources:
- name: consists
path: "/trains/{{train_symbol}}/consist"
inputParameters:
- name: train_symbol
in: path
operations:
- name: get-consist
method: GET
- type: http
namespace: yard-mgmt
baseUri: "https://api.internal.csx.com/yard/v1"
authentication:
type: bearer
token: "$secrets.yard_token"
resources:
- name: plans
path: "/classification-plans"
operations:
- name: create-plan
method: POST
- type: http
namespace: crew-mgmt
baseUri: "https://api.internal.csx.com/crew/v1"
authentication:
type: bearer
token: "$secrets.crew_token"
resources:
- name: switching
path: "/switching-assignments"
operations:
- name: assign-switching
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST