Chevron Capabilities

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

Sort
Expand

Retrieves a daily drilling report from SharePoint and uses the Anthropic API to generate an executive summary with key performance indicators, posting it to the drilling operations Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "AI-Assisted Drilling Report Summarizer"
  description: "Retrieves a daily drilling report from SharePoint and uses the Anthropic API to generate an executive summary with key performance indicators, posting it to the drilling operations Microsoft Teams channel."
  tags:
    - ai
    - sharepoint
    - anthropic
    - microsoft-teams
    - drilling
    - upstream
capability:
  exposes:
    - type: mcp
      namespace: drilling-ai
      port: 8080
      tools:
        - name: summarize-drilling-report
          description: "Given a SharePoint document ID for a daily drilling report, retrieve the report content and use Claude to generate an executive summary with KPIs, risks, and next steps, posting to the drilling ops Teams channel."
          inputParameters:
            - name: document_id
              in: body
              type: string
              description: "The SharePoint document ID for the daily drilling report."
            - name: site_id
              in: body
              type: string
              description: "The SharePoint site ID housing the drilling reports."
            - name: well_name
              in: body
              type: string
              description: "The well name for context in the summary."
          steps:
            - name: get-report-content
              type: call
              call: sharepoint.get-document-content
              with:
                site_id: "{{site_id}}"
                document_id: "{{document_id}}"
            - name: generate-summary
              type: call
              call: anthropic.create-message
              with:
                model: "claude-3-5-sonnet-20241022"
                prompt: "You are a petroleum engineering analyst. Summarize this daily drilling report for {{well_name}} for executive review. Include: 1) Current depth and progress, 2) Key KPIs vs plan, 3) Issues and risks, 4) Recommended next steps. Report: {{get-report-content.content}}"
            - name: post-summary
              type: call
              call: msteams.post-drilling-summary
              with:
                channel_id: "drilling-operations"
                text: "Daily Drilling Summary: {{well_name}}\n\n{{generate-summary.content}}"
  consumes:
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.ms_graph_token"
      resources:
        - name: document-content
          path: "/sites/{{site_id}}/drive/items/{{document_id}}/content"
          inputParameters:
            - name: site_id
              in: path
            - name: document_id
              in: path
          operations:
            - name: get-document-content
              method: GET
    - type: http
      namespace: anthropic
      baseUri: "https://api.anthropic.com/v1"
      authentication:
        type: apikey
        key: "x-api-key"
        value: "$secrets.anthropic_api_key"
        placement: header
      resources:
        - name: messages
          path: "/messages"
          operations:
            - name: create-message
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.ms_graph_token"
      resources:
        - name: drilling-messages
          path: "/teams/upstream/channels/drilling-ops/messages"
          operations:
            - name: post-drilling-summary
              method: POST

Enforces release gates for SCADA deployments by verifying ServiceNow safety review approvals.

naftiko: "0.5"
info:
  label: "Azure DevOps Release Gate for SCADA Systems"
  description: "Enforces release gates for SCADA deployments by verifying ServiceNow safety review approvals."
  tags:
    - safety
    - devops
    - azure-devops
    - servicenow
    - ot
capability:
  exposes:
    - type: mcp
      namespace: scada-release-gate
      port: 8080
      tools:
        - name: check-scada-release-gate
          description: "Verify ServiceNow approval and change window before SCADA deployment."
          inputParameters:
            - name: release_id
              in: body
              type: string
              description: "Azure DevOps release ID."
            - name: change_request_id
              in: body
              type: string
              description: "ServiceNow change request."
          steps:
            - name: check-approval
              type: call
              call: servicenow.get-change-request
              with:
                change_request_id: "{{change_request_id}}"
            - name: update-release
              type: call
              call: azuredevops.update-release-gate
              with:
                release_id: "{{release_id}}"
                approved: "{{check-approval.state}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://chevron.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: get-change-request
              method: GET
    - type: http
      namespace: azuredevops
      baseUri: "https://dev.azure.com/chevron"
      authentication:
        type: bearer
        token: "$secrets.azuredevops_token"
      resources:
        - name: releases
          path: "/_apis/release/releases/{{release_id}}"
          inputParameters:
            - name: release_id
              in: path
          operations:
            - name: update-release-gate
              method: PATCH

Fetches current energy commodity prices from Bloomberg for crude, natural gas, and refined products.

naftiko: "0.5"
info:
  label: "Bloomberg Energy Market Price Snapshot"
  description: "Fetches current energy commodity prices from Bloomberg for crude, natural gas, and refined products."
  tags:
    - trading
    - bloomberg
    - energy-markets
capability:
  exposes:
    - type: mcp
      namespace: market-prices
      port: 8080
      tools:
        - name: get-energy-prices
          description: "Look up energy commodity prices by Bloomberg ticker symbol."
          inputParameters:
            - name: ticker
              in: body
              type: string
              description: "Bloomberg ticker (e.g., CL1 for WTI, NG1 for natural gas)."
          call: bloomberg.get-price
          with:
            ticker: "{{ticker}}"
          outputParameters:
            - name: bid
              type: number
              mapping: "$.data.bid"
            - name: ask
              type: number
              mapping: "$.data.ask"
            - name: last_trade
              type: number
              mapping: "$.data.lastTrade"
  consumes:
    - type: http
      namespace: bloomberg
      baseUri: "https://api.bloomberg.com/eap/catalogs/bbg/fields"
      authentication:
        type: bearer
        token: "$secrets.bloomberg_token"
      resources:
        - name: prices
          path: "/{{ticker}}/snapshot"
          inputParameters:
            - name: ticker
              in: path
          operations:
            - name: get-price
              method: GET

When a capital project budget request is submitted in SAP, validates available budget, creates a ServiceNow approval task, and notifies the capital projects committee via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Capital Project Budget Approval Workflow"
  description: "When a capital project budget request is submitted in SAP, validates available budget, creates a ServiceNow approval task, and notifies the capital projects committee via Microsoft Teams."
  tags:
    - finance
    - sap
    - servicenow
    - microsoft-teams
    - capital-projects
    - approval
capability:
  exposes:
    - type: mcp
      namespace: capex-approval
      port: 8080
      tools:
        - name: submit-capex-budget-request
          description: "Given a capital project code and requested budget amount, validate available funding in SAP S/4HANA, create a ServiceNow approval task for the capital committee, and notify the committee chair via Teams."
          inputParameters:
            - name: project_code
              in: body
              type: string
              description: "The SAP capital project WBS element code."
            - name: requested_amount
              in: body
              type: number
              description: "The capital budget request amount in USD."
            - name: project_description
              in: body
              type: string
              description: "Description of the capital project and investment rationale."
          steps:
            - name: check-budget
              type: call
              call: sap.get-project-budget
              with:
                project_code: "{{project_code}}"
            - name: create-approval-task
              type: call
              call: servicenow.create-approval
              with:
                short_description: "CAPEX approval request: {{project_code}} — ${{requested_amount}}"
                description: "{{project_description}}\nAvailable Budget: {{check-budget.available_budget}}\nRequested: {{requested_amount}}"
                assigned_group: "Capital_Committee"
            - name: notify-committee
              type: call
              call: msteams.send-capex-alert
              with:
                channel_id: "capital-projects-committee"
                text: "CAPEX Budget Request | Project: {{project_code}} | Amount: ${{requested_amount}} | Available: ${{check-budget.available_budget}} | Approval Task: {{create-approval-task.number}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/API_PROJECT_BUDGET_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: project-budget
          path: "/ProjectBudgetSet"
          inputParameters:
            - name: project_code
              in: query
          operations:
            - name: get-project-budget
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://chevron.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: approval-tasks
          path: "/table/approval"
          operations:
            - name: create-approval
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.ms_graph_token"
      resources:
        - name: capex-messages
          path: "/teams/capital-projects/channels/committee/messages"
          operations:
            - name: send-capex-alert
              method: POST

Creates structured operational runbook pages in Confluence from ServiceNow resolved incidents or problem records, preserving institutional knowledge of recurring field and IT operational issues.

naftiko: "0.5"
info:
  label: "Confluence Operational Runbook Publisher"
  description: "Creates structured operational runbook pages in Confluence from ServiceNow resolved incidents or problem records, preserving institutional knowledge of recurring field and IT operational issues."
  tags:
    - itsm
    - servicenow
    - confluence
    - knowledge-management
    - runbooks
capability:
  exposes:
    - type: mcp
      namespace: runbook-publishing
      port: 8080
      tools:
        - name: publish-operational-runbook
          description: "Given a resolved ServiceNow incident or problem number, retrieve the resolution details and create a structured operational runbook page in Confluence for future reference by field and IT teams."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "The resolved ServiceNow incident or problem number."
            - name: confluence_space_key
              in: body
              type: string
              description: "The Confluence space key for the operational runbook library (e.g., OPSRB)."
          steps:
            - name: get-incident
              type: call
              call: servicenow.get-incident-details
              with:
                incident_number: "{{incident_number}}"
            - name: create-runbook-page
              type: call
              call: confluence.create-runbook
              with:
                space_key: "{{confluence_space_key}}"
                title: "Runbook: {{get-incident.short_description}} ({{incident_number}})"
                body: "**Incident:** {{incident_number}}\n**Category:** {{get-incident.category}}\n**Summary:** {{get-incident.short_description}}\n**Root Cause:** {{get-incident.cause}}\n**Resolution Steps:** {{get-incident.close_notes}}\n**Prevention:** {{get-incident.prevention}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://chevron.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incident-details
          path: "/table/incident/{{incident_number}}"
          inputParameters:
            - name: incident_number
              in: path
          operations:
            - name: get-incident-details
              method: GET
    - type: http
      namespace: confluence
      baseUri: "https://chevron.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: runbook-pages
          path: "/content"
          operations:
            - name: create-runbook
              method: POST

Updates Confluence turnaround planning pages with SAP scope and Workday resources.

naftiko: "0.5"
info:
  label: "Confluence Turnaround Planning Knowledge Base"
  description: "Updates Confluence turnaround planning pages with SAP scope and Workday resources."
  tags:
    - refining
    - maintenance
    - confluence
    - sap
    - workday
capability:
  exposes:
    - type: mcp
      namespace: turnaround-kb
      port: 8080
      tools:
        - name: update-turnaround-plan
          description: "Pull SAP scope and Workday resources, update Confluence page."
          inputParameters:
            - name: project_id
              in: body
              type: string
              description: "Turnaround project ID."
            - name: plant_code
              in: body
              type: string
              description: "SAP plant code."
          steps:
            - name: get-scope
              type: call
              call: sap.get-turnaround-scope
              with:
                project_id: "{{project_id}}"
                plant_code: "{{plant_code}}"
            - name: get-resources
              type: call
              call: workday.get-project-resources
              with:
                project_id: "{{project_id}}"
            - name: update-page
              type: call
              call: confluence.update-page
              with:
                space: "TURNAROUND"
                title: "TA-{{project_id}} Plan"
                body: "Scope: {{get-scope.summary}} | Resources: {{get-resources.headcount}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/PM_ORDER_CREATE_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: turnaround
          path: "/A_MaintenanceOrder"
          operations:
            - name: get-turnaround-scope
              method: GET
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: project-resources
          path: "/workers"
          operations:
            - name: get-project-resources
              method: GET
    - type: http
      namespace: confluence
      baseUri: "https://chevron.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: update-page
              method: PUT

Isolates SCADA endpoint via CrowdStrike, creates ServiceNow security incident, and notifies OT security team.

naftiko: "0.5"
info:
  label: "CrowdStrike Endpoint Threat Response for SCADA"
  description: "Isolates SCADA endpoint via CrowdStrike, creates ServiceNow security incident, and notifies OT security team."
  tags:
    - safety
    - security
    - crowdstrike
    - servicenow
    - msteams
    - ot
capability:
  exposes:
    - type: mcp
      namespace: scada-threat
      port: 8080
      tools:
        - name: respond-to-scada-threat
          description: "Isolate endpoint, create security incident, and notify OT team."
          inputParameters:
            - name: detection_id
              in: body
              type: string
              description: "CrowdStrike detection ID."
            - name: hostname
              in: body
              type: string
              description: "Affected hostname."
          steps:
            - name: isolate-host
              type: call
              call: crowdstrike.contain-host
              with:
                hostname: "{{hostname}}"
            - name: create-incident
              type: call
              call: servicenow.create-security-incident
              with:
                hostname: "{{hostname}}"
                detection_id: "{{detection_id}}"
            - name: notify-ot-security
              type: call
              call: msteams.send-message
              with:
                channel: "ot-security"
                text: "SCADA THREAT | Host: {{hostname}} isolated | Detection: {{detection_id}} | INC: {{create-incident.number}}"
  consumes:
    - type: http
      namespace: crowdstrike
      baseUri: "https://api.crowdstrike.com"
      authentication:
        type: bearer
        token: "$secrets.crowdstrike_token"
      resources:
        - name: hosts
          path: "/devices/entities/host-actions/v2"
          operations:
            - name: contain-host
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://chevron.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: security-incidents
          path: "/table/sn_si_incident"
          operations:
            - name: create-security-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msteams_token"
      resources:
        - name: channel-messages
          path: "/teams/security/channels/ot/messages"
          operations:
            - name: send-message
              method: POST

Pulls compressor telemetry from Datadog and creates SAP PM notification if thresholds exceeded.

naftiko: "0.5"
info:
  label: "Datadog Compressor Station Health Check"
  description: "Pulls compressor telemetry from Datadog and creates SAP PM notification if thresholds exceeded."
  tags:
    - upstream
    - maintenance
    - datadog
    - sap
capability:
  exposes:
    - type: mcp
      namespace: compressor-health
      port: 8080
      tools:
        - name: check-compressor-health
          description: "Pull health metrics from Datadog and create SAP notification."
          inputParameters:
            - name: host_tag
              in: body
              type: string
              description: "Datadog host tag."
          steps:
            - name: get-metrics
              type: call
              call: datadog.query-metrics
              with:
                host_tag: "{{host_tag}}"
            - name: create-notification
              type: call
              call: sap.create-pm-notification
              with:
                equipment: "{{host_tag}}"
                description: "Health alert: {{get-metrics.summary}}"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "$secrets.datadog_api_key"
      resources:
        - name: metrics
          path: "/query"
          operations:
            - name: query-metrics
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/PM_NOTIFICATION_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: notifications
          path: "/A_MaintenanceNotification"
          operations:
            - name: create-pm-notification
              method: POST

When Datadog fires a critical infrastructure alert for refinery or upstream control systems, creates a ServiceNow P1 incident and pages the on-call operations engineering team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Datadog Infrastructure Alert Handler"
  description: "When Datadog fires a critical infrastructure alert for refinery or upstream control systems, creates a ServiceNow P1 incident and pages the on-call operations engineering team via Microsoft Teams."
  tags:
    - observability
    - datadog
    - servicenow
    - microsoft-teams
    - incident-response
    - infrastructure
capability:
  exposes:
    - type: mcp
      namespace: infra-ops
      port: 8080
      tools:
        - name: handle-infrastructure-alert
          description: "Given a Datadog critical infrastructure alert for operational systems (refinery, upstream, pipeline), create a ServiceNow P1 incident and alert the on-call operations engineering team via Teams."
          inputParameters:
            - name: monitor_id
              in: body
              type: string
              description: "The Datadog monitor ID that triggered the alert."
            - name: monitor_name
              in: body
              type: string
              description: "The Datadog monitor display name."
            - name: affected_system
              in: body
              type: string
              description: "The operational system affected (e.g., Permian Basin SCADA, Richmond Refinery DCS)."
            - name: severity
              in: body
              type: string
              description: "Alert severity: CRITICAL or WARNING."
          steps:
            - name: create-p1-incident
              type: call
              call: servicenow.create-incident
              with:
                short_description: "[{{severity}}] {{affected_system}}: {{monitor_name}}"
                category: "infrastructure"
                priority: "1"
                assigned_group: "Operations_Engineering"
            - name: alert-oncall
              type: call
              call: msteams.page-oncall
              with:
                channel_id: "operations-oncall"
                text: "CRITICAL INFRA ALERT | System: {{affected_system}} | Monitor: {{monitor_name}} | Severity: {{severity}} | SNOW: {{create-p1-incident.number}} | Monitor ID: {{monitor_id}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://chevron.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.ms_graph_token"
      resources:
        - name: oncall-messages
          path: "/teams/operations/channels/oncall/messages"
          operations:
            - name: page-oncall
              method: POST

Retrieves Datadog SLO compliance data for refinery and upstream control system monitors and posts a weekly operational reliability digest to the operations leadership Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Datadog Refinery System SLO Digest"
  description: "Retrieves Datadog SLO compliance data for refinery and upstream control system monitors and posts a weekly operational reliability digest to the operations leadership Microsoft Teams channel."
  tags:
    - observability
    - datadog
    - microsoft-teams
    - slo
    - reporting
    - operations
capability:
  exposes:
    - type: mcp
      namespace: ops-slo-reporting
      port: 8080
      tools:
        - name: digest-operational-slo
          description: "Retrieve SLO compliance status from Datadog for all tracked refinery and upstream operational system monitors and post a weekly reliability digest to the operations leadership Teams channel."
          inputParameters:
            - name: slo_tag
              in: body
              type: string
              description: "The Datadog tag to filter operational SLOs (e.g., env:prod, team:refinery-ops)."
            - name: reporting_week
              in: body
              type: string
              description: "The reporting week label (e.g., 'Week of 2026-03-17')."
          steps:
            - name: get-slo-status
              type: call
              call: datadog.get-slo-status
              with:
                tags: "{{slo_tag}}"
            - name: post-digest
              type: call
              call: msteams.post-ops-slo-digest
              with:
                channel_id: "operations-leadership"
                text: "Operational SLO Digest | {{reporting_week}} | Tracked: {{get-slo-status.total}} | Compliant: {{get-slo-status.compliant}} | At Risk: {{get-slo-status.at_risk}} | Breached: {{get-slo-status.breached}}"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: slo-status
          path: "/slo"
          inputParameters:
            - name: tags
              in: query
          operations:
            - name: get-slo-status
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.ms_graph_token"
      resources:
        - name: ops-messages
          path: "/teams/operations-leadership/channels/reliability/messages"
          operations:
            - name: post-ops-slo-digest
              method: POST

Routes JV agreements through DocuSign and logs executed documents in SharePoint.

naftiko: "0.5"
info:
  label: "DocuSign Joint Venture Agreement Routing"
  description: "Routes JV agreements through DocuSign and logs executed documents in SharePoint."
  tags:
    - upstream
    - legal
    - docusign
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: jv-agreement
      port: 8080
      tools:
        - name: route-jv-agreement
          description: "Create DocuSign envelope and log in SharePoint."
          inputParameters:
            - name: agreement_title
              in: body
              type: string
              description: "Agreement title."
            - name: signers
              in: body
              type: string
              description: "Comma-separated signer emails."
          steps:
            - name: create-envelope
              type: call
              call: docusign.create-envelope
              with:
                title: "{{agreement_title}}"
                signers: "{{signers}}"
            - name: log-agreement
              type: call
              call: sharepoint.upload-document
              with:
                library: "JV-Agreements"
                filename: "{{agreement_title}}"
  consumes:
    - type: http
      namespace: docusign
      baseUri: "https://na4.docusign.net/restapi/v2.1"
      authentication:
        type: bearer
        token: "$secrets.docusign_token"
      resources:
        - name: envelopes
          path: "/accounts/chevron/envelopes"
          operations:
            - name: create-envelope
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites/chevron.sharepoint.com"
      authentication:
        type: bearer
        token: "$secrets.sharepoint_token"
      resources:
        - name: documents
          path: "/drive/root:/JV-Agreements"
          operations:
            - name: upload-document
              method: PUT

When an employee departure is confirmed in Workday, closes ServiceNow access tickets, removes SharePoint permissions, and alerts the IT security team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Employee Offboarding and Access Deprovisioning"
  description: "When an employee departure is confirmed in Workday, closes ServiceNow access tickets, removes SharePoint permissions, and alerts the IT security team via Microsoft Teams."
  tags:
    - hr
    - workday
    - servicenow
    - sharepoint
    - microsoft-teams
    - offboarding
    - security
capability:
  exposes:
    - type: mcp
      namespace: hr-offboarding
      port: 8080
      tools:
        - name: trigger-employee-offboarding
          description: "Given a Workday employee ID and last working date, close all open ServiceNow access requests, revoke SharePoint site permissions, and alert the IT security team via Teams to confirm full deprovisioning."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday worker ID of the departing employee."
            - name: last_working_day
              in: body
              type: string
              description: "The employee's last working day in YYYY-MM-DD format."
          steps:
            - name: get-worker
              type: call
              call: workday.get-worker
              with:
                worker_id: "{{employee_id}}"
            - name: close-access-tickets
              type: call
              call: servicenow.close-access-requests
              with:
                user_email: "{{get-worker.work_email}}"
                reason: "Employee departure on {{last_working_day}}"
            - name: revoke-sharepoint
              type: call
              call: sharepoint.remove-user-access
              with:
                user_upn: "{{get-worker.work_email}}"
            - name: alert-it-security
              type: call
              call: msteams.send-offboard-alert
              with:
                channel_id: "it-security"
                text: "Offboarding Complete | {{get-worker.full_name}} | Last Day: {{last_working_day}} | ServiceNow: access tickets closed | SharePoint: permissions revoked | Verify: all system access removed."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://chevron.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: access-requests
          path: "/table/sc_request"
          operations:
            - name: close-access-requests
              method: PATCH
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.ms_graph_token"
      resources:
        - name: user-permissions
          path: "/sites/all/permissions"
          operations:
            - name: remove-user-access
              method: DELETE
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.ms_graph_token"
      resources:
        - name: security-messages
          path: "/teams/it-security/channels/general/messages"
          operations:
            - name: send-offboard-alert
              method: POST

When a new employee is created in Workday, opens a ServiceNow IT provisioning ticket, sends a Microsoft Teams welcome message, and creates a SharePoint onboarding folder.

naftiko: "0.5"
info:
  label: "Employee Onboarding Orchestrator"
  description: "When a new employee is created in Workday, opens a ServiceNow IT provisioning ticket, sends a Microsoft Teams welcome message, and creates a SharePoint onboarding folder."
  tags:
    - hr
    - workday
    - servicenow
    - microsoft-teams
    - onboarding
capability:
  exposes:
    - type: mcp
      namespace: hr-onboarding
      port: 8080
      tools:
        - name: trigger-employee-onboarding
          description: "Given a Workday employee ID and start date, orchestrate full onboarding across ServiceNow (IT ticket), Microsoft Teams (welcome message), and SharePoint (folder provisioning)."
          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: "New hire'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-it-ticket
              type: call
              call: servicenow.create-incident
              with:
                short_description: "IT onboarding for {{get-employee.full_name}} starting {{start_date}}"
                category: "hr_onboarding"
                assigned_group: "IT_Provisioning"
            - name: provision-sharepoint-folder
              type: call
              call: sharepoint.create-folder
              with:
                site_id: "hr-onboarding"
                folder_path: "NewHires/{{get-employee.full_name}}_{{start_date}}"
            - name: send-welcome
              type: call
              call: msteams.send-welcome
              with:
                to_upn: "{{get-employee.work_email}}"
                text: "Welcome to Chevron, {{get-employee.first_name}}! Your IT ticket is {{create-it-ticket.number}}. Your onboarding folder has been provisioned in SharePoint."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://chevron.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.ms_graph_token"
      resources:
        - name: drive-folders
          path: "/sites/{{site_id}}/drive/root/children"
          inputParameters:
            - name: site_id
              in: path
          operations:
            - name: create-folder
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.ms_graph_token"
      resources:
        - name: chat-messages
          path: "/chats"
          operations:
            - name: send-welcome
              method: POST

When a field equipment maintenance alert is raised, creates a ServiceNow work order, assigns it to the field maintenance crew, and notifies the operations supervisor via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Field Operations Maintenance Work Order Handler"
  description: "When a field equipment maintenance alert is raised, creates a ServiceNow work order, assigns it to the field maintenance crew, and notifies the operations supervisor via Microsoft Teams."
  tags:
    - operations
    - servicenow
    - microsoft-teams
    - maintenance
    - field-operations
    - energy
capability:
  exposes:
    - type: mcp
      namespace: field-maintenance
      port: 8080
      tools:
        - name: create-maintenance-work-order
          description: "Given a field asset ID and failure description, create a ServiceNow maintenance work order for the field crew and notify the operations supervisor via Microsoft Teams with asset location and priority."
          inputParameters:
            - name: asset_id
              in: body
              type: string
              description: "The field equipment asset ID (e.g., well pump, compressor, pipeline segment)."
            - name: failure_description
              in: body
              type: string
              description: "Description of the equipment failure or maintenance trigger."
            - name: priority
              in: body
              type: string
              description: "Work order priority: P1, P2, or P3."
            - name: field_location
              in: body
              type: string
              description: "The field location or asset installation site name."
          steps:
            - name: create-work-order
              type: call
              call: servicenow.create-work-order
              with:
                short_description: "Field maintenance: {{asset_id}} at {{field_location}}"
                description: "{{failure_description}}"
                priority: "{{priority}}"
                assigned_group: "Field_Maintenance"
            - name: notify-supervisor
              type: call
              call: msteams.notify-ops-supervisor
              with:
                channel_id: "field-operations"
                text: "Maintenance Work Order Created | Asset: {{asset_id}} | Location: {{field_location}} | Priority: {{priority}} | WO: {{create-work-order.number}} | Issue: {{failure_description}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://chevron.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: work-orders
          path: "/table/wm_order"
          operations:
            - name: create-work-order
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.ms_graph_token"
      resources:
        - name: ops-messages
          path: "/teams/field-operations/channels/general/messages"
          operations:
            - name: notify-ops-supervisor
              method: POST

Triggers GitHub Actions to deploy OPC-UA firmware and logs in ServiceNow.

naftiko: "0.5"
info:
  label: "GitHub Actions OPC-UA Gateway Deployment"
  description: "Triggers GitHub Actions to deploy OPC-UA firmware and logs in ServiceNow."
  tags:
    - ot
    - devops
    - github
    - servicenow
    - upstream
capability:
  exposes:
    - type: mcp
      namespace: opcua-deploy
      port: 8080
      tools:
        - name: deploy-opcua-gateway
          description: "Trigger deployment and log in ServiceNow."
          inputParameters:
            - name: firmware_version
              in: body
              type: string
              description: "Firmware version."
            - name: device_group
              in: body
              type: string
              description: "Target device group."
            - name: change_request_id
              in: body
              type: string
              description: "ServiceNow change request."
          steps:
            - name: trigger-deployment
              type: call
              call: github.trigger-workflow
              with:
                repo: "chevron/opcua-gateway"
                workflow: "deploy.yml"
                ref: "{{firmware_version}}"
            - name: log-deployment
              type: call
              call: servicenow.update-change-request
              with:
                change_request_id: "{{change_request_id}}"
                status: "implemented"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: workflows
          path: "/repos/chevron/opcua-gateway/actions/workflows/deploy.yml/dispatches"
          operations:
            - name: trigger-workflow
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://chevron.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: update-change-request
              method: PATCH

When a GitHub Actions pipeline fails on a protected branch for a digital energy platform, creates a Jira bug and alerts the engineering team via Microsoft Teams with full context.

naftiko: "0.5"
info:
  label: "GitHub DevOps CI Pipeline Failure Response"
  description: "When a GitHub Actions pipeline fails on a protected branch for a digital energy platform, creates a Jira bug and alerts the engineering team via Microsoft Teams with full context."
  tags:
    - devops
    - github
    - jira
    - microsoft-teams
    - incident-response
    - engineering
capability:
  exposes:
    - type: mcp
      namespace: devops
      port: 8080
      tools:
        - name: handle-pipeline-failure
          description: "Given a GitHub Actions pipeline failure event on a digital energy platform repository, create a Jira bug for the engineering squad and post an alert to the engineering Microsoft Teams channel."
          inputParameters:
            - name: repo
              in: body
              type: string
              description: "The GitHub repository in org/repo format."
            - name: workflow_name
              in: body
              type: string
              description: "The GitHub Actions workflow name that failed."
            - name: branch
              in: body
              type: string
              description: "The Git branch that triggered the failure."
            - name: commit_sha
              in: body
              type: string
              description: "The commit SHA associated with the failed run."
            - name: run_url
              in: body
              type: string
              description: "The GitHub Actions run URL for the failure."
          steps:
            - name: create-jira-bug
              type: call
              call: jira.create-issue
              with:
                project_key: "ENG"
                issuetype: "Bug"
                summary: "[CI Failure] {{repo}} / {{branch}} — {{workflow_name}}"
                description: "Commit: {{commit_sha}}\nWorkflow: {{workflow_name}}\nRun URL: {{run_url}}"
            - name: alert-team
              type: call
              call: msteams.send-pipeline-alert
              with:
                channel_id: "engineering-alerts"
                text: "Pipeline Failure | Repo: {{repo}} | Branch: {{branch}} | Workflow: {{workflow_name}} | Jira: {{create-jira-bug.key}} | Run: {{run_url}}"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://chevron.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.ms_graph_token"
      resources:
        - name: engineering-messages
          path: "/teams/engineering/channels/alerts/messages"
          operations:
            - name: send-pipeline-alert
              method: POST

When a health, safety, or environmental (HSE) incident is reported in ServiceNow, creates a Jira investigation ticket, escalates to the HSE leadership team via Microsoft Teams, and logs in SharePoint.

naftiko: "0.5"
info:
  label: "HSE Incident Reporting and Escalation"
  description: "When a health, safety, or environmental (HSE) incident is reported in ServiceNow, creates a Jira investigation ticket, escalates to the HSE leadership team via Microsoft Teams, and logs in SharePoint."
  tags:
    - hse
    - servicenow
    - jira
    - microsoft-teams
    - sharepoint
    - safety
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: hse-reporting
      port: 8080
      tools:
        - name: report-hse-incident
          description: "Given an HSE incident type and location, open a ServiceNow HSE record, create a Jira investigation ticket for root cause analysis, log in SharePoint, and immediately alert the HSE leadership team via Teams."
          inputParameters:
            - name: incident_type
              in: body
              type: string
              description: "The HSE incident category (e.g., Spill, Injury, Near Miss, Environmental)."
            - name: location
              in: body
              type: string
              description: "The site or field location where the incident occurred."
            - name: severity
              in: body
              type: string
              description: "Severity level: CRITICAL, MAJOR, MINOR, or NEAR_MISS."
            - name: description
              in: body
              type: string
              description: "Detailed description of the HSE incident."
          steps:
            - name: create-hse-record
              type: call
              call: servicenow.create-hse-incident
              with:
                short_description: "[{{severity}}] HSE Incident: {{incident_type}} at {{location}}"
                description: "{{description}}"
                category: "hse"
                priority: "1"
            - name: create-investigation
              type: call
              call: jira.create-hse-issue
              with:
                project_key: "HSE"
                issuetype: "HSE Incident"
                summary: "[{{severity}}] {{incident_type}} at {{location}}"
                description: "ServiceNow: {{create-hse-record.number}}\nType: {{incident_type}}\nLocation: {{location}}\nDetails: {{description}}"
            - name: alert-hse-leadership
              type: call
              call: msteams.send-hse-alert
              with:
                channel_id: "hse-leadership"
                text: "HSE INCIDENT ALERT | {{severity}} | Type: {{incident_type}} | Location: {{location}} | SN: {{create-hse-record.number}} | Jira: {{create-investigation.key}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://chevron.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: hse-incidents
          path: "/table/incident"
          operations:
            - name: create-hse-incident
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://chevron.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: hse-issues
          path: "/issue"
          operations:
            - name: create-hse-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.ms_graph_token"
      resources:
        - name: hse-messages
          path: "/teams/hse/channels/leadership/messages"
          operations:
            - name: send-hse-alert
              method: POST

Pulls drilling project issues from Jira and posts daily digest to Teams.

naftiko: "0.5"
info:
  label: "Jira Drilling Project Status Digest"
  description: "Pulls drilling project issues from Jira and posts daily digest to Teams."
  tags:
    - upstream
    - drilling
    - jira
    - msteams
capability:
  exposes:
    - type: mcp
      namespace: drilling-digest
      port: 8080
      tools:
        - name: generate-drilling-digest
          description: "Compile status digest from Jira and post to Teams."
          inputParameters:
            - name: project_key
              in: body
              type: string
              description: "Jira project key."
          steps:
            - name: get-issues
              type: call
              call: jira.search-issues
              with:
                project_key: "{{project_key}}"
                status: "In Progress,Blocked"
            - name: post-digest
              type: call
              call: msteams.send-message
              with:
                channel: "drilling-operations"
                text: "Drilling Digest | Active: {{get-issues.in_progress_count}} | Blocked: {{get-issues.blocked_count}}"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://chevron.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: search
          path: "/search"
          operations:
            - name: search-issues
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msteams_token"
      resources:
        - name: channel-messages
          path: "/teams/drilling/channels/operations/messages"
          operations:
            - name: send-message
              method: POST

Retrieves LinkedIn Sponsored Content analytics for Chevron's employer brand campaigns and posts a weekly digest to the talent acquisition Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "LinkedIn Employer Brand Campaign Performance Digest"
  description: "Retrieves LinkedIn Sponsored Content analytics for Chevron's employer brand campaigns and posts a weekly digest to the talent acquisition Microsoft Teams channel."
  tags:
    - marketing
    - linkedin
    - microsoft-teams
    - employer-brand
    - reporting
    - recruiting
capability:
  exposes:
    - type: mcp
      namespace: talent-brand
      port: 8080
      tools:
        - name: digest-employer-brand-performance
          description: "Retrieve impressions, clicks, follower growth, and application rates from LinkedIn Campaign Manager for Chevron employer brand campaigns and post a weekly digest to the talent acquisition Teams channel."
          inputParameters:
            - name: campaign_id
              in: body
              type: string
              description: "The LinkedIn Campaign Manager campaign ID."
            - name: reporting_week
              in: body
              type: string
              description: "The reporting week label (e.g., 'Week of 2026-03-17')."
          steps:
            - name: get-campaign-analytics
              type: call
              call: linkedin.get-analytics
              with:
                campaign_id: "{{campaign_id}}"
            - name: post-digest
              type: call
              call: msteams.post-brand-digest
              with:
                channel_id: "talent-acquisition"
                text: "Employer Brand Report | {{reporting_week}} | Campaign: {{campaign_id}} | Impressions: {{get-campaign-analytics.impressions}} | Clicks: {{get-campaign-analytics.clicks}} | CTR: {{get-campaign-analytics.ctr}}% | Applications: {{get-campaign-analytics.applications}}"
  consumes:
    - type: http
      namespace: linkedin
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: campaign-analytics
          path: "/adAnalyticsV2"
          inputParameters:
            - name: campaign_id
              in: query
          operations:
            - name: get-analytics
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.ms_graph_token"
      resources:
        - name: brand-messages
          path: "/teams/hr/channels/talent-acquisition/messages"
          operations:
            - name: post-brand-digest
              method: POST

Looks up an active procurement purchase order in SAP S/4HANA for upstream or downstream operations, returning status, vendor, quantity, and total value.

naftiko: "0.5"
info:
  label: "Oil and Gas Purchase Order Lookup"
  description: "Looks up an active procurement purchase order in SAP S/4HANA for upstream or downstream operations, returning status, vendor, quantity, and total value."
  tags:
    - procurement
    - sap
    - erp
    - energy
capability:
  exposes:
    - type: mcp
      namespace: erp-procurement
      port: 8080
      tools:
        - name: get-purchase-order
          description: "Given a SAP purchase order number, retrieve the PO header status, vendor name, commodity type, quantity, and total amount from SAP S/4HANA. Use for procurement tracking and AP reconciliation across upstream and downstream operations."
          inputParameters:
            - name: po_number
              in: body
              type: string
              description: "The SAP purchase order number (e.g., 4500001234)."
          call: sap.get-po
          with:
            po_number: "{{po_number}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.d.OverallStatus"
            - name: vendor
              type: string
              mapping: "$.d.Supplier.CompanyName"
            - name: total_value
              type: string
              mapping: "$.d.TotalAmount"
            - name: currency
              type: string
              mapping: "$.d.TransactionCurrency"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: purchase-orders
          path: "/A_PurchaseOrder('{{po_number}}')"
          inputParameters:
            - name: po_number
              in: path
          operations:
            - name: get-po
              method: GET
              outputRawFormat: xml

Performs privileged access review for OT systems using Okta, Workday, and ServiceNow.

naftiko: "0.5"
info:
  label: "Okta Privileged Access Review for OT Systems"
  description: "Performs privileged access review for OT systems using Okta, Workday, and ServiceNow."
  tags:
    - safety
    - security
    - okta
    - workday
    - servicenow
    - ot
capability:
  exposes:
    - type: mcp
      namespace: ot-access-review
      port: 8080
      tools:
        - name: review-ot-access
          description: "Pull privileged users from Okta, verify in Workday, log in ServiceNow."
          inputParameters:
            - name: app_id
              in: body
              type: string
              description: "Okta application ID."
          steps:
            - name: get-privileged-users
              type: call
              call: okta.get-app-users
              with:
                app_id: "{{app_id}}"
            - name: verify-employment
              type: call
              call: workday.verify-active-employees
              with:
                user_list: "{{get-privileged-users.users}}"
            - name: log-findings
              type: call
              call: servicenow.create-audit-record
              with:
                app_id: "{{app_id}}"
                total_users: "{{get-privileged-users.count}}"
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://chevron.okta.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.okta_token"
      resources:
        - name: app-users
          path: "/apps/{{app_id}}/users"
          inputParameters:
            - name: app_id
              in: path
          operations:
            - name: get-app-users
              method: GET
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers"
          operations:
            - name: verify-active-employees
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://chevron.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: audit-records
          path: "/table/u_access_review"
          operations:
            - name: create-audit-record
              method: POST

Returns a headcount snapshot from Workday by business unit and cost center for monthly payroll reconciliation and corporate finance reporting.

naftiko: "0.5"
info:
  label: "Payroll Headcount Snapshot by Business Unit"
  description: "Returns a headcount snapshot from Workday by business unit and cost center for monthly payroll reconciliation and corporate finance reporting."
  tags:
    - hr
    - finance
    - workday
    - payroll
    - headcount
capability:
  exposes:
    - type: mcp
      namespace: hr-finance
      port: 8080
      tools:
        - name: get-headcount-by-business-unit
          description: "Returns all active employees grouped by business unit and cost center from Workday. Use for monthly payroll reconciliation, cost allocation across upstream/downstream segments, and workforce planning."
          call: workday.get-workers
          outputParameters:
            - name: employees
              type: array
              mapping: "$.data"
              items:
                - name: worker_id
                  type: string
                  mapping: "$.workerId"
                - name: full_name
                  type: string
                  mapping: "$.fullName"
                - name: business_unit
                  type: string
                  mapping: "$.businessUnit"
                - name: cost_center
                  type: string
                  mapping: "$.costCenter"
                - name: employment_type
                  type: string
                  mapping: "$.employmentType"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers"
          operations:
            - name: get-workers
              method: GET

Triggers a Power BI dataset refresh for the enterprise financial performance dashboard, pulling updated cost and revenue data from Snowflake for quarterly earnings reporting.

naftiko: "0.5"
info:
  label: "Power BI Financial Performance Dashboard Refresh"
  description: "Triggers a Power BI dataset refresh for the enterprise financial performance dashboard, pulling updated cost and revenue data from Snowflake for quarterly earnings reporting."
  tags:
    - analytics
    - power-bi
    - snowflake
    - reporting
    - finance
capability:
  exposes:
    - type: mcp
      namespace: finance-analytics
      port: 8080
      tools:
        - name: refresh-financial-dashboard
          description: "Trigger a Power BI dataset refresh for the enterprise financial performance dashboard. Use before quarterly earnings reviews or on-demand when finance leadership requires current cost and revenue data."
          inputParameters:
            - name: dataset_id
              in: body
              type: string
              description: "The Power BI dataset ID for the financial performance dashboard."
          call: powerbi.trigger-refresh
          with:
            dataset_id: "{{dataset_id}}"
          outputParameters:
            - name: refresh_id
              type: string
              mapping: "$.id"
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: dataset-refreshes
          path: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: trigger-refresh
              method: POST

When an environmental regulatory document is uploaded to SharePoint, creates a ServiceNow review task for the HSE compliance team and notifies them via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Regulatory Environmental Compliance Document Review"
  description: "When an environmental regulatory document is uploaded to SharePoint, creates a ServiceNow review task for the HSE compliance team and notifies them via Microsoft Teams."
  tags:
    - compliance
    - sharepoint
    - servicenow
    - microsoft-teams
    - hse
    - environmental
capability:
  exposes:
    - type: mcp
      namespace: env-compliance
      port: 8080
      tools:
        - name: trigger-env-document-review
          description: "Given a SharePoint document ID for an environmental regulatory filing, open a ServiceNow review task for the HSE compliance team and send a Microsoft Teams notification with the document link."
          inputParameters:
            - name: document_id
              in: body
              type: string
              description: "The SharePoint document unique ID."
            - name: site_id
              in: body
              type: string
              description: "The SharePoint site ID where the document resides."
            - name: document_title
              in: body
              type: string
              description: "The regulatory document title for the notification."
            - name: regulation_type
              in: body
              type: string
              description: "The environmental regulation type (e.g., EPA, OSHA, BOEM)."
          steps:
            - name: get-document
              type: call
              call: sharepoint.get-document-meta
              with:
                site_id: "{{site_id}}"
                document_id: "{{document_id}}"
            - name: create-review-task
              type: call
              call: servicenow.create-review-task
              with:
                short_description: "{{regulation_type}} compliance review: {{document_title}}"
                document_url: "{{get-document.web_url}}"
                assigned_group: "HSE_Compliance"
            - name: notify-hse-team
              type: call
              call: msteams.send-review-notification
              with:
                channel_id: "hse-compliance"
                text: "Env Compliance Review Required | {{regulation_type}} | Document: {{document_title}} | Link: {{get-document.web_url}} | Task: {{create-review-task.number}}"
  consumes:
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.ms_graph_token"
      resources:
        - name: document-metadata
          path: "/sites/{{site_id}}/drive/items/{{document_id}}"
          inputParameters:
            - name: site_id
              in: path
            - name: document_id
              in: path
          operations:
            - name: get-document-meta
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://chevron.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: review-tasks
          path: "/table/sc_task"
          operations:
            - name: create-review-task
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.ms_graph_token"
      resources:
        - name: hse-messages
          path: "/teams/hse/channels/compliance/messages"
          operations:
            - name: send-review-notification
              method: POST

Finds energy contracts approaching renewal in Salesforce, creates tasks, and notifies commercial ops via Teams.

naftiko: "0.5"
info:
  label: "Salesforce Energy Contract Renewal Tracker"
  description: "Finds energy contracts approaching renewal in Salesforce, creates tasks, and notifies commercial ops via Teams."
  tags:
    - trading
    - salesforce
    - msteams
    - downstream
capability:
  exposes:
    - type: mcp
      namespace: contract-renewal
      port: 8080
      tools:
        - name: track-contract-renewals
          description: "Find expiring contracts, create tasks, and notify via Teams."
          inputParameters:
            - name: days_until_expiry
              in: body
              type: number
              description: "Days before expiry to flag."
          steps:
            - name: find-expiring-contracts
              type: call
              call: salesforce.query-contracts
              with:
                days_until_expiry: "{{days_until_expiry}}"
            - name: create-tasks
              type: call
              call: salesforce.create-renewal-tasks
              with:
                contracts: "{{find-expiring-contracts.records}}"
            - name: notify-commercial
              type: call
              call: msteams.send-message
              with:
                channel: "commercial-operations"
                text: "Contract renewal | {{find-expiring-contracts.total_count}} expiring within {{days_until_expiry}} days"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://chevron.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: contracts
          path: "/query"
          operations:
            - name: query-contracts
              method: GET
        - name: tasks
          path: "/sobjects/Task"
          operations:
            - name: create-renewal-tasks
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msteams_token"
      resources:
        - name: channel-messages
          path: "/teams/commercial/channels/operations/messages"
          operations:
            - name: send-message
              method: POST

Reviews wholesale fuel customer credit via Salesforce, SAP payment history, and Snowflake risk assessment.

naftiko: "0.5"
info:
  label: "Salesforce Wholesale Customer Credit Review"
  description: "Reviews wholesale fuel customer credit via Salesforce, SAP payment history, and Snowflake risk assessment."
  tags:
    - downstream
    - finance
    - salesforce
    - sap
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: credit-review
      port: 8080
      tools:
        - name: review-customer-credit
          description: "Pull account data, check SAP payments, and log risk in Snowflake."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "Salesforce account ID."
          steps:
            - name: get-account
              type: call
              call: salesforce.get-account
              with:
                account_id: "{{account_id}}"
            - name: get-payment-history
              type: call
              call: sap.get-ar-aging
              with:
                customer_number: "{{get-account.sap_customer_number}}"
            - name: log-assessment
              type: call
              call: snowflake.insert-credit-assessment
              with:
                account_id: "{{account_id}}"
                aging_balance: "{{get-payment-history.total_overdue}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://chevron.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{account_id}}"
          inputParameters:
            - name: account_id
              in: path
          operations:
            - name: get-account
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/FI_AR_AGING_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: ar-aging
          path: "/A_AccountReceivable"
          operations:
            - name: get-ar-aging
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://chevron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: credit-assessments
          path: "/statements"
          operations:
            - name: insert-credit-assessment
              method: POST

Pulls contract spend from Ariba, compares to SAP budget, and logs variance to Snowflake.

naftiko: "0.5"
info:
  label: "SAP Ariba Contract Spend Analysis"
  description: "Pulls contract spend from Ariba, compares to SAP budget, and logs variance to Snowflake."
  tags:
    - procurement
    - sap-ariba
    - sap
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: contract-spend
      port: 8080
      tools:
        - name: analyze-contract-spend
          description: "Pull Ariba spend, compare to SAP budget, and log variance."
          inputParameters:
            - name: commodity_category
              in: body
              type: string
              description: "Commodity category."
            - name: fiscal_period
              in: body
              type: string
              description: "Fiscal period."
          steps:
            - name: get-ariba-spend
              type: call
              call: ariba.get-spend
              with:
                category: "{{commodity_category}}"
                period: "{{fiscal_period}}"
            - name: get-sap-budget
              type: call
              call: sap.get-budget
              with:
                category: "{{commodity_category}}"
                period: "{{fiscal_period}}"
            - name: log-variance
              type: call
              call: snowflake.insert-variance
              with:
                category: "{{commodity_category}}"
                actual_spend: "{{get-ariba-spend.total}}"
                budgeted: "{{get-sap-budget.amount}}"
  consumes:
    - type: http
      namespace: ariba
      baseUri: "https://chevron.ariba.com/api/spend-visibility"
      authentication:
        type: bearer
        token: "$secrets.ariba_token"
      resources:
        - name: spend
          path: "/reports/spend"
          operations:
            - name: get-spend
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/FI_BUDGET_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: budget
          path: "/A_BudgetAllocation"
          operations:
            - name: get-budget
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://chevron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: variance
          path: "/statements"
          operations:
            - name: insert-variance
              method: POST

Initiates a new supplier onboarding request in SAP Ariba for a materials or services vendor, creates a ServiceNow tracking task, and notifies the procurement team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "SAP Ariba Supplier Onboarding Request"
  description: "Initiates a new supplier onboarding request in SAP Ariba for a materials or services vendor, creates a ServiceNow tracking task, and notifies the procurement team via Microsoft Teams."
  tags:
    - procurement
    - sap-ariba
    - servicenow
    - microsoft-teams
    - supplier-management
capability:
  exposes:
    - type: mcp
      namespace: supplier-onboarding
      port: 8080
      tools:
        - name: onboard-new-supplier
          description: "Given a new supplier name, category, and contact details, create a supplier onboarding request in SAP Ariba, open a ServiceNow tracking task, and notify the category procurement team via Microsoft Teams."
          inputParameters:
            - name: supplier_name
              in: body
              type: string
              description: "Legal name of the supplier to onboard."
            - name: supplier_category
              in: body
              type: string
              description: "Procurement category (e.g., Chemicals, Drilling Services, IT Equipment)."
            - name: contact_email
              in: body
              type: string
              description: "Primary supplier contact email address."
          steps:
            - name: create-ariba-request
              type: call
              call: ariba.create-supplier-onboarding
              with:
                supplier_name: "{{supplier_name}}"
                category: "{{supplier_category}}"
                contact_email: "{{contact_email}}"
            - name: create-tracking-task
              type: call
              call: servicenow.create-supplier-task
              with:
                short_description: "New supplier onboarding: {{supplier_name}} ({{supplier_category}})"
                ariba_request_id: "{{create-ariba-request.request_id}}"
                assigned_group: "Procurement_Category_Management"
            - name: notify-procurement
              type: call
              call: msteams.notify-procurement-team
              with:
                channel_id: "procurement-team"
                text: "New Supplier Onboarding | {{supplier_name}} | Category: {{supplier_category}} | Ariba Request: {{create-ariba-request.request_id}} | Task: {{create-tracking-task.number}}"
  consumes:
    - type: http
      namespace: ariba
      baseUri: "https://openapi.ariba.com/api/supplier-management/v1"
      authentication:
        type: bearer
        token: "$secrets.ariba_token"
      resources:
        - name: supplier-onboarding
          path: "/suppliers"
          operations:
            - name: create-supplier-onboarding
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://chevron.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: supplier-tasks
          path: "/table/sc_task"
          operations:
            - name: create-supplier-task
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.ms_graph_token"
      resources:
        - name: procurement-messages
          path: "/teams/procurement/channels/general/messages"
          operations:
            - name: notify-procurement-team
              method: POST

Retrieves asphalt batch data from SAP including grade, test results, and available inventory.

naftiko: "0.5"
info:
  label: "SAP Asphalt Production Batch Tracking"
  description: "Retrieves asphalt batch data from SAP including grade, test results, and available inventory."
  tags:
    - downstream
    - production
    - sap
capability:
  exposes:
    - type: mcp
      namespace: asphalt-batch
      port: 8080
      tools:
        - name: get-asphalt-batch
          description: "Look up asphalt batch by batch number."
          inputParameters:
            - name: batch_number
              in: body
              type: string
              description: "SAP batch number."
          call: sap.get-batch-details
          with:
            batch_number: "{{batch_number}}"
          outputParameters:
            - name: grade
              type: string
              mapping: "$.d.MaterialGrade"
            - name: penetration_value
              type: number
              mapping: "$.d.PenetrationTest"
            - name: available_tons
              type: number
              mapping: "$.d.AvailableQuantity"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/MM_BATCH_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: batches
          path: "/A_Batch('{{batch_number}}')"
          inputParameters:
            - name: batch_number
              in: path
          operations:
            - name: get-batch-details
              method: GET

Retrieves base oil blending quality data from SAP for Chevron's premium base oil products.

naftiko: "0.5"
info:
  label: "SAP Base Oil Blending Quality Check"
  description: "Retrieves base oil blending quality data from SAP for Chevron's premium base oil products."
  tags:
    - downstream
    - quality
    - sap
capability:
  exposes:
    - type: mcp
      namespace: base-oil-quality
      port: 8080
      tools:
        - name: get-base-oil-quality
          description: "Look up base oil batch quality by batch number."
          inputParameters:
            - name: batch_number
              in: body
              type: string
              description: "SAP batch number."
          call: sap.get-base-oil-quality
          with:
            batch_number: "{{batch_number}}"
          outputParameters:
            - name: viscosity_index
              type: number
              mapping: "$.d.ViscosityIndex"
            - name: pour_point_c
              type: number
              mapping: "$.d.PourPoint"
            - name: conformance
              type: string
              mapping: "$.d.ConformanceStatus"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/QM_INSPECTION_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: quality
          path: "/A_InspectionLot(Batch='{{batch_number}}')"
          inputParameters:
            - name: batch_number
              in: path
          operations:
            - name: get-base-oil-quality
              method: GET

Retrieves batch quality inspection results from SAP QM.

naftiko: "0.5"
info:
  label: "SAP Chemical Plant Batch Quality Check"
  description: "Retrieves batch quality inspection results from SAP QM."
  tags:
    - downstream
    - quality
    - sap
capability:
  exposes:
    - type: mcp
      namespace: batch-quality
      port: 8080
      tools:
        - name: get-batch-quality
          description: "Look up quality inspection by batch number."
          inputParameters:
            - name: batch_number
              in: body
              type: string
              description: "SAP batch number."
          call: sap.get-inspection-lot
          with:
            batch_number: "{{batch_number}}"
          outputParameters:
            - name: conformance
              type: string
              mapping: "$.d.ConformanceStatus"
            - name: disposition
              type: string
              mapping: "$.d.UsageDecision"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/QM_INSPECTION_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: inspection-lots
          path: "/A_InspectionLot(Batch='{{batch_number}}')"
          inputParameters:
            - name: batch_number
              in: path
          operations:
            - name: get-inspection-lot
              method: GET

Pulls submitted expense reports from SAP Concur for a given period, flags policy violations, and creates Jira audit tasks for the finance compliance team.

naftiko: "0.5"
info:
  label: "SAP Concur Travel Expense Policy Audit"
  description: "Pulls submitted expense reports from SAP Concur for a given period, flags policy violations, and creates Jira audit tasks for the finance compliance team."
  tags:
    - finance
    - sap-concur
    - jira
    - expense-management
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: expense-audit
      port: 8080
      tools:
        - name: audit-travel-expenses
          description: "Retrieve submitted travel expense reports from SAP Concur for a given period and create Jira compliance audit tasks for any reports that exceed per-diem limits or contain flagged expense categories."
          inputParameters:
            - name: period
              in: body
              type: string
              description: "The expense period to audit in YYYY-MM format (e.g., '2026-03')."
            - name: policy_limit_usd
              in: body
              type: number
              description: "The per-transaction limit in USD above which a report is flagged."
          steps:
            - name: get-flagged-reports
              type: call
              call: concur.get-expense-reports
              with:
                period: "{{period}}"
                exceeds_amount: "{{policy_limit_usd}}"
            - name: create-audit-task
              type: call
              call: jira.create-audit-task
              with:
                project_key: "FIN"
                issuetype: "Task"
                summary: "Expense policy violation: {{get-flagged-reports.report_name}} ({{period}})"
                description: "Report: {{get-flagged-reports.report_id}}\nSubmitter: {{get-flagged-reports.submitted_by}}\nAmount: {{get-flagged-reports.total}}\nLimit: {{policy_limit_usd}}"
  consumes:
    - type: http
      namespace: concur
      baseUri: "https://www.concursolutions.com/api/v3.0"
      authentication:
        type: bearer
        token: "$secrets.concur_token"
      resources:
        - name: expense-reports
          path: "/expense/reports"
          inputParameters:
            - name: period
              in: query
            - name: exceeds_amount
              in: query
          operations:
            - name: get-expense-reports
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://chevron.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: audit-tasks
          path: "/issue"
          operations:
            - name: create-audit-task
              method: POST

Retrieves corrosion inhibitor injection rates from SAP for pipeline segments.

naftiko: "0.5"
info:
  label: "SAP Corrosion Inhibitor Injection Rate"
  description: "Retrieves corrosion inhibitor injection rates from SAP for pipeline segments."
  tags:
    - upstream
    - safety
    - sap
    - maintenance
capability:
  exposes:
    - type: mcp
      namespace: corrosion-inhibitor
      port: 8080
      tools:
        - name: get-inhibitor-rate
          description: "Look up injection rate by equipment number."
          inputParameters:
            - name: equipment_number
              in: body
              type: string
              description: "SAP equipment number."
          call: sap.get-inhibitor-data
          with:
            equipment_number: "{{equipment_number}}"
          outputParameters:
            - name: current_rate_ppm
              type: number
              mapping: "$.d.CurrentRate"
            - name: target_rate_ppm
              type: number
              mapping: "$.d.TargetRate"
            - name: compliant
              type: boolean
              mapping: "$.d.WithinSpec"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/PM_MEASUREMENT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: inhibitor-data
          path: "/A_MeasurementDocument(Equipment='{{equipment_number}}')"
          inputParameters:
            - name: equipment_number
              in: path
          operations:
            - name: get-inhibitor-data
              method: GET

Retrieves crude blending recipe from SAP for a refinery run, returning feedstock grades, ratios, and target specifications.

naftiko: "0.5"
info:
  label: "SAP Crude Blending Recipe Lookup"
  description: "Retrieves crude blending recipe from SAP for a refinery run, returning feedstock grades, ratios, and target specifications."
  tags:
    - refining
    - sap
    - production
capability:
  exposes:
    - type: mcp
      namespace: crude-blending
      port: 8080
      tools:
        - name: get-blend-recipe
          description: "Look up crude blending recipe by process order number."
          inputParameters:
            - name: process_order
              in: body
              type: string
              description: "SAP process order number."
          call: sap.get-recipe
          with:
            process_order: "{{process_order}}"
          outputParameters:
            - name: feedstocks
              type: string
              mapping: "$.d.FeedstockList"
            - name: target_api
              type: number
              mapping: "$.d.TargetAPIGravity"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/PP_PROCESS_ORDER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: recipes
          path: "/A_ProcessOrder('{{process_order}}')/to_Recipe"
          inputParameters:
            - name: process_order
              in: path
          operations:
            - name: get-recipe
              method: GET

Retrieves current crude oil inventory levels from SAP for a given storage terminal, returning tank volumes, product grades, and last measurement timestamps.

naftiko: "0.5"
info:
  label: "SAP Crude Oil Inventory Lookup"
  description: "Retrieves current crude oil inventory levels from SAP for a given storage terminal, returning tank volumes, product grades, and last measurement timestamps."
  tags:
    - upstream
    - inventory
    - sap
    - supply-chain
capability:
  exposes:
    - type: mcp
      namespace: crude-inventory
      port: 8080
      tools:
        - name: get-crude-inventory
          description: "Look up crude oil inventory by storage terminal ID. Returns tank volumes, product grades, and timestamps."
          inputParameters:
            - name: terminal_id
              in: body
              type: string
              description: "SAP plant code for the storage terminal."
          call: sap.get-inventory
          with:
            terminal_id: "{{terminal_id}}"
          outputParameters:
            - name: total_volume_bbl
              type: number
              mapping: "$.d.TotalVolume"
            - name: product_grade
              type: string
              mapping: "$.d.MaterialGrade"
            - name: last_measured
              type: string
              mapping: "$.d.LastMeasurementDate"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/MM_INVENTORY_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: inventory
          path: "/A_MaterialStock(Plant='{{terminal_id}}')"
          inputParameters:
            - name: terminal_id
              in: path
          operations:
            - name: get-inventory
              method: GET

Retrieves demurrage claim data from SAP for marine operations, returning wait times, rates, and claim amounts.

naftiko: "0.5"
info:
  label: "SAP Demurrage Claim Tracker"
  description: "Retrieves demurrage claim data from SAP for marine operations, returning wait times, rates, and claim amounts."
  tags:
    - downstream
    - trading
    - sap
    - logistics
capability:
  exposes:
    - type: mcp
      namespace: demurrage
      port: 8080
      tools:
        - name: get-demurrage-claim
          description: "Look up demurrage claim by voyage number."
          inputParameters:
            - name: voyage_number
              in: body
              type: string
              description: "SAP voyage reference number."
          call: sap.get-demurrage
          with:
            voyage_number: "{{voyage_number}}"
          outputParameters:
            - name: wait_hours
              type: number
              mapping: "$.d.WaitingHours"
            - name: claim_amount
              type: number
              mapping: "$.d.ClaimAmount"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/SD_SHIPMENT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: demurrage
          path: "/A_DemurrageClaim('{{voyage_number}}')"
          inputParameters:
            - name: voyage_number
              in: path
          operations:
            - name: get-demurrage
              method: GET

Looks up downstream petroleum product delivery status in SAP, returning carrier, ETA, and delivery quantity.

naftiko: "0.5"
info:
  label: "SAP Downstream Product Shipment Status"
  description: "Looks up downstream petroleum product delivery status in SAP, returning carrier, ETA, and delivery quantity."
  tags:
    - downstream
    - logistics
    - sap
    - supply-chain
capability:
  exposes:
    - type: mcp
      namespace: shipment-status
      port: 8080
      tools:
        - name: get-shipment-status
          description: "Look up shipment by delivery number. Returns carrier, status, ETA, and quantity."
          inputParameters:
            - name: delivery_number
              in: body
              type: string
              description: "SAP delivery document number."
          call: sap.get-delivery
          with:
            delivery_number: "{{delivery_number}}"
          outputParameters:
            - name: carrier
              type: string
              mapping: "$.d.CarrierName"
            - name: status
              type: string
              mapping: "$.d.OverallStatus"
            - name: eta
              type: string
              mapping: "$.d.PlannedArrivalDate"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/SD_DELIVERY_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: deliveries
          path: "/A_OutboundDelivery('{{delivery_number}}')"
          inputParameters:
            - name: delivery_number
              in: path
          operations:
            - name: get-delivery
              method: GET

Creates PM work orders for electrical substations and notifies the maintenance team via Teams.

naftiko: "0.5"
info:
  label: "SAP Electrical Substation Preventive Maintenance"
  description: "Creates PM work orders for electrical substations and notifies the maintenance team via Teams."
  tags:
    - maintenance
    - safety
    - sap
    - msteams
    - refining
capability:
  exposes:
    - type: mcp
      namespace: substation-pm
      port: 8080
      tools:
        - name: schedule-substation-pm
          description: "Create PM work order and notify team."
          inputParameters:
            - name: functional_location
              in: body
              type: string
              description: "SAP functional location."
            - name: pm_type
              in: body
              type: string
              description: "PM type: transformer-oil-test, relay-calibration, switchgear-inspection."
          steps:
            - name: create-pm-order
              type: call
              call: sap.create-pm-work-order
              with:
                functional_location: "{{functional_location}}"
                short_text: "{{pm_type}} for {{functional_location}}"
            - name: notify-team
              type: call
              call: msteams.send-message
              with:
                channel: "electrical-maintenance"
                text: "PM scheduled | {{functional_location}} | Type: {{pm_type}} | WO: {{create-pm-order.order_number}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/PM_ORDER_CREATE_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: work-orders
          path: "/A_MaintenanceOrder"
          operations:
            - name: create-pm-work-order
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msteams_token"
      resources:
        - name: channel-messages
          path: "/teams/maintenance/channels/electrical/messages"
          operations:
            - name: send-message
              method: POST

Retrieves flare gas recovery rates from SAP for refinery units, returning recovery percentage and compliance status.

naftiko: "0.5"
info:
  label: "SAP Flare Gas Recovery Monitoring"
  description: "Retrieves flare gas recovery rates from SAP for refinery units, returning recovery percentage and compliance status."
  tags:
    - environmental
    - refining
    - sap
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: flare-recovery
      port: 8080
      tools:
        - name: get-flare-recovery
          description: "Look up flare gas recovery metrics by refinery unit."
          inputParameters:
            - name: unit_id
              in: body
              type: string
              description: "SAP functional location for the refinery unit."
          call: sap.get-flare-metrics
          with:
            unit_id: "{{unit_id}}"
          outputParameters:
            - name: recovery_pct
              type: number
              mapping: "$.d.RecoveryPercentage"
            - name: flare_volume_mcf
              type: number
              mapping: "$.d.FlareVolume"
            - name: compliant
              type: boolean
              mapping: "$.d.RegulatoryCompliant"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/PM_MEASUREMENT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: flare-metrics
          path: "/A_MeasurementDocument(FunctionalLocation='{{unit_id}}')"
          inputParameters:
            - name: unit_id
              in: path
          operations:
            - name: get-flare-metrics
              method: GET

Retrieves fuel rack prices from SAP for gasoline, diesel, and jet fuel at terminals.

naftiko: "0.5"
info:
  label: "SAP Fuel Rack Pricing Update"
  description: "Retrieves fuel rack prices from SAP for gasoline, diesel, and jet fuel at terminals."
  tags:
    - downstream
    - trading
    - sap
capability:
  exposes:
    - type: mcp
      namespace: rack-pricing
      port: 8080
      tools:
        - name: get-rack-prices
          description: "Look up fuel rack prices by terminal and product."
          inputParameters:
            - name: terminal_code
              in: body
              type: string
              description: "Terminal code."
            - name: product_type
              in: body
              type: string
              description: "Product: gasoline, diesel, jet-fuel."
          call: sap.get-rack-price
          with:
            terminal_code: "{{terminal_code}}"
            product_type: "{{product_type}}"
          outputParameters:
            - name: posted_price
              type: number
              mapping: "$.d.PostedPrice"
            - name: effective_date
              type: string
              mapping: "$.d.EffectiveDate"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/SD_PRICING_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: rack-prices
          path: "/A_PricingCondition"
          operations:
            - name: get-rack-price
              method: GET

Retrieves NGL recovery data from SAP for gas plants, returning volumes by product and efficiency.

naftiko: "0.5"
info:
  label: "SAP Gas Plant NGL Recovery Report"
  description: "Retrieves NGL recovery data from SAP for gas plants, returning volumes by product and efficiency."
  tags:
    - upstream
    - production
    - sap
capability:
  exposes:
    - type: mcp
      namespace: ngl-recovery
      port: 8080
      tools:
        - name: get-ngl-recovery
          description: "Look up NGL recovery by gas plant code."
          inputParameters:
            - name: plant_code
              in: body
              type: string
              description: "SAP plant code."
          call: sap.get-ngl-data
          with:
            plant_code: "{{plant_code}}"
          outputParameters:
            - name: ethane_bbl
              type: number
              mapping: "$.d.EthaneVolume"
            - name: propane_bbl
              type: number
              mapping: "$.d.PropaneVolume"
            - name: recovery_efficiency_pct
              type: number
              mapping: "$.d.RecoveryEfficiency"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/OG_PRODUCTION_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: ngl-data
          path: "/A_GasPlantProduction"
          operations:
            - name: get-ngl-data
              method: GET

Retrieves geothermal well temperature and flow data from SAP for Chevron's geothermal operations in Indonesia and the Philippines.

naftiko: "0.5"
info:
  label: "SAP Geothermal Well Temperature Monitoring"
  description: "Retrieves geothermal well temperature and flow data from SAP for Chevron's geothermal operations in Indonesia and the Philippines."
  tags:
    - upstream
    - renewable-energy
    - sap
    - production
capability:
  exposes:
    - type: mcp
      namespace: geothermal-monitoring
      port: 8080
      tools:
        - name: get-geothermal-data
          description: "Look up geothermal well temperature and flow by functional location."
          inputParameters:
            - name: functional_location
              in: body
              type: string
              description: "SAP functional location for the geothermal well."
          call: sap.get-geothermal-readings
          with:
            functional_location: "{{functional_location}}"
          outputParameters:
            - name: temperature_c
              type: number
              mapping: "$.d.WellheadTemperature"
            - name: steam_flow_tph
              type: number
              mapping: "$.d.SteamFlowRate"
            - name: enthalpy_kj
              type: number
              mapping: "$.d.Enthalpy"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/OG_WELL_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: geothermal
          path: "/A_WellMeasurement(FunctionalLocation='{{functional_location}}')"
          inputParameters:
            - name: functional_location
              in: path
          operations:
            - name: get-geothermal-readings
              method: GET

Retrieves heat exchanger fouling data from SAP, returning fouling factor, duty degradation, and cleaning recommendation.

naftiko: "0.5"
info:
  label: "SAP Heat Exchanger Fouling Monitor"
  description: "Retrieves heat exchanger fouling data from SAP, returning fouling factor, duty degradation, and cleaning recommendation."
  tags:
    - refining
    - maintenance
    - sap
capability:
  exposes:
    - type: mcp
      namespace: hx-fouling
      port: 8080
      tools:
        - name: get-fouling-status
          description: "Look up heat exchanger fouling by equipment number."
          inputParameters:
            - name: equipment_number
              in: body
              type: string
              description: "SAP equipment number."
          call: sap.get-hx-performance
          with:
            equipment_number: "{{equipment_number}}"
          outputParameters:
            - name: fouling_factor
              type: number
              mapping: "$.d.FoulingFactor"
            - name: duty_degradation_pct
              type: number
              mapping: "$.d.DutyDegradation"
            - name: cleaning_recommended
              type: boolean
              mapping: "$.d.CleaningRecommended"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/PM_MEASUREMENT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: hx-data
          path: "/A_MeasurementDocument(Equipment='{{equipment_number}}')"
          inputParameters:
            - name: equipment_number
              in: path
          operations:
            - name: get-hx-performance
              method: GET

Retrieves hydrogen unit operating data from SAP including production rate and purity.

naftiko: "0.5"
info:
  label: "SAP Hydrogen Production Unit Status"
  description: "Retrieves hydrogen unit operating data from SAP including production rate and purity."
  tags:
    - refining
    - production
    - sap
capability:
  exposes:
    - type: mcp
      namespace: hydrogen-unit
      port: 8080
      tools:
        - name: get-hydrogen-status
          description: "Look up hydrogen unit status by equipment number."
          inputParameters:
            - name: unit_id
              in: body
              type: string
              description: "SAP equipment number."
          call: sap.get-hydrogen-data
          with:
            unit_id: "{{unit_id}}"
          outputParameters:
            - name: production_rate_scfh
              type: number
              mapping: "$.d.ProductionRate"
            - name: purity_pct
              type: number
              mapping: "$.d.H2Purity"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/PP_PRODUCTION_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: hydrogen
          path: "/A_ProductionUnit('{{unit_id}}')"
          inputParameters:
            - name: unit_id
              in: path
          operations:
            - name: get-hydrogen-data
              method: GET

Retrieves intercompany crude transfer pricing from SAP including base price and quality adjustments.

naftiko: "0.5"
info:
  label: "SAP Intercompany Crude Transfer Pricing"
  description: "Retrieves intercompany crude transfer pricing from SAP including base price and quality adjustments."
  tags:
    - trading
    - finance
    - sap
capability:
  exposes:
    - type: mcp
      namespace: transfer-pricing
      port: 8080
      tools:
        - name: get-transfer-price
          description: "Look up transfer price by contract and period."
          inputParameters:
            - name: contract_number
              in: body
              type: string
              description: "SAP intercompany contract."
            - name: period
              in: body
              type: string
              description: "Period in YYYY-MM format."
          call: sap.get-transfer-price
          with:
            contract_number: "{{contract_number}}"
            period: "{{period}}"
          outputParameters:
            - name: base_price
              type: number
              mapping: "$.d.BasePrice"
            - name: quality_adjustment
              type: number
              mapping: "$.d.QualityDifferential"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/SD_PRICING_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: transfer-prices
          path: "/A_IntercompanyPrice"
          operations:
            - name: get-transfer-price
              method: GET

Retrieves production volumes from SAP and calculates royalty payments, posting to Snowflake.

naftiko: "0.5"
info:
  label: "SAP Lease Royalty Payment Calculation"
  description: "Retrieves production volumes from SAP and calculates royalty payments, posting to Snowflake."
  tags:
    - upstream
    - finance
    - sap
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: royalty-calc
      port: 8080
      tools:
        - name: calculate-royalties
          description: "Pull SAP volumes, calculate royalties, and log to Snowflake."
          inputParameters:
            - name: lease_id
              in: body
              type: string
              description: "SAP lease contract ID."
            - name: production_month
              in: body
              type: string
              description: "Month in YYYY-MM format."
          steps:
            - name: get-production
              type: call
              call: sap.get-lease-production
              with:
                lease_id: "{{lease_id}}"
                month: "{{production_month}}"
            - name: log-royalty
              type: call
              call: snowflake.insert-royalty-record
              with:
                lease_id: "{{lease_id}}"
                volume: "{{get-production.total_volume}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/OG_PRODUCTION_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: lease-production
          path: "/A_LeaseProduction"
          operations:
            - name: get-lease-production
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://chevron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: royalties
          path: "/statements"
          operations:
            - name: insert-royalty-record
              method: POST

Retrieves LNG cargo nomination status from SAP including volume, ports, and vessel.

naftiko: "0.5"
info:
  label: "SAP LNG Cargo Nomination Status"
  description: "Retrieves LNG cargo nomination status from SAP including volume, ports, and vessel."
  tags:
    - trading
    - logistics
    - sap
    - downstream
capability:
  exposes:
    - type: mcp
      namespace: lng-nomination
      port: 8080
      tools:
        - name: get-lng-nomination
          description: "Look up LNG nomination by contract number."
          inputParameters:
            - name: contract_number
              in: body
              type: string
              description: "SAP LNG contract number."
          call: sap.get-lng-nomination
          with:
            contract_number: "{{contract_number}}"
          outputParameters:
            - name: volume_mmbtu
              type: number
              mapping: "$.d.NominatedVolume"
            - name: loading_port
              type: string
              mapping: "$.d.LoadingPort"
            - name: vessel
              type: string
              mapping: "$.d.VesselName"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/SD_SHIPMENT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: lng-nominations
          path: "/A_LNGNomination('{{contract_number}}')"
          inputParameters:
            - name: contract_number
              in: path
          operations:
            - name: get-lng-nomination
              method: GET

Tracks Chevron Delo lubricant order fulfillment in SAP.

naftiko: "0.5"
info:
  label: "SAP Lubricants Order Fulfillment Tracker"
  description: "Tracks Chevron Delo lubricant order fulfillment in SAP."
  tags:
    - downstream
    - sap
    - logistics
capability:
  exposes:
    - type: mcp
      namespace: lubricants-fulfillment
      port: 8080
      tools:
        - name: get-lubricant-order-status
          description: "Look up lubricant order by sales order number."
          inputParameters:
            - name: sales_order
              in: body
              type: string
              description: "SAP sales order number."
          call: sap.get-sales-order
          with:
            sales_order: "{{sales_order}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.d.OverallDeliveryStatus"
            - name: shipped_qty
              type: number
              mapping: "$.d.TotalDeliveredQuantity"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/SD_SALES_ORDER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: sales-orders
          path: "/A_SalesOrder('{{sales_order}}')"
          inputParameters:
            - name: sales_order
              in: path
          operations:
            - name: get-sales-order
              method: GET

Retrieves marine vessel loading schedule from SAP for terminals.

naftiko: "0.5"
info:
  label: "SAP Marine Vessel Loading Schedule"
  description: "Retrieves marine vessel loading schedule from SAP for terminals."
  tags:
    - downstream
    - logistics
    - sap
    - trading
capability:
  exposes:
    - type: mcp
      namespace: vessel-loading
      port: 8080
      tools:
        - name: get-loading-schedule
          description: "Look up vessel loading schedule by terminal and date."
          inputParameters:
            - name: terminal_code
              in: body
              type: string
              description: "SAP terminal plant code."
            - name: date_from
              in: body
              type: string
              description: "Start date."
          call: sap.get-vessel-schedule
          with:
            terminal_code: "{{terminal_code}}"
            date_from: "{{date_from}}"
          outputParameters:
            - name: vessels
              type: string
              mapping: "$.d.results"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/SD_SHIPMENT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: vessel-schedule
          path: "/A_Shipment"
          operations:
            - name: get-vessel-schedule
              method: GET

Retrieves the MSDS for a chemical material from SAP EHS, returning hazard classifications, handling instructions, and PPE requirements.

naftiko: "0.5"
info:
  label: "SAP Material Safety Data Sheet Lookup"
  description: "Retrieves the MSDS for a chemical material from SAP EHS, returning hazard classifications, handling instructions, and PPE requirements."
  tags:
    - safety
    - environmental
    - sap
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: msds-lookup
      port: 8080
      tools:
        - name: get-msds
          description: "Look up an MSDS by SAP material number."
          inputParameters:
            - name: material_number
              in: body
              type: string
              description: "SAP material number for the chemical."
          call: sap.get-msds
          with:
            material_number: "{{material_number}}"
          outputParameters:
            - name: hazard_class
              type: string
              mapping: "$.d.HazardClassification"
            - name: handling_instructions
              type: string
              mapping: "$.d.HandlingInstructions"
            - name: ppe_required
              type: string
              mapping: "$.d.PPERequirements"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/EHS_MSDS_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: safety-data-sheets
          path: "/A_MaterialSafetySheet('{{material_number}}')"
          inputParameters:
            - name: material_number
              in: path
          operations:
            - name: get-msds
              method: GET

Retrieves LNG liquefaction train operating data from SAP for Chevron's Gorgon and Wheatstone facilities.

naftiko: "0.5"
info:
  label: "SAP Natural Gas Liquefaction Unit Status"
  description: "Retrieves LNG liquefaction train operating data from SAP for Chevron's Gorgon and Wheatstone facilities."
  tags:
    - downstream
    - production
    - sap
capability:
  exposes:
    - type: mcp
      namespace: lng-train
      port: 8080
      tools:
        - name: get-lng-train-status
          description: "Look up liquefaction train status by unit ID."
          inputParameters:
            - name: unit_id
              in: body
              type: string
              description: "SAP equipment number for the LNG train."
          call: sap.get-lng-train-data
          with:
            unit_id: "{{unit_id}}"
          outputParameters:
            - name: throughput_mtpa
              type: number
              mapping: "$.d.ThroughputRate"
            - name: feed_gas_mmscfd
              type: number
              mapping: "$.d.FeedGasRate"
            - name: operating_status
              type: string
              mapping: "$.d.OperatingStatus"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/PP_PRODUCTION_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: lng-trains
          path: "/A_ProductionUnit('{{unit_id}}')"
          inputParameters:
            - name: unit_id
              in: path
          operations:
            - name: get-lng-train-data
              method: GET

Retrieves gas pipeline nomination balances from SAP, returning nominated vs actual volumes and imbalance.

naftiko: "0.5"
info:
  label: "SAP Natural Gas Nomination Balance"
  description: "Retrieves gas pipeline nomination balances from SAP, returning nominated vs actual volumes and imbalance."
  tags:
    - trading
    - upstream
    - sap
capability:
  exposes:
    - type: mcp
      namespace: gas-nomination
      port: 8080
      tools:
        - name: get-nomination-balance
          description: "Look up gas nomination balance by pipeline contract."
          inputParameters:
            - name: pipeline_contract
              in: body
              type: string
              description: "SAP pipeline contract number."
          call: sap.get-gas-balance
          with:
            pipeline_contract: "{{pipeline_contract}}"
          outputParameters:
            - name: nominated_mcf
              type: number
              mapping: "$.d.NominatedVolume"
            - name: actual_mcf
              type: number
              mapping: "$.d.ActualVolume"
            - name: imbalance_mcf
              type: number
              mapping: "$.d.ImbalanceVolume"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/OG_GAS_BALANCE_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: gas-balances
          path: "/A_GasNominationBalance('{{pipeline_contract}}')"
          inputParameters:
            - name: pipeline_contract
              in: path
          operations:
            - name: get-gas-balance
              method: GET

Retrieves spare parts availability from SAP for offshore platform equipment.

naftiko: "0.5"
info:
  label: "SAP Offshore Platform Spare Parts Lookup"
  description: "Retrieves spare parts availability from SAP for offshore platform equipment."
  tags:
    - upstream
    - inventory
    - sap
    - maintenance
capability:
  exposes:
    - type: mcp
      namespace: offshore-spares
      port: 8080
      tools:
        - name: lookup-spare-parts
          description: "Look up spare parts by material and platform."
          inputParameters:
            - name: material_number
              in: body
              type: string
              description: "SAP material number."
            - name: platform_code
              in: body
              type: string
              description: "SAP platform plant code."
          call: sap.get-spare-stock
          with:
            material_number: "{{material_number}}"
            platform_code: "{{platform_code}}"
          outputParameters:
            - name: available_qty
              type: number
              mapping: "$.d.AvailableStock"
            - name: lead_time_days
              type: number
              mapping: "$.d.ReplenishmentLeadTime"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/MM_INVENTORY_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: stock
          path: "/A_MaterialStock"
          operations:
            - name: get-spare-stock
              method: GET

Retrieves pipeline integrity inspection records from SAP, returning last inspection, wall thickness, and corrosion rate.

naftiko: "0.5"
info:
  label: "SAP Pipeline Integrity Inspection Tracker"
  description: "Retrieves pipeline integrity inspection records from SAP, returning last inspection, wall thickness, and corrosion rate."
  tags:
    - upstream
    - safety
    - sap
    - maintenance
capability:
  exposes:
    - type: mcp
      namespace: pipeline-integrity
      port: 8080
      tools:
        - name: get-inspection-status
          description: "Look up pipeline inspection history by functional location."
          inputParameters:
            - name: functional_location
              in: body
              type: string
              description: "SAP functional location for the pipeline segment."
          call: sap.get-inspection-records
          with:
            functional_location: "{{functional_location}}"
          outputParameters:
            - name: last_inspection
              type: string
              mapping: "$.d.LastInspectionDate"
            - name: wall_thickness_mm
              type: number
              mapping: "$.d.WallThickness"
            - name: corrosion_rate
              type: number
              mapping: "$.d.CorrosionRate"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/PM_MEASUREMENT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: inspections
          path: "/A_MeasurementDocument"
          operations:
            - name: get-inspection-records
              method: GET

Retrieves pipeline ROW inspection records from SAP for safety compliance.

naftiko: "0.5"
info:
  label: "SAP Pipeline Right-of-Way Inspection"
  description: "Retrieves pipeline ROW inspection records from SAP for safety compliance."
  tags:
    - upstream
    - safety
    - sap
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: row-inspection
      port: 8080
      tools:
        - name: get-row-inspection
          description: "Look up pipeline ROW inspection by functional location."
          inputParameters:
            - name: functional_location
              in: body
              type: string
              description: "SAP functional location."
          call: sap.get-row-records
          with:
            functional_location: "{{functional_location}}"
          outputParameters:
            - name: encroachments
              type: number
              mapping: "$.d.EncroachmentCount"
            - name: vegetation_status
              type: string
              mapping: "$.d.VegetationCondition"
            - name: markers_ok
              type: boolean
              mapping: "$.d.AllMarkersIntact"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/PM_MEASUREMENT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: row-inspections
          path: "/A_InspectionRecord"
          operations:
            - name: get-row-records
              method: GET

Checks catalyst inventory in SAP for refinery units, returning stock, reorder status, and remaining life.

naftiko: "0.5"
info:
  label: "SAP Refinery Catalyst Inventory Check"
  description: "Checks catalyst inventory in SAP for refinery units, returning stock, reorder status, and remaining life."
  tags:
    - refining
    - inventory
    - sap
capability:
  exposes:
    - type: mcp
      namespace: catalyst-inventory
      port: 8080
      tools:
        - name: check-catalyst-inventory
          description: "Look up catalyst stock by material and plant."
          inputParameters:
            - name: material_number
              in: body
              type: string
              description: "SAP material number."
            - name: plant_code
              in: body
              type: string
              description: "SAP plant code."
          call: sap.get-catalyst-stock
          with:
            material_number: "{{material_number}}"
            plant_code: "{{plant_code}}"
          outputParameters:
            - name: available_qty
              type: number
              mapping: "$.d.AvailableStock"
            - name: reorder_needed
              type: boolean
              mapping: "$.d.BelowReorderPoint"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/MM_INVENTORY_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: stock
          path: "/A_MaterialStock"
          operations:
            - name: get-catalyst-stock
              method: GET

Retrieves energy consumption from SAP for refinery units and pushes to Power BI for efficiency tracking.

naftiko: "0.5"
info:
  label: "SAP Refinery Energy Consumption Report"
  description: "Retrieves energy consumption from SAP for refinery units and pushes to Power BI for efficiency tracking."
  tags:
    - refining
    - environmental
    - sap
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: energy-consumption
      port: 8080
      tools:
        - name: generate-energy-report
          description: "Pull energy consumption from SAP and push to Power BI."
          inputParameters:
            - name: plant_code
              in: body
              type: string
              description: "SAP plant code."
            - name: date_from
              in: body
              type: string
              description: "Start date."
          steps:
            - name: get-consumption
              type: call
              call: sap.get-energy-consumption
              with:
                plant_code: "{{plant_code}}"
                date_from: "{{date_from}}"
            - name: push-to-dashboard
              type: call
              call: powerbi.push-rows
              with:
                dataset_id: "refinery-energy-consumption"
                rows: "{{get-consumption.results}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/PM_MEASUREMENT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: energy
          path: "/A_UtilityConsumption"
          operations:
            - name: get-energy-consumption
              method: GET
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets/refinery-energy-consumption/rows"
          operations:
            - name: push-rows
              method: POST

Pulls daily refinery throughput data from SAP, aggregates by crude unit, and publishes to Power BI for executive dashboards.

naftiko: "0.5"
info:
  label: "SAP Refinery Throughput Report"
  description: "Pulls daily refinery throughput data from SAP, aggregates by crude unit, and publishes to Power BI for executive dashboards."
  tags:
    - refining
    - reporting
    - sap
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: refinery-throughput
      port: 8080
      tools:
        - name: generate-throughput-report
          description: "Given a SAP plant code and date range, pull throughput data and push to Power BI."
          inputParameters:
            - name: plant_code
              in: body
              type: string
              description: "SAP plant code for the refinery (e.g., El Segundo, Pascagoula)."
            - name: date_from
              in: body
              type: string
              description: "Start date in YYYY-MM-DD format."
            - name: date_to
              in: body
              type: string
              description: "End date in YYYY-MM-DD format."
          steps:
            - name: get-throughput
              type: call
              call: sap.get-throughput-data
              with:
                plant_code: "{{plant_code}}"
                date_from: "{{date_from}}"
                date_to: "{{date_to}}"
            - name: push-to-powerbi
              type: call
              call: powerbi.push-rows
              with:
                dataset_id: "refinery-throughput-daily"
                rows: "{{get-throughput.results}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/PP_PRODUCTION_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: throughput
          path: "/A_ProductionOutput"
          operations:
            - name: get-throughput-data
              method: GET
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets/refinery-throughput-daily/rows"
          operations:
            - name: push-rows
              method: POST

Retrieves UST leak detection test results from SAP for retail fuel stations.

naftiko: "0.5"
info:
  label: "SAP Retail Station Underground Tank Compliance"
  description: "Retrieves UST leak detection test results from SAP for retail fuel stations."
  tags:
    - downstream
    - environmental
    - sap
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: ust-compliance
      port: 8080
      tools:
        - name: get-ust-compliance
          description: "Look up UST compliance by station ID."
          inputParameters:
            - name: station_id
              in: body
              type: string
              description: "SAP functional location."
          call: sap.get-ust-tests
          with:
            station_id: "{{station_id}}"
          outputParameters:
            - name: last_test_date
              type: string
              mapping: "$.d.LastTestDate"
            - name: test_result
              type: string
              mapping: "$.d.TestResult"
            - name: compliant
              type: boolean
              mapping: "$.d.RegulatoryCompliant"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/EHS_MONITORING_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: ust-tests
          path: "/A_TankCompliance(Station='{{station_id}}')"
          inputParameters:
            - name: station_id
              in: path
          operations:
            - name: get-ust-tests
              method: GET

Retrieves latest tank gauge reading from SAP, returning product level, temperature, and available capacity.

naftiko: "0.5"
info:
  label: "SAP Tank Farm Gauge Reading"
  description: "Retrieves latest tank gauge reading from SAP, returning product level, temperature, and available capacity."
  tags:
    - downstream
    - inventory
    - sap
capability:
  exposes:
    - type: mcp
      namespace: tank-gauge
      port: 8080
      tools:
        - name: get-tank-reading
          description: "Look up tank gauge reading by tank ID."
          inputParameters:
            - name: tank_id
              in: body
              type: string
              description: "SAP equipment ID for the storage tank."
          call: sap.get-gauge-reading
          with:
            tank_id: "{{tank_id}}"
          outputParameters:
            - name: level_feet
              type: number
              mapping: "$.d.CurrentLevel"
            - name: temperature_f
              type: number
              mapping: "$.d.Temperature"
            - name: available_capacity_bbl
              type: number
              mapping: "$.d.AvailableCapacity"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/PM_MEASUREMENT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: measurements
          path: "/A_MeasurementDocument(Equipment='{{tank_id}}')"
          inputParameters:
            - name: tank_id
              in: path
          operations:
            - name: get-gauge-reading
              method: GET

Reconciles tank gauge vs bill of lading in SAP and logs results in Snowflake.

naftiko: "0.5"
info:
  label: "SAP Tank-to-Ship Transfer Reconciliation"
  description: "Reconciles tank gauge vs bill of lading in SAP and logs results in Snowflake."
  tags:
    - downstream
    - trading
    - sap
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: transfer-recon
      port: 8080
      tools:
        - name: reconcile-transfer
          description: "Pull tank and BOL data from SAP and log variance in Snowflake."
          inputParameters:
            - name: shipment_id
              in: body
              type: string
              description: "SAP shipment document number."
          steps:
            - name: get-transfer-data
              type: call
              call: sap.get-transfer-records
              with:
                shipment_id: "{{shipment_id}}"
            - name: log-reconciliation
              type: call
              call: snowflake.insert-recon-record
              with:
                shipment_id: "{{shipment_id}}"
                tank_volume: "{{get-transfer-data.tank_volume}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/SD_SHIPMENT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: transfers
          path: "/A_Shipment('{{shipment_id}}')"
          inputParameters:
            - name: shipment_id
              in: path
          operations:
            - name: get-transfer-records
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://chevron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: reconciliation
          path: "/statements"
          operations:
            - name: insert-recon-record
              method: POST

Pulls turnaround project cost actuals from SAP, compares to budget, and posts variance to Teams.

naftiko: "0.5"
info:
  label: "SAP Turnaround Cost Tracking"
  description: "Pulls turnaround project cost actuals from SAP, compares to budget, and posts variance to Teams."
  tags:
    - refining
    - finance
    - sap
    - msteams
capability:
  exposes:
    - type: mcp
      namespace: ta-cost-tracking
      port: 8080
      tools:
        - name: track-turnaround-costs
          description: "Pull cost actuals vs budget and post variance to Teams."
          inputParameters:
            - name: project_number
              in: body
              type: string
              description: "SAP project number."
          steps:
            - name: get-costs
              type: call
              call: sap.get-project-costs
              with:
                project_number: "{{project_number}}"
            - name: post-variance
              type: call
              call: msteams.send-message
              with:
                channel: "refinery-management"
                text: "TA Cost | Project: {{project_number}} | Variance: {{get-costs.variance_pct}}%"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/PS_PROJECT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: project-costs
          path: "/A_ProjectCost('{{project_number}}')"
          inputParameters:
            - name: project_number
              in: path
          operations:
            - name: get-project-costs
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msteams_token"
      resources:
        - name: channel-messages
          path: "/teams/refinery/channels/management/messages"
          operations:
            - name: send-message
              method: POST

Retrieves vendor invoice payment status from SAP Accounts Payable, returning payment date, amount, and clearing document.

naftiko: "0.5"
info:
  label: "SAP Vendor Payment Status Lookup"
  description: "Retrieves vendor invoice payment status from SAP Accounts Payable, returning payment date, amount, and clearing document."
  tags:
    - procurement
    - sap
    - finance
capability:
  exposes:
    - type: mcp
      namespace: vendor-payment
      port: 8080
      tools:
        - name: get-payment-status
          description: "Look up vendor payment status by invoice number."
          inputParameters:
            - name: invoice_number
              in: body
              type: string
              description: "SAP vendor invoice number."
          call: sap.get-payment
          with:
            invoice_number: "{{invoice_number}}"
          outputParameters:
            - name: payment_date
              type: string
              mapping: "$.d.ClearingDate"
            - name: amount
              type: number
              mapping: "$.d.AmountInCompanyCodeCurrency"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/FI_AP_INVOICE_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: invoices
          path: "/A_SupplierInvoice('{{invoice_number}}')"
          inputParameters:
            - name: invoice_number
              in: path
          operations:
            - name: get-payment
              method: GET

Retrieves wastewater effluent quality data from SAP EHS against permit limits.

naftiko: "0.5"
info:
  label: "SAP Wastewater Treatment Compliance Check"
  description: "Retrieves wastewater effluent quality data from SAP EHS against permit limits."
  tags:
    - environmental
    - refining
    - sap
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: wastewater-compliance
      port: 8080
      tools:
        - name: check-effluent-quality
          description: "Look up effluent quality by outfall ID."
          inputParameters:
            - name: outfall_id
              in: body
              type: string
              description: "SAP outfall monitoring point ID."
          call: sap.get-effluent-data
          with:
            outfall_id: "{{outfall_id}}"
          outputParameters:
            - name: ph
              type: number
              mapping: "$.d.PHValue"
            - name: tss_mgl
              type: number
              mapping: "$.d.TotalSuspendedSolids"
            - name: compliant
              type: boolean
              mapping: "$.d.WithinPermitLimits"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/EHS_MONITORING_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: effluent
          path: "/A_EffluentMonitoring('{{outfall_id}}')"
          inputParameters:
            - name: outfall_id
              in: path
          operations:
            - name: get-effluent-data
              method: GET

Retrieves daily production allocation data from SAP, returning oil, gas, and water volumes for a well.

naftiko: "0.5"
info:
  label: "SAP Well Production Daily Allocation"
  description: "Retrieves daily production allocation data from SAP, returning oil, gas, and water volumes for a well."
  tags:
    - upstream
    - production
    - sap
capability:
  exposes:
    - type: mcp
      namespace: well-allocation
      port: 8080
      tools:
        - name: get-well-allocation
          description: "Look up daily production allocation by functional location and date."
          inputParameters:
            - name: functional_location
              in: body
              type: string
              description: "SAP functional location for the well."
            - name: allocation_date
              in: body
              type: string
              description: "Allocation date in YYYY-MM-DD format."
          call: sap.get-allocation
          with:
            functional_location: "{{functional_location}}"
            allocation_date: "{{allocation_date}}"
          outputParameters:
            - name: oil_bbl
              type: number
              mapping: "$.d.OilVolume"
            - name: gas_mcf
              type: number
              mapping: "$.d.GasVolume"
            - name: water_bbl
              type: number
              mapping: "$.d.WaterVolume"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/OG_PRODUCTION_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: allocations
          path: "/A_WellAllocation"
          operations:
            - name: get-allocation
              method: GET

Retrieves latest wellhead pressure readings from SAP, returning tubing, casing, and flow line pressure values.

naftiko: "0.5"
info:
  label: "SAP Wellhead Pressure Reading"
  description: "Retrieves latest wellhead pressure readings from SAP, returning tubing, casing, and flow line pressure values."
  tags:
    - upstream
    - production
    - sap
capability:
  exposes:
    - type: mcp
      namespace: wellhead-pressure
      port: 8080
      tools:
        - name: get-wellhead-pressure
          description: "Look up wellhead pressure by functional location."
          inputParameters:
            - name: functional_location
              in: body
              type: string
              description: "SAP functional location for the well."
          call: sap.get-pressure-reading
          with:
            functional_location: "{{functional_location}}"
          outputParameters:
            - name: tubing_pressure_psi
              type: number
              mapping: "$.d.TubingPressure"
            - name: casing_pressure_psi
              type: number
              mapping: "$.d.CasingPressure"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/OG_WELL_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: pressure-readings
          path: "/A_WellMeasurement(FunctionalLocation='{{functional_location}}')"
          inputParameters:
            - name: functional_location
              in: path
          operations:
            - name: get-pressure-reading
              method: GET

Queries ServiceNow for environmental permits approaching renewal, logs to Snowflake, and alerts the environmental team via Teams.

naftiko: "0.5"
info:
  label: "ServiceNow Environmental Permit Tracker"
  description: "Queries ServiceNow for environmental permits approaching renewal, logs to Snowflake, and alerts the environmental team via Teams."
  tags:
    - environmental
    - compliance
    - servicenow
    - snowflake
    - msteams
capability:
  exposes:
    - type: mcp
      namespace: env-permit
      port: 8080
      tools:
        - name: track-env-permits
          description: "Find permits nearing expiry in ServiceNow, log to Snowflake, and alert the team."
          inputParameters:
            - name: days_lookahead
              in: body
              type: number
              description: "Days to look ahead for permit expirations."
          steps:
            - name: query-permits
              type: call
              call: servicenow.query-permits
              with:
                days_lookahead: "{{days_lookahead}}"
            - name: log-report
              type: call
              call: snowflake.insert-permit-report
              with:
                permits: "{{query-permits.records}}"
            - name: alert-team
              type: call
              call: msteams.send-message
              with:
                channel: "environmental-affairs"
                text: "Permit alert | {{query-permits.total_count}} permits expiring within {{days_lookahead}} days"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://chevron.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: permits
          path: "/table/u_environmental_permit"
          operations:
            - name: query-permits
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://chevron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: permit-reports
          path: "/statements"
          operations:
            - name: insert-permit-report
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msteams_token"
      resources:
        - name: channel-messages
          path: "/teams/environmental/channels/affairs/messages"
          operations:
            - name: send-message
              method: POST

Pulls the ServiceNow CMDB asset inventory for a given site or business unit, returning asset counts by category and flagging unregistered devices for remediation.

naftiko: "0.5"
info:
  label: "ServiceNow IT Asset Inventory Audit"
  description: "Pulls the ServiceNow CMDB asset inventory for a given site or business unit, returning asset counts by category and flagging unregistered devices for remediation."
  tags:
    - itsm
    - servicenow
    - asset-management
    - audit
    - cmdb
capability:
  exposes:
    - type: mcp
      namespace: asset-audit
      port: 8080
      tools:
        - name: get-site-asset-inventory
          description: "Given a site code or business unit, retrieve all registered IT and OT assets from ServiceNow CMDB. Returns total counts by hardware, software, and network categories, and flags any unregistered assets."
          inputParameters:
            - name: site_code
              in: body
              type: string
              description: "The Chevron site code or business unit identifier (e.g., PERM-MIDLAND, RICHMOND-REF)."
          call: servicenow.get-cmdb-assets
          with:
            location: "{{site_code}}"
          outputParameters:
            - name: total_assets
              type: string
              mapping: "$.result.count"
            - name: hardware_count
              type: string
              mapping: "$.result.hardware"
            - name: software_count
              type: string
              mapping: "$.result.software"
            - name: unregistered_count
              type: string
              mapping: "$.result.unregistered"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://chevron.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: cmdb-assets
          path: "/table/cmdb_ci"
          inputParameters:
            - name: location
              in: query
          operations:
            - name: get-cmdb-assets
              method: GET

Queries CMDB for aging assets, creates Confluence plan, and opens Ariba requisitions.

naftiko: "0.5"
info:
  label: "ServiceNow IT Asset Lifecycle Audit"
  description: "Queries CMDB for aging assets, creates Confluence plan, and opens Ariba requisitions."
  tags:
    - it-operations
    - servicenow
    - confluence
    - sap-ariba
capability:
  exposes:
    - type: mcp
      namespace: asset-lifecycle
      port: 8080
      tools:
        - name: audit-asset-lifecycle
          description: "Find aging assets, create replacement plan, and raise requisitions."
          inputParameters:
            - name: asset_category
              in: body
              type: string
              description: "Asset category."
            - name: eol_months
              in: body
              type: number
              description: "Months until EOL to flag."
          steps:
            - name: find-aging-assets
              type: call
              call: servicenow.query-assets
              with:
                category: "{{asset_category}}"
                eol_months: "{{eol_months}}"
            - name: create-replacement-plan
              type: call
              call: confluence.create-page
              with:
                space: "IT-LIFECYCLE"
                title: "Replacement - {{asset_category}}"
                body: "{{find-aging-assets.summary}}"
            - name: create-requisition
              type: call
              call: ariba.create-requisition
              with:
                items: "{{find-aging-assets.critical_assets}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://chevron.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: cmdb-assets
          path: "/table/cmdb_ci"
          operations:
            - name: query-assets
              method: GET
    - type: http
      namespace: confluence
      baseUri: "https://chevron.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: create-page
              method: POST
    - type: http
      namespace: ariba
      baseUri: "https://chevron.ariba.com/api/procurement"
      authentication:
        type: bearer
        token: "$secrets.ariba_token"
      resources:
        - name: requisitions
          path: "/requisitions"
          operations:
            - name: create-requisition
              method: POST

Initiates a MOC workflow in ServiceNow for process safety modifications with Teams notifications.

naftiko: "0.5"
info:
  label: "ServiceNow Management of Change Workflow"
  description: "Initiates a MOC workflow in ServiceNow for process safety modifications with Teams notifications."
  tags:
    - safety
    - servicenow
    - msteams
    - compliance
    - refining
capability:
  exposes:
    - type: mcp
      namespace: moc-workflow
      port: 8080
      tools:
        - name: initiate-moc
          description: "Create a MOC record in ServiceNow and notify stakeholders."
          inputParameters:
            - name: change_description
              in: body
              type: string
              description: "Description of the proposed change."
            - name: facility
              in: body
              type: string
              description: "Facility for the change."
            - name: change_type
              in: body
              type: string
              description: "Type: temporary, permanent, emergency."
          steps:
            - name: create-moc
              type: call
              call: servicenow.create-moc
              with:
                description: "{{change_description}}"
                facility: "{{facility}}"
                type: "{{change_type}}"
            - name: notify-reviewers
              type: call
              call: msteams.send-message
              with:
                channel: "process-safety"
                text: "New MOC | {{change_type}} | Facility: {{facility}} | MOC#: {{create-moc.number}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://chevron.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: moc
          path: "/table/u_management_of_change"
          operations:
            - name: create-moc
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msteams_token"
      resources:
        - name: channel-messages
          path: "/teams/safety/channels/process/messages"
          operations:
            - name: send-message
              method: POST

Creates a ServiceNow investigation for process safety events, assigns team from Workday, logs in Snowflake, and notifies HSE leadership via Teams.

naftiko: "0.5"
info:
  label: "ServiceNow Process Safety Event Investigation"
  description: "Creates a ServiceNow investigation for process safety events, assigns team from Workday, logs in Snowflake, and notifies HSE leadership via Teams."
  tags:
    - safety
    - servicenow
    - workday
    - snowflake
    - msteams
capability:
  exposes:
    - type: mcp
      namespace: pse-investigation
      port: 8080
      tools:
        - name: initiate-pse-investigation
          description: "Given event details and severity, create investigation, assign team, log, and alert leadership."
          inputParameters:
            - name: event_description
              in: body
              type: string
              description: "Description of the process safety event."
            - name: facility
              in: body
              type: string
              description: "Facility where event occurred."
            - name: severity
              in: body
              type: string
              description: "Severity: tier-1, tier-2, tier-3."
          steps:
            - name: create-investigation
              type: call
              call: servicenow.create-investigation
              with:
                description: "{{event_description}}"
                facility: "{{facility}}"
                severity: "{{severity}}"
            - name: assign-team
              type: call
              call: workday.get-investigation-team
              with:
                facility: "{{facility}}"
            - name: log-event
              type: call
              call: snowflake.insert-pse-record
              with:
                investigation_id: "{{create-investigation.sys_id}}"
            - name: alert-leadership
              type: call
              call: msteams.send-message
              with:
                channel: "hse-leadership"
                text: "PSE Alert | {{severity}} | Facility: {{facility}} | INC: {{create-investigation.number}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://chevron.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: investigations
          path: "/table/u_pse_investigation"
          operations:
            - name: create-investigation
              method: POST
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: teams
          path: "/workers"
          operations:
            - name: get-investigation-team
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://chevron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: pse-records
          path: "/statements"
          operations:
            - name: insert-pse-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msteams_token"
      resources:
        - name: channel-messages
          path: "/teams/hse/channels/leadership/messages"
          operations:
            - name: send-message
              method: POST

Manages unplanned refinery outages via ServiceNow incident, Teams notification, and SAP throughput impact assessment.

naftiko: "0.5"
info:
  label: "ServiceNow Refinery Outage Management"
  description: "Manages unplanned refinery outages via ServiceNow incident, Teams notification, and SAP throughput impact assessment."
  tags:
    - refining
    - servicenow
    - msteams
    - sap
    - production
capability:
  exposes:
    - type: mcp
      namespace: refinery-outage
      port: 8080
      tools:
        - name: manage-refinery-outage
          description: "Create major incident, notify stakeholders, and assess throughput impact."
          inputParameters:
            - name: unit_id
              in: body
              type: string
              description: "Refinery unit."
            - name: outage_type
              in: body
              type: string
              description: "Type: unplanned, emergency, weather."
            - name: estimated_duration_hrs
              in: body
              type: number
              description: "Estimated duration in hours."
          steps:
            - name: create-major-incident
              type: call
              call: servicenow.create-major-incident
              with:
                unit_id: "{{unit_id}}"
                outage_type: "{{outage_type}}"
            - name: get-throughput-impact
              type: call
              call: sap.get-unit-throughput
              with:
                unit_id: "{{unit_id}}"
            - name: notify-stakeholders
              type: call
              call: msteams.send-message
              with:
                channel: "refinery-management"
                text: "OUTAGE | Unit: {{unit_id}} | {{outage_type}} | Est: {{estimated_duration_hrs}}h | Impact: {{get-throughput-impact.daily_bbl}} bbl/d"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://chevron.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-major-incident
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/PP_PRODUCTION_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: throughput
          path: "/A_ProductionOutput"
          operations:
            - name: get-unit-throughput
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msteams_token"
      resources:
        - name: channel-messages
          path: "/teams/refinery/channels/management/messages"
          operations:
            - name: send-message
              method: POST

Queries Snowflake for CCS project data including CO2 injection volumes and storage utilization, pushes to Power BI.

naftiko: "0.5"
info:
  label: "Snowflake Carbon Capture Project Dashboard"
  description: "Queries Snowflake for CCS project data including CO2 injection volumes and storage utilization, pushes to Power BI."
  tags:
    - environmental
    - upstream
    - snowflake
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: carbon-capture
      port: 8080
      tools:
        - name: generate-ccs-dashboard
          description: "Given a CCS project ID and date range, query Snowflake and push to Power BI."
          inputParameters:
            - name: project_id
              in: body
              type: string
              description: "Carbon capture project identifier."
            - name: date_from
              in: body
              type: string
              description: "Start date in YYYY-MM-DD format."
          steps:
            - name: query-ccs-data
              type: call
              call: snowflake.query-ccs-metrics
              with:
                project_id: "{{project_id}}"
                date_from: "{{date_from}}"
            - name: push-dashboard
              type: call
              call: powerbi.push-rows
              with:
                dataset_id: "carbon-capture-monitoring"
                rows: "{{query-ccs-data.results}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://chevron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: ccs-metrics
          path: "/statements"
          operations:
            - name: query-ccs-metrics
              method: POST
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets/carbon-capture-monitoring/rows"
          operations:
            - name: push-rows
              method: POST

Executes a crude oil price forecasting query in Snowflake that blends historical spot prices with forward curve data, returning a 30-day price outlook for trading and hedging decisions.

naftiko: "0.5"
info:
  label: "Snowflake Crude Oil Price Forecast Model"
  description: "Executes a crude oil price forecasting query in Snowflake that blends historical spot prices with forward curve data, returning a 30-day price outlook for trading and hedging decisions."
  tags:
    - trading
    - analytics
    - snowflake
    - forecasting
capability:
  exposes:
    - type: mcp
      namespace: crude-price-forecast
      port: 8080
      tools:
        - name: get-crude-price-forecast
          description: "Run a 30-day crude oil price forecast model in Snowflake using historical spot and forward curve data."
          inputParameters:
            - name: crude_grade
              in: body
              type: string
              description: "Crude grade identifier, e.g. WTI or Brent."
            - name: forecast_date
              in: body
              type: string
              description: "Base date for the forecast in YYYY-MM-DD format."
          call: "snowflake.execute-query"
          with:
            statement: "CALL energy_analytics.crude_price_forecast('{{crude_grade}}', '{{forecast_date}}')"
          outputParameters:
            - name: forecast_prices
              type: array
              mapping: "$.data"
            - name: confidence_interval
              type: number
              mapping: "$.metadata.confidenceInterval"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://chevron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST

Queries Snowflake for downstream product margins, calculates crack spreads, and pushes to Power BI.

naftiko: "0.5"
info:
  label: "Snowflake Downstream Margin Analysis"
  description: "Queries Snowflake for downstream product margins, calculates crack spreads, and pushes to Power BI."
  tags:
    - downstream
    - trading
    - snowflake
    - power-bi
    - finance
capability:
  exposes:
    - type: mcp
      namespace: margin-analysis
      port: 8080
      tools:
        - name: analyze-downstream-margins
          description: "Given a refinery and date range, query margins and push to Power BI."
          inputParameters:
            - name: refinery_code
              in: body
              type: string
              description: "Refinery code (e.g., El Segundo, Pascagoula, Richmond)."
            - name: date_from
              in: body
              type: string
              description: "Start date in YYYY-MM-DD format."
          steps:
            - name: query-margins
              type: call
              call: snowflake.query-product-margins
              with:
                refinery_code: "{{refinery_code}}"
                date_from: "{{date_from}}"
            - name: push-results
              type: call
              call: powerbi.push-rows
              with:
                dataset_id: "downstream-margins"
                rows: "{{query-margins.results}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://chevron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: margins
          path: "/statements"
          operations:
            - name: query-product-margins
              method: POST
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets/downstream-margins/rows"
          operations:
            - name: push-rows
              method: POST

Queries Snowflake for drilling cost data, calculates cost-per-foot metrics, and pushes results to Power BI.

naftiko: "0.5"
info:
  label: "Snowflake Drilling Cost Per Foot Analysis"
  description: "Queries Snowflake for drilling cost data, calculates cost-per-foot metrics, and pushes results to Power BI."
  tags:
    - upstream
    - drilling
    - snowflake
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: drilling-cost
      port: 8080
      tools:
        - name: analyze-drilling-cost
          description: "Given a basin and date range, query drilling costs and push to Power BI."
          inputParameters:
            - name: basin
              in: body
              type: string
              description: "Basin name (e.g., Permian, DJ Basin, Gulf of Mexico)."
            - name: date_from
              in: body
              type: string
              description: "Start date in YYYY-MM-DD format."
          steps:
            - name: query-costs
              type: call
              call: snowflake.query-drilling-costs
              with:
                basin: "{{basin}}"
                date_from: "{{date_from}}"
            - name: push-to-dashboard
              type: call
              call: powerbi.push-rows
              with:
                dataset_id: "drilling-cost-per-foot"
                rows: "{{query-costs.results}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://chevron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: drilling-costs
          path: "/statements"
          operations:
            - name: query-drilling-costs
              method: POST
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets/drilling-cost-per-foot/rows"
          operations:
            - name: push-rows
              method: POST

Queries Snowflake for GHG emissions data, aggregates by facility, and publishes to Power BI for environmental reporting.

naftiko: "0.5"
info:
  label: "Snowflake Emissions Monitoring Report"
  description: "Queries Snowflake for GHG emissions data, aggregates by facility, and publishes to Power BI for environmental reporting."
  tags:
    - environmental
    - reporting
    - snowflake
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: emissions-report
      port: 8080
      tools:
        - name: generate-emissions-report
          description: "Given a period and facility type, query emissions from Snowflake and push to Power BI."
          inputParameters:
            - name: period
              in: body
              type: string
              description: "Reporting period (e.g., 2026-Q1)."
            - name: facility_type
              in: body
              type: string
              description: "Facility type: upstream, refining, midstream, all."
          steps:
            - name: query-emissions
              type: call
              call: snowflake.query-emissions
              with:
                period: "{{period}}"
                facility_type: "{{facility_type}}"
            - name: push-to-dashboard
              type: call
              call: powerbi.push-rows
              with:
                dataset_id: "ghg-emissions-quarterly"
                rows: "{{query-emissions.results}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://chevron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: emissions
          path: "/statements"
          operations:
            - name: query-emissions
              method: POST
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets/ghg-emissions-quarterly/rows"
          operations:
            - name: push-rows
              method: POST

Executes data quality checks on Snowflake energy trading and commodity price tables, opening Jira tickets when null rates or value ranges breach defined thresholds.

naftiko: "0.5"
info:
  label: "Snowflake Energy Trading Data Quality Monitor"
  description: "Executes data quality checks on Snowflake energy trading and commodity price tables, opening Jira tickets when null rates or value ranges breach defined thresholds."
  tags:
    - data
    - snowflake
    - jira
    - data-quality
    - energy-trading
capability:
  exposes:
    - type: mcp
      namespace: trading-dq
      port: 8080
      tools:
        - name: check-trading-data-quality
          description: "Given a Snowflake trading or commodity price table, run automated data quality assertions including null rate checks and value range validations. Open a Jira ticket for any breach."
          inputParameters:
            - name: table_name
              in: body
              type: string
              description: "The fully qualified Snowflake table name (e.g., PROD.TRADING.CRUDE_PRICES)."
            - name: null_threshold_pct
              in: body
              type: number
              description: "Maximum acceptable null rate percentage for key columns."
          steps:
            - name: run-quality-check
              type: call
              call: snowflake.execute-quality-check
              with:
                table_name: "{{table_name}}"
                null_threshold: "{{null_threshold_pct}}"
            - name: create-dq-ticket
              type: call
              call: jira.create-dq-issue
              with:
                project_key: "DATA"
                issuetype: "Bug"
                summary: "Data quality breach: {{table_name}}"
                description: "Table: {{table_name}}\nNull Rate: {{run-quality-check.null_rate_pct}}%\nThreshold: {{null_threshold_pct}}%\nAffected Rows: {{run-quality-check.affected_rows}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://chevron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: execute-quality-check
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://chevron.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: dq-issues
          path: "/issue"
          operations:
            - name: create-dq-issue
              method: POST

Queries Snowflake for energy trading positions, aggregates by desk, and pushes to Power BI for risk monitoring.

naftiko: "0.5"
info:
  label: "Snowflake Energy Trading Position Report"
  description: "Queries Snowflake for energy trading positions, aggregates by desk, and pushes to Power BI for risk monitoring."
  tags:
    - trading
    - risk-management
    - snowflake
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: trading-positions
      port: 8080
      tools:
        - name: generate-position-report
          description: "Given a trading desk and date, query positions from Snowflake and push to Power BI."
          inputParameters:
            - name: desk
              in: body
              type: string
              description: "Trading desk identifier."
            - name: valuation_date
              in: body
              type: string
              description: "Valuation date in YYYY-MM-DD format."
          steps:
            - name: query-positions
              type: call
              call: snowflake.query-trading-positions
              with:
                desk: "{{desk}}"
                valuation_date: "{{valuation_date}}"
            - name: push-to-dashboard
              type: call
              call: powerbi.push-rows
              with:
                dataset_id: "trading-positions-daily"
                rows: "{{query-positions.results}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://chevron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: positions
          path: "/statements"
          operations:
            - name: query-trading-positions
              method: POST
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets/trading-positions-daily/rows"
          operations:
            - name: push-rows
              method: POST

Queries Snowflake for LDAR survey results, identifies active leaks, and creates SAP work orders for repair.

naftiko: "0.5"
info:
  label: "Snowflake Methane Leak Detection Report"
  description: "Queries Snowflake for LDAR survey results, identifies active leaks, and creates SAP work orders for repair."
  tags:
    - environmental
    - upstream
    - snowflake
    - sap
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: methane-ldar
      port: 8080
      tools:
        - name: process-ldar-results
          description: "Query LDAR results from Snowflake and create SAP repair work orders."
          inputParameters:
            - name: facility_id
              in: body
              type: string
              description: "Facility identifier."
            - name: survey_date
              in: body
              type: string
              description: "Survey date in YYYY-MM-DD format."
          steps:
            - name: query-leaks
              type: call
              call: snowflake.query-ldar-results
              with:
                facility_id: "{{facility_id}}"
                survey_date: "{{survey_date}}"
            - name: create-repair-orders
              type: call
              call: sap.create-pm-work-orders
              with:
                leaks: "{{query-leaks.active_leaks}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://chevron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: ldar
          path: "/statements"
          operations:
            - name: query-ldar-results
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/PM_ORDER_CREATE_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: work-orders
          path: "/A_MaintenanceOrder"
          operations:
            - name: create-pm-work-orders
              method: POST

Queries Snowflake for pipeline flow rate telemetry, detects anomalies, and creates a ServiceNow incident for pipeline operations.

naftiko: "0.5"
info:
  label: "Snowflake Pipeline Flow Rate Anomaly Detector"
  description: "Queries Snowflake for pipeline flow rate telemetry, detects anomalies, and creates a ServiceNow incident for pipeline operations."
  tags:
    - upstream
    - pipeline
    - snowflake
    - servicenow
    - safety
capability:
  exposes:
    - type: mcp
      namespace: pipeline-anomaly
      port: 8080
      tools:
        - name: detect-flow-anomaly
          description: "Given a pipeline segment ID and time window, query Snowflake for flow rate data and raise a ServiceNow incident if thresholds are breached."
          inputParameters:
            - name: pipeline_segment_id
              in: body
              type: string
              description: "Unique identifier for the pipeline segment."
            - name: hours_lookback
              in: body
              type: number
              description: "Number of hours to look back for anomaly detection."
          steps:
            - name: query-flow-data
              type: call
              call: snowflake.query-flow-rates
              with:
                pipeline_segment_id: "{{pipeline_segment_id}}"
                hours_lookback: "{{hours_lookback}}"
            - name: raise-incident
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Pipeline flow anomaly on segment {{pipeline_segment_id}}"
                urgency: "2"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://chevron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: flow-rates
          path: "/statements"
          operations:
            - name: query-flow-rates
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://chevron.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

Queries Snowflake for well production history, performs decline curve analysis, and pushes EUR estimates to Power BI.

naftiko: "0.5"
info:
  label: "Snowflake Reservoir Decline Curve Analysis"
  description: "Queries Snowflake for well production history, performs decline curve analysis, and pushes EUR estimates to Power BI."
  tags:
    - upstream
    - production
    - snowflake
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: decline-curve
      port: 8080
      tools:
        - name: run-decline-analysis
          description: "Query production data and push EUR estimates to Power BI."
          inputParameters:
            - name: well_id
              in: body
              type: string
              description: "Well identifier."
            - name: months_history
              in: body
              type: number
              description: "Months of history to analyze."
          steps:
            - name: query-production
              type: call
              call: snowflake.query-well-production
              with:
                well_id: "{{well_id}}"
                months_history: "{{months_history}}"
            - name: push-forecasts
              type: call
              call: powerbi.push-rows
              with:
                dataset_id: "decline-curve-eur"
                rows: "{{query-production.results}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://chevron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: production
          path: "/statements"
          operations:
            - name: query-well-production
              method: POST
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets/decline-curve-eur/rows"
          operations:
            - name: push-rows
              method: POST

Queries Snowflake for rig utilization data and pushes benchmarks to Power BI.

naftiko: "0.5"
info:
  label: "Snowflake Rig Utilization Benchmarking"
  description: "Queries Snowflake for rig utilization data and pushes benchmarks to Power BI."
  tags:
    - upstream
    - drilling
    - snowflake
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: rig-utilization
      port: 8080
      tools:
        - name: benchmark-rig-utilization
          description: "Query rig utilization and push to Power BI."
          inputParameters:
            - name: basin
              in: body
              type: string
              description: "Basin name."
            - name: quarter
              in: body
              type: string
              description: "Quarter in YYYY-QN format."
          steps:
            - name: query-utilization
              type: call
              call: snowflake.query-rig-utilization
              with:
                basin: "{{basin}}"
                quarter: "{{quarter}}"
            - name: push-benchmarks
              type: call
              call: powerbi.push-rows
              with:
                dataset_id: "rig-utilization-benchmark"
                rows: "{{query-utilization.results}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://chevron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: rig-data
          path: "/statements"
          operations:
            - name: query-rig-utilization
              method: POST
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets/rig-utilization-benchmark/rows"
          operations:
            - name: push-rows
              method: POST

Queries Snowflake for seismic survey metadata for exploration data management.

naftiko: "0.5"
info:
  label: "Snowflake Seismic Survey Data Catalog"
  description: "Queries Snowflake for seismic survey metadata for exploration data management."
  tags:
    - upstream
    - exploration
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: seismic-catalog
      port: 8080
      tools:
        - name: search-seismic-surveys
          description: "Search seismic catalog by basin and vintage year."
          inputParameters:
            - name: basin
              in: body
              type: string
              description: "Basin name."
            - name: vintage_year
              in: body
              type: number
              description: "Acquisition year."
          call: snowflake.query-seismic-catalog
          with:
            basin: "{{basin}}"
            vintage_year: "{{vintage_year}}"
          outputParameters:
            - name: surveys
              type: string
              mapping: "$.data"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://chevron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: seismic
          path: "/statements"
          operations:
            - name: query-seismic-catalog
              method: POST

Queries Snowflake for Tengiz field production data including sour gas processing volumes and sulfur recovery rates, pushing to Power BI.

naftiko: "0.5"
info:
  label: "Snowflake Tengiz Production Dashboard"
  description: "Queries Snowflake for Tengiz field production data including sour gas processing volumes and sulfur recovery rates, pushing to Power BI."
  tags:
    - upstream
    - production
    - snowflake
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: tengiz-production
      port: 8080
      tools:
        - name: generate-tengiz-dashboard
          description: "Query Tengiz production data and push to Power BI."
          inputParameters:
            - name: date_from
              in: body
              type: string
              description: "Start date in YYYY-MM-DD format."
            - name: date_to
              in: body
              type: string
              description: "End date in YYYY-MM-DD format."
          steps:
            - name: query-production
              type: call
              call: snowflake.query-tengiz-production
              with:
                date_from: "{{date_from}}"
                date_to: "{{date_to}}"
            - name: push-dashboard
              type: call
              call: powerbi.push-rows
              with:
                dataset_id: "tengiz-production-daily"
                rows: "{{query-production.results}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://chevron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: tengiz
          path: "/statements"
          operations:
            - name: query-tengiz-production
              method: POST
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets/tengiz-production-daily/rows"
          operations:
            - name: push-rows
              method: POST

Queries Snowflake for counterparty credit exposure, aggregates by counterparty, and pushes to Power BI.

naftiko: "0.5"
info:
  label: "Snowflake Trading Counterparty Exposure Report"
  description: "Queries Snowflake for counterparty credit exposure, aggregates by counterparty, and pushes to Power BI."
  tags:
    - trading
    - risk-management
    - snowflake
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: counterparty-exposure
      port: 8080
      tools:
        - name: generate-exposure-report
          description: "Query counterparty exposure and push to Power BI."
          inputParameters:
            - name: valuation_date
              in: body
              type: string
              description: "Valuation date in YYYY-MM-DD format."
            - name: threshold_usd
              in: body
              type: number
              description: "Minimum exposure in USD."
          steps:
            - name: query-exposure
              type: call
              call: snowflake.query-counterparty-exposure
              with:
                valuation_date: "{{valuation_date}}"
                threshold_usd: "{{threshold_usd}}"
            - name: push-report
              type: call
              call: powerbi.push-rows
              with:
                dataset_id: "counterparty-exposure"
                rows: "{{query-exposure.results}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://chevron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: exposure
          path: "/statements"
          operations:
            - name: query-counterparty-exposure
              method: POST
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets/counterparty-exposure/rows"
          operations:
            - name: push-rows
              method: POST

Queries Snowflake for disposal well injection data and creates ServiceNow alert if nearing permit limits.

naftiko: "0.5"
info:
  label: "Snowflake Water Disposal Well Monitoring"
  description: "Queries Snowflake for disposal well injection data and creates ServiceNow alert if nearing permit limits."
  tags:
    - upstream
    - environmental
    - snowflake
    - servicenow
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: water-disposal
      port: 8080
      tools:
        - name: monitor-disposal-well
          description: "Query injection data and alert via ServiceNow if nearing limits."
          inputParameters:
            - name: well_id
              in: body
              type: string
              description: "Disposal well identifier."
          steps:
            - name: query-injection-data
              type: call
              call: snowflake.query-injection-volumes
              with:
                well_id: "{{well_id}}"
            - name: create-alert
              type: call
              call: servicenow.create-alert
              with:
                well_id: "{{well_id}}"
                current_volume: "{{query-injection-data.daily_volume}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://chevron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: injection-data
          path: "/statements"
          operations:
            - name: query-injection-volumes
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://chevron.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: alerts
          path: "/table/u_environmental_alert"
          operations:
            - name: create-alert
              method: POST

Triggers a Terraform Cloud workspace run for cloud infrastructure changes in Chevron's AWS or Azure environments and creates a ServiceNow change request for CAB approval.

naftiko: "0.5"
info:
  label: "Terraform Cloud Cloud Infrastructure Deployment"
  description: "Triggers a Terraform Cloud workspace run for cloud infrastructure changes in Chevron's AWS or Azure environments and creates a ServiceNow change request for CAB approval."
  tags:
    - cloud
    - terraform
    - servicenow
    - infrastructure
    - devops
capability:
  exposes:
    - type: mcp
      namespace: cloud-provisioning
      port: 8080
      tools:
        - name: trigger-cloud-deployment
          description: "Given a Terraform Cloud workspace ID and change description, trigger an infrastructure plan run and create a ServiceNow change request for CAB board approval before the apply executes."
          inputParameters:
            - name: workspace_id
              in: body
              type: string
              description: "The Terraform Cloud workspace ID to trigger a run for."
            - name: change_description
              in: body
              type: string
              description: "Description of the cloud infrastructure change."
            - name: environment
              in: body
              type: string
              description: "Target cloud environment (e.g., prod-aws, prod-azure, staging)."
          steps:
            - name: trigger-run
              type: call
              call: terraform.create-run
              with:
                workspace_id: "{{workspace_id}}"
                message: "{{change_description}} [{{environment}}]"
            - name: create-cab-change
              type: call
              call: servicenow.create-change
              with:
                short_description: "Cloud infrastructure deployment: {{workspace_id}} in {{environment}}"
                description: "{{change_description}}\nTerraform Run ID: {{trigger-run.run_id}}\nEnvironment: {{environment}}"
                category: "cloud_infrastructure"
                risk: "high"
  consumes:
    - type: http
      namespace: terraform
      baseUri: "https://app.terraform.io/api/v2"
      authentication:
        type: bearer
        token: "$secrets.terraform_token"
      resources:
        - name: runs
          path: "/runs"
          operations:
            - name: create-run
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://chevron.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

Provisions edge computing for well pad SCADA using Terraform, registers in ServiceNow, and notifies OT team.

naftiko: "0.5"
info:
  label: "Terraform Well Pad Edge Infrastructure"
  description: "Provisions edge computing for well pad SCADA using Terraform, registers in ServiceNow, and notifies OT team."
  tags:
    - upstream
    - ot
    - terraform
    - servicenow
    - msteams
capability:
  exposes:
    - type: mcp
      namespace: wellpad-infra
      port: 8080
      tools:
        - name: provision-wellpad-edge
          description: "Run Terraform, register devices, and notify OT team."
          inputParameters:
            - name: well_pad_id
              in: body
              type: string
              description: "Well pad identifier."
            - name: device_count
              in: body
              type: number
              description: "Number of edge devices."
          steps:
            - name: run-terraform
              type: call
              call: terraform.create-run
              with:
                workspace: "wellpad-edge-infra"
                variables: "well_pad_id={{well_pad_id}},device_count={{device_count}}"
            - name: register-devices
              type: call
              call: servicenow.create-ci
              with:
                well_pad_id: "{{well_pad_id}}"
            - name: notify-ot
              type: call
              call: msteams.send-message
              with:
                channel: "ot-infrastructure"
                text: "Edge infra provisioned | Well pad: {{well_pad_id}} | Devices: {{device_count}}"
  consumes:
    - type: http
      namespace: terraform
      baseUri: "https://app.terraform.io/api/v2"
      authentication:
        type: bearer
        token: "$secrets.terraform_token"
      resources:
        - name: runs
          path: "/runs"
          operations:
            - name: create-run
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://chevron.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: ci
          path: "/table/cmdb_ci"
          operations:
            - name: create-ci
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msteams_token"
      resources:
        - name: channel-messages
          path: "/teams/ot/channels/infrastructure/messages"
          operations:
            - name: send-message
              method: POST

Retrieves daily upstream oil and gas production volumes from SAP S/4HANA by asset and field, publishing a production summary to the operations leadership Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Upstream Production Reporting Snapshot"
  description: "Retrieves daily upstream oil and gas production volumes from SAP S/4HANA by asset and field, publishing a production summary to the operations leadership Microsoft Teams channel."
  tags:
    - finance
    - sap
    - microsoft-teams
    - reporting
    - upstream
    - production
capability:
  exposes:
    - type: mcp
      namespace: upstream-reporting
      port: 8080
      tools:
        - name: publish-production-snapshot
          description: "Given a production date and field code, retrieve daily upstream oil, gas, and NGL production volumes from SAP S/4HANA and post a formatted summary to the operations leadership Teams channel."
          inputParameters:
            - name: production_date
              in: body
              type: string
              description: "The production date in YYYY-MM-DD format."
            - name: field_code
              in: body
              type: string
              description: "The upstream field or asset identifier (e.g., PERMIAN, TENGIZ)."
          steps:
            - name: get-production-data
              type: call
              call: sap-prod.get-production-volumes
              with:
                production_date: "{{production_date}}"
                field_code: "{{field_code}}"
            - name: post-summary
              type: call
              call: msteams.post-prod-summary
              with:
                channel_id: "operations-leadership"
                text: "Production Report | {{production_date}} | Field: {{field_code}} | Oil: {{get-production-data.oil_bopd}} BOPD | Gas: {{get-production-data.gas_mmscfd}} MMscfd | NGL: {{get-production-data.ngl_bopd}} BOPD"
  consumes:
    - type: http
      namespace: sap-prod
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/OIL_GAS_PRODUCTION_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: production-volumes
          path: "/ProductionVolumeSet"
          inputParameters:
            - name: production_date
              in: query
            - name: field_code
              in: query
          operations:
            - name: get-production-volumes
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.ms_graph_token"
      resources:
        - name: ops-messages
          path: "/teams/operations-leadership/channels/general/messages"
          operations:
            - name: post-prod-summary
              method: POST

Processes vendor invoices in SAP S/4HANA against SAP Ariba purchase orders for materials and services procurement, flagging discrepancies via ServiceNow for AP resolution.

naftiko: "0.5"
info:
  label: "Vendor Invoice Processing and PO Match"
  description: "Processes vendor invoices in SAP S/4HANA against SAP Ariba purchase orders for materials and services procurement, flagging discrepancies via ServiceNow for AP resolution."
  tags:
    - finance
    - sap
    - sap-ariba
    - servicenow
    - accounts-payable
    - procurement
capability:
  exposes:
    - type: mcp
      namespace: ap-invoice
      port: 8080
      tools:
        - name: process-vendor-invoice
          description: "Given a vendor invoice number and supplier ID, retrieve the invoice from SAP S/4HANA, match against the corresponding Ariba PO, and open a ServiceNow discrepancy task if there are amount or line-item mismatches."
          inputParameters:
            - name: invoice_number
              in: body
              type: string
              description: "The vendor invoice number to process."
            - name: supplier_id
              in: body
              type: string
              description: "The SAP supplier ID associated with this invoice."
          steps:
            - name: get-invoice
              type: call
              call: sap-invoice.get-invoice
              with:
                invoice_number: "{{invoice_number}}"
            - name: get-po-match
              type: call
              call: ariba.get-po-for-supplier
              with:
                supplier_id: "{{supplier_id}}"
                invoice_number: "{{invoice_number}}"
            - name: flag-discrepancy
              type: call
              call: servicenow.create-discrepancy
              with:
                short_description: "Invoice discrepancy: {{invoice_number}} | Supplier: {{supplier_id}}"
                invoice_amount: "{{get-invoice.total_amount}}"
                po_amount: "{{get-po-match.total_amount}}"
                assigned_group: "AP_Team"
  consumes:
    - type: http
      namespace: sap-invoice
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/API_SUPPLIER_INVOICE_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: invoices
          path: "/A_SupplierInvoice"
          inputParameters:
            - name: invoice_number
              in: query
          operations:
            - name: get-invoice
              method: GET
    - type: http
      namespace: ariba
      baseUri: "https://openapi.ariba.com/api/purchase-orders/v1"
      authentication:
        type: bearer
        token: "$secrets.ariba_token"
      resources:
        - name: po-matching
          path: "/orders"
          inputParameters:
            - name: supplier_id
              in: query
            - name: invoice_number
              in: query
          operations:
            - name: get-po-for-supplier
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://chevron.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: discrepancy-tasks
          path: "/table/sc_task"
          operations:
            - name: create-discrepancy
              method: POST

Queries Workday for employees missing benefits enrollment, sends Teams reminders, and logs in ServiceNow.

naftiko: "0.5"
info:
  label: "Workday Benefits Enrollment Reminder"
  description: "Queries Workday for employees missing benefits enrollment, sends Teams reminders, and logs in ServiceNow."
  tags:
    - hr
    - workday
    - msteams
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: benefits-reminder
      port: 8080
      tools:
        - name: send-enrollment-reminders
          description: "Find pending enrollments and send reminders."
          inputParameters:
            - name: enrollment_period
              in: body
              type: string
              description: "Enrollment period identifier."
          steps:
            - name: find-pending
              type: call
              call: workday.get-pending-enrollments
              with:
                period: "{{enrollment_period}}"
            - name: send-reminders
              type: call
              call: msteams.send-message
              with:
                channel: "hr-benefits"
                text: "Benefits enrollment | {{find-pending.count}} employees pending | Period: {{enrollment_period}}"
            - name: log-outreach
              type: call
              call: servicenow.create-hr-task
              with:
                description: "Benefits outreach for {{find-pending.count}} employees"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: enrollments
          path: "/benefits/enrollments"
          operations:
            - name: get-pending-enrollments
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msteams_token"
      resources:
        - name: channel-messages
          path: "/teams/hr/channels/benefits/messages"
          operations:
            - name: send-message
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://chevron.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: hr-tasks
          path: "/table/u_hr_task"
          operations:
            - name: create-hr-task
              method: POST

Identifies employees with incomplete annual benefits enrollment in Workday and sends reminder notifications via Microsoft Teams to drive completion before the enrollment deadline.

naftiko: "0.5"
info:
  label: "Workday Benefits Open Enrollment Reminder"
  description: "Identifies employees with incomplete annual benefits enrollment in Workday and sends reminder notifications via Microsoft Teams to drive completion before the enrollment deadline."
  tags:
    - hr
    - workday
    - microsoft-teams
    - benefits
    - enrollment
capability:
  exposes:
    - type: mcp
      namespace: benefits-enrollment
      port: 8080
      tools:
        - name: send-benefits-enrollment-reminders
          description: "During open enrollment periods, retrieve all employees with incomplete benefits elections from Workday and broadcast reminder notifications via Microsoft Teams to drive enrollment completion before the deadline."
          inputParameters:
            - name: enrollment_period
              in: body
              type: string
              description: "The Workday benefits enrollment period identifier."
            - name: enrollment_deadline
              in: body
              type: string
              description: "Enrollment completion deadline in YYYY-MM-DD format."
          steps:
            - name: get-incomplete-enrollees
              type: call
              call: workday.get-open-elections
              with:
                enrollment_period: "{{enrollment_period}}"
            - name: send-reminder
              type: call
              call: msteams.send-enrollment-reminder
              with:
                channel_id: "hr-announcements"
                text: "Benefits Enrollment Reminder | Period: {{enrollment_period}} | Deadline: {{enrollment_deadline}} | {{get-incomplete-enrollees.count}} employees have not completed enrollment. Log in to Workday to finalize your benefit elections."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: benefit-elections
          path: "/benefitElections"
          inputParameters:
            - name: enrollment_period
              in: query
          operations:
            - name: get-open-elections
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.ms_graph_token"
      resources:
        - name: hr-messages
          path: "/teams/hr/channels/announcements/messages"
          operations:
            - name: send-enrollment-reminder
              method: POST

Initiates the annual compensation review cycle in Workday for a business unit, creates Jira planning tasks for HR business partners, and notifies the HR leadership team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Workday Compensation Review Cycle Launch"
  description: "Initiates the annual compensation review cycle in Workday for a business unit, creates Jira planning tasks for HR business partners, and notifies the HR leadership team via Microsoft Teams."
  tags:
    - hr
    - workday
    - jira
    - microsoft-teams
    - compensation
    - performance-management
capability:
  exposes:
    - type: mcp
      namespace: compensation-ops
      port: 8080
      tools:
        - name: launch-compensation-review
          description: "Given a Workday business unit and review cycle name, initiate the annual compensation review process, create Jira planning tasks for HR business partners, and alert the HR leadership team via Teams."
          inputParameters:
            - name: business_unit_id
              in: body
              type: string
              description: "The Workday business unit ID for the compensation review scope."
            - name: review_cycle
              in: body
              type: string
              description: "The name of the compensation review cycle (e.g., '2026 Annual Compensation Review')."
            - name: deadline
              in: body
              type: string
              description: "Review completion deadline in YYYY-MM-DD format."
          steps:
            - name: initiate-review
              type: call
              call: workday.start-compensation-review
              with:
                business_unit: "{{business_unit_id}}"
                review_name: "{{review_cycle}}"
            - name: create-jira-task
              type: call
              call: jira.create-hr-task
              with:
                project_key: "HROP"
                issuetype: "Task"
                summary: "{{review_cycle}} — Business Unit {{business_unit_id}}"
                due_date: "{{deadline}}"
            - name: notify-hr-leadership
              type: call
              call: msteams.notify-hr-leadership
              with:
                channel_id: "hr-leadership"
                text: "Compensation Review Launched | Cycle: {{review_cycle}} | BU: {{business_unit_id}} | Deadline: {{deadline}} | Jira: {{create-jira-task.key}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: compensation-reviews
          path: "/compensationReviews"
          operations:
            - name: start-compensation-review
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://chevron.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: hr-tasks
          path: "/issue"
          operations:
            - name: create-hr-task
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.ms_graph_token"
      resources:
        - name: hr-leadership-messages
          path: "/teams/hr/channels/leadership/messages"
          operations:
            - name: notify-hr-leadership
              method: POST

Verifies field contractor safety certifications and site access in Workday, notifying supervisors of gaps via Teams.

naftiko: "0.5"
info:
  label: "Workday Contractor Compliance Verification"
  description: "Verifies field contractor safety certifications and site access in Workday, notifying supervisors of gaps via Teams."
  tags:
    - safety
    - compliance
    - workday
    - msteams
    - upstream
capability:
  exposes:
    - type: mcp
      namespace: contractor-compliance
      port: 8080
      tools:
        - name: verify-contractor
          description: "Check contractor safety certs and site access in Workday and notify supervisor."
          inputParameters:
            - name: worker_id
              in: body
              type: string
              description: "Workday contingent worker ID."
            - name: site_code
              in: body
              type: string
              description: "Facility site code."
          steps:
            - name: check-certifications
              type: call
              call: workday.get-worker-certifications
              with:
                worker_id: "{{worker_id}}"
            - name: check-clearance
              type: call
              call: workday.get-site-access
              with:
                worker_id: "{{worker_id}}"
                site_code: "{{site_code}}"
            - name: notify-supervisor
              type: call
              call: msteams.send-message
              with:
                channel: "field-supervisors"
                text: "Contractor compliance | Worker: {{worker_id}} | Site: {{site_code}} | Certs: {{check-certifications.all_valid}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: certifications
          path: "/workers/certifications"
          operations:
            - name: get-worker-certifications
              method: GET
        - name: site-access
          path: "/workers/site-access"
          operations:
            - name: get-site-access
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msteams_token"
      resources:
        - name: channel-messages
          path: "/teams/field/channels/supervisors/messages"
          operations:
            - name: send-message
              method: POST

Queries Workday for available crew, matches to SAP work orders, and posts schedule to Teams.

naftiko: "0.5"
info:
  label: "Workday Field Crew Scheduling Optimizer"
  description: "Queries Workday for available crew, matches to SAP work orders, and posts schedule to Teams."
  tags:
    - upstream
    - workday
    - sap
    - msteams
    - maintenance
capability:
  exposes:
    - type: mcp
      namespace: crew-scheduling
      port: 8080
      tools:
        - name: optimize-crew-schedule
          description: "Find crew, match to work orders, and post schedule."
          inputParameters:
            - name: location
              in: body
              type: string
              description: "Field location code."
            - name: schedule_date
              in: body
              type: string
              description: "Date in YYYY-MM-DD format."
          steps:
            - name: get-available-crew
              type: call
              call: workday.get-available-workers
              with:
                location: "{{location}}"
                date: "{{schedule_date}}"
            - name: get-pending-orders
              type: call
              call: sap.get-open-work-orders
              with:
                location: "{{location}}"
            - name: post-schedule
              type: call
              call: msteams.send-message
              with:
                channel: "field-operations"
                text: "Crew Schedule {{schedule_date}} | Location: {{location}} | Crew: {{get-available-crew.count}} | WOs: {{get-pending-orders.count}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers"
          operations:
            - name: get-available-workers
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://chevron-s4.sap.com/sap/opu/odata/sap/PM_ORDER_CREATE_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: work-orders
          path: "/A_MaintenanceOrder"
          operations:
            - name: get-open-work-orders
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msteams_token"
      resources:
        - name: channel-messages
          path: "/teams/field/channels/operations/messages"
          operations:
            - name: send-message
              method: POST

Pulls headcount from Workday, combines with ServiceNow incidents, calculates TRIR/DART, and pushes to Power BI.

naftiko: "0.5"
info:
  label: "Workday HSE Incident Rate Dashboard"
  description: "Pulls headcount from Workday, combines with ServiceNow incidents, calculates TRIR/DART, and pushes to Power BI."
  tags:
    - safety
    - workday
    - servicenow
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: hse-rates
      port: 8080
      tools:
        - name: calculate-hse-rates
          description: "Given a business unit and period, calculate safety rates and push to Power BI."
          inputParameters:
            - name: business_unit
              in: body
              type: string
              description: "Business unit code."
            - name: period
              in: body
              type: string
              description: "Reporting period."
          steps:
            - name: get-hours
              type: call
              call: workday.get-hours-worked
              with:
                business_unit: "{{business_unit}}"
                period: "{{period}}"
            - name: get-incidents
              type: call
              call: servicenow.query-hse-incidents
              with:
                business_unit: "{{business_unit}}"
                period: "{{period}}"
            - name: push-rates
              type: call
              call: powerbi.push-rows
              with:
                dataset_id: "hse-incident-rates"
                rows: "{{get-incidents.summary}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: hours
          path: "/time-tracking/hours"
          operations:
            - name: get-hours-worked
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://chevron.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: hse-incidents
          path: "/table/u_hse_incident"
          operations:
            - name: query-hse-incidents
              method: GET
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets/hse-incident-rates/rows"
          operations:
            - name: push-rows
              method: POST

Checks Workday learning records for required HSE safety training modules and flags overdue certifications to the safety coordinator via Teams.

naftiko: "0.5"
info:
  label: "Workday Safety Training Compliance Check"
  description: "Checks Workday learning records for required HSE safety training modules and flags overdue certifications to the safety coordinator via Teams."
  tags:
    - safety
    - training
    - workday
    - msteams
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: safety-training
      port: 8080
      tools:
        - name: check-safety-training
          description: "Given a worker ID, verify HSE training completion in Workday and notify if overdue."
          inputParameters:
            - name: worker_id
              in: body
              type: string
              description: "Workday worker ID."
          steps:
            - name: get-training-status
              type: call
              call: workday.get-learning-records
              with:
                worker_id: "{{worker_id}}"
            - name: notify-overdue
              type: call
              call: msteams.send-message
              with:
                channel: "hse-compliance"
                text: "Safety training check for {{worker_id}} | Overdue: {{get-training-status.overdue_count}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: learning
          path: "/learning/records"
          operations:
            - name: get-learning-records
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msteams_token"
      resources:
        - name: channel-messages
          path: "/teams/hse/channels/compliance/messages"
          operations:
            - name: send-message
              method: POST

Retrieves succession data from Workday and posts readiness summary to Teams.

naftiko: "0.5"
info:
  label: "Workday Succession Planning for Critical Roles"
  description: "Retrieves succession data from Workday and posts readiness summary to Teams."
  tags:
    - hr
    - workday
    - msteams
capability:
  exposes:
    - type: mcp
      namespace: succession-planning
      port: 8080
      tools:
        - name: review-succession-pipeline
          description: "Pull succession data and post readiness summary."
          inputParameters:
            - name: business_unit
              in: body
              type: string
              description: "Business unit to review."
          steps:
            - name: get-succession-data
              type: call
              call: workday.get-succession-plans
              with:
                business_unit: "{{business_unit}}"
            - name: post-summary
              type: call
              call: msteams.send-message
              with:
                channel: "hr-leadership"
                text: "Succession | {{business_unit}} | Ready: {{get-succession-data.ready_now}} | Gaps: {{get-succession-data.gap_count}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: succession
          path: "/talent/succession-plans"
          operations:
            - name: get-succession-plans
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msteams_token"
      resources:
        - name: channel-messages
          path: "/teams/hr/channels/leadership/messages"
          operations:
            - name: send-message
              method: POST

Retrieves open job requisitions from Workday and publishes them to LinkedIn Recruiter to maintain an accurate talent pipeline for technical and field operations roles.

naftiko: "0.5"
info:
  label: "Workday Talent Recruiting Job Posting Sync"
  description: "Retrieves open job requisitions from Workday and publishes them to LinkedIn Recruiter to maintain an accurate talent pipeline for technical and field operations roles."
  tags:
    - hr
    - workday
    - linkedin
    - recruiting
    - talent-acquisition
capability:
  exposes:
    - type: mcp
      namespace: talent-recruiting
      port: 8080
      tools:
        - name: sync-job-postings
          description: "Retrieve all open approved job requisitions from Workday and create or refresh corresponding LinkedIn job postings for engineering, technical, and field operations roles."
          inputParameters:
            - name: requisition_status
              in: body
              type: string
              description: "Workday requisition status filter (e.g., Open, Approved)."
          steps:
            - name: get-requisitions
              type: call
              call: workday.get-requisitions
              with:
                status: "{{requisition_status}}"
            - name: post-linkedin
              type: call
              call: linkedin.create-job-posting
              with:
                company_id: "chevron"
                title: "{{get-requisitions.job_title}}"
                description: "{{get-requisitions.job_description}}"
                location: "{{get-requisitions.location}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: requisitions
          path: "/jobRequisitions"
          inputParameters:
            - name: status
              in: query
          operations:
            - name: get-requisitions
              method: GET
    - type: http
      namespace: linkedin
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: job-postings
          path: "/jobPostings"
          operations:
            - name: create-job-posting
              method: POST