Chevron Capabilities
Naftiko 0.5 capability definitions for Chevron - 100 capabilities showing integration workflows and service orchestrations.
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