Fedex Capabilities

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

Sort
Expand

Retrieves billing invoices for a FedEx customer account.

naftiko: "0.5"
info:
  label: "Account Invoice Lookup"
  description: "Retrieves billing invoices for a FedEx customer account."
  tags:
    - billing
    - customer-service
capability:
  exposes:
    - type: mcp
      namespace: billing
      port: 8080
      tools:
        - name: get-invoices
          description: "Look up account invoices."
          inputParameters:
            - name: account_number
              in: body
              type: string
            - name: period
              in: body
              type: string
          call: "billing-api.get-invoices"
          with:
            account: "{{account_number}}"
            period: "{{period}}"
          outputParameters:
            - name: invoices
              type: array
              mapping: "$.invoices"
            - name: total_due
              type: number
              mapping: "$.totalDue"
  consumes:
    - type: http
      namespace: billing-api
      baseUri: "https://billing.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_billing_token"
      resources:
        - name: invoices
          path: "/accounts/{{account}}/invoices"
          inputParameters:
            - name: account
              in: path
          operations:
            - name: get-invoices
              method: GET

Validates a delivery address for serviceability and accuracy.

naftiko: "0.5"
info:
  label: "Address Validation"
  description: "Validates a delivery address for serviceability and accuracy."
  tags:
    - logistics
    - customer-service
capability:
  exposes:
    - type: mcp
      namespace: address
      port: 8080
      tools:
        - name: validate-address
          description: "Validate delivery address."
          inputParameters:
            - name: street
              in: body
              type: string
            - name: city
              in: body
              type: string
            - name: state
              in: body
              type: string
            - name: zip
              in: body
              type: string
          call: "address-api.validate"
          with:
            street: "{{street}}"
            city: "{{city}}"
            state: "{{state}}"
            zip: "{{zip}}"
          outputParameters:
            - name: valid
              type: boolean
              mapping: "$.isValid"
            - name: residential
              type: boolean
              mapping: "$.isResidential"
            - name: corrected_address
              type: string
              mapping: "$.correctedAddress"
  consumes:
    - type: http
      namespace: address-api
      baseUri: "https://api.fedex.com/address/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_api_token"
      resources:
        - name: validation
          path: "/addresses/resolve"
          operations:
            - name: validate
              method: POST

Exports a full headcount and base salary summary from ADP by department and cost center for use in quarterly finance reporting.

naftiko: "0.5"
info:
  label: "ADP Payroll Headcount Export for Finance"
  description: "Exports a full headcount and base salary summary from ADP by department and cost center for use in quarterly finance reporting."
  tags:
    - hr
    - finance
    - adp
    - payroll
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: finance-hr-reporting
      port: 8080
      tools:
        - name: get-payroll-headcount-summary
          description: "Returns a headcount and total salary cost summary grouped by department and cost center from ADP. Use for quarterly budget reviews, headcount planning, and executive finance reporting."
          call: "adp-hcm.export-headcount"
          outputParameters:
            - name: departments
              type: array
              mapping: "$.data"
            - name: total_employees
              type: number
              mapping: "$.total"
  consumes:
    - type: http
      namespace: adp-hcm
      baseUri: "https://api.adp.com"
      authentication:
        type: bearer
        token: "$secrets.adp_token"
      resources:
        - name: headcount-export
          path: "/hr/v2/workers"
          inputParameters:
            - name: count
              in: query
              value: "true"
          operations:
            - name: export-headcount
              method: GET

Looks up the status of a scheduled ADP payroll run by run ID and returns processing state, scheduled date, and employee count.

naftiko: "0.5"
info:
  label: "ADP Payroll Run Status Check"
  description: "Looks up the status of a scheduled ADP payroll run by run ID and returns processing state, scheduled date, and employee count."
  tags:
    - hr
    - finance
    - payroll
    - adp
capability:
  exposes:
    - type: mcp
      namespace: payroll
      port: 8080
      tools:
        - name: get-payroll-run-status
          description: "Given an ADP payroll run ID, return the current processing status, scheduled pay date, and total employee count included in the run. Use when auditing payroll cycles or resolving payroll exceptions."
          inputParameters:
            - name: run_id
              in: body
              type: string
              description: "The ADP payroll run identifier."
          call: "adp.get-payroll-run"
          with:
            run_id: "{{run_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.processingStatus.shortName"
            - name: pay_date
              type: string
              mapping: "$.payPeriod.adjustedPayDate"
            - name: employee_count
              type: number
              mapping: "$.workerCount"
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com"
      authentication:
        type: bearer
        token: "$secrets.adp_token"
      resources:
        - name: payroll-runs
          path: "/payroll/v1/payroll-output/{{run_id}}"
          inputParameters:
            - name: run_id
              in: path
          operations:
            - name: get-payroll-run
              method: GET

Generates cargo load plan for a FedEx aircraft sortie including container assignment and weight distribution.

naftiko: "0.5"
info:
  label: "Aircraft Cargo Load Plan"
  description: "Generates cargo load plan for a FedEx aircraft sortie including container assignment and weight distribution."
  tags:
    - cargo
    - flight-operations
    - logistics
capability:
  exposes:
    - type: mcp
      namespace: cargo-load
      port: 8080
      tools:
        - name: generate-load-plan
          description: "Generate aircraft cargo load plan."
          inputParameters:
            - name: flight_number
              in: body
              type: string
            - name: aircraft_type
              in: body
              type: string
          call: "cargo-api.generate-plan"
          with:
            flight: "{{flight_number}}"
            aircraft: "{{aircraft_type}}"
          outputParameters:
            - name: plan_id
              type: string
              mapping: "$.planId"
            - name: total_weight
              type: number
              mapping: "$.totalWeight"
            - name: containers
              type: array
              mapping: "$.containers"
  consumes:
    - type: http
      namespace: cargo-api
      baseUri: "https://cargo-ops.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_cargo_ops_token"
      resources:
        - name: load-plans
          path: "/load-plans/generate"
          operations:
            - name: generate-plan
              method: POST

Retrieves FedEx cargo aircraft flight status and position.

naftiko: "0.5"
info:
  label: "Aircraft Flight Status"
  description: "Retrieves FedEx cargo aircraft flight status and position."
  tags:
    - flight-operations
    - cargo
    - tracking
capability:
  exposes:
    - type: mcp
      namespace: flight-ops
      port: 8080
      tools:
        - name: get-flight-status
          description: "Get cargo flight status."
          inputParameters:
            - name: flight_number
              in: body
              type: string
          call: "flight-api.get-status"
          with:
            flight: "{{flight_number}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.status"
            - name: position
              type: string
              mapping: "$.currentPosition"
            - name: eta
              type: string
              mapping: "$.eta"
  consumes:
    - type: http
      namespace: flight-api
      baseUri: "https://flight-ops.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_flight_ops_token"
      resources:
        - name: flights
          path: "/flights/{{flight}}/status"
          inputParameters:
            - name: flight
              in: path
          operations:
            - name: get-status
              method: GET

Retrieves all members of a privileged Azure AD group for access review and exports the list to a Microsoft 365 SharePoint audit list.

naftiko: "0.5"
info:
  label: "Azure AD User Access Review"
  description: "Retrieves all members of a privileged Azure AD group for access review and exports the list to a Microsoft 365 SharePoint audit list."
  tags:
    - identity
    - security
    - azure-ad
    - microsoft-365
    - access-review
capability:
  exposes:
    - type: mcp
      namespace: identity-audit
      port: 8080
      tools:
        - name: run-access-review
          description: "Given an Azure AD privileged group ID and a SharePoint site and list ID, retrieve all group members and write them as rows to the SharePoint access review list. Use quarterly for privileged access reviews."
          inputParameters:
            - name: group_id
              in: body
              type: string
              description: "The Azure AD group ID to review membership for."
            - name: sharepoint_site_id
              in: body
              type: string
              description: "The SharePoint site ID to write the review results to."
            - name: sharepoint_list_id
              in: body
              type: string
              description: "The SharePoint list ID for the access review entries."
          steps:
            - name: get-group-members
              type: call
              call: "azure-ad-audit.list-group-members"
              with:
                group_id: "{{group_id}}"
            - name: write-to-sharepoint
              type: call
              call: "sharepoint-audit.create-list-item"
              with:
                site_id: "{{sharepoint_site_id}}"
                list_id: "{{sharepoint_list_id}}"
                members: "{{get-group-members.value}}"
  consumes:
    - type: http
      namespace: azure-ad-audit
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.azure_ad_token"
      resources:
        - name: group-members
          path: "/groups/{{group_id}}/members"
          inputParameters:
            - name: group_id
              in: path
          operations:
            - name: list-group-members
              method: GET
    - type: http
      namespace: sharepoint-audit
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: list-items
          path: "/sites/{{site_id}}/lists/{{list_id}}/items"
          inputParameters:
            - name: site_id
              in: path
            - name: list_id
              in: path
          operations:
            - name: create-list-item
              method: POST

Queries Azure Cost Management for unexpected spend spikes in FedEx subscriptions and sends an alert to the FinOps Microsoft Teams channel when thresholds are exceeded.

naftiko: "0.5"
info:
  label: "Azure Cloud Cost Anomaly Alert"
  description: "Queries Azure Cost Management for unexpected spend spikes in FedEx subscriptions and sends an alert to the FinOps Microsoft Teams channel when thresholds are exceeded."
  tags:
    - cloud
    - finops
    - azure
    - cost-management
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: cloud-finops
      port: 8080
      tools:
        - name: handle-cost-anomaly
          description: "Given an Azure subscription ID and cost anomaly threshold, query Azure Cost Management for current period spend, compare against the threshold, and post an alert to the FinOps Teams channel if exceeded. Use when responding to Azure cost anomaly alerts."
          inputParameters:
            - name: subscription_id
              in: body
              type: string
              description: "The Azure subscription ID to query for cost data."
            - name: threshold_usd
              in: body
              type: number
              description: "Spend threshold in USD. An alert is sent if current spend exceeds this value."
          steps:
            - name: get-cost-data
              type: call
              call: "azure-cost.query-usage"
              with:
                subscription_id: "{{subscription_id}}"
            - name: post-alert
              type: call
              call: "msteams-finops.send-message"
              with:
                channel_id: "$secrets.teams_finops_channel_id"
                text: "Azure Cost Alert: Subscription {{subscription_id}} has exceeded ${{threshold_usd}} threshold. Current spend: {{get-cost-data.total_cost}} {{get-cost-data.currency}}. Review billing dashboard immediately."
  consumes:
    - type: http
      namespace: azure-cost
      baseUri: "https://management.azure.com/subscriptions"
      authentication:
        type: bearer
        token: "$secrets.azure_management_token"
      resources:
        - name: cost-query
          path: "/{{subscription_id}}/providers/Microsoft.CostManagement/query"
          inputParameters:
            - name: subscription_id
              in: path
          operations:
            - name: query-usage
              method: POST
    - type: http
      namespace: msteams-finops
      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: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Triggers an Azure Data Factory pipeline run for FedEx ETL processing and returns the run ID for monitoring.

naftiko: "0.5"
info:
  label: "Azure Data Factory Pipeline Trigger"
  description: "Triggers an Azure Data Factory pipeline run for FedEx ETL processing and returns the run ID for monitoring."
  tags:
    - data
    - etl
    - azure-data-factory
    - data-pipeline
capability:
  exposes:
    - type: mcp
      namespace: etl-ops
      port: 8080
      tools:
        - name: trigger-adf-pipeline
          description: "Given an ADF factory name and pipeline name, trigger an on-demand pipeline run. Use when refreshing data feeds for logistics analytics or responding to upstream data availability events."
          inputParameters:
            - name: factory_name
              in: body
              type: string
              description: "The Azure Data Factory instance name."
            - name: pipeline_name
              in: body
              type: string
              description: "The pipeline name to trigger."
            - name: resource_group
              in: body
              type: string
              description: "The Azure resource group containing the factory."
          call: "azure-adf.create-run"
          with:
            factory_name: "{{factory_name}}"
            pipeline_name: "{{pipeline_name}}"
            resource_group: "{{resource_group}}"
          outputParameters:
            - name: run_id
              type: string
              mapping: "$.runId"
  consumes:
    - type: http
      namespace: azure-adf
      baseUri: "https://management.azure.com/subscriptions"
      authentication:
        type: bearer
        token: "$secrets.azure_management_token"
      resources:
        - name: pipeline-runs
          path: "/{{subscription_id}}/resourceGroups/{{resource_group}}/providers/Microsoft.DataFactory/factories/{{factory_name}}/pipelines/{{pipeline_name}}/createRun"
          inputParameters:
            - name: subscription_id
              in: path
            - name: resource_group
              in: path
            - name: factory_name
              in: path
            - name: pipeline_name
              in: path
          operations:
            - name: create-run
              method: POST

Triggers an Azure Databricks job run for FedEx data pipeline processing, monitors run state, and posts completion status to Microsoft Teams.

naftiko: "0.5"
info:
  label: "Azure Databricks Pipeline Run Monitor"
  description: "Triggers an Azure Databricks job run for FedEx data pipeline processing, monitors run state, and posts completion status to Microsoft Teams."
  tags:
    - data
    - analytics
    - azure-databricks
    - microsoft-teams
    - data-pipeline
capability:
  exposes:
    - type: mcp
      namespace: data-pipeline
      port: 8080
      tools:
        - name: run-databricks-job
          description: "Given a Databricks job ID, trigger a new run and post the completion status to the data-engineering Microsoft Teams channel. Use when scheduling ad-hoc pipeline runs or responding to data freshness SLA alerts."
          inputParameters:
            - name: job_id
              in: body
              type: integer
              description: "The Azure Databricks job ID to run."
            - name: notebook_params
              in: body
              type: string
              description: "Optional JSON string of notebook parameters to pass to the job run."
          steps:
            - name: trigger-job
              type: call
              call: "databricks.run-job-now"
              with:
                job_id: "{{job_id}}"
                notebook_params: "{{notebook_params}}"
            - name: notify-team
              type: call
              call: "msteams-data.send-message"
              with:
                channel_id: "$secrets.teams_data_channel_id"
                text: "Databricks job {{job_id}} started. Run ID: {{trigger-job.run_id}}. Monitor at: {{trigger-job.run_page_url}}"
  consumes:
    - type: http
      namespace: databricks
      baseUri: "https://adb-fedex.azuredatabricks.net/api/2.1"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: job-runs
          path: "/jobs/run-now"
          operations:
            - name: run-job-now
              method: POST
    - type: http
      namespace: msteams-data
      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: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

When an Azure DevOps pipeline fails on a protected branch, creates a ServiceNow incident, posts an alert to Microsoft Teams, and records a Splunk event for traceability.

naftiko: "0.5"
info:
  label: "Azure DevOps Pipeline Failure Handler"
  description: "When an Azure DevOps pipeline fails on a protected branch, creates a ServiceNow incident, posts an alert to Microsoft Teams, and records a Splunk event for traceability."
  tags:
    - devops
    - cicd
    - azure-devops
    - servicenow
    - splunk
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: devops-ops
      port: 8080
      tools:
        - name: handle-pipeline-failure
          description: "Given an Azure DevOps pipeline failure event, open a ServiceNow incident, post a Teams alert to the engineering channel, and log the failure event in Splunk. Use when a protected-branch build or release pipeline fails."
          inputParameters:
            - name: pipeline_id
              in: body
              type: string
              description: "The Azure DevOps pipeline run ID."
            - name: project
              in: body
              type: string
              description: "The Azure DevOps project name."
            - name: branch
              in: body
              type: string
              description: "The branch the pipeline ran against (e.g., main)."
            - name: failed_stage
              in: body
              type: string
              description: "Name of the stage or job that failed."
            - name: log_url
              in: body
              type: string
              description: "Direct URL to the pipeline failure log."
          steps:
            - name: create-incident
              type: call
              call: "servicenow-devops.create-incident"
              with:
                category: "software"
                short_description: "[CI/CD] Pipeline failure: {{project}} / {{branch}} — {{failed_stage}}"
                description: "Pipeline ID: {{pipeline_id}}\nLog: {{log_url}}"
                urgency: "2"
            - name: post-teams-alert
              type: call
              call: "msteams-devops.send-message"
              with:
                channel_id: "$secrets.teams_engineering_channel_id"
                text: "Pipeline failure in {{project}} ({{branch}}) — Stage: {{failed_stage}} | Incident: {{create-incident.number}} | Log: {{log_url}}"
            - name: log-splunk-event
              type: call
              call: "splunk-devops.post-event"
              with:
                sourcetype: "cicd:pipeline:failure"
                event: "project={{project}} branch={{branch}} stage={{failed_stage}} pipeline_id={{pipeline_id}} incident={{create-incident.number}}"
  consumes:
    - type: http
      namespace: servicenow-devops
      baseUri: "https://fedex.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams-devops
      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: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST
    - type: http
      namespace: splunk-devops
      baseUri: "https://fedex-splunk.example.com:8088"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.splunk_hec_token"
        placement: header
      resources:
        - name: hec-events
          path: "/services/collector/event"
          operations:
            - name: post-event
              method: POST

Triggers an Azure DevOps release pipeline for a given artifact version, monitors deployment status, and publishes the result to a Splunk dashboard.

naftiko: "0.5"
info:
  label: "Azure DevOps Release Deployment Tracker"
  description: "Triggers an Azure DevOps release pipeline for a given artifact version, monitors deployment status, and publishes the result to a Splunk dashboard."
  tags:
    - devops
    - deployment
    - azure-devops
    - splunk
capability:
  exposes:
    - type: mcp
      namespace: devops-deploy
      port: 8080
      tools:
        - name: trigger-release
          description: "Given an Azure DevOps release definition ID and artifact version, trigger a new release run and return the release ID. Use when deploying a new version to staging or production."
          inputParameters:
            - name: definition_id
              in: body
              type: string
              description: "The Azure DevOps release definition ID."
            - name: artifact_version
              in: body
              type: string
              description: "The build artifact version or tag to deploy."
            - name: environment
              in: body
              type: string
              description: "Target deployment environment (e.g., staging, production)."
          call: "azure-devops.create-release"
          with:
            definition_id: "{{definition_id}}"
            artifact_version: "{{artifact_version}}"
          outputParameters:
            - name: release_id
              type: string
              mapping: "$.id"
            - name: release_url
              type: string
              mapping: "$._links.web.href"
  consumes:
    - type: http
      namespace: azure-devops
      baseUri: "https://vsrm.dev.azure.com/fedex"
      authentication:
        type: basic
        username: "$secrets.azdo_user"
        password: "$secrets.azdo_pat"
      resources:
        - name: releases
          path: "/{{project}}/_apis/release/releases"
          inputParameters:
            - name: project
              in: path
          operations:
            - name: create-release
              method: POST

When a ServiceNow incident is resolved as a known bug, creates a linked Azure DevOps work item for the engineering backlog.

naftiko: "0.5"
info:
  label: "Azure DevOps Work Item Creation from ServiceNow"
  description: "When a ServiceNow incident is resolved as a known bug, creates a linked Azure DevOps work item for the engineering backlog."
  tags:
    - devops
    - itsm
    - servicenow
    - azure-devops
    - engineering
capability:
  exposes:
    - type: mcp
      namespace: devops-backlog
      port: 8080
      tools:
        - name: create-backlog-item-from-incident
          description: "Given a ServiceNow incident number and an Azure DevOps project, fetch the incident details and create a linked Bug work item in the engineering backlog. Use when incidents are triaged as product defects that require engineering resolution."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "The ServiceNow incident number to convert (e.g., INC0012345)."
            - name: ado_project
              in: body
              type: string
              description: "The Azure DevOps project name where the work item should be created."
          steps:
            - name: get-incident
              type: call
              call: "servicenow-backlog.get-incident"
              with:
                number: "{{incident_number}}"
            - name: create-work-item
              type: call
              call: "azdo-backlog.create-work-item"
              with:
                project: "{{ado_project}}"
                type: "Bug"
                title: "[INC] {{get-incident.short_description}}"
                description: "{{get-incident.description}}\n\nOrigin: ServiceNow {{incident_number}}"
  consumes:
    - type: http
      namespace: servicenow-backlog
      baseUri: "https://fedex.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          inputParameters:
            - name: number
              in: query
          operations:
            - name: get-incident
              method: GET
    - type: http
      namespace: azdo-backlog
      baseUri: "https://dev.azure.com/fedex"
      authentication:
        type: basic
        username: "$secrets.azdo_user"
        password: "$secrets.azdo_pat"
      resources:
        - name: work-items
          path: "/{{project}}/_apis/wit/workitems/$Bug"
          inputParameters:
            - name: project
              in: path
          operations:
            - name: create-work-item
              method: POST

Applies a new container image tag to an Azure Kubernetes Service deployment in a FedEx namespace and monitors rollout status.

naftiko: "0.5"
info:
  label: "Azure Kubernetes Service Deployment Rollout"
  description: "Applies a new container image tag to an Azure Kubernetes Service deployment in a FedEx namespace and monitors rollout status."
  tags:
    - cloud
    - kubernetes
    - azure
    - deployment
    - devops
capability:
  exposes:
    - type: mcp
      namespace: k8s-deploy
      port: 8080
      tools:
        - name: rollout-deployment
          description: "Given an AKS cluster name, namespace, deployment name, and new image tag, patch the deployment with the new image and return rollout status. Use when releasing a new container version to a FedEx AKS environment."
          inputParameters:
            - name: cluster_name
              in: body
              type: string
              description: "The AKS cluster name."
            - name: namespace
              in: body
              type: string
              description: "The Kubernetes namespace containing the deployment."
            - name: deployment_name
              in: body
              type: string
              description: "The Kubernetes deployment name to update."
            - name: image_tag
              in: body
              type: string
              description: "The new container image tag to deploy (e.g., v2.3.1)."
          call: "aks.patch-deployment"
          with:
            cluster_name: "{{cluster_name}}"
            namespace: "{{namespace}}"
            deployment_name: "{{deployment_name}}"
            image_tag: "{{image_tag}}"
          outputParameters:
            - name: rollout_status
              type: string
              mapping: "$.status.conditions[0].type"
  consumes:
    - type: http
      namespace: aks
      baseUri: "https://management.azure.com/subscriptions"
      authentication:
        type: bearer
        token: "$secrets.azure_management_token"
      resources:
        - name: deployments
          path: "/{{subscription_id}}/resourceGroups/{{resource_group}}/providers/Microsoft.ContainerService/managedClusters/{{cluster_name}}/namespaces/{{namespace}}/deployments/{{deployment_name}}"
          inputParameters:
            - name: subscription_id
              in: path
            - name: resource_group
              in: path
            - name: cluster_name
              in: path
            - name: namespace
              in: path
            - name: deployment_name
              in: path
          operations:
            - name: patch-deployment
              method: PATCH

Executes an on-demand SQL query against a FedEx Azure Synapse Analytics dedicated pool for ad-hoc data analysis and returns results for downstream reporting.

naftiko: "0.5"
info:
  label: "Azure Synapse Analytics Query Runner"
  description: "Executes an on-demand SQL query against a FedEx Azure Synapse Analytics dedicated pool for ad-hoc data analysis and returns results for downstream reporting."
  tags:
    - data
    - analytics
    - azure
    - synapse
    - sql
capability:
  exposes:
    - type: mcp
      namespace: synapse-analytics
      port: 8080
      tools:
        - name: run-synapse-query
          description: "Given a Synapse workspace name, SQL pool name, and SQL query string, execute the query and return results. Use for ad-hoc analytics against FedEx logistics and operations data stored in Azure Synapse."
          inputParameters:
            - name: workspace_name
              in: body
              type: string
              description: "The Azure Synapse Analytics workspace name."
            - name: sql_pool
              in: body
              type: string
              description: "The dedicated SQL pool name within the workspace."
            - name: query
              in: body
              type: string
              description: "The SQL query to execute against the dedicated pool."
          call: "synapse.execute-query"
          with:
            workspace_name: "{{workspace_name}}"
            sql_pool: "{{sql_pool}}"
            query: "{{query}}"
          outputParameters:
            - name: results
              type: array
              mapping: "$.rows"
            - name: row_count
              type: number
              mapping: "$.rowCount"
  consumes:
    - type: http
      namespace: synapse
      baseUri: "https://fedex-synapse.sql.azuresynapse.net"
      authentication:
        type: bearer
        token: "$secrets.synapse_token"
      resources:
        - name: sql-queries
          path: "/sql/pools/{{sql_pool}}/query"
          inputParameters:
            - name: sql_pool
              in: path
          operations:
            - name: execute-query
              method: POST

Processes bulk shipment file uploads for enterprise customers.

naftiko: "0.5"
info:
  label: "Bulk Shipment Upload"
  description: "Processes bulk shipment file uploads for enterprise customers."
  tags:
    - logistics
    - customer-service
    - shipping
capability:
  exposes:
    - type: mcp
      namespace: bulk
      port: 8080
      tools:
        - name: upload-shipments
          description: "Process bulk shipment upload."
          inputParameters:
            - name: account_number
              in: body
              type: string
            - name: file_reference
              in: body
              type: string
            - name: shipment_count
              in: body
              type: number
          call: "ship-api.bulk-upload"
          with:
            account: "{{account_number}}"
            file: "{{file_reference}}"
            count: "{{shipment_count}}"
          outputParameters:
            - name: batch_id
              type: string
              mapping: "$.batchId"
            - name: processed
              type: number
              mapping: "$.processedCount"
            - name: errors
              type: number
              mapping: "$.errorCount"
  consumes:
    - type: http
      namespace: ship-api
      baseUri: "https://api.fedex.com/ship/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_api_token"
      resources:
        - name: bulk
          path: "/bulk/upload"
          operations:
            - name: bulk-upload
              method: POST

Generates carbon emissions report for an account or shipment.

naftiko: "0.5"
info:
  label: "Carbon Footprint Report"
  description: "Generates carbon emissions report for an account or shipment."
  tags:
    - sustainability
    - analytics
    - customer-service
capability:
  exposes:
    - type: mcp
      namespace: carbon
      port: 8080
      tools:
        - name: get-carbon
          description: "Get carbon footprint."
          inputParameters:
            - name: account_number
              in: body
              type: string
            - name: period
              in: body
              type: string
          call: "analytics-api.get-carbon"
          with:
            account: "{{account_number}}"
            period: "{{period}}"
          outputParameters:
            - name: total_co2_kg
              type: number
              mapping: "$.totalCO2Kg"
            - name: per_shipment
              type: number
              mapping: "$.avgCO2PerShipment"
  consumes:
    - type: http
      namespace: analytics-api
      baseUri: "https://analytics.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_analytics_token"
      resources:
        - name: carbon
          path: "/sustainability/carbon"
          operations:
            - name: get-carbon
              method: POST

Generates a commercial invoice for international shipments.

naftiko: "0.5"
info:
  label: "Commercial Invoice Generation"
  description: "Generates a commercial invoice for international shipments."
  tags:
    - customs
    - international
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: invoices
      port: 8080
      tools:
        - name: generate-invoice
          description: "Generate commercial invoice."
          inputParameters:
            - name: tracking_number
              in: body
              type: string
            - name: declared_value
              in: body
              type: number
            - name: commodity_description
              in: body
              type: string
          call: "trade-api.generate-invoice"
          with:
            tracking: "{{tracking_number}}"
            value: "{{declared_value}}"
            commodity: "{{commodity_description}}"
          outputParameters:
            - name: invoice_id
              type: string
              mapping: "$.invoiceId"
            - name: doc_url
              type: string
              mapping: "$.documentUrl"
  consumes:
    - type: http
      namespace: trade-api
      baseUri: "https://trade.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_trade_token"
      resources:
        - name: invoices
          path: "/documents/commercial-invoice"
          operations:
            - name: generate-invoice
              method: POST

Reports ULD/container utilization metrics for air cargo operations.

naftiko: "0.5"
info:
  label: "Container Utilization Report"
  description: "Reports ULD/container utilization metrics for air cargo operations."
  tags:
    - cargo
    - analytics
    - operations
capability:
  exposes:
    - type: mcp
      namespace: containers
      port: 8080
      tools:
        - name: get-utilization
          description: "Get container utilization."
          inputParameters:
            - name: hub
              in: body
              type: string
            - name: date
              in: body
              type: string
          call: "cargo-api.get-container-util"
          with:
            hub: "{{hub}}"
            date: "{{date}}"
          outputParameters:
            - name: total_containers
              type: number
              mapping: "$.total"
            - name: utilization_pct
              type: number
              mapping: "$.utilizationPercent"
  consumes:
    - type: http
      namespace: cargo-api
      baseUri: "https://cargo-ops.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_cargo_ops_token"
      resources:
        - name: containers
          path: "/containers/utilization"
          operations:
            - name: get-container-util
              method: POST

Retrieves FedEx customer account details and shipping preferences.

naftiko: "0.5"
info:
  label: "Customer Account Lookup"
  description: "Retrieves FedEx customer account details and shipping preferences."
  tags:
    - customer-service
    - account-management
capability:
  exposes:
    - type: mcp
      namespace: accounts
      port: 8080
      tools:
        - name: get-account
          description: "Look up customer account."
          inputParameters:
            - name: account_number
              in: body
              type: string
          call: "account-api.get-details"
          with:
            account: "{{account_number}}"
          outputParameters:
            - name: company_name
              type: string
              mapping: "$.companyName"
            - name: tier
              type: string
              mapping: "$.accountTier"
            - name: default_service
              type: string
              mapping: "$.defaultService"
  consumes:
    - type: http
      namespace: account-api
      baseUri: "https://account.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_account_token"
      resources:
        - name: accounts
          path: "/accounts/{{account}}"
          inputParameters:
            - name: account
              in: path
          operations:
            - name: get-details
              method: GET

Processes a damage/loss claim by creating a case, investigating shipment history, and issuing resolution.

naftiko: "0.5"
info:
  label: "Customer Claim Orchestrator"
  description: "Processes a damage/loss claim by creating a case, investigating shipment history, and issuing resolution."
  tags:
    - customer-service
    - logistics
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: claims
      port: 8080
      tools:
        - name: process-claim
          description: "Process customer claim."
          inputParameters:
            - name: tracking_number
              in: body
              type: string
            - name: claim_type
              in: body
              type: string
            - name: account_number
              in: body
              type: string
          steps:
            - name: get-history
              type: call
              call: "tracking-api.get-history"
              with:
                tracking: "{{tracking_number}}"
            - name: create-case
              type: call
              call: "salesforce.create-case"
              with:
                subject: "Claim: {{claim_type}} — {{tracking_number}}"
                account: "{{account_number}}"
                priority: "High"
            - name: investigate
              type: call
              call: "claims-api.investigate"
              with:
                tracking: "{{tracking_number}}"
                type: "{{claim_type}}"
                history: "{{get-history.events}}"
  consumes:
    - type: http
      namespace: tracking-api
      baseUri: "https://api.fedex.com/track/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_api_token"
      resources:
        - name: history
          path: "/trackingnumbers/history"
          operations:
            - name: get-history
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://fedex.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: cases
          path: "/sobjects/Case"
          operations:
            - name: create-case
              method: POST
    - type: http
      namespace: claims-api
      baseUri: "https://claims.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_claims_token"
      resources:
        - name: investigate
          path: "/investigate"
          operations:
            - name: investigate
              method: POST

Orchestrates international customs clearance by generating documentation, submitting to customs broker, and tracking clearance status.

naftiko: "0.5"
info:
  label: "Customs Clearance Orchestrator"
  description: "Orchestrates international customs clearance by generating documentation, submitting to customs broker, and tracking clearance status."
  tags:
    - logistics
    - customs
    - compliance
    - international
capability:
  exposes:
    - type: mcp
      namespace: customs
      port: 8080
      tools:
        - name: process-customs
          description: "Process customs clearance for international shipment."
          inputParameters:
            - name: tracking_number
              in: body
              type: string
            - name: destination_country
              in: body
              type: string
            - name: declared_value
              in: body
              type: number
          steps:
            - name: generate-docs
              type: call
              call: "trade-api.generate-customs-docs"
              with:
                tracking: "{{tracking_number}}"
                country: "{{destination_country}}"
                value: "{{declared_value}}"
            - name: submit-clearance
              type: call
              call: "trade-api.submit-clearance"
              with:
                tracking: "{{tracking_number}}"
                docs: "{{generate-docs.document_ids}}"
            - name: notify-shipper
              type: call
              call: "notification-api.send-email"
              with:
                tracking: "{{tracking_number}}"
                template: "customs_submitted"
                reference: "{{submit-clearance.clearance_ref}}"
  consumes:
    - type: http
      namespace: trade-api
      baseUri: "https://trade.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_trade_token"
      resources:
        - name: customs-docs
          path: "/customs/documents"
          operations:
            - name: generate-customs-docs
              method: POST
        - name: clearance
          path: "/customs/clearance"
          operations:
            - name: submit-clearance
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://notifications.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_notification_token"
      resources:
        - name: email
          path: "/email/send"
          operations:
            - name: send-email
              method: POST

Processes a damaged package report by creating an incident, notifying the customer, and initiating a claim.

naftiko: "0.5"
info:
  label: "Damaged Package Processing Orchestrator"
  description: "Processes a damaged package report by creating an incident, notifying the customer, and initiating a claim."
  tags:
    - customer-service
    - logistics
    - servicenow
    - notifications
capability:
  exposes:
    - type: mcp
      namespace: damage
      port: 8080
      tools:
        - name: process-damage
          description: "Process damaged package."
          inputParameters:
            - name: tracking_number
              in: body
              type: string
            - name: damage_description
              in: body
              type: string
            - name: station
              in: body
              type: string
          steps:
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Damaged package: {{tracking_number}} at {{station}}"
                priority: "2"
            - name: notify-customer
              type: call
              call: "notification-api.send-email"
              with:
                tracking: "{{tracking_number}}"
                template: "package_damaged"
            - name: initiate-claim
              type: call
              call: "claims-api.create-claim"
              with:
                tracking: "{{tracking_number}}"
                type: "damage"
                description: "{{damage_description}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://fedex.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: notification-api
      baseUri: "https://notifications.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_notification_token"
      resources:
        - name: email
          path: "/email/send"
          operations:
            - name: send-email
              method: POST
    - type: http
      namespace: claims-api
      baseUri: "https://claims.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_claims_token"
      resources:
        - name: claims
          path: "/claims"
          operations:
            - name: create-claim
              method: POST

Generates a dangerous goods shipper's declaration for hazmat shipments.

naftiko: "0.5"
info:
  label: "Dangerous Goods Declaration"
  description: "Generates a dangerous goods shipper's declaration for hazmat shipments."
  tags:
    - compliance
    - safety
    - cargo
capability:
  exposes:
    - type: mcp
      namespace: dg-docs
      port: 8080
      tools:
        - name: generate-declaration
          description: "Generate DG declaration."
          inputParameters:
            - name: tracking_number
              in: body
              type: string
            - name: un_number
              in: body
              type: string
            - name: proper_name
              in: body
              type: string
          call: "compliance-api.generate-dg-dec"
          with:
            tracking: "{{tracking_number}}"
            un: "{{un_number}}"
            name: "{{proper_name}}"
          outputParameters:
            - name: declaration_id
              type: string
              mapping: "$.declarationId"
            - name: doc_url
              type: string
              mapping: "$.documentUrl"
  consumes:
    - type: http
      namespace: compliance-api
      baseUri: "https://compliance.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_compliance_token"
      resources:
        - name: dg
          path: "/dangerous-goods/declaration"
          operations:
            - name: generate-dg-dec
              method: POST

Schedules a delivery appointment for a commercial/freight shipment.

naftiko: "0.5"
info:
  label: "Delivery Appointment Scheduling"
  description: "Schedules a delivery appointment for a commercial/freight shipment."
  tags:
    - logistics
    - delivery
    - scheduling
capability:
  exposes:
    - type: mcp
      namespace: appointments
      port: 8080
      tools:
        - name: schedule-appointment
          description: "Schedule delivery appointment."
          inputParameters:
            - name: tracking_number
              in: body
              type: string
            - name: preferred_date
              in: body
              type: string
            - name: preferred_window
              in: body
              type: string
          call: "delivery-api.schedule"
          with:
            tracking: "{{tracking_number}}"
            date: "{{preferred_date}}"
            window: "{{preferred_window}}"
          outputParameters:
            - name: appointment_id
              type: string
              mapping: "$.appointmentId"
            - name: confirmed_window
              type: string
              mapping: "$.confirmedWindow"
  consumes:
    - type: http
      namespace: delivery-api
      baseUri: "https://delivery.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_delivery_token"
      resources:
        - name: appointments
          path: "/appointments/schedule"
          operations:
            - name: schedule
              method: POST

Analyzes delivery density for route planning and territory optimization.

naftiko: "0.5"
info:
  label: "Delivery Density Analysis"
  description: "Analyzes delivery density for route planning and territory optimization."
  tags:
    - analytics
    - delivery
    - route-optimization
capability:
  exposes:
    - type: mcp
      namespace: density
      port: 8080
      tools:
        - name: analyze-density
          description: "Analyze delivery density."
          inputParameters:
            - name: station
              in: body
              type: string
            - name: zip_code
              in: body
              type: string
          call: "analytics-api.get-density"
          with:
            station: "{{station}}"
            zip: "{{zip_code}}"
          outputParameters:
            - name: stops_per_mile
              type: number
              mapping: "$.stopsPerMile"
            - name: avg_packages_per_stop
              type: number
              mapping: "$.avgPackagesPerStop"
  consumes:
    - type: http
      namespace: analytics-api
      baseUri: "https://analytics.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_analytics_token"
      resources:
        - name: density
          path: "/delivery/density"
          operations:
            - name: get-density
              method: POST

When a delivery exception occurs, creates a ServiceNow incident, notifies the customer via SMS, and escalates to the local station manager.

naftiko: "0.5"
info:
  label: "Delivery Exception Orchestrator"
  description: "When a delivery exception occurs, creates a ServiceNow incident, notifies the customer via SMS, and escalates to the local station manager."
  tags:
    - logistics
    - customer-service
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: exceptions
      port: 8080
      tools:
        - name: handle-exception
          description: "Process a delivery exception."
          inputParameters:
            - name: tracking_number
              in: body
              type: string
            - name: exception_type
              in: body
              type: string
            - name: station
              in: body
              type: string
          steps:
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Delivery exception: {{exception_type}} — {{tracking_number}}"
                category: "delivery"
                priority: "2"
            - name: notify-customer
              type: call
              call: "notification-api.send-sms"
              with:
                tracking: "{{tracking_number}}"
                template: "delivery_exception"
                exception: "{{exception_type}}"
            - name: escalate-station
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "{{station_channel}}"
                text: "Exception: {{exception_type}} for {{tracking_number}} at {{station}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://fedex.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: notification-api
      baseUri: "https://notifications.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_notification_token"
      resources:
        - name: sms
          path: "/sms/send"
          operations:
            - name: send-sms
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Updates delivery instructions for an in-transit package (leave at door, gate code, etc.).

naftiko: "0.5"
info:
  label: "Delivery Instructions Update"
  description: "Updates delivery instructions for an in-transit package (leave at door, gate code, etc.)."
  tags:
    - delivery
    - customer-service
capability:
  exposes:
    - type: mcp
      namespace: instructions
      port: 8080
      tools:
        - name: update-instructions
          description: "Update delivery instructions."
          inputParameters:
            - name: tracking_number
              in: body
              type: string
            - name: instructions
              in: body
              type: string
          call: "delivery-api.update-instructions"
          with:
            tracking: "{{tracking_number}}"
            instructions: "{{instructions}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.updateStatus"
  consumes:
    - type: http
      namespace: delivery-api
      baseUri: "https://delivery.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_delivery_token"
      resources:
        - name: instructions
          path: "/packages/instructions"
          operations:
            - name: update-instructions
              method: PUT

Retrieves proof of delivery including signature, photo, and timestamp for a delivered package.

naftiko: "0.5"
info:
  label: "Proof of Delivery Lookup"
  description: "Retrieves proof of delivery including signature, photo, and timestamp for a delivered package."
  tags:
    - logistics
    - customer-service
    - delivery
capability:
  exposes:
    - type: mcp
      namespace: pod
      port: 8080
      tools:
        - name: get-pod
          description: "Get proof of delivery."
          inputParameters:
            - name: tracking_number
              in: body
              type: string
          call: "delivery-api.get-pod"
          with:
            tracking: "{{tracking_number}}"
          outputParameters:
            - name: signed_by
              type: string
              mapping: "$.signedBy"
            - name: delivery_time
              type: string
              mapping: "$.deliveryTime"
            - name: photo_url
              type: string
              mapping: "$.photoUrl"
  consumes:
    - type: http
      namespace: delivery-api
      baseUri: "https://delivery.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_delivery_token"
      resources:
        - name: pod
          path: "/packages/{{tracking}}/pod"
          inputParameters:
            - name: tracking
              in: path
          operations:
            - name: get-pod
              method: GET

Sends proactive delivery window notifications to recipients as their package approaches.

naftiko: "0.5"
info:
  label: "Delivery Window Notification Orchestrator"
  description: "Sends proactive delivery window notifications to recipients as their package approaches."
  tags:
    - delivery
    - customer-service
    - notifications
capability:
  exposes:
    - type: mcp
      namespace: delivery-notify
      port: 8080
      tools:
        - name: send-window-notification
          description: "Send delivery window notification."
          inputParameters:
            - name: tracking_number
              in: body
              type: string
          steps:
            - name: get-eta
              type: call
              call: "delivery-api.get-status"
              with:
                tracking: "{{tracking_number}}"
            - name: get-recipient
              type: call
              call: "tracking-api.get-recipient"
              with:
                tracking: "{{tracking_number}}"
            - name: send-sms
              type: call
              call: "notification-api.send-sms"
              with:
                phone: "{{get-recipient.phone}}"
                message: "Your FedEx package {{tracking_number}} arrives today between {{get-eta.deliveryWindow}}"
  consumes:
    - type: http
      namespace: delivery-api
      baseUri: "https://delivery.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_delivery_token"
      resources:
        - name: status
          path: "/packages/{{tracking}}/delivery"
          inputParameters:
            - name: tracking
              in: path
          operations:
            - name: get-status
              method: GET
    - type: http
      namespace: tracking-api
      baseUri: "https://api.fedex.com/track/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_api_token"
      resources:
        - name: recipient
          path: "/trackingnumbers/{{tracking}}/recipient"
          inputParameters:
            - name: tracking
              in: path
          operations:
            - name: get-recipient
              method: GET
    - type: http
      namespace: notification-api
      baseUri: "https://notifications.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_notification_token"
      resources:
        - name: sms
          path: "/sms/send"
          operations:
            - name: send-sms
              method: POST

Assigns dock doors for inbound/outbound trailers at sort facilities.

naftiko: "0.5"
info:
  label: "Dock Door Assignment"
  description: "Assigns dock doors for inbound/outbound trailers at sort facilities."
  tags:
    - operations
    - sorting
    - logistics
capability:
  exposes:
    - type: mcp
      namespace: dock
      port: 8080
      tools:
        - name: assign-door
          description: "Assign dock door."
          inputParameters:
            - name: facility
              in: body
              type: string
            - name: trailer_id
              in: body
              type: string
            - name: direction
              in: body
              type: string
          call: "ops-api.assign-door"
          with:
            facility: "{{facility}}"
            trailer: "{{trailer_id}}"
            direction: "{{direction}}"
          outputParameters:
            - name: door
              type: string
              mapping: "$.assignedDoor"
            - name: priority
              type: number
              mapping: "$.priority"
  consumes:
    - type: http
      namespace: ops-api
      baseUri: "https://operations.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_ops_token"
      resources:
        - name: dock
          path: "/facilities/{{facility}}/dock/assign"
          inputParameters:
            - name: facility
              in: path
          operations:
            - name: assign-door
              method: POST

Retrieves a driver's current route completion status including stops completed and remaining.

naftiko: "0.5"
info:
  label: "Driver Route Completion Status"
  description: "Retrieves a driver's current route completion status including stops completed and remaining."
  tags:
    - delivery
    - tracking
    - operations
capability:
  exposes:
    - type: mcp
      namespace: route-status
      port: 8080
      tools:
        - name: get-route-status
          description: "Get driver route status."
          inputParameters:
            - name: driver_id
              in: body
              type: string
            - name: date
              in: body
              type: string
          call: "dispatch-api.get-route-status"
          with:
            driver: "{{driver_id}}"
            date: "{{date}}"
          outputParameters:
            - name: completed
              type: number
              mapping: "$.stopsCompleted"
            - name: remaining
              type: number
              mapping: "$.stopsRemaining"
            - name: est_completion
              type: string
              mapping: "$.estimatedCompletion"
  consumes:
    - type: http
      namespace: dispatch-api
      baseUri: "https://dispatch.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_dispatch_token"
      resources:
        - name: route-status
          path: "/drivers/{{driver}}/route-status"
          inputParameters:
            - name: driver
              in: path
          operations:
            - name: get-route-status
              method: GET

Processes driver safety events by creating incident records, notifying safety team, and logging in HR system.

naftiko: "0.5"
info:
  label: "Driver Safety Event Orchestrator"
  description: "Processes driver safety events by creating incident records, notifying safety team, and logging in HR system."
  tags:
    - safety
    - fleet-management
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: driver-safety
      port: 8080
      tools:
        - name: report-event
          description: "Report driver safety event."
          inputParameters:
            - name: driver_id
              in: body
              type: string
            - name: event_type
              in: body
              type: string
            - name: station
              in: body
              type: string
            - name: description
              in: body
              type: string
          steps:
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Driver safety: {{event_type}} at {{station}}"
                category: "safety"
                priority: "2"
            - name: notify-safety
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "{{safety_channel}}"
                text: "Driver safety event at {{station}}: {{event_type}} — {{description}}"
            - name: log-hr
              type: call
              call: "workday.create-event"
              with:
                employee: "{{driver_id}}"
                type: "{{event_type}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://fedex.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST
    - type: http
      namespace: workday
      baseUri: "https://wd5-services.fedex.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: events
          path: "/safety/events"
          operations:
            - name: create-event
              method: POST

When an employee termination is recorded in Workday, disables the Azure AD account, revokes Okta sessions, and opens a ServiceNow offboarding ticket.

naftiko: "0.5"
info:
  label: "Employee Offboarding Workflow"
  description: "When an employee termination is recorded in Workday, disables the Azure AD account, revokes Okta sessions, and opens a ServiceNow offboarding ticket."
  tags:
    - hr
    - offboarding
    - workday
    - azure-ad
    - servicenow
    - identity
capability:
  exposes:
    - type: mcp
      namespace: hr-offboarding
      port: 8080
      tools:
        - name: trigger-offboarding
          description: "Given a Workday employee ID and termination date, disable the Azure AD account, revoke all Okta sessions, and open a ServiceNow offboarding ticket. Use immediately upon confirmed employee separation."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday worker ID of the departing employee."
            - name: termination_date
              in: body
              type: string
              description: "The employee's last day in YYYY-MM-DD format."
          steps:
            - name: get-worker
              type: call
              call: "workday-off.get-worker"
              with:
                worker_id: "{{employee_id}}"
            - name: disable-ad-account
              type: call
              call: "azure-ad-off.disable-user"
              with:
                user_id: "{{get-worker.azure_object_id}}"
            - name: open-offboard-ticket
              type: call
              call: "servicenow-off.create-incident"
              with:
                category: "hr_offboarding"
                short_description: "Offboarding: {{get-worker.full_name}} — last day {{termination_date}}"
                assignment_group: "IT_Security"
  consumes:
    - type: http
      namespace: workday-off
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/fedex/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: azure-ad-off
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.azure_ad_token"
      resources:
        - name: users
          path: "/users/{{user_id}}"
          inputParameters:
            - name: user_id
              in: path
          operations:
            - name: disable-user
              method: PATCH
    - type: http
      namespace: servicenow-off
      baseUri: "https://fedex.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST

When a new hire record is created in Workday, opens an IT provisioning ticket in ServiceNow, provisions an Azure AD account, and sends a Microsoft Teams welcome message.

naftiko: "0.5"
info:
  label: "Employee Onboarding Orchestrator"
  description: "When a new hire record is created in Workday, opens an IT provisioning ticket in ServiceNow, provisions an Azure AD account, and sends a Microsoft Teams welcome message."
  tags:
    - hr
    - onboarding
    - workday
    - servicenow
    - azure-ad
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-onboarding
      port: 8080
      tools:
        - name: trigger-onboarding
          description: "Given a Workday employee ID and start date, orchestrate the full onboarding sequence across ServiceNow, Azure AD, and Microsoft Teams. Use when a new hire is confirmed and IT provisioning must begin."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday worker ID for the new hire."
            - name: start_date
              in: body
              type: string
              description: "The employee's start date in YYYY-MM-DD format."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{employee_id}}"
            - name: create-ad-account
              type: call
              call: "azure-ad.create-user"
              with:
                display_name: "{{get-employee.full_name}}"
                mail_nickname: "{{get-employee.preferred_name}}"
                department: "{{get-employee.department}}"
            - name: open-it-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                category: "hr_onboarding"
                short_description: "New hire IT setup: {{get-employee.full_name}} — start {{start_date}}"
                assignment_group: "IT_Onboarding"
            - name: send-welcome
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-employee.work_email}}"
                text: "Welcome to FedEx, {{get-employee.first_name}}! Your IT ticket is {{open-it-ticket.number}}. Your first day is {{start_date}}."
  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: "/fedex/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: azure-ad
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.azure_ad_token"
      resources:
        - name: users
          path: "/users"
          operations:
            - name: create-user
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://fedex.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: chats
          path: "/chats"
          operations:
            - name: send-message
              method: POST

Monitors electric vehicle charging status and battery levels across the FedEx EV fleet.

naftiko: "0.5"
info:
  label: "EV Fleet Charging Status"
  description: "Monitors electric vehicle charging status and battery levels across the FedEx EV fleet."
  tags:
    - fleet-management
    - sustainability
    - monitoring
capability:
  exposes:
    - type: mcp
      namespace: ev-fleet
      port: 8080
      tools:
        - name: get-ev-status
          description: "Get EV fleet charging status."
          inputParameters:
            - name: station
              in: body
              type: string
          call: "fleet-api.get-ev-status"
          with:
            station: "{{station}}"
          outputParameters:
            - name: total_evs
              type: number
              mapping: "$.totalEVs"
            - name: charging
              type: number
              mapping: "$.charging"
            - name: avg_battery
              type: number
              mapping: "$.avgBatteryPercent"
  consumes:
    - type: http
      namespace: fleet-api
      baseUri: "https://fleet.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_fleet_token"
      resources:
        - name: ev
          path: "/stations/{{station}}/ev-status"
          inputParameters:
            - name: station
              in: path
          operations:
            - name: get-ev-status
              method: GET

Retrieves real-time sort progress at FedEx Express superhubs (Memphis, Indianapolis).

naftiko: "0.5"
info:
  label: "Express Hub Sort Status"
  description: "Retrieves real-time sort progress at FedEx Express superhubs (Memphis, Indianapolis)."
  tags:
    - operations
    - sorting
    - tracking
capability:
  exposes:
    - type: mcp
      namespace: hub-sort
      port: 8080
      tools:
        - name: get-sort-status
          description: "Get hub sort status."
          inputParameters:
            - name: hub
              in: body
              type: string
              description: "Hub (MEM, IND)."
            - name: sort_wave
              in: body
              type: string
          call: "ops-api.get-sort-status"
          with:
            hub: "{{hub}}"
            wave: "{{sort_wave}}"
          outputParameters:
            - name: progress_pct
              type: number
              mapping: "$.progressPercent"
            - name: packages_sorted
              type: number
              mapping: "$.packagesSorted"
            - name: est_completion
              type: string
              mapping: "$.estimatedCompletion"
  consumes:
    - type: http
      namespace: ops-api
      baseUri: "https://operations.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_ops_token"
      resources:
        - name: sort
          path: "/hubs/{{hub}}/sort-status"
          inputParameters:
            - name: hub
              in: path
          operations:
            - name: get-sort-status
              method: GET

Retrieves maintenance status for FedEx cargo aircraft.

naftiko: "0.5"
info:
  label: "Aircraft Maintenance Check"
  description: "Retrieves maintenance status for FedEx cargo aircraft."
  tags:
    - maintenance
    - flight-operations
    - safety
capability:
  exposes:
    - type: mcp
      namespace: aircraft-mx
      port: 8080
      tools:
        - name: get-mx-status
          description: "Check aircraft maintenance status."
          inputParameters:
            - name: tail_number
              in: body
              type: string
          call: "mx-api.get-status"
          with:
            tail: "{{tail_number}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.status"
            - name: open_items
              type: array
              mapping: "$.openItems"
            - name: next_check
              type: string
              mapping: "$.nextCheck"
  consumes:
    - type: http
      namespace: mx-api
      baseUri: "https://aircraft-mx.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_aircraft_mx_token"
      resources:
        - name: aircraft
          path: "/aircraft/{{tail}}/status"
          inputParameters:
            - name: tail
              in: path
          operations:
            - name: get-status
              method: GET

Processes damage or loss claims for FedEx Freight LTL shipments.

naftiko: "0.5"
info:
  label: "Freight Claims Processing"
  description: "Processes damage or loss claims for FedEx Freight LTL shipments."
  tags:
    - freight
    - customer-service
    - claims
capability:
  exposes:
    - type: mcp
      namespace: freight-claims
      port: 8080
      tools:
        - name: file-freight-claim
          description: "File a freight claim."
          inputParameters:
            - name: pro_number
              in: body
              type: string
            - name: claim_type
              in: body
              type: string
            - name: amount
              in: body
              type: number
          call: "claims-api.create-freight-claim"
          with:
            pro: "{{pro_number}}"
            type: "{{claim_type}}"
            amount: "{{amount}}"
          outputParameters:
            - name: claim_id
              type: string
              mapping: "$.claimId"
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: claims-api
      baseUri: "https://claims.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_claims_token"
      resources:
        - name: freight-claims
          path: "/freight/claims"
          operations:
            - name: create-freight-claim
              method: POST

Creates a FedEx Freight LTL shipment booking with origin, destination, and commodity details.

naftiko: "0.5"
info:
  label: "Freight Shipment Booking"
  description: "Creates a FedEx Freight LTL shipment booking with origin, destination, and commodity details."
  tags:
    - freight
    - logistics
    - booking
capability:
  exposes:
    - type: mcp
      namespace: freight
      port: 8080
      tools:
        - name: book-freight
          description: "Book a freight shipment."
          inputParameters:
            - name: shipper
              in: body
              type: string
            - name: origin_zip
              in: body
              type: string
            - name: dest_zip
              in: body
              type: string
            - name: weight_lbs
              in: body
              type: number
            - name: freight_class
              in: body
              type: string
          call: "freight-api.create-shipment"
          with:
            shipper: "{{shipper}}"
            origin: "{{origin_zip}}"
            dest: "{{dest_zip}}"
            weight: "{{weight_lbs}}"
            class: "{{freight_class}}"
          outputParameters:
            - name: pro_number
              type: string
              mapping: "$.proNumber"
            - name: pickup_date
              type: string
              mapping: "$.pickupDate"
  consumes:
    - type: http
      namespace: freight-api
      baseUri: "https://api.fedex.com/ship/v1/freight"
      authentication:
        type: bearer
        token: "$secrets.fedex_api_token"
      resources:
        - name: shipments
          path: "/shipments"
          operations:
            - name: create-shipment
              method: POST

Generates fuel cost analysis for FedEx delivery and air fleet.

naftiko: "0.5"
info:
  label: "Fleet Fuel Cost Report"
  description: "Generates fuel cost analysis for FedEx delivery and air fleet."
  tags:
    - fleet-management
    - analytics
    - fuel
capability:
  exposes:
    - type: mcp
      namespace: fuel
      port: 8080
      tools:
        - name: get-fuel-report
          description: "Get fuel cost report."
          inputParameters:
            - name: fleet_type
              in: body
              type: string
              description: "Type (ground, express, freight)."
            - name: period
              in: body
              type: string
          call: "analytics-api.get-fuel"
          with:
            fleet: "{{fleet_type}}"
            period: "{{period}}"
          outputParameters:
            - name: total_cost
              type: number
              mapping: "$.totalCost"
            - name: cost_per_mile
              type: number
              mapping: "$.costPerMile"
  consumes:
    - type: http
      namespace: analytics-api
      baseUri: "https://analytics.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_analytics_token"
      resources:
        - name: fuel
          path: "/fuel/cost-analysis"
          operations:
            - name: get-fuel
              method: POST

Retrieves performance metrics for FedEx Ground Independent Service Providers (ISPs).

naftiko: "0.5"
info:
  label: "Ground Contractor Performance Report"
  description: "Retrieves performance metrics for FedEx Ground Independent Service Providers (ISPs)."
  tags:
    - operations
    - analytics
    - ground
capability:
  exposes:
    - type: mcp
      namespace: contractor
      port: 8080
      tools:
        - name: get-performance
          description: "Get ISP performance."
          inputParameters:
            - name: contractor_id
              in: body
              type: string
            - name: period
              in: body
              type: string
          call: "ops-api.get-isp-metrics"
          with:
            contractor: "{{contractor_id}}"
            period: "{{period}}"
          outputParameters:
            - name: otd_rate
              type: number
              mapping: "$.onTimeRate"
            - name: damage_rate
              type: number
              mapping: "$.damageRate"
            - name: complaints
              type: number
              mapping: "$.customerComplaints"
  consumes:
    - type: http
      namespace: ops-api
      baseUri: "https://operations.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_ops_token"
      resources:
        - name: isp
          path: "/contractors/{{contractor}}/metrics"
          inputParameters:
            - name: contractor
              in: path
          operations:
            - name: get-isp-metrics
              method: GET

Calculates ground transit time between two ZIP codes.

naftiko: "0.5"
info:
  label: "Ground Network Transit Time"
  description: "Calculates ground transit time between two ZIP codes."
  tags:
    - logistics
    - ground
    - customer-service
capability:
  exposes:
    - type: mcp
      namespace: transit
      port: 8080
      tools:
        - name: get-transit-time
          description: "Get ground transit time."
          inputParameters:
            - name: origin_zip
              in: body
              type: string
            - name: dest_zip
              in: body
              type: string
          call: "rate-api.get-transit"
          with:
            origin: "{{origin_zip}}"
            dest: "{{dest_zip}}"
          outputParameters:
            - name: transit_days
              type: number
              mapping: "$.transitDays"
            - name: delivery_date
              type: string
              mapping: "$.estimatedDelivery"
  consumes:
    - type: http
      namespace: rate-api
      baseUri: "https://api.fedex.com/rate/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_api_token"
      resources:
        - name: transit
          path: "/transit-times"
          operations:
            - name: get-transit
              method: POST

Validates hazardous materials shipments against DOT/IATA regulations.

naftiko: "0.5"
info:
  label: "Hazmat Shipment Validation"
  description: "Validates hazardous materials shipments against DOT/IATA regulations."
  tags:
    - compliance
    - safety
    - logistics
capability:
  exposes:
    - type: mcp
      namespace: hazmat
      port: 8080
      tools:
        - name: validate-hazmat
          description: "Validate hazmat shipment."
          inputParameters:
            - name: tracking_number
              in: body
              type: string
            - name: un_number
              in: body
              type: string
            - name: packaging_group
              in: body
              type: string
          call: "compliance-api.validate"
          with:
            tracking: "{{tracking_number}}"
            un: "{{un_number}}"
            packaging: "{{packaging_group}}"
          outputParameters:
            - name: compliant
              type: boolean
              mapping: "$.isCompliant"
            - name: violations
              type: array
              mapping: "$.violations"
  consumes:
    - type: http
      namespace: compliance-api
      baseUri: "https://compliance.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_compliance_token"
      resources:
        - name: hazmat
          path: "/hazmat/validate"
          operations:
            - name: validate
              method: POST

Retrieves inbound/outbound aircraft schedule at a FedEx Express hub.

naftiko: "0.5"
info:
  label: "Hub Aircraft Schedule"
  description: "Retrieves inbound/outbound aircraft schedule at a FedEx Express hub."
  tags:
    - flight-operations
    - cargo
    - scheduling
capability:
  exposes:
    - type: mcp
      namespace: hub-schedule
      port: 8080
      tools:
        - name: get-schedule
          description: "Get hub aircraft schedule."
          inputParameters:
            - name: hub
              in: body
              type: string
            - name: date
              in: body
              type: string
          call: "flight-api.get-hub-schedule"
          with:
            hub: "{{hub}}"
            date: "{{date}}"
          outputParameters:
            - name: inbound
              type: array
              mapping: "$.inboundFlights"
            - name: outbound
              type: array
              mapping: "$.outboundFlights"
  consumes:
    - type: http
      namespace: flight-api
      baseUri: "https://flight-ops.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_flight_ops_token"
      resources:
        - name: schedules
          path: "/hubs/{{hub}}/schedule"
          inputParameters:
            - name: hub
              in: path
          operations:
            - name: get-hub-schedule
              method: GET

Creates an international document shipment (no customs value).

naftiko: "0.5"
info:
  label: "International Document Shipment"
  description: "Creates an international document shipment (no customs value)."
  tags:
    - logistics
    - international
    - shipping
capability:
  exposes:
    - type: mcp
      namespace: intl-docs
      port: 8080
      tools:
        - name: ship-documents
          description: "Create international document shipment."
          inputParameters:
            - name: shipper
              in: body
              type: string
            - name: recipient_country
              in: body
              type: string
            - name: service
              in: body
              type: string
          call: "ship-api.create-doc-shipment"
          with:
            shipper: "{{shipper}}"
            country: "{{recipient_country}}"
            service: "{{service}}"
          outputParameters:
            - name: tracking
              type: string
              mapping: "$.trackingNumber"
            - name: label
              type: string
              mapping: "$.labelUrl"
  consumes:
    - type: http
      namespace: ship-api
      baseUri: "https://api.fedex.com/ship/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_api_token"
      resources:
        - name: intl
          path: "/international/documents"
          operations:
            - name: create-doc-shipment
              method: POST

Looks up import duties and tariffs for international shipments.

naftiko: "0.5"
info:
  label: "International Tariff Lookup"
  description: "Looks up import duties and tariffs for international shipments."
  tags:
    - customs
    - compliance
    - international
capability:
  exposes:
    - type: mcp
      namespace: tariffs
      port: 8080
      tools:
        - name: get-tariff
          description: "Look up import tariff."
          inputParameters:
            - name: hs_code
              in: body
              type: string
            - name: destination_country
              in: body
              type: string
            - name: value
              in: body
              type: number
          call: "trade-api.get-tariff"
          with:
            hs_code: "{{hs_code}}"
            country: "{{destination_country}}"
            value: "{{value}}"
          outputParameters:
            - name: duty_rate
              type: number
              mapping: "$.dutyRate"
            - name: estimated_duty
              type: number
              mapping: "$.estimatedDuty"
            - name: taxes
              type: number
              mapping: "$.estimatedTaxes"
  consumes:
    - type: http
      namespace: trade-api
      baseUri: "https://trade.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_trade_token"
      resources:
        - name: tariffs
          path: "/tariffs/lookup"
          operations:
            - name: get-tariff
              method: POST

Retrieves last-mile delivery status for a package including driver location and estimated delivery window.

naftiko: "0.5"
info:
  label: "Last Mile Delivery Status"
  description: "Retrieves last-mile delivery status for a package including driver location and estimated delivery window."
  tags:
    - logistics
    - delivery
    - tracking
capability:
  exposes:
    - type: mcp
      namespace: last-mile
      port: 8080
      tools:
        - name: get-delivery-status
          description: "Get last-mile delivery status."
          inputParameters:
            - name: tracking_number
              in: body
              type: string
          call: "delivery-api.get-status"
          with:
            tracking: "{{tracking_number}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.deliveryStatus"
            - name: driver_eta
              type: string
              mapping: "$.driverETA"
            - name: stop_number
              type: number
              mapping: "$.currentStop"
  consumes:
    - type: http
      namespace: delivery-api
      baseUri: "https://delivery.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_delivery_token"
      resources:
        - name: status
          path: "/packages/{{tracking}}/delivery"
          inputParameters:
            - name: tracking
              in: path
          operations:
            - name: get-status
              method: GET

Retrieves linehaul truck schedule between hubs.

naftiko: "0.5"
info:
  label: "Linehaul Schedule Lookup"
  description: "Retrieves linehaul truck schedule between hubs."
  tags:
    - logistics
    - ground
    - scheduling
capability:
  exposes:
    - type: mcp
      namespace: linehaul
      port: 8080
      tools:
        - name: get-schedule
          description: "Get linehaul schedule."
          inputParameters:
            - name: origin_hub
              in: body
              type: string
            - name: dest_hub
              in: body
              type: string
          call: "ops-api.get-linehaul"
          with:
            origin: "{{origin_hub}}"
            dest: "{{dest_hub}}"
          outputParameters:
            - name: schedules
              type: array
              mapping: "$.schedules"
            - name: next_departure
              type: string
              mapping: "$.nextDeparture"
  consumes:
    - type: http
      namespace: ops-api
      baseUri: "https://operations.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_ops_token"
      resources:
        - name: linehaul
          path: "/linehaul/schedules"
          operations:
            - name: get-linehaul
              method: POST

Publishes a new FedEx job requisition from Workday Recruiting to LinkedIn Jobs and returns the LinkedIn post ID.

naftiko: "0.5"
info:
  label: "LinkedIn Job Posting Publisher"
  description: "Publishes a new FedEx job requisition from Workday Recruiting to LinkedIn Jobs and returns the LinkedIn post ID."
  tags:
    - hr
    - recruiting
    - linkedin
    - workday
capability:
  exposes:
    - type: mcp
      namespace: talent-acquisition
      port: 8080
      tools:
        - name: publish-job-to-linkedin
          description: "Given a Workday job requisition ID, fetch the job details from Workday Recruiting and post the role to the FedEx LinkedIn company page. Use when a recruiter approves a role for external publication."
          inputParameters:
            - name: requisition_id
              in: body
              type: string
              description: "The Workday job requisition ID to publish."
          steps:
            - name: get-requisition
              type: call
              call: "workday-recruit.get-job-requisition"
              with:
                requisition_id: "{{requisition_id}}"
            - name: post-to-linkedin
              type: call
              call: "linkedin.create-job-posting"
              with:
                title: "{{get-requisition.job_title}}"
                description: "{{get-requisition.job_description}}"
                location: "{{get-requisition.location}}"
                company_id: "$secrets.linkedin_company_id"
  consumes:
    - type: http
      namespace: workday-recruit
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: job-requisitions
          path: "/fedex/jobRequisitions/{{requisition_id}}"
          inputParameters:
            - name: requisition_id
              in: path
          operations:
            - name: get-job-requisition
              method: GET
    - type: http
      namespace: linkedin
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: job-postings
          path: "/simpleJobPostings"
          operations:
            - name: create-job-posting
              method: POST

Finds nearest FedEx drop-off or pickup locations.

naftiko: "0.5"
info:
  label: "FedEx Location Finder"
  description: "Finds nearest FedEx drop-off or pickup locations."
  tags:
    - customer-service
    - logistics
capability:
  exposes:
    - type: mcp
      namespace: locations
      port: 8080
      tools:
        - name: find-locations
          description: "Find nearby FedEx locations."
          inputParameters:
            - name: zip_code
              in: body
              type: string
            - name: location_type
              in: body
              type: string
              description: "Type (dropoff, office, ship_center)."
          call: "location-api.search"
          with:
            zip: "{{zip_code}}"
            type: "{{location_type}}"
          outputParameters:
            - name: locations
              type: array
              mapping: "$.locations"
            - name: nearest
              type: string
              mapping: "$.nearestAddress"
  consumes:
    - type: http
      namespace: location-api
      baseUri: "https://api.fedex.com/location/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_api_token"
      resources:
        - name: search
          path: "/locations"
          operations:
            - name: search
              method: POST

Queries Microsoft Graph for FedEx Microsoft 365 license assignment and usage data and exports a summary for IT finance chargeback reporting.

naftiko: "0.5"
info:
  label: "Microsoft 365 License Usage Report"
  description: "Queries Microsoft Graph for FedEx Microsoft 365 license assignment and usage data and exports a summary for IT finance chargeback reporting."
  tags:
    - identity
    - microsoft-365
    - reporting
    - it-finance
capability:
  exposes:
    - type: mcp
      namespace: m365-reporting
      port: 8080
      tools:
        - name: get-license-usage-report
          description: "Query Microsoft Graph for current Microsoft 365 license assignment counts by SKU. Returns assigned, available, and consumed license counts. Use for monthly IT license chargeback and compliance reporting."
          call: "msgraph-licenses.get-subscribed-skus"
          outputParameters:
            - name: skus
              type: array
              mapping: "$.value"
            - name: total_assigned
              type: number
              mapping: "$.value[0].consumedUnits"
  consumes:
    - type: http
      namespace: msgraph-licenses
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: subscribed-skus
          path: "/subscribedSkus"
          operations:
            - name: get-subscribed-skus
              method: GET

Aggregates daily operational metrics from Splunk and publishes a formatted summary digest to a designated Microsoft Teams channel for FedEx operations managers.

naftiko: "0.5"
info:
  label: "Microsoft Teams Channel Digest Publisher"
  description: "Aggregates daily operational metrics from Splunk and publishes a formatted summary digest to a designated Microsoft Teams channel for FedEx operations managers."
  tags:
    - operations
    - reporting
    - splunk
    - microsoft-teams
    - digest
capability:
  exposes:
    - type: mcp
      namespace: ops-reporting
      port: 8080
      tools:
        - name: publish-ops-digest
          description: "Given a date and target Teams channel, query Splunk for daily shipment volumes and error rates, then post a formatted digest to the operations Teams channel. Use each morning to distribute the prior-day operations summary."
          inputParameters:
            - name: report_date
              in: body
              type: string
              description: "The date to report on in YYYY-MM-DD format."
            - name: channel_id
              in: body
              type: string
              description: "The Microsoft Teams channel ID to post the digest to."
          steps:
            - name: fetch-metrics
              type: call
              call: "splunk-digest.run-search"
              with:
                search: "search index=shipment_ops date_day={{report_date}} | stats sum(volume) as total_shipments, avg(error_rate) as avg_error_rate by region"
                earliest_time: "-24h"
                latest_time: "now"
            - name: post-digest
              type: call
              call: "msteams-digest.send-message"
              with:
                channel_id: "{{channel_id}}"
                text: "FedEx Daily Ops Digest — {{report_date}}: Shipments processed: {{fetch-metrics.total_shipments}}. Avg error rate: {{fetch-metrics.avg_error_rate}}%."
  consumes:
    - type: http
      namespace: splunk-digest
      baseUri: "https://fedex-splunk.example.com:8089"
      authentication:
        type: basic
        username: "$secrets.splunk_user"
        password: "$secrets.splunk_password"
      resources:
        - name: search-jobs
          path: "/services/search/jobs/export"
          operations:
            - name: run-search
              method: POST
    - type: http
      namespace: msteams-digest
      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: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Calculates average cost per package across the FedEx network by service type.

naftiko: "0.5"
info:
  label: "Network Cost Per Package Report"
  description: "Calculates average cost per package across the FedEx network by service type."
  tags:
    - analytics
    - cost-optimization
    - operations
capability:
  exposes:
    - type: mcp
      namespace: cost-analysis
      port: 8080
      tools:
        - name: get-cpp
          description: "Get cost per package."
          inputParameters:
            - name: service_type
              in: body
              type: string
            - name: period
              in: body
              type: string
          call: "analytics-api.get-cpp"
          with:
            service: "{{service_type}}"
            period: "{{period}}"
          outputParameters:
            - name: cost_per_package
              type: number
              mapping: "$.costPerPackage"
            - name: trend
              type: string
              mapping: "$.trend"
  consumes:
    - type: http
      namespace: analytics-api
      baseUri: "https://analytics.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_analytics_token"
      resources:
        - name: cpp
          path: "/cost/per-package"
          operations:
            - name: get-cpp
              method: POST

Assesses weather impact on the FedEx network by checking forecasts, identifying affected hubs, and notifying operations.

naftiko: "0.5"
info:
  label: "Network Weather Impact Orchestrator"
  description: "Assesses weather impact on the FedEx network by checking forecasts, identifying affected hubs, and notifying operations."
  tags:
    - operations
    - weather
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: weather
      port: 8080
      tools:
        - name: assess-weather
          description: "Assess weather impact on network."
          inputParameters:
            - name: region
              in: body
              type: string
            - name: hours
              in: body
              type: number
          steps:
            - name: get-forecast
              type: call
              call: "weather-api.get-forecast"
              with:
                region: "{{region}}"
                hours: "{{hours}}"
            - name: get-affected-hubs
              type: call
              call: "ops-api.get-affected-facilities"
              with:
                region: "{{region}}"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Weather: {{get-forecast.severity}} in {{region}} — {{get-affected-hubs.count}} facilities"
                priority: "2"
            - name: notify
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "{{noc_channel}}"
                text: "Weather alert: {{region}} — {{get-forecast.summary}} | {{get-affected-hubs.count}} hubs impacted"
  consumes:
    - type: http
      namespace: weather-api
      baseUri: "https://weather.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_weather_token"
      resources:
        - name: forecast
          path: "/forecast/{{region}}"
          inputParameters:
            - name: region
              in: path
          operations:
            - name: get-forecast
              method: GET
    - type: http
      namespace: ops-api
      baseUri: "https://operations.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_ops_token"
      resources:
        - name: affected
          path: "/weather/affected-facilities"
          operations:
            - name: get-affected-facilities
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://fedex.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Generates on-time delivery performance metrics for a station or region.

naftiko: "0.5"
info:
  label: "On-Time Delivery Performance Report"
  description: "Generates on-time delivery performance metrics for a station or region."
  tags:
    - analytics
    - delivery
    - operations
capability:
  exposes:
    - type: mcp
      namespace: otd-analytics
      port: 8080
      tools:
        - name: get-otd-report
          description: "Get on-time delivery report."
          inputParameters:
            - name: station
              in: body
              type: string
            - name: period
              in: body
              type: string
          call: "analytics-api.get-otd"
          with:
            station: "{{station}}"
            period: "{{period}}"
          outputParameters:
            - name: otd_rate
              type: number
              mapping: "$.onTimeRate"
            - name: total_delivered
              type: number
              mapping: "$.totalDelivered"
            - name: late_count
              type: number
              mapping: "$.lateCount"
  consumes:
    - type: http
      namespace: analytics-api
      baseUri: "https://analytics.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_analytics_token"
      resources:
        - name: otd
          path: "/delivery/on-time"
          operations:
            - name: get-otd
              method: POST

Compiles daily network operations briefing from volume, weather, and staffing data.

naftiko: "0.5"
info:
  label: "Operations Daily Briefing Orchestrator"
  description: "Compiles daily network operations briefing from volume, weather, and staffing data."
  tags:
    - operations
    - analytics
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: briefing
      port: 8080
      tools:
        - name: generate-briefing
          description: "Generate daily ops briefing."
          inputParameters:
            - name: date
              in: body
              type: string
          steps:
            - name: volume
              type: call
              call: "analytics-api.get-daily-volume"
              with:
                date: "{{date}}"
            - name: weather
              type: call
              call: "weather-api.get-network"
              with:
                date: "{{date}}"
            - name: staffing
              type: call
              call: "workforce-api.get-summary"
              with:
                date: "{{date}}"
            - name: post
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "{{noc_channel}}"
                text: "DAILY OPS {{date}} | Volume: {{volume.total}} | Weather impacts: {{weather.alerts}} | Staffing: {{staffing.coverage}}%"
  consumes:
    - type: http
      namespace: analytics-api
      baseUri: "https://analytics.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_analytics_token"
      resources:
        - name: daily
          path: "/volume/daily"
          operations:
            - name: get-daily-volume
              method: POST
    - type: http
      namespace: weather-api
      baseUri: "https://weather.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_weather_token"
      resources:
        - name: network
          path: "/network/outlook"
          operations:
            - name: get-network
              method: POST
    - type: http
      namespace: workforce-api
      baseUri: "https://workforce.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_workforce_token"
      resources:
        - name: summary
          path: "/staffing/summary"
          operations:
            - name: get-summary
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Submits a supplier invoice to Oracle ERP for approval, then updates the associated purchase order status and notifies the requestor via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Oracle ERP Invoice Processing"
  description: "Submits a supplier invoice to Oracle ERP for approval, then updates the associated purchase order status and notifies the requestor via Microsoft Teams."
  tags:
    - finance
    - erp
    - oracle
    - accounts-payable
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: ap-processing
      port: 8080
      tools:
        - name: submit-invoice
          description: "Given supplier invoice details and a linked PO number, create the invoice record in Oracle ERP, update PO status, and send a Teams notification to the finance approver. Use during accounts-payable processing."
          inputParameters:
            - name: po_number
              in: body
              type: string
              description: "The Oracle ERP purchase order number the invoice is billed against."
            - name: invoice_number
              in: body
              type: string
              description: "The supplier's invoice number."
            - name: amount
              in: body
              type: number
              description: "Invoice total amount in the PO currency."
            - name: approver_upn
              in: body
              type: string
              description: "Microsoft Teams UPN of the finance approver."
          steps:
            - name: create-invoice
              type: call
              call: "oracle-ap.create-invoice"
              with:
                po_number: "{{po_number}}"
                invoice_number: "{{invoice_number}}"
                amount: "{{amount}}"
            - name: notify-approver
              type: call
              call: "msteams-ap.send-message"
              with:
                recipient_upn: "{{approver_upn}}"
                text: "Invoice {{invoice_number}} for PO {{po_number}} (${{amount}}) submitted in Oracle ERP. Invoice ID: {{create-invoice.invoice_id}}. Please approve."
  consumes:
    - type: http
      namespace: oracle-ap
      baseUri: "https://fedex-erp.fa.us2.oraclecloud.com/fscmRestApi/resources/11.13.18.05"
      authentication:
        type: basic
        username: "$secrets.oracle_erp_user"
        password: "$secrets.oracle_erp_password"
      resources:
        - name: invoices
          path: "/payablesInvoices"
          operations:
            - name: create-invoice
              method: POST
    - type: http
      namespace: msteams-ap
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: chat-messages
          path: "/chats"
          operations:
            - name: send-message
              method: POST

Looks up a FedEx Oracle ERP purchase order by number and returns header status, supplier name, total value, and open line items.

naftiko: "0.5"
info:
  label: "Oracle ERP Purchase Order Lookup"
  description: "Looks up a FedEx Oracle ERP purchase order by number and returns header status, supplier name, total value, and open line items."
  tags:
    - finance
    - erp
    - oracle
    - procurement
capability:
  exposes:
    - type: mcp
      namespace: erp
      port: 8080
      tools:
        - name: get-purchase-order
          description: "Given an Oracle ERP purchase order number, return status, supplier name, total value, and currency. Use when auditing procurement spend or resolving supplier payment queries."
          inputParameters:
            - name: po_number
              in: body
              type: string
              description: "The Oracle ERP purchase order number."
          call: "oracle-erp.get-po"
          with:
            po_number: "{{po_number}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.result[0].PO_STATUS"
            - name: supplier
              type: string
              mapping: "$.result[0].VENDOR_NAME"
            - name: total_value
              type: number
              mapping: "$.result[0].AMOUNT"
            - name: currency
              type: string
              mapping: "$.result[0].CURRENCY_CODE"
  consumes:
    - type: http
      namespace: oracle-erp
      baseUri: "https://fedex-erp.fa.us2.oraclecloud.com/fscmRestApi/resources/11.13.18.05"
      authentication:
        type: basic
        username: "$secrets.oracle_erp_user"
        password: "$secrets.oracle_erp_password"
      resources:
        - name: purchase-orders
          path: "/purchaseOrders/{{po_number}}"
          inputParameters:
            - name: po_number
              in: path
          operations:
            - name: get-po
              method: GET

Retrieves dimensional weight scan results for a package.

naftiko: "0.5"
info:
  label: "Package Dimension Scan"
  description: "Retrieves dimensional weight scan results for a package."
  tags:
    - logistics
    - operations
    - billing
capability:
  exposes:
    - type: mcp
      namespace: dim-scan
      port: 8080
      tools:
        - name: get-dimensions
          description: "Get package dimensions."
          inputParameters:
            - name: tracking_number
              in: body
              type: string
          call: "ops-api.get-dimensions"
          with:
            tracking: "{{tracking_number}}"
          outputParameters:
            - name: length
              type: number
              mapping: "$.length"
            - name: width
              type: number
              mapping: "$.width"
            - name: height
              type: number
              mapping: "$.height"
            - name: dim_weight
              type: number
              mapping: "$.dimensionalWeight"
  consumes:
    - type: http
      namespace: ops-api
      baseUri: "https://operations.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_ops_token"
      resources:
        - name: dimensions
          path: "/packages/{{tracking}}/dimensions"
          inputParameters:
            - name: tracking
              in: path
          operations:
            - name: get-dimensions
              method: GET

Holds a package at a FedEx location for customer pickup.

naftiko: "0.5"
info:
  label: "Package Hold at Location Request"
  description: "Holds a package at a FedEx location for customer pickup."
  tags:
    - logistics
    - customer-service
capability:
  exposes:
    - type: mcp
      namespace: hold
      port: 8080
      tools:
        - name: hold-package
          description: "Hold package at location."
          inputParameters:
            - name: tracking_number
              in: body
              type: string
            - name: location_id
              in: body
              type: string
          call: "delivery-api.hold-at-location"
          with:
            tracking: "{{tracking_number}}"
            location: "{{location_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.holdStatus"
            - name: pickup_deadline
              type: string
              mapping: "$.pickupDeadline"
  consumes:
    - type: http
      namespace: delivery-api
      baseUri: "https://delivery.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_delivery_token"
      resources:
        - name: hold
          path: "/packages/hold"
          operations:
            - name: hold-at-location
              method: POST

Processes a package redirect/hold-at-location request for an in-transit package.

naftiko: "0.5"
info:
  label: "Package Redirect Request"
  description: "Processes a package redirect/hold-at-location request for an in-transit package."
  tags:
    - logistics
    - customer-service
    - delivery
capability:
  exposes:
    - type: mcp
      namespace: redirect
      port: 8080
      tools:
        - name: redirect-package
          description: "Redirect an in-transit package."
          inputParameters:
            - name: tracking_number
              in: body
              type: string
            - name: redirect_type
              in: body
              type: string
              description: "Type (hold_at_location, redirect_address, vacation_hold)."
            - name: new_address
              in: body
              type: string
          call: "delivery-api.redirect"
          with:
            tracking: "{{tracking_number}}"
            type: "{{redirect_type}}"
            address: "{{new_address}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.redirectStatus"
            - name: new_eta
              type: string
              mapping: "$.newETA"
  consumes:
    - type: http
      namespace: delivery-api
      baseUri: "https://delivery.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_delivery_token"
      resources:
        - name: redirect
          path: "/packages/redirect"
          operations:
            - name: redirect
              method: POST

Retrieves real-time tracking status for a FedEx package by tracking number.

naftiko: "0.5"
info:
  label: "Package Tracking Lookup"
  description: "Retrieves real-time tracking status for a FedEx package by tracking number."
  tags:
    - logistics
    - tracking
    - operations
capability:
  exposes:
    - type: mcp
      namespace: tracking
      port: 8080
      tools:
        - name: track-package
          description: "Track a FedEx package."
          inputParameters:
            - name: tracking_number
              in: body
              type: string
              description: "FedEx tracking number."
          call: "tracking-api.get-status"
          with:
            tracking: "{{tracking_number}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.status"
            - name: location
              type: string
              mapping: "$.currentLocation"
            - name: eta
              type: string
              mapping: "$.estimatedDelivery"
  consumes:
    - type: http
      namespace: tracking-api
      baseUri: "https://api.fedex.com/track/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_api_token"
      resources:
        - name: track
          path: "/trackingnumbers"
          operations:
            - name: get-status
              method: POST

Identifies weight discrepancies between shipper-declared and actual scanned weights.

naftiko: "0.5"
info:
  label: "Package Weight Discrepancy Report"
  description: "Identifies weight discrepancies between shipper-declared and actual scanned weights."
  tags:
    - billing
    - operations
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: weight-audit
      port: 8080
      tools:
        - name: get-discrepancies
          description: "Get weight discrepancies."
          inputParameters:
            - name: account_number
              in: body
              type: string
            - name: period
              in: body
              type: string
          call: "billing-api.get-weight-discrepancies"
          with:
            account: "{{account_number}}"
            period: "{{period}}"
          outputParameters:
            - name: discrepancies
              type: array
              mapping: "$.discrepancies"
            - name: total_adjustment
              type: number
              mapping: "$.totalAdjustment"
  consumes:
    - type: http
      namespace: billing-api
      baseUri: "https://billing.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_billing_token"
      resources:
        - name: weight
          path: "/weight-audit"
          operations:
            - name: get-weight-discrepancies
              method: POST

Plans for peak volume surges by forecasting demand, assigning extra staff, and scheduling additional vehicles.

naftiko: "0.5"
info:
  label: "Peak Surge Planning Orchestrator"
  description: "Plans for peak volume surges by forecasting demand, assigning extra staff, and scheduling additional vehicles."
  tags:
    - operations
    - capacity
    - logistics
    - workforce-management
capability:
  exposes:
    - type: mcp
      namespace: surge
      port: 8080
      tools:
        - name: plan-surge
          description: "Plan for peak surge."
          inputParameters:
            - name: station
              in: body
              type: string
            - name: surge_date
              in: body
              type: string
          steps:
            - name: forecast
              type: call
              call: "analytics-api.get-forecast"
              with:
                facility: "{{station}}"
                date: "{{surge_date}}"
            - name: staff
              type: call
              call: "workforce-api.request-additional"
              with:
                station: "{{station}}"
                date: "{{surge_date}}"
                volume: "{{forecast.predicted_volume}}"
            - name: vehicles
              type: call
              call: "fleet-api.request-additional"
              with:
                station: "{{station}}"
                date: "{{surge_date}}"
            - name: notify
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "{{ops_channel}}"
                text: "Surge plan for {{station}} on {{surge_date}}: Vol={{forecast.predicted_volume}} | Extra staff: {{staff.assigned}} | Extra vehicles: {{vehicles.assigned}}"
  consumes:
    - type: http
      namespace: analytics-api
      baseUri: "https://analytics.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_analytics_token"
      resources:
        - name: forecast
          path: "/volume/forecast"
          operations:
            - name: get-forecast
              method: POST
    - type: http
      namespace: workforce-api
      baseUri: "https://workforce.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_workforce_token"
      resources:
        - name: additional
          path: "/staffing/request-additional"
          operations:
            - name: request-additional
              method: POST
    - type: http
      namespace: fleet-api
      baseUri: "https://fleet.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_fleet_token"
      resources:
        - name: additional
          path: "/vehicles/request-additional"
          operations:
            - name: request-additional
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Schedules a FedEx pickup at a customer location.

naftiko: "0.5"
info:
  label: "Pickup Scheduling"
  description: "Schedules a FedEx pickup at a customer location."
  tags:
    - logistics
    - customer-service
    - scheduling
capability:
  exposes:
    - type: mcp
      namespace: pickup
      port: 8080
      tools:
        - name: schedule-pickup
          description: "Schedule a pickup."
          inputParameters:
            - name: account_number
              in: body
              type: string
            - name: address
              in: body
              type: string
            - name: ready_time
              in: body
              type: string
            - name: package_count
              in: body
              type: number
          call: "pickup-api.create"
          with:
            account: "{{account_number}}"
            address: "{{address}}"
            ready: "{{ready_time}}"
            packages: "{{package_count}}"
          outputParameters:
            - name: pickup_id
              type: string
              mapping: "$.pickupId"
            - name: window
              type: string
              mapping: "$.pickupWindow"
  consumes:
    - type: http
      namespace: pickup-api
      baseUri: "https://api.fedex.com/pickup/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_api_token"
      resources:
        - name: pickups
          path: "/pickups"
          operations:
            - name: create
              method: POST

Retrieves pilot crew assignments for FedEx Express cargo flights.

naftiko: "0.5"
info:
  label: "Pilot Crew Scheduling Lookup"
  description: "Retrieves pilot crew assignments for FedEx Express cargo flights."
  tags:
    - crew-scheduling
    - flight-operations
capability:
  exposes:
    - type: mcp
      namespace: crew
      port: 8080
      tools:
        - name: get-crew
          description: "Get flight crew assignment."
          inputParameters:
            - name: flight_number
              in: body
              type: string
            - name: date
              in: body
              type: string
          call: "crew-api.get-assignment"
          with:
            flight: "{{flight_number}}"
            date: "{{date}}"
          outputParameters:
            - name: captain
              type: string
              mapping: "$.captain"
            - name: first_officer
              type: string
              mapping: "$.firstOfficer"
  consumes:
    - type: http
      namespace: crew-api
      baseUri: "https://crew.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_crew_token"
      resources:
        - name: assignments
          path: "/flights/{{flight}}/crew"
          inputParameters:
            - name: flight
              in: path
          operations:
            - name: get-assignment
              method: GET

Triggers a scheduled dataset refresh in Power BI for FedEx operational dashboards and checks refresh status.

naftiko: "0.5"
info:
  label: "Power BI Dataset Refresh Trigger"
  description: "Triggers a scheduled dataset refresh in Power BI for FedEx operational dashboards and checks refresh status."
  tags:
    - data
    - analytics
    - power-bi
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: bi-reporting
      port: 8080
      tools:
        - name: trigger-dataset-refresh
          description: "Given a Power BI workspace ID and dataset ID, trigger an on-demand dataset refresh. Use when operational data must be updated outside the scheduled refresh window."
          inputParameters:
            - name: workspace_id
              in: body
              type: string
              description: "The Power BI workspace (group) ID containing the dataset."
            - name: dataset_id
              in: body
              type: string
              description: "The Power BI dataset ID to refresh."
          call: "powerbi.refresh-dataset"
          with:
            workspace_id: "{{workspace_id}}"
            dataset_id: "{{dataset_id}}"
          outputParameters:
            - name: refresh_id
              type: string
              mapping: "$.requestId"
  consumes:
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: dataset-refreshes
          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

Creates a return shipping label and schedules pickup for a customer return.

naftiko: "0.5"
info:
  label: "Return Shipment Creation"
  description: "Creates a return shipping label and schedules pickup for a customer return."
  tags:
    - logistics
    - customer-service
    - returns
capability:
  exposes:
    - type: mcp
      namespace: returns
      port: 8080
      tools:
        - name: create-return
          description: "Create return shipment."
          inputParameters:
            - name: original_tracking
              in: body
              type: string
            - name: return_address
              in: body
              type: string
            - name: reason
              in: body
              type: string
          call: "ship-api.create-return"
          with:
            original: "{{original_tracking}}"
            address: "{{return_address}}"
            reason: "{{reason}}"
          outputParameters:
            - name: return_tracking
              type: string
              mapping: "$.returnTrackingNumber"
            - name: label_url
              type: string
              mapping: "$.labelUrl"
  consumes:
    - type: http
      namespace: ship-api
      baseUri: "https://api.fedex.com/ship/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_api_token"
      resources:
        - name: returns
          path: "/returns"
          operations:
            - name: create-return
              method: POST

Optimizes delivery routes for a driver by pulling stop list, weather conditions, and traffic data, then generating an optimized route sequence.

naftiko: "0.5"
info:
  label: "Delivery Route Optimization Orchestrator"
  description: "Optimizes delivery routes for a driver by pulling stop list, weather conditions, and traffic data, then generating an optimized route sequence."
  tags:
    - logistics
    - route-optimization
    - delivery
capability:
  exposes:
    - type: mcp
      namespace: route-opt
      port: 8080
      tools:
        - name: optimize-route
          description: "Optimize delivery route for a driver."
          inputParameters:
            - name: driver_id
              in: body
              type: string
            - name: date
              in: body
              type: string
            - name: station
              in: body
              type: string
          steps:
            - name: get-stops
              type: call
              call: "dispatch-api.get-stop-list"
              with:
                driver: "{{driver_id}}"
                date: "{{date}}"
            - name: get-traffic
              type: call
              call: "maps-api.get-traffic"
              with:
                region: "{{station}}"
            - name: optimize
              type: call
              call: "routing-api.optimize"
              with:
                stops: "{{get-stops.stops}}"
                traffic: "{{get-traffic.conditions}}"
            - name: push-route
              type: call
              call: "dispatch-api.update-route"
              with:
                driver: "{{driver_id}}"
                route: "{{optimize.optimized_sequence}}"
  consumes:
    - type: http
      namespace: dispatch-api
      baseUri: "https://dispatch.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_dispatch_token"
      resources:
        - name: stops
          path: "/drivers/{{driver}}/stops"
          inputParameters:
            - name: driver
              in: path
          operations:
            - name: get-stop-list
              method: GET
        - name: routes
          path: "/drivers/{{driver}}/route"
          inputParameters:
            - name: driver
              in: path
          operations:
            - name: update-route
              method: PUT
    - type: http
      namespace: maps-api
      baseUri: "https://maps.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_maps_token"
      resources:
        - name: traffic
          path: "/traffic/{{region}}"
          inputParameters:
            - name: region
              in: path
          operations:
            - name: get-traffic
              method: GET
    - type: http
      namespace: routing-api
      baseUri: "https://routing.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_routing_token"
      resources:
        - name: optimize
          path: "/optimize"
          operations:
            - name: optimize
              method: POST

Creates a new SAP purchase order from a procurement request, links it to a cost center, and notifies the requester via Microsoft Teams.

naftiko: "0.5"
info:
  label: "SAP Purchase Order Creation"
  description: "Creates a new SAP purchase order from a procurement request, links it to a cost center, and notifies the requester via Microsoft Teams."
  tags:
    - finance
    - procurement
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: procurement
      port: 8080
      tools:
        - name: create-purchase-order
          description: "Given supplier ID, cost center, and line item details, create a SAP purchase order and send a confirmation to the requester in Microsoft Teams. Use during procurement request fulfillment."
          inputParameters:
            - name: supplier_id
              in: body
              type: string
              description: "The SAP supplier/vendor number."
            - name: cost_center
              in: body
              type: string
              description: "The SAP cost center to charge the purchase to."
            - name: item_description
              in: body
              type: string
              description: "Description of the goods or services being purchased."
            - name: amount
              in: body
              type: number
              description: "Total purchase order value."
            - name: requester_upn
              in: body
              type: string
              description: "Microsoft Teams UPN of the person who submitted the request."
          steps:
            - name: create-po
              type: call
              call: "sap-po.create-purchase-order"
              with:
                supplier_id: "{{supplier_id}}"
                cost_center: "{{cost_center}}"
                item_description: "{{item_description}}"
                amount: "{{amount}}"
            - name: notify-requester
              type: call
              call: "msteams-procure.send-message"
              with:
                recipient_upn: "{{requester_upn}}"
                text: "Your purchase request has been created as SAP PO {{create-po.po_number}} for ${{amount}}. Status: {{create-po.status}}."
  consumes:
    - type: http
      namespace: sap-po
      baseUri: "https://fedex-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"
          operations:
            - name: create-purchase-order
              method: POST
    - type: http
      namespace: msteams-procure
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: chats
          path: "/chats"
          operations:
            - name: send-message
              method: POST

Queries SAP for procurement spend by cost center for a given fiscal period and returns a summary for financial reporting.

naftiko: "0.5"
info:
  label: "SAP Spend Analytics Report"
  description: "Queries SAP for procurement spend by cost center for a given fiscal period and returns a summary for financial reporting."
  tags:
    - finance
    - erp
    - sap
    - reporting
    - procurement
capability:
  exposes:
    - type: mcp
      namespace: finance-reporting
      port: 8080
      tools:
        - name: get-spend-by-cost-center
          description: "Given a fiscal year, period, and optional cost center, query SAP spend data and return total commitments and actuals. Use for financial close reviews, budget variance analysis, and procurement reporting."
          inputParameters:
            - name: fiscal_year
              in: body
              type: string
              description: "The SAP fiscal year (e.g., 2025)."
            - name: period
              in: body
              type: string
              description: "The fiscal period number (1-12)."
            - name: cost_center
              in: body
              type: string
              description: "Optional SAP cost center code to filter results."
          call: "sap-finance.get-cost-center-spend"
          with:
            fiscal_year: "{{fiscal_year}}"
            period: "{{period}}"
            cost_center: "{{cost_center}}"
          outputParameters:
            - name: total_actuals
              type: number
              mapping: "$.d.results[0].AmountInCoCodeCurrency"
            - name: currency
              type: string
              mapping: "$.d.results[0].CompanyCodeCurrency"
  consumes:
    - type: http
      namespace: sap-finance
      baseUri: "https://fedex-s4.sap.com/sap/opu/odata/sap/FAC_COSTCENTER_0001"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: cost-center-actuals
          path: "/CostCenterActuals"
          inputParameters:
            - name: fiscal_year
              in: query
            - name: period
              in: query
            - name: cost_center
              in: query
          operations:
            - name: get-cost-center-spend
              method: GET

Monitors barcode scanner health across sort facilities.

naftiko: "0.5"
info:
  label: "Scanner Health Monitor"
  description: "Monitors barcode scanner health across sort facilities."
  tags:
    - operations
    - monitoring
    - sorting
capability:
  exposes:
    - type: mcp
      namespace: scanner
      port: 8080
      tools:
        - name: check-scanners
          description: "Check scanner health."
          inputParameters:
            - name: facility
              in: body
              type: string
          call: "ops-api.get-scanner-health"
          with:
            facility: "{{facility}}"
          outputParameters:
            - name: total
              type: number
              mapping: "$.totalScanners"
            - name: online
              type: number
              mapping: "$.onlineScanners"
            - name: error_rate
              type: number
              mapping: "$.errorRate"
  consumes:
    - type: http
      namespace: ops-api
      baseUri: "https://operations.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_ops_token"
      resources:
        - name: scanners
          path: "/facilities/{{facility}}/scanners"
          inputParameters:
            - name: facility
              in: path
          operations:
            - name: get-scanner-health
              method: GET

Retrieves current service alerts and disruptions across the FedEx network.

naftiko: "0.5"
info:
  label: "Service Alert Status"
  description: "Retrieves current service alerts and disruptions across the FedEx network."
  tags:
    - operations
    - customer-service
    - alerts
capability:
  exposes:
    - type: mcp
      namespace: alerts
      port: 8080
      tools:
        - name: get-alerts
          description: "Get active service alerts."
          inputParameters:
            - name: region
              in: body
              type: string
            - name: service
              in: body
              type: string
              description: "Service (Express, Ground, Freight)."
          call: "ops-api.get-alerts"
          with:
            region: "{{region}}"
            service: "{{service}}"
          outputParameters:
            - name: alerts
              type: array
              mapping: "$.activeAlerts"
            - name: count
              type: number
              mapping: "$.alertCount"
  consumes:
    - type: http
      namespace: ops-api
      baseUri: "https://operations.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_ops_token"
      resources:
        - name: alerts
          path: "/service-alerts"
          operations:
            - name: get-alerts
              method: POST

Queries ServiceNow for the status of the most recent scheduled backup job and alerts the IT operations Microsoft Teams channel if the backup failed or is overdue.

naftiko: "0.5"
info:
  label: "ServiceNow Backup Verification Check"
  description: "Queries ServiceNow for the status of the most recent scheduled backup job and alerts the IT operations Microsoft Teams channel if the backup failed or is overdue."
  tags:
    - itsm
    - operations
    - servicenow
    - microsoft-teams
    - backup
capability:
  exposes:
    - type: mcp
      namespace: backup-ops
      port: 8080
      tools:
        - name: verify-backup-status
          description: "Query ServiceNow for the latest backup job record and post a Teams alert if the most recent backup failed or has not completed within the expected window. Use as part of daily IT operations checks."
          inputParameters:
            - name: backup_job_name
              in: body
              type: string
              description: "The ServiceNow CI or job name for the backup job to verify."
          steps:
            - name: get-backup-job
              type: call
              call: "servicenow-backup.get-backup-record"
              with:
                job_name: "{{backup_job_name}}"
            - name: alert-if-failed
              type: call
              call: "msteams-backup.send-message"
              with:
                channel_id: "$secrets.teams_it_ops_channel_id"
                text: "Backup Check — {{backup_job_name}}: Status={{get-backup-job.status}}, Last run={{get-backup-job.last_run_date}}. Review if status is not 'Success'."
  consumes:
    - type: http
      namespace: servicenow-backup
      baseUri: "https://fedex.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: backup-records
          path: "/table/scheduled_job"
          inputParameters:
            - name: job_name
              in: query
          operations:
            - name: get-backup-record
              method: GET
    - type: http
      namespace: msteams-backup
      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: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Submits a ServiceNow change request for a FedEx IT change and routes it to the appropriate approval group based on change risk level.

naftiko: "0.5"
info:
  label: "ServiceNow Change Request Approval"
  description: "Submits a ServiceNow change request for a FedEx IT change and routes it to the appropriate approval group based on change risk level."
  tags:
    - itsm
    - change-management
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: change-mgmt
      port: 8080
      tools:
        - name: create-change-request
          description: "Given change details, risk level, and scheduled implementation window, create a ServiceNow change request and route it to the correct approval group. Use when planning IT or infrastructure changes in the FedEx environment."
          inputParameters:
            - name: short_description
              in: body
              type: string
              description: "Brief description of the change."
            - name: risk
              in: body
              type: string
              description: "Risk level: low, medium, or high."
            - name: start_date
              in: body
              type: string
              description: "Planned implementation start in ISO 8601 format."
            - name: end_date
              in: body
              type: string
              description: "Planned implementation end in ISO 8601 format."
          call: "servicenow-change.create-change"
          with:
            short_description: "{{short_description}}"
            risk: "{{risk}}"
            start_date: "{{start_date}}"
            end_date: "{{end_date}}"
          outputParameters:
            - name: change_number
              type: string
              mapping: "$.result.number"
            - name: state
              type: string
              mapping: "$.result.state"
  consumes:
    - type: http
      namespace: servicenow-change
      baseUri: "https://fedex.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: change-requests
          path: "/table/change_request"
          operations:
            - name: create-change
              method: POST

Escalates a ServiceNow P1 incident for FedEx IT operations by updating priority, reassigning to the on-call team, and sending an urgent Microsoft Teams alert.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Escalation Handler"
  description: "Escalates a ServiceNow P1 incident for FedEx IT operations by updating priority, reassigning to the on-call team, and sending an urgent Microsoft Teams alert."
  tags:
    - itsm
    - incident-response
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: it-ops
      port: 8080
      tools:
        - name: escalate-incident
          description: "Given a ServiceNow incident number, escalate it to P1, reassign to the on-call group, and post an urgent alert to the IT operations Teams channel. Use when an incident crosses SLA thresholds or is confirmed as business-critical."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "The ServiceNow incident number (e.g., INC0012345)."
            - name: escalation_reason
              in: body
              type: string
              description: "Plain-text reason for the escalation."
          steps:
            - name: update-incident
              type: call
              call: "servicenow-itsm.patch-incident"
              with:
                number: "{{incident_number}}"
                priority: "1"
                assignment_group: "IT_OnCall_Critical"
                work_notes: "Escalated: {{escalation_reason}}"
            - name: alert-ops-channel
              type: call
              call: "msteams-itsm.send-message"
              with:
                channel_id: "$secrets.teams_it_ops_channel_id"
                text: "P1 ESCALATION: {{incident_number}} has been escalated to critical. Reason: {{escalation_reason}}. Assigned to IT On-Call Critical team."
  consumes:
    - type: http
      namespace: servicenow-itsm
      baseUri: "https://fedex.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident/{{number}}"
          inputParameters:
            - name: number
              in: path
          operations:
            - name: patch-incident
              method: PATCH
    - type: http
      namespace: msteams-itsm
      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: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Intercepts and returns or redirects a package before delivery.

naftiko: "0.5"
info:
  label: "Shipment Intercept Request"
  description: "Intercepts and returns or redirects a package before delivery."
  tags:
    - logistics
    - customer-service
capability:
  exposes:
    - type: mcp
      namespace: intercept
      port: 8080
      tools:
        - name: intercept-shipment
          description: "Intercept a shipment."
          inputParameters:
            - name: tracking_number
              in: body
              type: string
            - name: action
              in: body
              type: string
              description: "Action (return_to_shipper, redirect, hold)."
          call: "delivery-api.intercept"
          with:
            tracking: "{{tracking_number}}"
            action: "{{action}}"
          outputParameters:
            - name: intercept_id
              type: string
              mapping: "$.interceptId"
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: delivery-api
      baseUri: "https://delivery.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_delivery_token"
      resources:
        - name: intercept
          path: "/packages/intercept"
          operations:
            - name: intercept
              method: POST

Generates a FedEx shipping label for a package.

naftiko: "0.5"
info:
  label: "Shipment Label Generation"
  description: "Generates a FedEx shipping label for a package."
  tags:
    - logistics
    - shipping
capability:
  exposes:
    - type: mcp
      namespace: labels
      port: 8080
      tools:
        - name: create-label
          description: "Generate shipping label."
          inputParameters:
            - name: shipper
              in: body
              type: string
            - name: recipient
              in: body
              type: string
            - name: weight_lbs
              in: body
              type: number
            - name: service
              in: body
              type: string
          call: "ship-api.create-label"
          with:
            shipper: "{{shipper}}"
            recipient: "{{recipient}}"
            weight: "{{weight_lbs}}"
            service: "{{service}}"
          outputParameters:
            - name: tracking_number
              type: string
              mapping: "$.trackingNumber"
            - name: label_url
              type: string
              mapping: "$.labelUrl"
  consumes:
    - type: http
      namespace: ship-api
      baseUri: "https://api.fedex.com/ship/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_api_token"
      resources:
        - name: labels
          path: "/shipments"
          operations:
            - name: create-label
              method: POST

Calculates shipping rates for a package based on origin, destination, weight, and service type.

naftiko: "0.5"
info:
  label: "Shipment Rate Quote"
  description: "Calculates shipping rates for a package based on origin, destination, weight, and service type."
  tags:
    - logistics
    - pricing
    - customer-service
capability:
  exposes:
    - type: mcp
      namespace: rates
      port: 8080
      tools:
        - name: get-rate
          description: "Get shipping rate quote."
          inputParameters:
            - name: origin_zip
              in: body
              type: string
            - name: dest_zip
              in: body
              type: string
            - name: weight_lbs
              in: body
              type: number
            - name: service_type
              in: body
              type: string
              description: "Service (Ground, Express, Overnight, 2Day)."
          call: "rate-api.calculate"
          with:
            origin: "{{origin_zip}}"
            dest: "{{dest_zip}}"
            weight: "{{weight_lbs}}"
            service: "{{service_type}}"
          outputParameters:
            - name: rate
              type: number
              mapping: "$.totalCharge"
            - name: transit_days
              type: number
              mapping: "$.transitDays"
  consumes:
    - type: http
      namespace: rate-api
      baseUri: "https://api.fedex.com/rate/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_api_token"
      resources:
        - name: rates
          path: "/rates/quotes"
          operations:
            - name: calculate
              method: POST

Updates signature requirement for an in-transit package.

naftiko: "0.5"
info:
  label: "Signature Required Update"
  description: "Updates signature requirement for an in-transit package."
  tags:
    - logistics
    - delivery
    - customer-service
capability:
  exposes:
    - type: mcp
      namespace: signature
      port: 8080
      tools:
        - name: update-signature
          description: "Update signature requirement."
          inputParameters:
            - name: tracking_number
              in: body
              type: string
            - name: signature_type
              in: body
              type: string
              description: "Type (direct, indirect, adult, no_signature)."
          call: "delivery-api.update-signature"
          with:
            tracking: "{{tracking_number}}"
            type: "{{signature_type}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.updateStatus"
  consumes:
    - type: http
      namespace: delivery-api
      baseUri: "https://delivery.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_delivery_token"
      resources:
        - name: signature
          path: "/packages/signature"
          operations:
            - name: update-signature
              method: PUT

Finds the optimal USPS injection point for FedEx Ground Economy/SmartPost shipments.

naftiko: "0.5"
info:
  label: "SmartPost Injection Point Lookup"
  description: "Finds the optimal USPS injection point for FedEx Ground Economy/SmartPost shipments."
  tags:
    - logistics
    - ground
    - delivery
capability:
  exposes:
    - type: mcp
      namespace: smartpost
      port: 8080
      tools:
        - name: get-injection
          description: "Get SmartPost injection point."
          inputParameters:
            - name: dest_zip
              in: body
              type: string
          call: "ops-api.get-injection"
          with:
            zip: "{{dest_zip}}"
          outputParameters:
            - name: injection_facility
              type: string
              mapping: "$.injectionFacility"
            - name: usps_delivery_date
              type: string
              mapping: "$.uspsDeliveryDate"
  consumes:
    - type: http
      namespace: ops-api
      baseUri: "https://operations.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_ops_token"
      resources:
        - name: injection
          path: "/smartpost/injection"
          operations:
            - name: get-injection
              method: POST

Retrieves package throughput metrics for a FedEx sort facility including volume, scan rates, and missort rates.

naftiko: "0.5"
info:
  label: "Sort Facility Throughput Report"
  description: "Retrieves package throughput metrics for a FedEx sort facility including volume, scan rates, and missort rates."
  tags:
    - operations
    - analytics
    - sorting
capability:
  exposes:
    - type: mcp
      namespace: sort-ops
      port: 8080
      tools:
        - name: get-throughput
          description: "Get sort facility throughput."
          inputParameters:
            - name: facility_code
              in: body
              type: string
            - name: shift
              in: body
              type: string
          call: "ops-api.get-throughput"
          with:
            facility: "{{facility_code}}"
            shift: "{{shift}}"
          outputParameters:
            - name: packages_processed
              type: number
              mapping: "$.packagesProcessed"
            - name: scan_rate
              type: number
              mapping: "$.scanRate"
            - name: missort_rate
              type: number
              mapping: "$.missortRate"
  consumes:
    - type: http
      namespace: ops-api
      baseUri: "https://operations.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_ops_token"
      resources:
        - name: throughput
          path: "/facilities/{{facility}}/throughput"
          inputParameters:
            - name: facility
              in: path
          operations:
            - name: get-throughput
              method: GET

Queries Splunk for infrastructure health metrics across FedEx Azure resources and posts a status summary to the IT operations Teams channel.

naftiko: "0.5"
info:
  label: "Splunk Infrastructure Health Monitor"
  description: "Queries Splunk for infrastructure health metrics across FedEx Azure resources and posts a status summary to the IT operations Teams channel."
  tags:
    - observability
    - infrastructure
    - splunk
    - microsoft-teams
    - monitoring
capability:
  exposes:
    - type: mcp
      namespace: infra-health
      port: 8080
      tools:
        - name: digest-infrastructure-health
          description: "Query Splunk for the last hour of Azure infrastructure health signals (CPU, memory, disk, network) and post a summary to the IT operations Teams channel. Use for shift handoffs and proactive monitoring rounds."
          inputParameters:
            - name: environment
              in: body
              type: string
              description: "Target environment to report on (e.g., production, staging)."
          steps:
            - name: query-health
              type: call
              call: "splunk-health.run-search"
              with:
                search: "search index=azure_infra environment={{environment}} earliest=-1h | stats avg(cpu_pct) as avg_cpu, avg(mem_pct) as avg_mem, count(alert) as alert_count by host"
                earliest_time: "-1h"
                latest_time: "now"
            - name: post-summary
              type: call
              call: "msteams-infra.send-message"
              with:
                channel_id: "$secrets.teams_it_ops_channel_id"
                text: "Infrastructure Health ({{environment}}) — past 1h: Avg CPU: {{query-health.avg_cpu}}%, Avg Mem: {{query-health.avg_mem}}%, Active Alerts: {{query-health.alert_count}}"
  consumes:
    - type: http
      namespace: splunk-health
      baseUri: "https://fedex-splunk.example.com:8089"
      authentication:
        type: basic
        username: "$secrets.splunk_user"
        password: "$secrets.splunk_password"
      resources:
        - name: search-jobs
          path: "/services/search/jobs/export"
          operations:
            - name: run-search
              method: POST
    - type: http
      namespace: msteams-infra
      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: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Queries Splunk for shipment tracking error events within a time window and returns a structured summary for operations triage.

naftiko: "0.5"
info:
  label: "Splunk Log Query for Shipment Errors"
  description: "Queries Splunk for shipment tracking error events within a time window and returns a structured summary for operations triage."
  tags:
    - operations
    - observability
    - splunk
    - shipment-tracking
capability:
  exposes:
    - type: mcp
      namespace: ops-observability
      port: 8080
      tools:
        - name: query-shipment-errors
          description: "Given a time range and optional tracking number prefix, search Splunk for shipment error events and return a count and top error messages. Use during operations triage or customer escalation resolution."
          inputParameters:
            - name: earliest_time
              in: body
              type: string
              description: "Splunk earliest time bound (e.g., -1h, -24h, or ISO 8601 timestamp)."
            - name: latest_time
              in: body
              type: string
              description: "Splunk latest time bound (e.g., now, or ISO 8601 timestamp)."
            - name: tracking_prefix
              in: body
              type: string
              description: "Optional FedEx tracking number prefix to filter results."
          call: "splunk-ops.run-search"
          with:
            search: "search index=shipment_tracking sourcetype=tracking_error tracking_number={{tracking_prefix}}* | stats count by error_code, error_message | sort -count"
            earliest_time: "{{earliest_time}}"
            latest_time: "{{latest_time}}"
          outputParameters:
            - name: results
              type: array
              mapping: "$.results"
            - name: total_errors
              type: number
              mapping: "$.results_preview_count"
  consumes:
    - type: http
      namespace: splunk-ops
      baseUri: "https://fedex-splunk.example.com:8089"
      authentication:
        type: basic
        username: "$secrets.splunk_user"
        password: "$secrets.splunk_password"
      resources:
        - name: search-jobs
          path: "/services/search/jobs/export"
          operations:
            - name: run-search
              method: POST

Retrieves staffing levels at a station compared to required minimums.

naftiko: "0.5"
info:
  label: "Station Staffing Report"
  description: "Retrieves staffing levels at a station compared to required minimums."
  tags:
    - workforce-management
    - operations
capability:
  exposes:
    - type: mcp
      namespace: staffing
      port: 8080
      tools:
        - name: get-staffing
          description: "Get staffing levels."
          inputParameters:
            - name: station
              in: body
              type: string
            - name: shift
              in: body
              type: string
          call: "workforce-api.get-staffing"
          with:
            station: "{{station}}"
            shift: "{{shift}}"
          outputParameters:
            - name: current
              type: number
              mapping: "$.currentStaff"
            - name: required
              type: number
              mapping: "$.required"
  consumes:
    - type: http
      namespace: workforce-api
      baseUri: "https://workforce.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_workforce_token"
      resources:
        - name: staffing
          path: "/stations/{{station}}/staffing"
          inputParameters:
            - name: station
              in: path
          operations:
            - name: get-staffing
              method: GET

Retrieves capacity and utilization metrics for a FedEx Ground or Express station.

naftiko: "0.5"
info:
  label: "Station Capacity Report"
  description: "Retrieves capacity and utilization metrics for a FedEx Ground or Express station."
  tags:
    - operations
    - analytics
    - capacity
capability:
  exposes:
    - type: mcp
      namespace: station-ops
      port: 8080
      tools:
        - name: get-capacity
          description: "Get station capacity."
          inputParameters:
            - name: station
              in: body
              type: string
            - name: date
              in: body
              type: string
          call: "ops-api.get-capacity"
          with:
            station: "{{station}}"
            date: "{{date}}"
          outputParameters:
            - name: capacity
              type: number
              mapping: "$.maxCapacity"
            - name: utilization
              type: number
              mapping: "$.currentUtilization"
            - name: overflow_risk
              type: boolean
              mapping: "$.overflowRisk"
  consumes:
    - type: http
      namespace: ops-api
      baseUri: "https://operations.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_ops_token"
      resources:
        - name: capacity
          path: "/stations/{{station}}/capacity"
          inputParameters:
            - name: station
              in: path
          operations:
            - name: get-capacity
              method: GET

Provides end-to-end supply chain visibility for enterprise customers.

naftiko: "0.5"
info:
  label: "Supply Chain Visibility Dashboard"
  description: "Provides end-to-end supply chain visibility for enterprise customers."
  tags:
    - logistics
    - analytics
    - supply-chain
capability:
  exposes:
    - type: mcp
      namespace: scv
      port: 8080
      tools:
        - name: get-visibility
          description: "Get supply chain visibility."
          inputParameters:
            - name: account_number
              in: body
              type: string
            - name: date_range
              in: body
              type: string
          call: "analytics-api.get-scv"
          with:
            account: "{{account_number}}"
            range: "{{date_range}}"
          outputParameters:
            - name: in_transit
              type: number
              mapping: "$.inTransit"
            - name: delivered
              type: number
              mapping: "$.delivered"
            - name: exceptions
              type: number
              mapping: "$.exceptions"
  consumes:
    - type: http
      namespace: analytics-api
      baseUri: "https://analytics.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_analytics_token"
      resources:
        - name: scv
          path: "/supply-chain/visibility"
          operations:
            - name: get-scv
              method: POST

Calculates applicable surcharges for a shipment including fuel, residential, and oversize.

naftiko: "0.5"
info:
  label: "Surcharge Calculator"
  description: "Calculates applicable surcharges for a shipment including fuel, residential, and oversize."
  tags:
    - pricing
    - logistics
    - billing
capability:
  exposes:
    - type: mcp
      namespace: surcharges
      port: 8080
      tools:
        - name: calc-surcharges
          description: "Calculate surcharges."
          inputParameters:
            - name: tracking_number
              in: body
              type: string
            - name: service
              in: body
              type: string
          call: "rate-api.calc-surcharges"
          with:
            tracking: "{{tracking_number}}"
            service: "{{service}}"
          outputParameters:
            - name: fuel_surcharge
              type: number
              mapping: "$.fuelSurcharge"
            - name: residential
              type: number
              mapping: "$.residentialSurcharge"
            - name: total_surcharges
              type: number
              mapping: "$.totalSurcharges"
  consumes:
    - type: http
      namespace: rate-api
      baseUri: "https://api.fedex.com/rate/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_api_token"
      resources:
        - name: surcharges
          path: "/surcharges/calculate"
          operations:
            - name: calc-surcharges
              method: POST

Publishes an updated Tableau workbook to a Tableau Server site and triggers a data source refresh for FedEx logistics reporting.

naftiko: "0.5"
info:
  label: "Tableau Workbook Publish and Refresh"
  description: "Publishes an updated Tableau workbook to a Tableau Server site and triggers a data source refresh for FedEx logistics reporting."
  tags:
    - data
    - analytics
    - tableau
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: tableau-reporting
      port: 8080
      tools:
        - name: refresh-tableau-datasource
          description: "Given a Tableau site name and data source ID, trigger an immediate extract refresh. Use when fresh shipment or operational data must be reflected in Tableau dashboards without waiting for the scheduled refresh."
          inputParameters:
            - name: site_name
              in: body
              type: string
              description: "The Tableau Server site name (e.g., fedex-ops)."
            - name: datasource_id
              in: body
              type: string
              description: "The Tableau data source LUID to refresh."
          call: "tableau.refresh-datasource"
          with:
            site_name: "{{site_name}}"
            datasource_id: "{{datasource_id}}"
          outputParameters:
            - name: job_id
              type: string
              mapping: "$.job.id"
            - name: job_status
              type: string
              mapping: "$.job.status"
  consumes:
    - type: http
      namespace: tableau
      baseUri: "https://tableau.fedex.com/api/3.21"
      authentication:
        type: apikey
        key: "X-Tableau-Auth"
        value: "$secrets.tableau_token"
        placement: header
      resources:
        - name: datasource-refreshes
          path: "/sites/{{site_name}}/datasources/{{datasource_id}}/refresh"
          inputParameters:
            - name: site_name
              in: path
            - name: datasource_id
              in: path
          operations:
            - name: refresh-datasource
              method: POST

Monitors temperature readings for cold-chain/temperature-controlled shipments.

naftiko: "0.5"
info:
  label: "Temperature-Controlled Shipment Status"
  description: "Monitors temperature readings for cold-chain/temperature-controlled shipments."
  tags:
    - logistics
    - cold-chain
    - tracking
capability:
  exposes:
    - type: mcp
      namespace: cold-chain
      port: 8080
      tools:
        - name: get-temp-status
          description: "Get temperature status of cold-chain shipment."
          inputParameters:
            - name: tracking_number
              in: body
              type: string
          call: "tracking-api.get-temperature"
          with:
            tracking: "{{tracking_number}}"
          outputParameters:
            - name: current_temp
              type: number
              mapping: "$.currentTemp"
            - name: min_temp
              type: number
              mapping: "$.minTemp"
            - name: max_temp
              type: number
              mapping: "$.maxTemp"
            - name: within_range
              type: boolean
              mapping: "$.withinRange"
  consumes:
    - type: http
      namespace: tracking-api
      baseUri: "https://api.fedex.com/track/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_api_token"
      resources:
        - name: temperature
          path: "/trackingnumbers/{{tracking}}/temperature"
          inputParameters:
            - name: tracking
              in: path
          operations:
            - name: get-temperature
              method: GET

Triggers a Terraform Cloud run for a FedEx infrastructure workspace to apply pending infrastructure changes.

naftiko: "0.5"
info:
  label: "Terraform Cloud Workspace Run"
  description: "Triggers a Terraform Cloud run for a FedEx infrastructure workspace to apply pending infrastructure changes."
  tags:
    - cloud
    - infrastructure
    - terraform
    - devops
capability:
  exposes:
    - type: mcp
      namespace: infra-provisioning
      port: 8080
      tools:
        - name: trigger-terraform-run
          description: "Given a Terraform Cloud workspace ID, trigger a new plan-and-apply run. Use when deploying approved infrastructure changes to FedEx cloud environments."
          inputParameters:
            - name: workspace_id
              in: body
              type: string
              description: "The Terraform Cloud workspace ID (e.g., ws-xxxxxxxxxxxxxxxx)."
            - name: message
              in: body
              type: string
              description: "Human-readable message describing the reason for the run."
          call: "terraform-cloud.create-run"
          with:
            workspace_id: "{{workspace_id}}"
            message: "{{message}}"
          outputParameters:
            - name: run_id
              type: string
              mapping: "$.data.id"
            - name: run_status
              type: string
              mapping: "$.data.attributes.status"
  consumes:
    - type: http
      namespace: terraform-cloud
      baseUri: "https://app.terraform.io/api/v2"
      authentication:
        type: bearer
        token: "$secrets.terraform_token"
      resources:
        - name: runs
          path: "/runs"
          operations:
            - name: create-run
              method: POST

Retrieves GPS location and status of a linehaul trailer.

naftiko: "0.5"
info:
  label: "Trailer GPS Tracking"
  description: "Retrieves GPS location and status of a linehaul trailer."
  tags:
    - logistics
    - tracking
    - ground
capability:
  exposes:
    - type: mcp
      namespace: trailer
      port: 8080
      tools:
        - name: track-trailer
          description: "Track trailer location."
          inputParameters:
            - name: trailer_id
              in: body
              type: string
          call: "fleet-api.get-trailer-location"
          with:
            trailer: "{{trailer_id}}"
          outputParameters:
            - name: location
              type: string
              mapping: "$.currentLocation"
            - name: status
              type: string
              mapping: "$.status"
            - name: eta
              type: string
              mapping: "$.eta"
  consumes:
    - type: http
      namespace: fleet-api
      baseUri: "https://fleet.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_fleet_token"
      resources:
        - name: trailers
          path: "/trailers/{{trailer}}/location"
          inputParameters:
            - name: trailer
              in: path
          operations:
            - name: get-trailer-location
              method: GET

Retrieves status of delivery vehicles at a station including availability, maintenance, and GPS location.

naftiko: "0.5"
info:
  label: "Vehicle Fleet Status"
  description: "Retrieves status of delivery vehicles at a station including availability, maintenance, and GPS location."
  tags:
    - fleet-management
    - logistics
    - tracking
capability:
  exposes:
    - type: mcp
      namespace: fleet
      port: 8080
      tools:
        - name: get-fleet-status
          description: "Get vehicle fleet status at a station."
          inputParameters:
            - name: station
              in: body
              type: string
            - name: vehicle_type
              in: body
              type: string
              description: "Type (van, truck, tractor)."
          call: "fleet-api.get-status"
          with:
            station: "{{station}}"
            type: "{{vehicle_type}}"
          outputParameters:
            - name: available
              type: number
              mapping: "$.available"
            - name: in_service
              type: number
              mapping: "$.inService"
            - name: maintenance
              type: number
              mapping: "$.inMaintenance"
  consumes:
    - type: http
      namespace: fleet-api
      baseUri: "https://fleet.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_fleet_token"
      resources:
        - name: status
          path: "/stations/{{station}}/vehicles"
          inputParameters:
            - name: station
              in: path
          operations:
            - name: get-status
              method: GET

When a delivery vehicle needs maintenance, creates a work order, schedules replacement vehicle, and notifies the station manager.

naftiko: "0.5"
info:
  label: "Vehicle Maintenance Orchestrator"
  description: "When a delivery vehicle needs maintenance, creates a work order, schedules replacement vehicle, and notifies the station manager."
  tags:
    - fleet-management
    - maintenance
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: vehicle-mx
      port: 8080
      tools:
        - name: process-vehicle-mx
          description: "Process vehicle maintenance request."
          inputParameters:
            - name: vehicle_id
              in: body
              type: string
            - name: issue
              in: body
              type: string
            - name: station
              in: body
              type: string
          steps:
            - name: create-wo
              type: call
              call: "fleet-api.create-work-order"
              with:
                vehicle: "{{vehicle_id}}"
                issue: "{{issue}}"
            - name: assign-replacement
              type: call
              call: "fleet-api.assign-replacement"
              with:
                station: "{{station}}"
                vehicle: "{{vehicle_id}}"
            - name: notify-station
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "{{station_channel}}"
                text: "Vehicle {{vehicle_id}} down: {{issue}} | Replacement: {{assign-replacement.vehicle_id}}"
  consumes:
    - type: http
      namespace: fleet-api
      baseUri: "https://fleet.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_fleet_token"
      resources:
        - name: work-orders
          path: "/maintenance/work-orders"
          operations:
            - name: create-work-order
              method: POST
        - name: replacements
          path: "/vehicles/replacement"
          operations:
            - name: assign-replacement
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Retrieves package volume forecasts for a facility to support capacity planning.

naftiko: "0.5"
info:
  label: "Volume Forecast Report"
  description: "Retrieves package volume forecasts for a facility to support capacity planning."
  tags:
    - analytics
    - operations
    - forecasting
capability:
  exposes:
    - type: mcp
      namespace: forecast
      port: 8080
      tools:
        - name: get-forecast
          description: "Get volume forecast."
          inputParameters:
            - name: facility
              in: body
              type: string
            - name: days_ahead
              in: body
              type: number
          call: "analytics-api.get-forecast"
          with:
            facility: "{{facility}}"
            days: "{{days_ahead}}"
          outputParameters:
            - name: daily_volumes
              type: array
              mapping: "$.dailyVolumes"
            - name: peak_day
              type: string
              mapping: "$.peakDay"
  consumes:
    - type: http
      namespace: analytics-api
      baseUri: "https://analytics.fedex.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_analytics_token"
      resources:
        - name: forecast
          path: "/volume/forecast"
          operations:
            - name: get-forecast
              method: POST

Exports current FedEx headcount grouped by department and cost center from Workday for use in workforce planning and finance reporting.

naftiko: "0.5"
info:
  label: "Workday Headcount Snapshot"
  description: "Exports current FedEx headcount grouped by department and cost center from Workday for use in workforce planning and finance reporting."
  tags:
    - hr
    - reporting
    - workday
    - headcount
capability:
  exposes:
    - type: mcp
      namespace: hr-reporting
      port: 8080
      tools:
        - name: get-headcount-by-department
          description: "Returns a list of active FedEx employees grouped by department and cost center from Workday. Use for headcount planning, budget forecasting, and HR dashboards."
          call: "workday-hcm.headcount-export"
          outputParameters:
            - name: employees
              type: array
              mapping: "$.data"
            - name: total_count
              type: number
              mapping: "$.total"
  consumes:
    - type: http
      namespace: workday-hcm
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers-export
          path: "/fedex/workers"
          inputParameters:
            - name: format
              in: query
              value: "json"
          operations:
            - name: headcount-export
              method: GET

Fetches all open job requisitions from Workday Recruiting and syncs them to a Power BI dataset for talent acquisition reporting.

naftiko: "0.5"
info:
  label: "Workday Open Requisition Dashboard Sync"
  description: "Fetches all open job requisitions from Workday Recruiting and syncs them to a Power BI dataset for talent acquisition reporting."
  tags:
    - hr
    - recruiting
    - workday
    - power-bi
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: talent-reporting
      port: 8080
      tools:
        - name: sync-open-requisitions
          description: "Fetch all open Workday job requisitions and push updated counts to the talent acquisition Power BI dataset. Use when refreshing the recruiter performance dashboard or preparing for weekly staffing reviews."
          inputParameters:
            - name: workspace_id
              in: body
              type: string
              description: "The Power BI workspace ID containing the talent dataset."
            - name: dataset_id
              in: body
              type: string
              description: "The Power BI dataset ID to refresh after fetching requisitions."
          steps:
            - name: get-open-requisitions
              type: call
              call: "workday-ta.list-open-requisitions"
              with:
                status: "Open"
            - name: refresh-pbi-dataset
              type: call
              call: "powerbi-ta.refresh-dataset"
              with:
                workspace_id: "{{workspace_id}}"
                dataset_id: "{{dataset_id}}"
  consumes:
    - type: http
      namespace: workday-ta
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: job-requisitions
          path: "/fedex/jobRequisitions"
          inputParameters:
            - name: status
              in: query
          operations:
            - name: list-open-requisitions
              method: GET
    - type: http
      namespace: powerbi-ta
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: dataset-refreshes
          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

When a Workday job change or promotion is approved, updates the employee's Azure AD group memberships and sends a Teams notification confirming the access changes.

naftiko: "0.5"
info:
  label: "Workday Role Change Provisioner"
  description: "When a Workday job change or promotion is approved, updates the employee's Azure AD group memberships and sends a Teams notification confirming the access changes."
  tags:
    - hr
    - identity
    - workday
    - azure-ad
    - microsoft-teams
    - role-change
capability:
  exposes:
    - type: mcp
      namespace: hr-role-change
      port: 8080
      tools:
        - name: sync-role-change
          description: "Given a Workday employee ID and new role, update the employee's Azure AD group memberships to reflect the new position and notify the employee via Teams. Use when an internal transfer, promotion, or role change is finalized in Workday."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday worker ID of the employee changing roles."
            - name: new_role
              in: body
              type: string
              description: "The new job title or role name."
            - name: new_ad_group
              in: body
              type: string
              description: "The Azure AD group ID to add the employee to for the new role."
          steps:
            - name: get-worker
              type: call
              call: "workday-role.get-worker"
              with:
                worker_id: "{{employee_id}}"
            - name: update-ad-group
              type: call
              call: "azure-ad-role.add-group-member"
              with:
                group_id: "{{new_ad_group}}"
                user_id: "{{get-worker.azure_object_id}}"
            - name: notify-employee
              type: call
              call: "msteams-role.send-message"
              with:
                recipient_upn: "{{get-worker.work_email}}"
                text: "Your role has been updated to {{new_role}} in FedEx systems. Your access has been provisioned accordingly."
  consumes:
    - type: http
      namespace: workday-role
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/fedex/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: azure-ad-role
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.azure_ad_token"
      resources:
        - name: group-members
          path: "/groups/{{group_id}}/members/$ref"
          inputParameters:
            - name: group_id
              in: path
          operations:
            - name: add-group-member
              method: POST
    - type: http
      namespace: msteams-role
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: chats
          path: "/chats"
          operations:
            - name: send-message
              method: POST

Looks up the status of an employee's pending time-off request in Workday and returns approval state and covered dates.

naftiko: "0.5"
info:
  label: "Workday Time-Off Request Status Lookup"
  description: "Looks up the status of an employee's pending time-off request in Workday and returns approval state and covered dates."
  tags:
    - hr
    - workday
    - time-off
capability:
  exposes:
    - type: mcp
      namespace: hr-time
      port: 8080
      tools:
        - name: get-time-off-request
          description: "Given a Workday worker ID and time-off request ID, return the current approval status, requester name, and covered date range. Use when employees or managers need to check leave approval status."
          inputParameters:
            - name: worker_id
              in: body
              type: string
              description: "The Workday worker ID of the employee."
            - name: request_id
              in: body
              type: string
              description: "The Workday time-off request ID."
          call: "workday-time.get-time-off-request"
          with:
            worker_id: "{{worker_id}}"
            request_id: "{{request_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.data.overallStatus"
            - name: start_date
              type: string
              mapping: "$.data.startDate"
            - name: end_date
              type: string
              mapping: "$.data.endDate"
  consumes:
    - type: http
      namespace: workday-time
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: time-off-requests
          path: "/fedex/workers/{{worker_id}}/timeOffRequests/{{request_id}}"
          inputParameters:
            - name: worker_id
              in: path
            - name: request_id
              in: path
          operations:
            - name: get-time-off-request
              method: GET