Halliburton Capabilities
Naftiko 0.5 capability definitions for Halliburton - 100 capabilities showing integration workflows and service orchestrations.
Uses an AI model endpoint to analyze drilling telemetry and recommend optimal parameters, posting recommendations to the drilling engineering Teams channel.
naftiko: "0.5"
info:
label: "AI-Assisted Drilling Parameter Optimization"
description: "Uses an AI model endpoint to analyze drilling telemetry and recommend optimal parameters, posting recommendations to the drilling engineering Teams channel."
tags:
- drilling
- artificial-intelligence
- field-operations
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: drilling-ai
port: 8080
tools:
- name: optimize-drilling-params
description: "Given a well ID, analyze telemetry via AI model and post optimization recommendations to drilling engineering."
inputParameters:
- name: well_id
in: body
type: string
description: "The well identifier."
steps:
- name: get-telemetry
type: call
call: iot-platform.get-drilling-data
with:
well_id: "{{well_id}}"
- name: get-recommendations
type: call
call: ai-model.predict
with:
telemetry: "{{get-telemetry.data}}"
- name: post-recommendations
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_drilling_eng_channel_id"
text: "Drilling Optimization: Well {{well_id}} | Recommended WOB: {{get-recommendations.wob}} | RPM: {{get-recommendations.rpm}} | Flow: {{get-recommendations.flow_rate}}"
consumes:
- type: http
namespace: iot-platform
baseUri: "https://halliburton-iot.azure-devices.net/api/v1"
authentication:
type: bearer
token: "$secrets.iot_platform_token"
resources:
- name: drilling-data
path: "/wells/{{well_id}}/drilling/latest"
inputParameters:
- name: well_id
in: path
operations:
- name: get-drilling-data
method: GET
- type: http
namespace: ai-model
baseUri: "https://halliburton-ml.azureml.ms/score"
authentication:
type: bearer
token: "$secrets.azureml_token"
resources:
- name: predictions
path: "/drilling-optimizer"
operations:
- name: predict
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Uses Anthropic to analyze an HSE incident report and draft a root cause analysis document, then posts the findings to the HSE compliance team in Microsoft Teams.
naftiko: "0.5"
info:
label: "AI-Assisted HSE Incident Root Cause Analysis"
description: "Uses Anthropic to analyze an HSE incident report and draft a root cause analysis document, then posts the findings to the HSE compliance team in Microsoft Teams."
tags:
- hse
- safety
- anthropic
- microsoft-teams
- ai
- root-cause-analysis
capability:
exposes:
- type: mcp
namespace: hse-ai
port: 8080
tools:
- name: draft-rca-for-hse-incident
description: "Given HSE incident details, use Anthropic to draft a structured root cause analysis with corrective actions and post findings to the HSE compliance Teams channel."
inputParameters:
- name: incident_description
in: body
type: string
description: "The full description of the HSE incident for root cause analysis."
- name: incident_type
in: body
type: string
description: "The type of HSE incident, e.g. Spill, Injury, Near Miss, Fire."
- name: location
in: body
type: string
description: "The field site location where the incident occurred."
steps:
- name: draft-rca
type: call
call: anthropic.analyze-hse-incident
with:
model: claude-opus-4-5
prompt: "Draft a structured root cause analysis for this Halliburton HSE incident. Include immediate causes, root causes, contributing factors, and corrective actions. Incident type: {{incident_type}}. Location: {{location}}. Description: {{incident_description}}"
- name: post-rca
type: call
call: msteams.post-rca-findings
with:
channel: "hse-compliance"
text: "AI-drafted RCA for {{incident_type}} at {{location}}:\n{{draft-rca.content}}"
consumes:
- 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: analyze-hse-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/hse/channels/compliance/messages"
operations:
- name: post-rca-findings
method: POST
Searches Confluence for technical documentation pages matching a query, returning page title, space key, and author.
naftiko: "0.5"
info:
label: "Confluence Technical Doc Search"
description: "Searches Confluence for technical documentation pages matching a query, returning page title, space key, and author."
tags:
- collaboration
- confluence
- knowledge-management
capability:
exposes:
- type: mcp
namespace: collab-wiki
port: 8080
tools:
- name: search-confluence
description: "Search Confluence for technical docs by keyword. Returns page title, space key, and author."
inputParameters:
- name: query
in: body
type: string
description: "Search query string."
call: confluence.search-pages
with:
query: "{{query}}"
outputParameters:
- name: results
type: array
mapping: "$.results"
consumes:
- type: http
namespace: confluence
baseUri: "https://halliburton.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_token"
resources:
- name: search
path: "/search?cql=text~'{{query}}'"
inputParameters:
- name: query
in: path
operations:
- name: search-pages
method: GET
Retrieves APM latency metrics from Datadog for a service, returning P50, P95, and P99 latency for performance review.
naftiko: "0.5"
info:
label: "Datadog APM Latency Report"
description: "Retrieves APM latency metrics from Datadog for a service, returning P50, P95, and P99 latency for performance review."
tags:
- observability
- datadog
- monitoring
- performance
capability:
exposes:
- type: mcp
namespace: observability
port: 8080
tools:
- name: get-service-latency
description: "Get APM latency metrics for a Datadog service. Returns P50, P95, and P99 latency values."
inputParameters:
- name: service_name
in: body
type: string
description: "The Datadog service name."
call: datadog.get-latency
with:
service: "{{service_name}}"
outputParameters:
- name: p50
type: number
mapping: "$.p50"
- name: p95
type: number
mapping: "$.p95"
- name: p99
type: number
mapping: "$.p99"
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: apm
path: "/trace/stats?service={{service}}"
inputParameters:
- name: service
in: path
operations:
- name: get-latency
method: GET
Detects cloud infrastructure cost anomalies via Datadog, creates a ServiceNow change request for remediation, and notifies the FinOps team in Microsoft Teams.
naftiko: "0.5"
info:
label: "Datadog Cloud Cost Anomaly Responder"
description: "Detects cloud infrastructure cost anomalies via Datadog, creates a ServiceNow change request for remediation, and notifies the FinOps team in Microsoft Teams."
tags:
- cloud
- observability
- datadog
- servicenow
- cost-management
capability:
exposes:
- type: mcp
namespace: finops-ops
port: 8080
tools:
- name: respond-to-cost-anomaly
description: "Given a Datadog monitor ID for a cost anomaly, retrieve monitor details, open a ServiceNow change request, and alert the FinOps team in Teams."
inputParameters:
- name: monitor_id
in: body
type: string
description: "The Datadog monitor ID flagging the cost anomaly."
- name: resource_type
in: body
type: string
description: "The cloud resource type, e.g. EC2, S3, Azure VM."
steps:
- name: get-monitor
type: call
call: datadog.get-monitor
with:
monitor_id: "{{monitor_id}}"
- name: create-change
type: call
call: servicenow.create-change
with:
short_description: "Cost anomaly: {{resource_type}} — {{get-monitor.name}}"
category: cloud_cost
priority: "2"
- name: notify-finops
type: call
call: msteams.post-cost-alert
with:
channel: "cloud-finops"
text: "Cost anomaly on {{resource_type}}: {{get-monitor.name}}. Change: {{create-change.number}}"
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: monitors
path: "/monitor/{{monitor_id}}"
inputParameters:
- name: monitor_id
in: path
operations:
- name: get-monitor
method: GET
- type: http
namespace: servicenow
baseUri: "https://halliburton.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: changes
path: "/table/change_request"
operations:
- name: create-change
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/finops/channels/general/messages"
operations:
- name: post-cost-alert
method: POST
Queries Datadog for active infrastructure alerts, returning host count, triggered monitors, and overall health status.
naftiko: "0.5"
info:
label: "Datadog Infrastructure Health Check"
description: "Queries Datadog for active infrastructure alerts, returning host count, triggered monitors, and overall health status."
tags:
- observability
- datadog
- monitoring
- infrastructure
capability:
exposes:
- type: mcp
namespace: observability
port: 8080
tools:
- name: get-infra-health
description: "Check Datadog for active infrastructure alerts. Returns triggered monitor count, host count, and health status."
inputParameters:
- name: tag_filter
in: body
type: string
description: "Datadog tag filter, e.g. env:production."
call: datadog.get-monitor-summary
with:
tag: "{{tag_filter}}"
outputParameters:
- name: triggered_count
type: number
mapping: "$.counts.triggered"
- name: ok_count
type: number
mapping: "$.counts.ok"
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: monitors
path: "/monitor/search?query=tag:{{tag}}"
inputParameters:
- name: tag
in: path
operations:
- name: get-monitor-summary
method: GET
When Datadog detects a log error spike, retrieves error details and creates a Jira investigation ticket for the engineering team.
naftiko: "0.5"
info:
label: "Datadog Log Error Spike to Jira"
description: "When Datadog detects a log error spike, retrieves error details and creates a Jira investigation ticket for the engineering team."
tags:
- observability
- datadog
- jira
- incident-management
capability:
exposes:
- type: mcp
namespace: observability
port: 8080
tools:
- name: escalate-error-spike
description: "Given a Datadog alert event ID, retrieve error details and create a Jira ticket."
inputParameters:
- name: alert_id
in: body
type: string
description: "The Datadog alert event ID."
steps:
- name: get-alert
type: call
call: datadog.get-event
with:
event_id: "{{alert_id}}"
- name: create-ticket
type: call
call: jira.create-issue
with:
project_key: "OPS"
summary: "Error spike: {{get-alert.title}}"
description: "Source: {{get-alert.source}} | Tags: {{get-alert.tags}}"
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: events
path: "/events/{{event_id}}"
inputParameters:
- name: event_id
in: path
operations:
- name: get-event
method: GET
- type: http
namespace: jira
baseUri: "https://halliburton.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Retrieves SLO compliance status for all production systems from Datadog and posts a weekly digest to the engineering and operations teams in Microsoft Teams.
naftiko: "0.5"
info:
label: "Datadog SLO Compliance Report"
description: "Retrieves SLO compliance status for all production systems from Datadog and posts a weekly digest to the engineering and operations teams in Microsoft Teams."
tags:
- observability
- datadog
- microsoft-teams
- slo
- reporting
capability:
exposes:
- type: mcp
namespace: slo-reporting
port: 8080
tools:
- name: digest-slo-compliance
description: "Retrieve all SLO statuses from Datadog and post a compliance digest to the operations Teams channel, highlighting any breached SLOs."
inputParameters:
- name: timeframe
in: body
type: string
description: "SLO evaluation window: 7d, 30d, or 90d."
steps:
- name: get-slos
type: call
call: datadog.list-slos
with:
timeframe: "{{timeframe}}"
- name: post-report
type: call
call: msteams.post-slo-report
with:
channel: "ops-slo-reports"
text: "SLO Compliance ({{timeframe}}): {{get-slos.compliant}} compliant, {{get-slos.breached}} 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: slos
path: "/slo"
operations:
- name: list-slos
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/operations/channels/slo/messages"
operations:
- name: post-slo-report
method: POST
Retrieves the signing status of a DocuSign envelope including signer progress, completion date, and document metadata.
naftiko: "0.5"
info:
label: "DocuSign Contract Tracking"
description: "Retrieves the signing status of a DocuSign envelope including signer progress, completion date, and document metadata."
tags:
- legal
- docusign
- contract-management
capability:
exposes:
- type: mcp
namespace: legal-contracts
port: 8080
tools:
- name: get-envelope-status
description: "Look up a DocuSign envelope status. Returns signer progress and completion date."
inputParameters:
- name: envelope_id
in: body
type: string
description: "The DocuSign envelope ID."
call: docusign.get-envelope
with:
envelope_id: "{{envelope_id}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: completed_date
type: string
mapping: "$.completedDateTime"
consumes:
- type: http
namespace: docusign
baseUri: "https://na4.docusign.net/restapi/v2.1/accounts/$secrets.docusign_account_id"
authentication:
type: bearer
token: "$secrets.docusign_token"
resources:
- name: envelopes
path: "/envelopes/{{envelope_id}}"
inputParameters:
- name: envelope_id
in: path
operations:
- name: get-envelope
method: GET
Monitors drilling fluid stock levels in SAP and creates a purchase requisition when levels fall below threshold, notifying the supply chain team.
naftiko: "0.5"
info:
label: "Drilling Fluid Inventory Alert"
description: "Monitors drilling fluid stock levels in SAP and creates a purchase requisition when levels fall below threshold, notifying the supply chain team."
tags:
- supply-chain
- drilling
- sap
- microsoft-teams
- inventory
capability:
exposes:
- type: mcp
namespace: drilling-supply
port: 8080
tools:
- name: check-fluid-inventory
description: "Check drilling fluid stock in SAP and auto-create a purchase requisition if below threshold."
inputParameters:
- name: material_number
in: body
type: string
description: "The SAP material number for drilling fluid."
- name: min_threshold
in: body
type: number
description: "Minimum stock threshold."
steps:
- name: get-stock
type: call
call: sap.get-material-stock
with:
material: "{{material_number}}"
- name: create-pr
type: call
call: sap.create-purchase-requisition
with:
material: "{{material_number}}"
quantity: "1000"
plant: "{{get-stock.plant}}"
- name: notify-supply
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_supply_channel_id"
text: "Low Stock Alert: Material {{material_number}} at {{get-stock.quantity}} (threshold: {{min_threshold}}) | PR created: {{create-pr.requisition_number}}"
consumes:
- type: http
namespace: sap
baseUri: "https://halliburton-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: stock
path: "/A_MatlStkInAcctMod(Material='{{material}}')"
inputParameters:
- name: material
in: path
operations:
- name: get-material-stock
method: GET
- name: requisitions
path: "/A_PurchaseRequisition"
operations:
- name: create-purchase-requisition
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Retrieves current costs for a drilling job from SAP, compares against budget, and posts a variance report to the project management Teams channel.
naftiko: "0.5"
info:
label: "Drilling Job Cost Tracker"
description: "Retrieves current costs for a drilling job from SAP, compares against budget, and posts a variance report to the project management Teams channel."
tags:
- finance
- drilling
- sap
- microsoft-teams
- cost-management
capability:
exposes:
- type: mcp
namespace: drilling-finance
port: 8080
tools:
- name: track-drilling-costs
description: "Given a SAP project number for a drilling job, retrieve actual costs, compare to budget, and post variance to Teams."
inputParameters:
- name: project_number
in: body
type: string
description: "The SAP project number for the drilling job."
steps:
- name: get-costs
type: call
call: sap.get-project-costs
with:
project: "{{project_number}}"
- name: notify-pm
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_drilling_pm_channel_id"
text: "Drilling Cost Report: Project {{project_number}} | Budget: ${{get-costs.budget}} | Actual: ${{get-costs.actual}} | Variance: ${{get-costs.variance}}"
consumes:
- type: http
namespace: sap
baseUri: "https://halliburton-s4.sap.com/sap/opu/odata/sap/API_PROJECT_COST_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: project-costs
path: "/A_ProjectCost('{{project}}')"
inputParameters:
- name: project
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.msgraph_token"
resources:
- name: channel-messages
path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
When a departure is logged in Workday, deactivates the Okta account, closes open ServiceNow tickets, and notifies IT in Microsoft Teams.
naftiko: "0.5"
info:
label: "Employee Offboarding and Access Revocation"
description: "When a departure is logged in Workday, deactivates the Okta account, closes open ServiceNow tickets, and notifies IT in Microsoft Teams."
tags:
- hr
- offboarding
- workday
- okta
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-offboarding
port: 8080
tools:
- name: trigger-offboarding
description: "Given a departing employee Workday ID and Okta user ID, deactivate Okta access, close open ServiceNow tickets, and notify IT in Microsoft Teams."
inputParameters:
- name: workday_employee_id
in: body
type: string
description: "The Workday worker ID of the departing employee."
- name: okta_user_id
in: body
type: string
description: "The Okta user ID to deactivate."
steps:
- name: deactivate-okta
type: call
call: okta.deactivate-user
with:
user_id: "{{okta_user_id}}"
- name: close-tickets
type: call
call: servicenow.close-user-tickets
with:
assigned_to: "{{workday_employee_id}}"
- name: notify-it
type: call
call: msteams.notify-it
with:
channel: "it-ops"
text: "Offboarding complete for employee {{workday_employee_id}}. Okta deactivated, open tickets closed."
consumes:
- type: http
namespace: okta
baseUri: "https://halliburton.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: user-lifecycle
path: "/users/{{user_id}}/lifecycle/deactivate"
inputParameters:
- name: user_id
in: path
operations:
- name: deactivate-user
method: POST
- type: http
namespace: servicenow
baseUri: "https://halliburton.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: close-user-tickets
method: PATCH
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/it-ops/channels/general/messages"
operations:
- name: notify-it
method: POST
When a new hire is created in Workday, opens a ServiceNow onboarding ticket, provisions an Okta account, and sends a Microsoft Teams welcome message.
naftiko: "0.5"
info:
label: "Employee Onboarding Orchestrator"
description: "When a new hire is created in Workday, opens a ServiceNow onboarding ticket, provisions an Okta account, and sends a Microsoft Teams welcome message."
tags:
- hr
- onboarding
- workday
- servicenow
- okta
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-onboarding
port: 8080
tools:
- name: trigger-onboarding
description: "Given a Workday employee ID and start date, open a ServiceNow onboarding ticket, provision an Okta account, and send a Teams welcome message to the new hire."
inputParameters:
- name: workday_employee_id
in: body
type: string
description: "The Workday worker ID for the new hire."
- name: start_date
in: body
type: string
description: "The employee first day in ISO 8601 format, e.g. 2026-04-01."
steps:
- name: get-employee
type: call
call: workday.get-worker
with:
worker_id: "{{workday_employee_id}}"
- name: open-ticket
type: call
call: servicenow.create-incident
with:
short_description: "New hire onboarding: {{get-employee.full_name}}"
category: hr_onboarding
assigned_to: IT_Onboarding
- name: provision-okta
type: call
call: okta.create-user
with:
firstName: "{{get-employee.first_name}}"
lastName: "{{get-employee.last_name}}"
email: "{{get-employee.work_email}}"
login: "{{get-employee.work_email}}"
- name: send-welcome
type: call
call: msteams.send-message
with:
recipient: "{{get-employee.work_email}}"
text: "Welcome to Halliburton, {{get-employee.first_name}}! Your IT onboarding ticket: {{open-ticket.number}}."
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: "/halliburton/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://halliburton.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: okta
baseUri: "https://halliburton.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: users
path: "/users"
operations:
- name: create-user
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient}}/sendMail"
inputParameters:
- name: recipient
in: path
operations:
- name: send-message
method: POST
Checks Workday for field crew members with expiring safety certifications, creates a Jira task for HR follow-up, and notifies the HSE team via Teams.
naftiko: "0.5"
info:
label: "Field Crew Certification Expiry Alert"
description: "Checks Workday for field crew members with expiring safety certifications, creates a Jira task for HR follow-up, and notifies the HSE team via Teams."
tags:
- hse
- safety
- workday
- jira
- microsoft-teams
- compliance
capability:
exposes:
- type: mcp
namespace: hse-compliance
port: 8080
tools:
- name: alert-expiring-certifications
description: "Check Workday for field crew with expiring certifications, create Jira tasks, and alert the HSE team."
inputParameters:
- name: days_until_expiry
in: body
type: number
description: "Number of days to look ahead for expiring certifications."
steps:
- name: get-expiring
type: call
call: workday.get-expiring-certifications
with:
days: "{{days_until_expiry}}"
- name: create-task
type: call
call: jira.create-issue
with:
project_key: "HSE"
summary: "Certification renewal: {{get-expiring.count}} field crew members expiring within {{days_until_expiry}} days"
description: "Affected employees: {{get-expiring.employee_list}}"
- name: notify-hse
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_hse_channel_id"
text: "Certification Alert: {{get-expiring.count}} crew certifications expiring within {{days_until_expiry}} days | Jira: {{create-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: certifications
path: "/workers/certifications?expiringWithinDays={{days}}"
inputParameters:
- name: days
in: path
operations:
- name: get-expiring-certifications
method: GET
- type: http
namespace: jira
baseUri: "https://halliburton.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Retrieves the current GPS location and status of field equipment from the IoT platform for logistics and asset tracking.
naftiko: "0.5"
info:
label: "Field Equipment GPS Tracking"
description: "Retrieves the current GPS location and status of field equipment from the IoT platform for logistics and asset tracking."
tags:
- field-operations
- iot
- logistics
- asset-management
capability:
exposes:
- type: mcp
namespace: field-logistics
port: 8080
tools:
- name: get-equipment-location
description: "Look up current GPS location of field equipment. Returns latitude, longitude, and last update time."
inputParameters:
- name: equipment_id
in: body
type: string
description: "The field equipment identifier."
call: iot-platform.get-location
with:
equipment_id: "{{equipment_id}}"
outputParameters:
- name: latitude
type: number
mapping: "$.location.lat"
- name: longitude
type: number
mapping: "$.location.lng"
- name: last_update
type: string
mapping: "$.location.timestamp"
consumes:
- type: http
namespace: iot-platform
baseUri: "https://halliburton-iot.azure-devices.net/api/v1"
authentication:
type: bearer
token: "$secrets.iot_platform_token"
resources:
- name: locations
path: "/equipment/{{equipment_id}}/location"
inputParameters:
- name: equipment_id
in: path
operations:
- name: get-location
method: GET
When a Health, Safety, and Environment (HSE) incident is logged in ServiceNow from the field, notifies the HSE compliance team in Teams and creates a Jira CAPA task.
naftiko: "0.5"
info:
label: "Field HSE Incident Reporting and Escalation"
description: "When a Health, Safety, and Environment (HSE) incident is logged in ServiceNow from the field, notifies the HSE compliance team in Teams and creates a Jira CAPA task."
tags:
- hse
- safety
- servicenow
- jira
- microsoft-teams
- field-operations
- compliance
capability:
exposes:
- type: mcp
namespace: hse-ops
port: 8080
tools:
- name: escalate-hse-incident
description: "Given a ServiceNow HSE incident number, retrieve details, create a Jira CAPA task for root cause analysis, and notify the HSE compliance team in Teams."
inputParameters:
- name: incident_number
in: body
type: string
description: "The ServiceNow HSE incident number to escalate, e.g. INC0012345."
steps:
- name: get-incident
type: call
call: servicenow.get-hse-incident
with:
incident_number: "{{incident_number}}"
- name: create-capa
type: call
call: jira.create-capa
with:
project_key: "HSE"
summary: "CAPA: {{get-incident.short_description}}"
description: "ServiceNow: {{incident_number}}\nLocation: {{get-incident.location}}\nSeverity: {{get-incident.severity}}"
- name: notify-hse-team
type: call
call: msteams.notify-hse
with:
channel: "hse-compliance"
text: "HSE incident escalated: {{incident_number}} | {{get-incident.short_description}} | CAPA: {{create-capa.key}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://halliburton.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/{{incident_number}}"
inputParameters:
- name: incident_number
in: path
operations:
- name: get-hse-incident
method: GET
- type: http
namespace: jira
baseUri: "https://halliburton.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-capa
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/hse/channels/compliance/messages"
operations:
- name: notify-hse
method: POST
When a Datadog sensor alert fires for oil & gas field equipment, creates a ServiceNow P1 incident for field maintenance and notifies the operations team in Microsoft Teams.
naftiko: "0.5"
info:
label: "Field Operations Equipment Maintenance Alert"
description: "When a Datadog sensor alert fires for oil & gas field equipment, creates a ServiceNow P1 incident for field maintenance and notifies the operations team in Microsoft Teams."
tags:
- operations
- field-operations
- datadog
- servicenow
- microsoft-teams
- maintenance
capability:
exposes:
- type: mcp
namespace: field-ops
port: 8080
tools:
- name: handle-equipment-alert
description: "Given a Datadog monitor ID for equipment anomaly and asset ID, create a ServiceNow maintenance incident and notify the field operations Teams channel."
inputParameters:
- name: monitor_id
in: body
type: string
description: "The Datadog monitor ID that fired the equipment alert."
- name: asset_id
in: body
type: string
description: "The field equipment asset ID with the anomaly."
- name: location
in: body
type: string
description: "The field site location where the equipment is deployed."
steps:
- name: get-monitor
type: call
call: datadog.get-monitor
with:
monitor_id: "{{monitor_id}}"
- name: create-maintenance-incident
type: call
call: servicenow.create-maintenance-incident
with:
short_description: "Equipment alert: {{asset_id}} at {{location}}"
category: field_maintenance
impact: "1"
description: "Monitor: {{get-monitor.name}}\nAsset: {{asset_id}}\nLocation: {{location}}"
- name: notify-field-ops
type: call
call: msteams.post-field-alert
with:
channel: "field-operations"
text: "Equipment alert at {{location}} — Asset: {{asset_id}} | Incident: {{create-maintenance-incident.number}} | Monitor: {{get-monitor.name}}"
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: monitors
path: "/monitor/{{monitor_id}}"
inputParameters:
- name: monitor_id
in: path
operations:
- name: get-monitor
method: GET
- type: http
namespace: servicenow
baseUri: "https://halliburton.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-maintenance-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/field-ops/channels/general/messages"
operations:
- name: post-field-alert
method: POST
Retrieves the latest GitHub Actions workflow run status for a repository, returning conclusion, duration, and triggering commit.
naftiko: "0.5"
info:
label: "GitHub Actions Build Status Check"
description: "Retrieves the latest GitHub Actions workflow run status for a repository, returning conclusion, duration, and triggering commit."
tags:
- devops
- github
- github-actions
- ci-cd
capability:
exposes:
- type: mcp
namespace: devops-ci
port: 8080
tools:
- name: get-build-status
description: "Check latest GitHub Actions build status for a repository. Returns conclusion, duration, and commit SHA."
inputParameters:
- name: repo
in: body
type: string
description: "Repository in org/repo format."
call: github.get-latest-run
with:
repo: "{{repo}}"
outputParameters:
- name: conclusion
type: string
mapping: "$.workflow_runs[0].conclusion"
- name: head_sha
type: string
mapping: "$.workflow_runs[0].head_sha"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: workflow-runs
path: "/repos/{{repo}}/actions/runs?per_page=1"
inputParameters:
- name: repo
in: path
operations:
- name: get-latest-run
method: GET
On a GitHub Actions pipeline failure on a protected branch, creates a Jira bug, fires a Datadog deployment event, and notifies the engineering team in Microsoft Teams.
naftiko: "0.5"
info:
label: "GitHub CI/CD Pipeline Failure Response"
description: "On a GitHub Actions pipeline failure on a protected branch, creates a Jira bug, fires a Datadog deployment event, and notifies the engineering team in Microsoft Teams."
tags:
- devops
- cicd
- github
- jira
- datadog
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: devops-ops
port: 8080
tools:
- name: handle-pipeline-failure
description: "Given a GitHub Actions run ID, repo, and branch, open a Jira bug, create a Datadog event, and notify the engineering Teams channel."
inputParameters:
- name: run_id
in: body
type: string
description: "The GitHub Actions workflow run ID that failed."
- name: repo
in: body
type: string
description: "The GitHub repository full name, e.g. halliburton/platform."
- name: branch
in: body
type: string
description: "The branch on which the failure occurred."
- name: workflow_name
in: body
type: string
description: "The name of the failed GitHub Actions workflow."
steps:
- name: create-bug
type: call
call: jira.create-issue
with:
project_key: "ENG"
issuetype: "Bug"
summary: "[CI Failure] {{repo}} / {{branch}} — {{workflow_name}}"
description: "Run ID: {{run_id}}"
- name: create-dd-event
type: call
call: datadog.create-event
with:
title: "CI Failure: {{workflow_name}} on {{branch}}"
text: "Run {{run_id}} failed. Jira: {{create-bug.key}}"
alert_type: "error"
- name: notify-engineering
type: call
call: msteams.notify-engineering
with:
channel: "engineering-alerts"
text: "Pipeline failure: {{repo}} | Branch: {{branch}} | Jira: {{create-bug.key}}"
consumes:
- type: http
namespace: jira
baseUri: "https://halliburton.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- 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: events
path: "/events"
operations:
- name: create-event
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/engineering/channels/general/messages"
operations:
- name: notify-engineering
method: POST
Retrieves Dependabot security alerts for a repository, creates a Jira ticket for critical vulnerabilities, and notifies the security channel in Teams.
naftiko: "0.5"
info:
label: "GitHub Dependabot Alert Triage"
description: "Retrieves Dependabot security alerts for a repository, creates a Jira ticket for critical vulnerabilities, and notifies the security channel in Teams."
tags:
- security
- github
- jira
- microsoft-teams
- vulnerability-management
capability:
exposes:
- type: mcp
namespace: security-ops
port: 8080
tools:
- name: triage-dependabot-alerts
description: "Given a GitHub repository, retrieve Dependabot alerts, create Jira tickets for critical ones, and notify security team."
inputParameters:
- name: repo
in: body
type: string
description: "Repository in org/repo format."
steps:
- name: get-alerts
type: call
call: github.get-dependabot-alerts
with:
repo: "{{repo}}"
- name: create-ticket
type: call
call: jira.create-issue
with:
project_key: "SEC"
summary: "Dependabot alerts: {{get-alerts.critical_count}} critical in {{repo}}"
description: "Total alerts: {{get-alerts.total}} | Critical: {{get-alerts.critical_count}} | High: {{get-alerts.high_count}}"
- name: notify-team
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_security_channel_id"
text: "Dependabot Alert: {{repo}} | Critical: {{get-alerts.critical_count}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: dependabot
path: "/repos/{{repo}}/dependabot/alerts?severity=critical,high"
inputParameters:
- name: repo
in: path
operations:
- name: get-dependabot-alerts
method: GET
- type: http
namespace: jira
baseUri: "https://halliburton.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
When a GitHub pull request is opened, assigns reviewers based on CODEOWNERS, posts PR details to the engineering Teams channel.
naftiko: "0.5"
info:
label: "GitHub Pull Request Review Assignment"
description: "When a GitHub pull request is opened, assigns reviewers based on CODEOWNERS, posts PR details to the engineering Teams channel."
tags:
- devops
- github
- microsoft-teams
- code-review
capability:
exposes:
- type: mcp
namespace: devops-review
port: 8080
tools:
- name: assign-pr-reviewers
description: "Given a PR number and repo, assign reviewers and notify the engineering channel."
inputParameters:
- name: repo
in: body
type: string
description: "Repository in org/repo format."
- name: pr_number
in: body
type: number
description: "The pull request number."
steps:
- name: get-pr
type: call
call: github.get-pull-request
with:
repo: "{{repo}}"
pr_number: "{{pr_number}}"
- name: notify-team
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_engineering_channel_id"
text: "PR Review Needed: {{repo}}#{{pr_number}} | {{get-pr.title}} | Author: {{get-pr.user_login}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: pull-requests
path: "/repos/{{repo}}/pulls/{{pr_number}}"
inputParameters:
- name: repo
in: path
- name: pr_number
in: path
operations:
- name: get-pull-request
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Audits a GitHub repository for compliance with branch protection, required reviews, and code scanning, then creates a Jira ticket for findings.
naftiko: "0.5"
info:
label: "GitHub Repository Compliance Audit"
description: "Audits a GitHub repository for compliance with branch protection, required reviews, and code scanning, then creates a Jira ticket for findings."
tags:
- devops
- github
- jira
- security
- compliance
capability:
exposes:
- type: mcp
namespace: devops-compliance
port: 8080
tools:
- name: audit-repo-compliance
description: "Given a GitHub repository, check security settings and create a Jira ticket for non-compliant findings."
inputParameters:
- name: repo
in: body
type: string
description: "Repository in org/repo format."
steps:
- name: get-protection
type: call
call: github.get-branch-protection
with:
repo: "{{repo}}"
- name: create-ticket
type: call
call: jira.create-issue
with:
project_key: "SEC"
summary: "Repo compliance audit: {{repo}}"
description: "Branch protection: {{get-protection.enforce_admins}} | Required reviews: {{get-protection.required_reviewers}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: branch-protection
path: "/repos/{{repo}}/branches/main/protection"
inputParameters:
- name: repo
in: path
operations:
- name: get-branch-protection
method: GET
- type: http
namespace: jira
baseUri: "https://halliburton.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Audits Halliburton GitHub repositories for required security settings and files Jira compliance tasks for any violations found.
naftiko: "0.5"
info:
label: "GitHub Repository Security Policy Audit"
description: "Audits Halliburton GitHub repositories for required security settings and files Jira compliance tasks for any violations found."
tags:
- security
- devops
- github
- jira
- compliance
capability:
exposes:
- type: mcp
namespace: repo-governance
port: 8080
tools:
- name: enforce-repo-security-policy
description: "Given a GitHub repository and default branch name, check branch protection rules; if non-compliant, create a Jira security task for the engineering team."
inputParameters:
- name: repo
in: body
type: string
description: "The GitHub repository full name, e.g. halliburton/platform."
- name: default_branch
in: body
type: string
description: "The default branch to check, e.g. main."
steps:
- name: check-protection
type: call
call: github.get-branch-protection
with:
repo: "{{repo}}"
branch: "{{default_branch}}"
- name: create-compliance-task
type: call
call: jira.create-security-task
with:
project_key: "SEC"
summary: "Repo policy violation: {{repo}}"
description: "Branch {{default_branch}} missing required branch protection rules."
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: branch-protection
path: "/repos/{{repo}}/branches/{{branch}}/protection"
inputParameters:
- name: repo
in: path
- name: branch
in: path
operations:
- name: get-branch-protection
method: GET
- type: http
namespace: jira
baseUri: "https://halliburton.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-security-task
method: POST
Retrieves GitHub Advanced Security code scanning alerts and creates Jira security backlog issues for the application security team.
naftiko: "0.5"
info:
label: "GitHub Security Scanning Sync to Jira"
description: "Retrieves GitHub Advanced Security code scanning alerts and creates Jira security backlog issues for the application security team."
tags:
- security
- devops
- github
- jira
- code-scanning
capability:
exposes:
- type: mcp
namespace: appsec-ops
port: 8080
tools:
- name: sync-security-alerts-to-jira
description: "Given a GitHub repository and severity filter, fetch open code scanning alerts and create a Jira security issue summarizing findings for the security team."
inputParameters:
- name: repo
in: body
type: string
description: "The GitHub repository full name to scan, e.g. halliburton/platform."
- name: severity_filter
in: body
type: string
description: "Minimum severity to import: critical, high, or medium."
steps:
- name: get-alerts
type: call
call: github.list-code-scanning-alerts
with:
repo: "{{repo}}"
severity: "{{severity_filter}}"
- name: create-security-issue
type: call
call: jira.create-security-issue
with:
project_key: "SEC"
summary: "Security alerts in {{repo}}: {{get-alerts.total}} {{severity_filter}}+ findings"
description: "Top finding: {{get-alerts.top_rule}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: code-scanning-alerts
path: "/repos/{{repo}}/code-scanning/alerts"
inputParameters:
- name: repo
in: path
operations:
- name: list-code-scanning-alerts
method: GET
- type: http
namespace: jira
baseUri: "https://halliburton.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-security-issue
method: POST
Retrieves environmental permit status from a compliance database, returning permit type, expiration date, and renewal status for regulatory compliance.
naftiko: "0.5"
info:
label: "HSE Environmental Permit Tracking"
description: "Retrieves environmental permit status from a compliance database, returning permit type, expiration date, and renewal status for regulatory compliance."
tags:
- hse
- compliance
- environmental
- regulatory
capability:
exposes:
- type: mcp
namespace: hse-compliance
port: 8080
tools:
- name: get-permit-status
description: "Look up an environmental permit by ID. Returns permit type, expiration, and renewal status."
inputParameters:
- name: permit_id
in: body
type: string
description: "The environmental permit identifier."
call: compliance-db.get-permit
with:
permit_id: "{{permit_id}}"
outputParameters:
- name: permit_type
type: string
mapping: "$.permitType"
- name: expiration_date
type: string
mapping: "$.expirationDate"
- name: renewal_status
type: string
mapping: "$.renewalStatus"
consumes:
- type: http
namespace: compliance-db
baseUri: "https://halliburton-compliance.azurewebsites.net/api/v1"
authentication:
type: bearer
token: "$secrets.compliance_api_token"
resources:
- name: permits
path: "/permits/{{permit_id}}"
inputParameters:
- name: permit_id
in: path
operations:
- name: get-permit
method: GET
When a near-miss report is submitted via the field reporting app, creates a Jira ticket for HSE investigation and notifies the safety team.
naftiko: "0.5"
info:
label: "HSE Near-Miss Report to Jira"
description: "When a near-miss report is submitted via the field reporting app, creates a Jira ticket for HSE investigation and notifies the safety team."
tags:
- hse
- safety
- jira
- microsoft-teams
- field-operations
capability:
exposes:
- type: mcp
namespace: hse-reporting
port: 8080
tools:
- name: log-near-miss
description: "Given near-miss report details, create a Jira investigation ticket and notify the safety team."
inputParameters:
- name: location
in: body
type: string
description: "Location of the near-miss event."
- name: description
in: body
type: string
description: "Description of the near-miss event."
- name: reporter
in: body
type: string
description: "Name of the reporter."
steps:
- name: create-ticket
type: call
call: jira.create-issue
with:
project_key: "HSE"
summary: "Near-Miss: {{location}} — {{description}}"
description: "Reporter: {{reporter}} | Location: {{location}} | Details: {{description}}"
- name: notify-safety
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_hse_channel_id"
text: "Near-Miss Report: {{location}} | {{description}} | Reporter: {{reporter}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: jira
baseUri: "https://halliburton.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Retrieves a Jira project backlog summary grouped by priority, returning counts for critical, high, medium, and low items.
naftiko: "0.5"
info:
label: "Jira Backlog Priority Report"
description: "Retrieves a Jira project backlog summary grouped by priority, returning counts for critical, high, medium, and low items."
tags:
- devops
- jira
- project-management
capability:
exposes:
- type: mcp
namespace: devops-pm
port: 8080
tools:
- name: get-backlog-summary
description: "Get backlog summary by priority for a Jira project. Returns counts per priority level."
inputParameters:
- name: project_key
in: body
type: string
description: "The Jira project key."
call: jira.search-issues
with:
project_key: "{{project_key}}"
outputParameters:
- name: total
type: number
mapping: "$.total"
consumes:
- type: http
namespace: jira
baseUri: "https://halliburton.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: search
path: "/search?jql=project={{project_key}}+AND+status!=Done&groupBy=priority"
inputParameters:
- name: project_key
in: path
operations:
- name: search-issues
method: GET
Retrieves a Jira issue by key and returns summary, status, assignee, and priority for engineering project tracking.
naftiko: "0.5"
info:
label: "Jira Issue Lookup"
description: "Retrieves a Jira issue by key and returns summary, status, assignee, and priority for engineering project tracking."
tags:
- devops
- jira
- project-management
capability:
exposes:
- type: mcp
namespace: devops-pm
port: 8080
tools:
- name: get-issue
description: "Look up a Jira issue by key. Returns summary, status, assignee, and priority."
inputParameters:
- name: issue_key
in: body
type: string
description: "The Jira issue key, e.g. OPS-1234."
call: jira.get-issue
with:
issue_key: "{{issue_key}}"
outputParameters:
- name: summary
type: string
mapping: "$.fields.summary"
- name: status
type: string
mapping: "$.fields.status.name"
- name: assignee
type: string
mapping: "$.fields.assignee.displayName"
consumes:
- type: http
namespace: jira
baseUri: "https://halliburton.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: issues
path: "/issue/{{issue_key}}"
inputParameters:
- name: issue_key
in: path
operations:
- name: get-issue
method: GET
Compiles an engineering sprint planning digest from Jira and posts a prioritized summary to the engineering team in Microsoft Teams.
naftiko: "0.5"
info:
label: "Jira Sprint Planning Digest"
description: "Compiles an engineering sprint planning digest from Jira and posts a prioritized summary to the engineering team in Microsoft Teams."
tags:
- devops
- jira
- microsoft-teams
- sprint-planning
- reporting
capability:
exposes:
- type: mcp
namespace: devops-reporting
port: 8080
tools:
- name: digest-sprint-backlog
description: "Given a Jira project key and sprint name, retrieve open sprint issues and post a digest to the engineering Teams channel."
inputParameters:
- name: project_key
in: body
type: string
description: "The Jira project key, e.g. ENG."
- name: sprint_name
in: body
type: string
description: "The sprint name to filter, e.g. Sprint 42."
steps:
- name: get-sprint-issues
type: call
call: jira.search-issues
with:
jql: "project={{project_key}} AND sprint='{{sprint_name}}' AND status!=Done"
- name: post-digest
type: call
call: msteams.post-sprint-digest
with:
channel: "engineering-planning"
text: "Sprint digest {{sprint_name}} ({{project_key}}): {{get-sprint-issues.total}} open issues."
consumes:
- type: http
namespace: jira
baseUri: "https://halliburton.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: issues
path: "/search"
operations:
- name: search-issues
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/engineering/channels/planning/messages"
operations:
- name: post-sprint-digest
method: POST
Generates a sprint retrospective summary from Jira, including completed stories, carry-over items, and velocity, then posts to the engineering Teams channel.
naftiko: "0.5"
info:
label: "Jira Sprint Retrospective Digest"
description: "Generates a sprint retrospective summary from Jira, including completed stories, carry-over items, and velocity, then posts to the engineering Teams channel."
tags:
- devops
- jira
- microsoft-teams
- agile
capability:
exposes:
- type: mcp
namespace: devops-agile
port: 8080
tools:
- name: generate-retro-digest
description: "Given a Jira board ID and sprint ID, generate a retrospective summary and post to Teams."
inputParameters:
- name: board_id
in: body
type: string
description: "The Jira board ID."
- name: sprint_id
in: body
type: string
description: "The Jira sprint ID."
steps:
- name: get-sprint-report
type: call
call: jira.get-sprint-report
with:
board_id: "{{board_id}}"
sprint_id: "{{sprint_id}}"
- name: post-digest
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_engineering_channel_id"
text: "Sprint Retro: {{get-sprint-report.sprint_name}} | Completed: {{get-sprint-report.completed_count}} | Carried Over: {{get-sprint-report.incomplete_count}} | Velocity: {{get-sprint-report.velocity}}"
consumes:
- type: http
namespace: jira
baseUri: "https://halliburton.atlassian.net/rest/agile/1.0"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: sprint-reports
path: "/board/{{board_id}}/sprint/{{sprint_id}}/report"
inputParameters:
- name: board_id
in: path
- name: sprint_id
in: path
operations:
- name: get-sprint-report
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Retrieves LinkedIn Recruiter campaign metrics including applicant count, views, and click-through rate for a job posting.
naftiko: "0.5"
info:
label: "LinkedIn Talent Acquisition Campaign Report"
description: "Retrieves LinkedIn Recruiter campaign metrics including applicant count, views, and click-through rate for a job posting."
tags:
- hr
- recruiting
- linkedin
- analytics
capability:
exposes:
- type: mcp
namespace: hr-recruiting
port: 8080
tools:
- name: get-campaign-metrics
description: "Get LinkedIn recruiting campaign metrics for a job posting. Returns views, applicants, and CTR."
inputParameters:
- name: job_posting_id
in: body
type: string
description: "The LinkedIn job posting ID."
call: linkedin.get-job-analytics
with:
posting_id: "{{job_posting_id}}"
outputParameters:
- name: views
type: number
mapping: "$.views"
- name: applicants
type: number
mapping: "$.applicants"
consumes:
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: job-analytics
path: "/jobPostings/{{posting_id}}/analytics"
inputParameters:
- name: posting_id
in: path
operations:
- name: get-job-analytics
method: GET
Retrieves active Halliburton job postings from LinkedIn and posts a weekly talent acquisition pipeline summary to the HR team in Microsoft Teams.
naftiko: "0.5"
info:
label: "LinkedIn Talent Pipeline Digest"
description: "Retrieves active Halliburton job postings from LinkedIn and posts a weekly talent acquisition pipeline summary to the HR team in Microsoft Teams."
tags:
- hr
- recruiting
- linkedin
- microsoft-teams
- reporting
capability:
exposes:
- type: mcp
namespace: talent-reporting
port: 8080
tools:
- name: digest-talent-pipeline
description: "Fetch active LinkedIn job postings and applicant counts for Halliburton and post a weekly summary to the HR talent Teams channel."
inputParameters:
- name: organization_id
in: body
type: string
description: "The LinkedIn organization URN for Halliburton."
steps:
- name: get-postings
type: call
call: linkedin.list-job-postings
with:
organization_id: "{{organization_id}}"
- name: post-digest
type: call
call: msteams.post-talent-digest
with:
channel: "hr-talent-acquisition"
text: "Weekly talent pipeline: {{get-postings.total}} active postings, {{get-postings.applicant_count}} applicants."
consumes:
- 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: list-job-postings
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/hr/channels/talent/messages"
operations:
- name: post-talent-digest
method: POST
Posts a safety alert broadcast message to multiple Microsoft Teams channels for field operations, HSE, and management notification.
naftiko: "0.5"
info:
label: "Microsoft Teams Field Safety Broadcast"
description: "Posts a safety alert broadcast message to multiple Microsoft Teams channels for field operations, HSE, and management notification."
tags:
- hse
- safety
- microsoft-teams
- field-operations
- notifications
capability:
exposes:
- type: mcp
namespace: safety-comms
port: 8080
tools:
- name: broadcast-safety-alert
description: "Post a safety alert to field operations and HSE Teams channels simultaneously."
inputParameters:
- name: alert_title
in: body
type: string
description: "Title of the safety alert."
- name: alert_details
in: body
type: string
description: "Detailed safety alert message."
steps:
- name: notify-field-ops
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_field_ops_channel_id"
text: "SAFETY ALERT: {{alert_title}} | {{alert_details}}"
- name: notify-hse
type: call
call: msteams.post-hse-message
with:
channel_id: "$secrets.teams_hse_channel_id"
text: "SAFETY ALERT: {{alert_title}} | {{alert_details}}"
consumes:
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: field-messages
path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
- name: hse-messages
path: "/teams/$secrets.teams_hse_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-hse-message
method: POST
Lists all users assigned to a critical Okta application and posts a quarterly access review to the security team in Microsoft Teams.
naftiko: "0.5"
info:
label: "Okta Application Access Quarterly Review"
description: "Lists all users assigned to a critical Okta application and posts a quarterly access review to the security team in Microsoft Teams."
tags:
- identity
- security
- okta
- microsoft-teams
- access-review
- compliance
capability:
exposes:
- type: mcp
namespace: access-review
port: 8080
tools:
- name: run-app-access-review
description: "Given an Okta application ID and name, list all assigned users and post a quarterly access review summary to the security Teams channel."
inputParameters:
- name: app_id
in: body
type: string
description: "The Okta application ID to review."
- name: app_name
in: body
type: string
description: "Human-readable application name for the report."
steps:
- name: list-app-users
type: call
call: okta.list-app-users
with:
app_id: "{{app_id}}"
- name: post-review
type: call
call: msteams.post-access-review
with:
channel: "security-access-reviews"
text: "Quarterly access review for {{app_name}}: {{list-app-users.total}} users assigned. Please certify by end of quarter."
consumes:
- type: http
namespace: okta
baseUri: "https://halliburton.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: app-users
path: "/apps/{{app_id}}/users"
inputParameters:
- name: app_id
in: path
operations:
- name: list-app-users
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/security/channels/reviews/messages"
operations:
- name: post-access-review
method: POST
Retrieves all members of an Okta group and cross-references with Workday active employees to flag stale accounts for quarterly access review.
naftiko: "0.5"
info:
label: "Okta Group Access Review"
description: "Retrieves all members of an Okta group and cross-references with Workday active employees to flag stale accounts for quarterly access review."
tags:
- security
- identity
- okta
- workday
- compliance
capability:
exposes:
- type: mcp
namespace: identity-governance
port: 8080
tools:
- name: review-group-access
description: "Given an Okta group ID, retrieve members and cross-check against Workday active employees to identify stale accounts."
inputParameters:
- name: group_id
in: body
type: string
description: "The Okta group ID."
steps:
- name: get-group-members
type: call
call: okta.get-group-members
with:
group_id: "{{group_id}}"
- name: get-active-employees
type: call
call: workday.get-active-workers
with:
as_of_date: "today"
consumes:
- type: http
namespace: okta
baseUri: "https://halliburton.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_token"
resources:
- name: groups
path: "/groups/{{group_id}}/users"
inputParameters:
- name: group_id
in: path
operations:
- name: get-group-members
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?activeAsOf={{as_of_date}}"
inputParameters:
- name: as_of_date
in: path
operations:
- name: get-active-workers
method: GET
Audits Okta for users without MFA enrollment and creates a ServiceNow compliance incident when non-compliance exceeds the threshold.
naftiko: "0.5"
info:
label: "Okta MFA Compliance Audit"
description: "Audits Okta for users without MFA enrollment and creates a ServiceNow compliance incident when non-compliance exceeds the threshold."
tags:
- identity
- security
- okta
- servicenow
- compliance
capability:
exposes:
- type: mcp
namespace: security-compliance
port: 8080
tools:
- name: audit-mfa-compliance
description: "List all active Okta users, identify those without MFA enrolled, and open a ServiceNow compliance incident when the non-compliance rate exceeds the threshold."
inputParameters:
- name: compliance_threshold
in: body
type: number
description: "Allowed percentage of non-MFA users before opening an incident."
steps:
- name: list-users
type: call
call: okta.list-active-users
- name: create-compliance-incident
type: call
call: servicenow.create-compliance-incident
with:
short_description: "Okta MFA non-compliance exceeds {{compliance_threshold}}%"
category: security_compliance
consumes:
- type: http
namespace: okta
baseUri: "https://halliburton.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: users
path: "/users"
operations:
- name: list-active-users
method: GET
- type: http
namespace: servicenow
baseUri: "https://halliburton.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-compliance-incident
method: POST
Triggers an Okta password reset for a user account and sends a confirmation notification via Microsoft Teams.
naftiko: "0.5"
info:
label: "Okta Password Reset Request"
description: "Triggers an Okta password reset for a user account and sends a confirmation notification via Microsoft Teams."
tags:
- security
- identity
- okta
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: identity-ops
port: 8080
tools:
- name: reset-password
description: "Trigger an Okta password reset for a user and notify them via Teams."
inputParameters:
- name: user_login
in: body
type: string
description: "The Okta user login email."
steps:
- name: trigger-reset
type: call
call: okta.reset-password
with:
login: "{{user_login}}"
- name: notify-user
type: call
call: msteams.send-message
with:
recipient_upn: "{{user_login}}"
text: "Your Okta password reset has been initiated. Please check your email for reset instructions."
consumes:
- type: http
namespace: okta
baseUri: "https://halliburton.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_token"
resources:
- name: users
path: "/users/{{login}}/lifecycle/reset_password"
inputParameters:
- name: login
in: path
operations:
- name: reset-password
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Retrieves an Okta user profile by login email, returning account status, last login time, and MFA enrollment state.
naftiko: "0.5"
info:
label: "Okta User Status Check"
description: "Retrieves an Okta user profile by login email, returning account status, last login time, and MFA enrollment state."
tags:
- security
- identity
- okta
capability:
exposes:
- type: mcp
namespace: identity-security
port: 8080
tools:
- name: get-user-status
description: "Look up an Okta user by login. Returns account status, last login, and MFA state."
inputParameters:
- name: user_login
in: body
type: string
description: "The Okta user login email."
call: okta.get-user
with:
login: "{{user_login}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: last_login
type: string
mapping: "$.lastLogin"
consumes:
- type: http
namespace: okta
baseUri: "https://halliburton.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_token"
resources:
- name: users
path: "/users/{{login}}"
inputParameters:
- name: login
in: path
operations:
- name: get-user
method: GET
Retrieves the current on-call engineer from PagerDuty for a given schedule and returns their contact details.
naftiko: "0.5"
info:
label: "PagerDuty On-Call Engineer Lookup"
description: "Retrieves the current on-call engineer from PagerDuty for a given schedule and returns their contact details."
tags:
- itsm
- pagerduty
- on-call
- operations
capability:
exposes:
- type: mcp
namespace: oncall-lookup
port: 8080
tools:
- name: get-oncall-engineer
description: "Given a PagerDuty schedule ID, return the current on-call engineer name, email, and escalation policy. Use to identify the escalation target for production incidents."
inputParameters:
- name: schedule_id
in: body
type: string
description: "The PagerDuty schedule ID to query."
call: pagerduty.get-oncall
with:
schedule_id: "{{schedule_id}}"
outputParameters:
- name: user_name
type: string
mapping: "$.oncalls[0].user.summary"
- name: user_email
type: string
mapping: "$.oncalls[0].user.email"
- name: escalation_policy
type: string
mapping: "$.oncalls[0].escalation_policy.summary"
consumes:
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.pagerduty_token"
placement: header
resources:
- name: oncalls
path: "/oncalls"
operations:
- name: get-oncall
method: GET
Retrieves the current on-call engineer for a PagerDuty escalation policy, returning name, email, and shift end time.
naftiko: "0.5"
info:
label: "PagerDuty On-Call Schedule Lookup"
description: "Retrieves the current on-call engineer for a PagerDuty escalation policy, returning name, email, and shift end time."
tags:
- it-ops
- pagerduty
- incident-management
capability:
exposes:
- type: mcp
namespace: incident-response
port: 8080
tools:
- name: get-on-call
description: "Look up current on-call engineer for a PagerDuty policy. Returns name, email, and shift end."
inputParameters:
- name: policy_id
in: body
type: string
description: "The PagerDuty escalation policy ID."
call: pagerduty.get-oncall
with:
policy_id: "{{policy_id}}"
outputParameters:
- name: name
type: string
mapping: "$.oncalls[0].user.name"
- name: email
type: string
mapping: "$.oncalls[0].user.email"
consumes:
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: oncalls
path: "/oncalls?escalation_policy_ids[]={{policy_id}}"
inputParameters:
- name: policy_id
in: path
operations:
- name: get-oncall
method: GET
Checks the latest refresh status of a Power BI dataset and returns completion time, status, and any error messages.
naftiko: "0.5"
info:
label: "Power BI Dataset Refresh Status"
description: "Checks the latest refresh status of a Power BI dataset and returns completion time, status, and any error messages."
tags:
- analytics
- power-bi
- monitoring
capability:
exposes:
- type: mcp
namespace: analytics-ops
port: 8080
tools:
- name: get-dataset-refresh-status
description: "Check the latest Power BI dataset refresh status. Returns completion time and status."
inputParameters:
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID."
- name: group_id
in: body
type: string
description: "The Power BI workspace ID."
call: powerbi.get-refresh-history
with:
group_id: "{{group_id}}"
dataset_id: "{{dataset_id}}"
outputParameters:
- name: status
type: string
mapping: "$.value[0].status"
- name: end_time
type: string
mapping: "$.value[0].endTime"
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: refreshes
path: "/groups/{{group_id}}/datasets/{{dataset_id}}/refreshes?$top=1"
inputParameters:
- name: group_id
in: path
- name: dataset_id
in: path
operations:
- name: get-refresh-history
method: GET
Triggers a refresh of the drilling performance Power BI dataset and notifies the operations team when complete.
naftiko: "0.5"
info:
label: "Power BI Drilling Performance Dashboard Refresh"
description: "Triggers a refresh of the drilling performance Power BI dataset and notifies the operations team when complete."
tags:
- analytics
- power-bi
- drilling
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: analytics-ops
port: 8080
tools:
- name: refresh-drilling-dashboard
description: "Trigger a Power BI dataset refresh for drilling performance and notify ops team."
inputParameters:
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID."
steps:
- name: trigger-refresh
type: call
call: powerbi.refresh-dataset
with:
dataset_id: "{{dataset_id}}"
- name: notify-ops
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_drilling_ops_channel_id"
text: "Drilling Performance Dashboard refresh triggered for dataset {{dataset_id}}."
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: refreshes
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Triggers a Power BI dataset refresh for the operational performance dashboard and notifies the operations analytics team in Microsoft Teams.
naftiko: "0.5"
info:
label: "Power BI Operations Dashboard Refresh"
description: "Triggers a Power BI dataset refresh for the operational performance dashboard and notifies the operations analytics team in Microsoft Teams."
tags:
- operations
- data-analytics
- power-bi
- microsoft-teams
- reporting
capability:
exposes:
- type: mcp
namespace: ops-reporting
port: 8080
tools:
- name: refresh-ops-dashboard
description: "Given a Power BI workspace and dataset ID for the operations dashboard, trigger a refresh and notify the operations analytics team in Teams."
inputParameters:
- name: workspace_id
in: body
type: string
description: "The Power BI workspace GUID containing the operations dashboard."
- name: dataset_id
in: body
type: string
description: "The Power BI dataset GUID to refresh."
steps:
- name: trigger-refresh
type: call
call: powerbi.refresh-dataset
with:
workspace_id: "{{workspace_id}}"
dataset_id: "{{dataset_id}}"
- name: notify-ops-analytics
type: call
call: msteams.notify-ops-analytics
with:
channel: "operations-analytics"
text: "Operations dashboard dataset {{dataset_id}} refresh triggered."
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: workspace_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/operations/channels/analytics/messages"
operations:
- name: notify-ops-analytics
method: POST
Compiles a weekly Salesforce account health digest for energy sector accounts and posts it to the commercial team in Microsoft Teams.
naftiko: "0.5"
info:
label: "Salesforce Account Health Digest"
description: "Compiles a weekly Salesforce account health digest for energy sector accounts and posts it to the commercial team in Microsoft Teams."
tags:
- sales
- crm
- salesforce
- microsoft-teams
- reporting
capability:
exposes:
- type: mcp
namespace: commercial-reporting
port: 8080
tools:
- name: digest-account-health
description: "Retrieve open opportunities and recent activity for energy sector accounts from Salesforce and post a weekly account health digest to the commercial Teams channel."
inputParameters:
- name: account_segment
in: body
type: string
description: "The account segment to report on, e.g. Major Operators, National Oil Companies."
steps:
- name: get-opportunities
type: call
call: salesforce.query-opportunities
with:
segment: "{{account_segment}}"
- name: post-digest
type: call
call: msteams.post-account-digest
with:
channel: "commercial-ops"
text: "Weekly account health ({{account_segment}}): {{get-opportunities.total}} open deals, ${{get-opportunities.pipeline_value}} pipeline."
consumes:
- type: http
namespace: salesforce
baseUri: "https://halliburton.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/query"
operations:
- name: query-opportunities
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/commercial/channels/general/messages"
operations:
- name: post-account-digest
method: POST
Retrieves a Salesforce contact by email, returning full name, title, account name, and phone number.
naftiko: "0.5"
info:
label: "Salesforce Contact Lookup"
description: "Retrieves a Salesforce contact by email, returning full name, title, account name, and phone number."
tags:
- sales
- salesforce
- crm
capability:
exposes:
- type: mcp
namespace: crm-contacts
port: 8080
tools:
- name: get-contact-by-email
description: "Look up a Salesforce contact by email. Returns name, title, and account."
inputParameters:
- name: email
in: body
type: string
description: "The contact email address."
call: salesforce.query-contact
with:
email: "{{email}}"
outputParameters:
- name: full_name
type: string
mapping: "$.records[0].Name"
- name: title
type: string
mapping: "$.records[0].Title"
consumes:
- type: http
namespace: salesforce
baseUri: "https://halliburton.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: query
path: "/query?q=SELECT+Name,Title,Phone,Account.Name+FROM+Contact+WHERE+Email='{{email}}'"
inputParameters:
- name: email
in: path
operations:
- name: query-contact
method: GET
Retrieves a Salesforce opportunity by ID and returns stage, amount, close date, and account name for well services sales tracking.
naftiko: "0.5"
info:
label: "Salesforce Opportunity Lookup"
description: "Retrieves a Salesforce opportunity by ID and returns stage, amount, close date, and account name for well services sales tracking."
tags:
- sales
- salesforce
- crm
capability:
exposes:
- type: mcp
namespace: crm-sales
port: 8080
tools:
- name: get-opportunity
description: "Look up a Salesforce opportunity by ID. Returns stage, amount, close date, and account name."
inputParameters:
- name: opportunity_id
in: body
type: string
description: "The Salesforce opportunity ID."
call: salesforce.get-opportunity
with:
opportunity_id: "{{opportunity_id}}"
outputParameters:
- name: stage
type: string
mapping: "$.StageName"
- name: amount
type: number
mapping: "$.Amount"
- name: close_date
type: string
mapping: "$.CloseDate"
consumes:
- type: http
namespace: salesforce
baseUri: "https://halliburton.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity/{{opportunity_id}}"
inputParameters:
- name: opportunity_id
in: path
operations:
- name: get-opportunity
method: GET
Extracts quarterly sales pipeline data from Salesforce and pushes to Power BI for executive reporting.
naftiko: "0.5"
info:
label: "Salesforce Pipeline Report to Power BI"
description: "Extracts quarterly sales pipeline data from Salesforce and pushes to Power BI for executive reporting."
tags:
- sales
- salesforce
- power-bi
- analytics
capability:
exposes:
- type: mcp
namespace: sales-analytics
port: 8080
tools:
- name: sync-pipeline-to-powerbi
description: "Extract pipeline data from Salesforce and push to Power BI for dashboards."
inputParameters:
- name: fiscal_quarter
in: body
type: string
description: "Fiscal quarter, e.g. 2026-Q1."
steps:
- name: get-pipeline
type: call
call: salesforce.query-pipeline
with:
quarter: "{{fiscal_quarter}}"
- name: push-to-powerbi
type: call
call: powerbi.push-rows
with:
dataset_id: "$secrets.powerbi_pipeline_dataset_id"
table_name: "PipelineData"
rows: "{{get-pipeline.records}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://halliburton.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: query
path: "/query?q=SELECT+Name,Amount,StageName,CloseDate+FROM+Opportunity+WHERE+FiscalQuarter='{{quarter}}'"
inputParameters:
- name: quarter
in: path
operations:
- name: query-pipeline
method: GET
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: push-datasets
path: "/datasets/{{dataset_id}}/tables/{{table_name}}/rows"
inputParameters:
- name: dataset_id
in: path
- name: table_name
in: path
operations:
- name: push-rows
method: POST
When a Salesforce well services opportunity advances to Closed-Won, creates a Jira project management epic and notifies the delivery team in Teams.
naftiko: "0.5"
info:
label: "Salesforce Well Services Opportunity Sync to Jira"
description: "When a Salesforce well services opportunity advances to Closed-Won, creates a Jira project management epic and notifies the delivery team in Teams."
tags:
- sales
- crm
- salesforce
- jira
- microsoft-teams
- project-delivery
capability:
exposes:
- type: mcp
namespace: sales-ops
port: 8080
tools:
- name: sync-opportunity-to-jira
description: "Given a Salesforce opportunity ID at Closed-Won, create a Jira delivery epic for the well services engagement and notify the project delivery team in Teams."
inputParameters:
- name: opportunity_id
in: body
type: string
description: "The Salesforce Opportunity record ID at Closed-Won."
steps:
- name: get-opportunity
type: call
call: salesforce.get-opportunity
with:
opportunity_id: "{{opportunity_id}}"
- name: create-delivery-epic
type: call
call: jira.create-epic
with:
project_key: "DELIVERY"
summary: "Well Services: {{get-opportunity.account_name}}"
description: "Salesforce Opp: {{opportunity_id}} | Value: {{get-opportunity.amount}}"
- name: notify-delivery
type: call
call: msteams.notify-delivery
with:
channel: "project-delivery"
text: "New well services engagement for {{get-opportunity.account_name}}. Delivery epic: {{create-delivery-epic.key}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://halliburton.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity/{{opportunity_id}}"
inputParameters:
- name: opportunity_id
in: path
operations:
- name: get-opportunity
method: GET
- type: http
namespace: jira
baseUri: "https://halliburton.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-epic
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/delivery/channels/general/messages"
operations:
- name: notify-delivery
method: POST
Given a Salesforce opportunity for well services, generates a quote in SAP and updates the opportunity with the quote reference.
naftiko: "0.5"
info:
label: "Salesforce Well Services Quote Generation"
description: "Given a Salesforce opportunity for well services, generates a quote in SAP and updates the opportunity with the quote reference."
tags:
- sales
- salesforce
- sap
- well-services
- quoting
capability:
exposes:
- type: mcp
namespace: sales-erp
port: 8080
tools:
- name: generate-well-services-quote
description: "Given a Salesforce opportunity ID, create a SAP sales quote for well services and link it back to Salesforce."
inputParameters:
- name: opportunity_id
in: body
type: string
description: "The Salesforce opportunity ID."
steps:
- name: get-opportunity
type: call
call: salesforce.get-opportunity
with:
opportunity_id: "{{opportunity_id}}"
- name: create-quote
type: call
call: sap.create-sales-quote
with:
customer_id: "{{get-opportunity.account_sap_id}}"
amount: "{{get-opportunity.amount}}"
service_type: "{{get-opportunity.service_type}}"
- name: update-opportunity
type: call
call: salesforce.update-opportunity
with:
opportunity_id: "{{opportunity_id}}"
sap_quote_number: "{{create-quote.document_number}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://halliburton.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity/{{opportunity_id}}"
inputParameters:
- name: opportunity_id
in: path
operations:
- name: get-opportunity
method: GET
- name: update-opportunity
method: PATCH
- type: http
namespace: sap
baseUri: "https://halliburton-s4.sap.com/sap/opu/odata/sap/SD_SLS_QUOTATION_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: quotations
path: "/A_SalesQuotation"
operations:
- name: create-sales-quote
method: POST
Checks SAP Ariba for supplier contracts expiring within a specified window and creates ServiceNow tasks for procurement renewal review.
naftiko: "0.5"
info:
label: "SAP Ariba Contract Expiry Monitor"
description: "Checks SAP Ariba for supplier contracts expiring within a specified window and creates ServiceNow tasks for procurement renewal review."
tags:
- procurement
- sap-ariba
- servicenow
- contract-management
capability:
exposes:
- type: mcp
namespace: procurement-contracts
port: 8080
tools:
- name: monitor-expiring-contracts
description: "Query SAP Ariba for contracts expiring soon and create ServiceNow review tasks."
inputParameters:
- name: days_until_expiry
in: body
type: number
description: "Days to look ahead for expiring contracts."
steps:
- name: get-expiring
type: call
call: ariba.get-expiring-contracts
with:
days: "{{days_until_expiry}}"
- name: create-task
type: call
call: servicenow.create-task
with:
short_description: "Contract renewal: {{get-expiring.contract_count}} contracts expiring within {{days_until_expiry}} days"
category: "procurement"
consumes:
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/procurement-reporting/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: contracts
path: "/contracts?expiringWithinDays={{days}}"
inputParameters:
- name: days
in: path
operations:
- name: get-expiring-contracts
method: GET
- type: http
namespace: servicenow
baseUri: "https://halliburton.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/sc_task"
operations:
- name: create-task
method: POST
Retrieves a pending SAP Ariba invoice, validates it against the SAP purchase order, and creates a ServiceNow approval task for the finance team.
naftiko: "0.5"
info:
label: "SAP Ariba Invoice Approval Routing"
description: "Retrieves a pending SAP Ariba invoice, validates it against the SAP purchase order, and creates a ServiceNow approval task for the finance team."
tags:
- finance
- procurement
- sap-ariba
- sap
- servicenow
- approval
capability:
exposes:
- type: mcp
namespace: invoice-ops
port: 8080
tools:
- name: route-invoice-approval
description: "Given an Ariba invoice ID and matching SAP PO number, validate the invoice against the PO and create a ServiceNow approval task for the procurement finance team."
inputParameters:
- name: invoice_id
in: body
type: string
description: "The SAP Ariba invoice document ID."
- name: po_number
in: body
type: string
description: "The related SAP purchase order number."
steps:
- name: get-invoice
type: call
call: ariba.get-invoice
with:
invoice_id: "{{invoice_id}}"
- name: get-po
type: call
call: sap.get-po-header
with:
po_number: "{{po_number}}"
- name: create-approval
type: call
call: servicenow.create-approval-task
with:
short_description: "Invoice approval: {{invoice_id}} against PO {{po_number}}"
amount: "{{get-invoice.total_amount}}"
vendor: "{{get-invoice.vendor_name}}"
po_status: "{{get-po.status}}"
consumes:
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/invoice/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: invoices
path: "/invoices/{{invoice_id}}"
inputParameters:
- name: invoice_id
in: path
operations:
- name: get-invoice
method: GET
- type: http
namespace: sap
baseUri: "https://halliburton-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-header
method: GET
- type: http
namespace: servicenow
baseUri: "https://halliburton.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: approval-tasks
path: "/table/sysapproval_approver"
operations:
- name: create-approval-task
method: POST
Reconciles SAP Ariba invoices against purchase orders and goods receipts, flagging discrepancies for finance review via Teams.
naftiko: "0.5"
info:
label: "SAP Ariba Invoice Reconciliation"
description: "Reconciles SAP Ariba invoices against purchase orders and goods receipts, flagging discrepancies for finance review via Teams."
tags:
- procurement
- sap-ariba
- microsoft-teams
- accounts-payable
capability:
exposes:
- type: mcp
namespace: procurement-ops
port: 8080
tools:
- name: reconcile-invoices
description: "Reconcile Ariba invoices against POs and GRs, flag discrepancies."
inputParameters:
- name: invoice_id
in: body
type: string
description: "The Ariba invoice ID."
steps:
- name: get-invoice
type: call
call: ariba.get-invoice
with:
invoice_id: "{{invoice_id}}"
- name: check-match
type: call
call: sap.check-three-way-match
with:
po_number: "{{get-invoice.po_number}}"
- name: notify-finance
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_finance_channel_id"
text: "Invoice {{invoice_id}} reconciliation: {{check-match.status}}"
consumes:
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/procurement-reporting/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: invoices
path: "/invoices/{{invoice_id}}"
inputParameters:
- name: invoice_id
in: path
operations:
- name: get-invoice
method: GET
- type: http
namespace: sap
baseUri: "https://halliburton-s4.sap.com/sap/opu/odata/sap/API_SUPPLIERINVOICE_PROCESS_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: match
path: "/A_SupplierInvoice('{{po_number}}')/to_Match"
inputParameters:
- name: po_number
in: path
operations:
- name: check-three-way-match
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Retrieves a SAP Ariba purchase requisition by ID and returns approval status, requester, total amount, and line items.
naftiko: "0.5"
info:
label: "SAP Ariba Purchase Requisition Approval"
description: "Retrieves a SAP Ariba purchase requisition by ID and returns approval status, requester, total amount, and line items."
tags:
- procurement
- sap-ariba
- approval
capability:
exposes:
- type: mcp
namespace: procurement
port: 8080
tools:
- name: get-requisition-status
description: "Look up a SAP Ariba purchase requisition. Returns approval status, requester, and total amount."
inputParameters:
- name: requisition_id
in: body
type: string
description: "The Ariba requisition ID."
call: ariba.get-requisition
with:
requisition_id: "{{requisition_id}}"
outputParameters:
- name: status
type: string
mapping: "$.approvalStatus"
- name: requester
type: string
mapping: "$.requester.name"
- name: total_amount
type: number
mapping: "$.totalAmount"
consumes:
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/procurement-reporting/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: requisitions
path: "/requisitions/{{requisition_id}}"
inputParameters:
- name: requisition_id
in: path
operations:
- name: get-requisition
method: GET
Retrieves the status of a SAP Ariba sourcing event, returning bid count, event stage, and deadline.
naftiko: "0.5"
info:
label: "SAP Ariba Sourcing Event Status"
description: "Retrieves the status of a SAP Ariba sourcing event, returning bid count, event stage, and deadline."
tags:
- procurement
- sap-ariba
- sourcing
capability:
exposes:
- type: mcp
namespace: procurement-sourcing
port: 8080
tools:
- name: get-sourcing-event
description: "Look up a SAP Ariba sourcing event. Returns bid count, stage, and deadline."
inputParameters:
- name: event_id
in: body
type: string
description: "The Ariba sourcing event ID."
call: ariba.get-sourcing-event
with:
event_id: "{{event_id}}"
outputParameters:
- name: stage
type: string
mapping: "$.status"
- name: bid_count
type: number
mapping: "$.bidCount"
consumes:
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/sourcing-reporting/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: events
path: "/sourcingEvents/{{event_id}}"
inputParameters:
- name: event_id
in: path
operations:
- name: get-sourcing-event
method: GET
Registers a new supplier in SAP Ariba for oilfield services, creates a ServiceNow vendor request ticket, and notifies the procurement team in Teams.
naftiko: "0.5"
info:
label: "SAP Ariba Supplier Onboarding"
description: "Registers a new supplier in SAP Ariba for oilfield services, creates a ServiceNow vendor request ticket, and notifies the procurement team in Teams."
tags:
- procurement
- sap-ariba
- servicenow
- microsoft-teams
- supplier-management
capability:
exposes:
- type: mcp
namespace: supplier-onboarding
port: 8080
tools:
- name: onboard-supplier
description: "Given a supplier name, contact email, and spend category, register in SAP Ariba, create a ServiceNow vendor request, and notify the procurement team in Teams."
inputParameters:
- name: supplier_name
in: body
type: string
description: "Legal name of the new supplier."
- name: supplier_email
in: body
type: string
description: "Primary contact email for the supplier."
- name: spend_category
in: body
type: string
description: "Ariba spend category, e.g. Oilfield Services, Drilling Equipment, Chemicals."
steps:
- name: register-supplier
type: call
call: ariba.create-supplier
with:
name: "{{supplier_name}}"
email: "{{supplier_email}}"
category: "{{spend_category}}"
- name: create-vendor-ticket
type: call
call: servicenow.create-vendor-request
with:
short_description: "Supplier onboarding: {{supplier_name}}"
supplier_id: "{{register-supplier.supplier_id}}"
- name: notify-procurement
type: call
call: msteams.notify-procurement
with:
channel: "procurement-ops"
text: "Supplier {{supplier_name}} registered (ID: {{register-supplier.supplier_id}}). SN ticket: {{create-vendor-ticket.number}}"
consumes:
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/supplier/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: suppliers
path: "/suppliers"
operations:
- name: create-supplier
method: POST
- type: http
namespace: servicenow
baseUri: "https://halliburton.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: vendor-requests
path: "/table/u_vendor_request"
operations:
- name: create-vendor-request
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/procurement/channels/general/messages"
operations:
- name: notify-procurement
method: POST
Retrieves submitted SAP Concur expense reports for a period, flags policy violations using Anthropic, and creates ServiceNow audit tasks for non-compliant items.
naftiko: "0.5"
info:
label: "SAP Concur Expense Report Audit"
description: "Retrieves submitted SAP Concur expense reports for a period, flags policy violations using Anthropic, and creates ServiceNow audit tasks for non-compliant items."
tags:
- finance
- expense-management
- sap-concur
- anthropic
- servicenow
- audit
capability:
exposes:
- type: mcp
namespace: expense-audit
port: 8080
tools:
- name: audit-expense-reports
description: "Given a date range, retrieve SAP Concur expense reports, analyze them with Anthropic for policy violations, and create ServiceNow audit tasks for non-compliant reports."
inputParameters:
- name: start_date
in: body
type: string
description: "Start of the expense period in YYYY-MM-DD format."
- name: end_date
in: body
type: string
description: "End of the expense period in YYYY-MM-DD format."
steps:
- name: get-reports
type: call
call: concur.list-expense-reports
with:
startDate: "{{start_date}}"
endDate: "{{end_date}}"
- name: flag-violations
type: call
call: anthropic.analyze-expenses
with:
model: claude-opus-4-5
prompt: "Review these Halliburton expense reports for policy violations: {{get-reports.reports}}"
- name: create-audit-task
type: call
call: servicenow.create-audit-task
with:
short_description: "Expense audit {{start_date}} to {{end_date}}"
description: "{{flag-violations.violations_summary}}"
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/reportdigests"
operations:
- name: list-expense-reports
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: analyze-expenses
method: POST
- type: http
namespace: servicenow
baseUri: "https://halliburton.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/u_audit_task"
operations:
- name: create-audit-task
method: POST
Validates a SAP Concur mileage expense claim by cross-checking reported distance against mapping API data and flags discrepancies for audit review.
naftiko: "0.5"
info:
label: "SAP Concur Mileage Claim Validation"
description: "Validates a SAP Concur mileage expense claim by cross-checking reported distance against mapping API data and flags discrepancies for audit review."
tags:
- travel
- sap-concur
- compliance
- audit
capability:
exposes:
- type: mcp
namespace: expense-audit
port: 8080
tools:
- name: validate-mileage-claim
description: "Given a Concur expense entry ID, validate mileage against mapping data and flag discrepancies."
inputParameters:
- name: entry_id
in: body
type: string
description: "The Concur expense entry ID."
steps:
- name: get-entry
type: call
call: concur.get-expense-entry
with:
entry_id: "{{entry_id}}"
- name: verify-distance
type: call
call: maps.get-distance
with:
origin: "{{get-entry.origin}}"
destination: "{{get-entry.destination}}"
consumes:
- type: http
namespace: concur
baseUri: "https://us.api.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_token"
resources:
- name: entries
path: "/expense/entries/{{entry_id}}"
inputParameters:
- name: entry_id
in: path
operations:
- name: get-expense-entry
method: GET
- type: http
namespace: maps
baseUri: "https://maps.googleapis.com/maps/api"
authentication:
type: apikey
key: "key"
value: "$secrets.google_maps_key"
placement: query
resources:
- name: directions
path: "/directions/json?origin={{origin}}&destination={{destination}}"
inputParameters:
- name: origin
in: path
- name: destination
in: path
operations:
- name: get-distance
method: GET
Audits SAP Concur expense reports for missing receipts above the policy threshold and alerts the finance team via Teams.
naftiko: "0.5"
info:
label: "SAP Concur Receipt Compliance Check"
description: "Audits SAP Concur expense reports for missing receipts above the policy threshold and alerts the finance team via Teams."
tags:
- travel
- sap-concur
- compliance
- microsoft-teams
- audit
capability:
exposes:
- type: mcp
namespace: expense-compliance
port: 8080
tools:
- name: check-receipt-compliance
description: "Audit Concur expense reports for missing receipts and alert finance team."
inputParameters:
- name: report_id
in: body
type: string
description: "The Concur expense report ID."
steps:
- name: get-report
type: call
call: concur.get-expense-report
with:
report_id: "{{report_id}}"
- name: notify-finance
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_finance_channel_id"
text: "Receipt Compliance: Report {{report_id}} | Missing receipts: {{get-report.missing_receipt_count}} | Total: ${{get-report.total_amount}}"
consumes:
- type: http
namespace: concur
baseUri: "https://us.api.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_token"
resources:
- name: reports
path: "/expense/reports/{{report_id}}"
inputParameters:
- name: report_id
in: path
operations:
- name: get-expense-report
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Retrieves a SAP Concur travel request, validates it against Halliburton travel policy using Anthropic, and routes it for approval in ServiceNow.
naftiko: "0.5"
info:
label: "SAP Concur Travel Request Approval"
description: "Retrieves a SAP Concur travel request, validates it against Halliburton travel policy using Anthropic, and routes it for approval in ServiceNow."
tags:
- finance
- travel
- sap-concur
- anthropic
- servicenow
- approval
capability:
exposes:
- type: mcp
namespace: travel-ops
port: 8080
tools:
- name: route-travel-approval
description: "Given a SAP Concur travel request ID, retrieve details, validate against travel policy using Anthropic, and create a ServiceNow approval task."
inputParameters:
- name: request_id
in: body
type: string
description: "The SAP Concur travel request ID to process."
steps:
- name: get-travel-request
type: call
call: concur.get-travel-request
with:
request_id: "{{request_id}}"
- name: validate-policy
type: call
call: anthropic.validate-travel-policy
with:
model: claude-opus-4-5
prompt: "Review this Halliburton travel request for policy compliance: {{get-travel-request.details}}"
- name: create-approval
type: call
call: servicenow.create-approval
with:
short_description: "Travel approval: {{get-travel-request.traveler_name}} to {{get-travel-request.destination}}"
policy_notes: "{{validate-policy.compliance_notes}}"
consumes:
- type: http
namespace: concur
baseUri: "https://www.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_token"
resources:
- name: travel-requests
path: "/travelrequest/requests/{{request_id}}"
inputParameters:
- name: request_id
in: path
operations:
- name: get-travel-request
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: validate-travel-policy
method: POST
- type: http
namespace: servicenow
baseUri: "https://halliburton.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: approvals
path: "/table/sysapproval_approver"
operations:
- name: create-approval
method: POST
Retrieves budget vs actual spend for a SAP cost center, returning planned budget, actual spend, and variance.
naftiko: "0.5"
info:
label: "SAP Cost Center Budget Check"
description: "Retrieves budget vs actual spend for a SAP cost center, returning planned budget, actual spend, and variance."
tags:
- finance
- sap
- erp
- budgeting
capability:
exposes:
- type: mcp
namespace: finance-budget
port: 8080
tools:
- name: get-budget-status
description: "Look up budget vs actual for a SAP cost center. Returns planned budget, actual spend, and variance."
inputParameters:
- name: cost_center
in: body
type: string
description: "The SAP cost center code."
- name: fiscal_year
in: body
type: string
description: "Fiscal year in YYYY format."
call: sap.get-cost-center-budget
with:
cost_center: "{{cost_center}}"
fiscal_year: "{{fiscal_year}}"
outputParameters:
- name: planned_budget
type: number
mapping: "$.d.PlannedAmount"
- name: actual_spend
type: number
mapping: "$.d.ActualAmount"
- name: variance
type: number
mapping: "$.d.VarianceAmount"
consumes:
- type: http
namespace: sap
baseUri: "https://halliburton-s4.sap.com/sap/opu/odata/sap/API_COSTCENTER_PLAN_ACTUAL_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: cost-centers
path: "/A_CostCenterBudget(CostCenter='{{cost_center}}',FiscalYear='{{fiscal_year}}')"
inputParameters:
- name: cost_center
in: path
- name: fiscal_year
in: path
operations:
- name: get-cost-center-budget
method: GET
Retrieves the status of an outbound delivery from SAP including shipping point, goods issue date, and carrier tracking information.
naftiko: "0.5"
info:
label: "SAP Delivery Note Tracking"
description: "Retrieves the status of an outbound delivery from SAP including shipping point, goods issue date, and carrier tracking information."
tags:
- logistics
- sap
- erp
- shipping
capability:
exposes:
- type: mcp
namespace: logistics
port: 8080
tools:
- name: get-delivery-status
description: "Look up a SAP outbound delivery. Returns shipping point, goods issue date, and tracking."
inputParameters:
- name: delivery_number
in: body
type: string
description: "The SAP delivery document number."
call: sap.get-delivery
with:
delivery_number: "{{delivery_number}}"
outputParameters:
- name: shipping_point
type: string
mapping: "$.d.ShippingPoint"
- name: goods_issue_date
type: string
mapping: "$.d.GoodsMovementDate"
consumes:
- type: http
namespace: sap
baseUri: "https://halliburton-s4.sap.com/sap/opu/odata/sap/API_OUTBOUND_DELIVERY_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: deliveries
path: "/A_OutbDeliveryHeader('{{delivery_number}}')"
inputParameters:
- name: delivery_number
in: path
operations:
- name: get-delivery
method: GET
Creates a plant maintenance work order in SAP PM for field equipment and notifies the field maintenance crew via Microsoft Teams.
naftiko: "0.5"
info:
label: "SAP Equipment Maintenance Order Create"
description: "Creates a plant maintenance work order in SAP PM for field equipment and notifies the field maintenance crew via Microsoft Teams."
tags:
- field-operations
- sap
- erp
- maintenance
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: field-maintenance
port: 8080
tools:
- name: create-maintenance-order
description: "Create a SAP PM work order for field equipment and notify the maintenance team in Teams."
inputParameters:
- name: equipment_id
in: body
type: string
description: "The SAP equipment number."
- name: fault_description
in: body
type: string
description: "Description of the equipment fault."
steps:
- name: create-order
type: call
call: sap.create-maintenance-order
with:
equipment: "{{equipment_id}}"
description: "{{fault_description}}"
order_type: "PM02"
- name: notify-crew
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_field_maint_channel_id"
text: "Maintenance Order: {{create-order.order_number}} | Equipment: {{equipment_id}} | {{fault_description}}"
consumes:
- type: http
namespace: sap
baseUri: "https://halliburton-s4.sap.com/sap/opu/odata/sap/API_MAINTENANCEORDER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: orders
path: "/MaintenanceOrder"
operations:
- name: create-maintenance-order
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Checks the status of SAP financial posting periods for a company code and generates a close readiness summary for the finance team.
naftiko: "0.5"
info:
label: "SAP Financial Period Close Checklist"
description: "Checks the status of SAP financial posting periods for a company code and generates a close readiness summary for the finance team."
tags:
- finance
- sap
- erp
- accounting
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: finance-close
port: 8080
tools:
- name: check-period-close
description: "Check SAP posting period status and post close readiness summary to finance channel."
inputParameters:
- name: company_code
in: body
type: string
description: "The SAP company code."
- name: fiscal_year
in: body
type: string
description: "Fiscal year."
- name: period
in: body
type: string
description: "Posting period number."
steps:
- name: check-period
type: call
call: sap.get-posting-period
with:
company_code: "{{company_code}}"
fiscal_year: "{{fiscal_year}}"
period: "{{period}}"
- name: notify-finance
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_finance_channel_id"
text: "Period Close: Company {{company_code}} | FY{{fiscal_year}} Period {{period}} | Status: {{check-period.status}}"
consumes:
- type: http
namespace: sap
baseUri: "https://halliburton-s4.sap.com/sap/opu/odata/sap/API_FINANCIALPERIOD_CLOSE_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: periods
path: "/A_FinancialPeriodClose(CompanyCode='{{company_code}}',FiscalYear='{{fiscal_year}}',Period='{{period}}')"
inputParameters:
- name: company_code
in: path
- name: fiscal_year
in: path
- name: period
in: path
operations:
- name: get-posting-period
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Posts a goods receipt against a SAP purchase order for field materials delivery, updating inventory records.
naftiko: "0.5"
info:
label: "SAP Goods Receipt Posting"
description: "Posts a goods receipt against a SAP purchase order for field materials delivery, updating inventory records."
tags:
- supply-chain
- sap
- erp
- inventory
capability:
exposes:
- type: mcp
namespace: supply-chain
port: 8080
tools:
- name: post-goods-receipt
description: "Post a goods receipt in SAP against a purchase order. Updates inventory for field materials."
inputParameters:
- name: po_number
in: body
type: string
description: "The SAP purchase order number."
- name: plant
in: body
type: string
description: "The receiving plant code."
- name: quantity
in: body
type: number
description: "Quantity received."
call: sap.post-goods-receipt
with:
po_number: "{{po_number}}"
plant: "{{plant}}"
quantity: "{{quantity}}"
consumes:
- type: http
namespace: sap
baseUri: "https://halliburton-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_DOCUMENT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: material-documents
path: "/A_MaterialDocumentHeader"
operations:
- name: post-goods-receipt
method: POST
Retrieves invoice payment status from SAP including approval state, payment date, and clearing document number.
naftiko: "0.5"
info:
label: "SAP Invoice Payment Status"
description: "Retrieves invoice payment status from SAP including approval state, payment date, and clearing document number."
tags:
- finance
- sap
- erp
- accounts-payable
capability:
exposes:
- type: mcp
namespace: finance-ap
port: 8080
tools:
- name: get-invoice-status
description: "Look up SAP invoice payment status. Returns approval state, payment date, and clearing doc."
inputParameters:
- name: invoice_number
in: body
type: string
description: "The SAP invoice number."
call: sap.get-invoice
with:
invoice_number: "{{invoice_number}}"
outputParameters:
- name: status
type: string
mapping: "$.d.PaymentStatus"
- name: payment_date
type: string
mapping: "$.d.PaymentDate"
consumes:
- type: http
namespace: sap
baseUri: "https://halliburton-s4.sap.com/sap/opu/odata/sap/API_SUPPLIERINVOICE_PROCESS_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: invoices
path: "/A_SupplierInvoice('{{invoice_number}}')"
inputParameters:
- name: invoice_number
in: path
operations:
- name: get-invoice
method: GET
Retrieves material master data from SAP S/4HANA including description, material group, and unit of measure for field supply chain.
naftiko: "0.5"
info:
label: "SAP Material Master Lookup"
description: "Retrieves material master data from SAP S/4HANA including description, material group, and unit of measure for field supply chain."
tags:
- supply-chain
- sap
- erp
- materials
capability:
exposes:
- type: mcp
namespace: supply-chain
port: 8080
tools:
- name: get-material-master
description: "Look up a material in SAP. Returns description, material group, and base unit."
inputParameters:
- name: material_number
in: body
type: string
description: "The SAP material number."
call: sap.get-material
with:
material_number: "{{material_number}}"
outputParameters:
- name: description
type: string
mapping: "$.d.MaterialName"
- name: material_group
type: string
mapping: "$.d.MaterialGroup"
consumes:
- type: http
namespace: sap
baseUri: "https://halliburton-s4.sap.com/sap/opu/odata/sap/API_PRODUCT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: materials
path: "/A_Product('{{material_number}}')"
inputParameters:
- name: material_number
in: path
operations:
- name: get-material
method: GET
Queries SAP S/4HANA for current stock levels of drilling materials across plants, returning available quantity and plant location.
naftiko: "0.5"
info:
label: "SAP Material Stock Level Check"
description: "Queries SAP S/4HANA for current stock levels of drilling materials across plants, returning available quantity and plant location."
tags:
- supply-chain
- sap
- erp
- inventory
capability:
exposes:
- type: mcp
namespace: supply-chain
port: 8080
tools:
- name: get-stock-level
description: "Check current stock levels for a material in SAP. Returns available quantity, unit, and plant. Use for drilling material planning."
inputParameters:
- name: material_number
in: body
type: string
description: "The SAP material number."
call: sap.get-material-stock
with:
material_number: "{{material_number}}"
outputParameters:
- name: available_quantity
type: number
mapping: "$.d.MatlWrhsStkQtyInMatlBaseUnit"
- name: plant
type: string
mapping: "$.d.Plant"
consumes:
- type: http
namespace: sap
baseUri: "https://halliburton-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: material-stock
path: "/A_MatlStkInAcctMod(Material='{{material_number}}')"
inputParameters:
- name: material_number
in: path
operations:
- name: get-material-stock
method: GET
Retrieves a SAP PM work order by number, returning status, equipment, description, and planned completion date.
naftiko: "0.5"
info:
label: "SAP Plant Maintenance Work Order Lookup"
description: "Retrieves a SAP PM work order by number, returning status, equipment, description, and planned completion date."
tags:
- field-operations
- sap
- erp
- maintenance
capability:
exposes:
- type: mcp
namespace: field-maintenance
port: 8080
tools:
- name: get-work-order
description: "Look up a SAP PM work order. Returns status, equipment, and planned completion."
inputParameters:
- name: order_number
in: body
type: string
description: "The SAP maintenance order number."
call: sap.get-maintenance-order
with:
order_number: "{{order_number}}"
outputParameters:
- name: status
type: string
mapping: "$.d.OrderStatus"
- name: equipment
type: string
mapping: "$.d.Equipment"
consumes:
- type: http
namespace: sap
baseUri: "https://halliburton-s4.sap.com/sap/opu/odata/sap/API_MAINTENANCEORDER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: orders
path: "/MaintenanceOrder('{{order_number}}')"
inputParameters:
- name: order_number
in: path
operations:
- name: get-maintenance-order
method: GET
Retrieves the status of a SAP production order for manufacturing equipment, including planned and confirmed quantities.
naftiko: "0.5"
info:
label: "SAP Production Order Status"
description: "Retrieves the status of a SAP production order for manufacturing equipment, including planned and confirmed quantities."
tags:
- manufacturing
- sap
- erp
- production
capability:
exposes:
- type: mcp
namespace: manufacturing
port: 8080
tools:
- name: get-production-order
description: "Look up a SAP production order. Returns planned quantity, confirmed quantity, and status."
inputParameters:
- name: order_number
in: body
type: string
description: "The SAP production order number."
call: sap.get-production-order
with:
order_number: "{{order_number}}"
outputParameters:
- name: planned_qty
type: number
mapping: "$.d.TotalQuantity"
- name: status
type: string
mapping: "$.d.ManufacturingOrderStatus"
consumes:
- type: http
namespace: sap
baseUri: "https://halliburton-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: production-orders
path: "/A_ProductionOrder_2('{{order_number}}')"
inputParameters:
- name: order_number
in: path
operations:
- name: get-production-order
method: GET
Retrieves a quality inspection lot result from SAP QM, returning inspection result, usage decision, and defect count.
naftiko: "0.5"
info:
label: "SAP Quality Inspection Result"
description: "Retrieves a quality inspection lot result from SAP QM, returning inspection result, usage decision, and defect count."
tags:
- manufacturing
- sap
- erp
- quality
capability:
exposes:
- type: mcp
namespace: quality-mgmt
port: 8080
tools:
- name: get-inspection-result
description: "Look up a SAP quality inspection lot. Returns result, usage decision, and defect count."
inputParameters:
- name: inspection_lot
in: body
type: string
description: "The SAP inspection lot number."
call: sap.get-inspection-lot
with:
lot_number: "{{inspection_lot}}"
outputParameters:
- name: result
type: string
mapping: "$.d.InspectionResult"
- name: defect_count
type: number
mapping: "$.d.NumberOfDefects"
consumes:
- type: http
namespace: sap
baseUri: "https://halliburton-s4.sap.com/sap/opu/odata/sap/API_INSPECTIONLOT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: inspection-lots
path: "/A_InspectionLot('{{lot_number}}')"
inputParameters:
- name: lot_number
in: path
operations:
- name: get-inspection-lot
method: GET
Looks up an SAP S/4HANA purchase order by number and returns header status, vendor name, and total value for procurement tracking.
naftiko: "0.5"
info:
label: "SAP S/4HANA Purchase Order Lookup"
description: "Looks up an SAP S/4HANA purchase order by number and returns header status, vendor name, and total value for procurement tracking."
tags:
- finance
- procurement
- sap
- erp
capability:
exposes:
- type: mcp
namespace: erp-finance
port: 8080
tools:
- name: get-purchase-order
description: "Given an SAP purchase order number, return the header status, vendor name, total amount, and currency from SAP S/4HANA. Use for procurement status checks and approvals."
inputParameters:
- name: po_number
in: body
type: string
description: "The SAP purchase order number to look up, 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://halliburton-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
Retrieves the status of a SAP transport request including release status, target system, and owner.
naftiko: "0.5"
info:
label: "SAP Transport Request Status"
description: "Retrieves the status of a SAP transport request including release status, target system, and owner."
tags:
- devops
- sap
- erp
- transport-management
capability:
exposes:
- type: mcp
namespace: sap-basis
port: 8080
tools:
- name: get-transport-status
description: "Look up a SAP transport request. Returns release status, target, and owner."
inputParameters:
- name: transport_number
in: body
type: string
description: "The SAP transport request number."
call: sap.get-transport
with:
transport: "{{transport_number}}"
outputParameters:
- name: status
type: string
mapping: "$.d.Status"
- name: owner
type: string
mapping: "$.d.Owner"
consumes:
- type: http
namespace: sap
baseUri: "https://halliburton-s4.sap.com/sap/opu/odata/sap/TRANSPORT_REQUEST_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: transports
path: "/TransportRequests('{{transport}}')"
inputParameters:
- name: transport
in: path
operations:
- name: get-transport
method: GET
Retrieves vendor master data from SAP S/4HANA including company name, payment terms, and tax classification for procurement verification.
naftiko: "0.5"
info:
label: "SAP Vendor Master Lookup"
description: "Retrieves vendor master data from SAP S/4HANA including company name, payment terms, and tax classification for procurement verification."
tags:
- finance
- procurement
- sap
- erp
capability:
exposes:
- type: mcp
namespace: erp-procurement
port: 8080
tools:
- name: get-vendor-master
description: "Look up a vendor in SAP by vendor number. Returns company name, payment terms, and tax classification."
inputParameters:
- name: vendor_number
in: body
type: string
description: "The SAP vendor number."
call: sap.get-vendor
with:
vendor_number: "{{vendor_number}}"
outputParameters:
- name: company_name
type: string
mapping: "$.d.CompanyName"
- name: payment_terms
type: string
mapping: "$.d.PaymentTerms"
- name: tax_number
type: string
mapping: "$.d.TaxNumber1"
consumes:
- type: http
namespace: sap
baseUri: "https://halliburton-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: vendors
path: "/A_Supplier('{{vendor_number}}')"
inputParameters:
- name: vendor_number
in: path
operations:
- name: get-vendor
method: GET
Checks the status of a SAP vendor payment run, returning processed count, total amount, and any failed payments.
naftiko: "0.5"
info:
label: "SAP Vendor Payment Run Status"
description: "Checks the status of a SAP vendor payment run, returning processed count, total amount, and any failed payments."
tags:
- finance
- sap
- erp
- accounts-payable
capability:
exposes:
- type: mcp
namespace: finance-ap
port: 8080
tools:
- name: get-payment-run
description: "Check SAP vendor payment run status. Returns processed count, total, and failures."
inputParameters:
- name: run_id
in: body
type: string
description: "The SAP payment run identifier."
call: sap.get-payment-run
with:
run_id: "{{run_id}}"
outputParameters:
- name: processed_count
type: number
mapping: "$.d.ProcessedCount"
- name: total_amount
type: number
mapping: "$.d.TotalAmount"
consumes:
- type: http
namespace: sap
baseUri: "https://halliburton-s4.sap.com/sap/opu/odata/sap/API_PAYMENTRUN_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: payment-runs
path: "/A_PaymentRun('{{run_id}}')"
inputParameters:
- name: run_id
in: path
operations:
- name: get-payment-run
method: GET
Triggers a cycle count workflow in SAP for warehouse inventory and notifies the warehouse team of any discrepancies found.
naftiko: "0.5"
info:
label: "SAP Warehouse Inventory Cycle Count"
description: "Triggers a cycle count workflow in SAP for warehouse inventory and notifies the warehouse team of any discrepancies found."
tags:
- supply-chain
- sap
- microsoft-teams
- inventory
- warehouse
capability:
exposes:
- type: mcp
namespace: supply-chain-ops
port: 8080
tools:
- name: trigger-cycle-count
description: "Trigger a SAP cycle count for a storage location and notify the warehouse team."
inputParameters:
- name: plant
in: body
type: string
description: "The SAP plant code."
- name: storage_location
in: body
type: string
description: "The storage location code."
steps:
- name: create-count
type: call
call: sap.create-physical-inventory
with:
plant: "{{plant}}"
storage_location: "{{storage_location}}"
- name: notify-warehouse
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_warehouse_channel_id"
text: "Cycle count initiated: Plant {{plant}} | Location: {{storage_location}} | Doc: {{create-count.document_number}}"
consumes:
- type: http
namespace: sap
baseUri: "https://halliburton-s4.sap.com/sap/opu/odata/sap/API_PHYSICAL_INVENTORY_DOC_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: physical-inventory
path: "/A_PhysInventoryDocHeader"
operations:
- name: create-physical-inventory
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Initiates the asset retirement process in ServiceNow CMDB, updates the asset status, and notifies the IT finance team via Teams.
naftiko: "0.5"
info:
label: "ServiceNow Asset Retirement Workflow"
description: "Initiates the asset retirement process in ServiceNow CMDB, updates the asset status, and notifies the IT finance team via Teams."
tags:
- it-ops
- servicenow
- asset-management
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: it-assets
port: 8080
tools:
- name: retire-asset
description: "Given a ServiceNow asset tag, initiate retirement and notify IT finance."
inputParameters:
- name: asset_tag
in: body
type: string
description: "The ServiceNow asset tag."
steps:
- name: update-asset
type: call
call: servicenow.update-ci
with:
asset_tag: "{{asset_tag}}"
status: "retired"
- name: notify-finance
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_it_finance_channel_id"
text: "Asset Retired: {{asset_tag}} | Updated in ServiceNow CMDB"
consumes:
- type: http
namespace: servicenow
baseUri: "https://halliburton.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cmdb
path: "/table/cmdb_ci/{{asset_tag}}"
inputParameters:
- name: asset_tag
in: path
operations:
- name: update-ci
method: PATCH
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Submits a ServiceNow change request for drilling system modifications, routes it to the CAB for approval, and notifies stakeholders in Microsoft Teams.
naftiko: "0.5"
info:
label: "ServiceNow Change Management for Drilling Operations"
description: "Submits a ServiceNow change request for drilling system modifications, routes it to the CAB for approval, and notifies stakeholders in Microsoft Teams."
tags:
- itsm
- change-management
- servicenow
- microsoft-teams
- drilling-operations
capability:
exposes:
- type: mcp
namespace: change-mgmt
port: 8080
tools:
- name: submit-drilling-change-request
description: "Given change details for a drilling system modification, create a ServiceNow change request, assign to the drilling CAB group, and notify the approver in Teams."
inputParameters:
- name: short_description
in: body
type: string
description: "Description of the drilling system change being requested."
- name: change_type
in: body
type: string
description: "ServiceNow change type: normal, standard, or emergency."
- name: risk_level
in: body
type: string
description: "Risk level of the change: low, medium, or high."
- name: approver_email
in: body
type: string
description: "Email of the primary change approver."
steps:
- name: create-change
type: call
call: servicenow.create-change-request
with:
short_description: "{{short_description}}"
type: "{{change_type}}"
risk: "{{risk_level}}"
assignment_group: "Drilling_CAB"
- name: notify-approver
type: call
call: msteams.notify-approver
with:
recipient: "{{approver_email}}"
text: "Change request {{create-change.number}} pending your approval: {{short_description}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://halliburton.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: changes
path: "/table/change_request"
operations:
- name: create-change-request
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient}}/sendMail"
inputParameters:
- name: recipient
in: path
operations:
- name: notify-approver
method: POST
Retrieves a ServiceNow change request and returns its approval status, risk level, and implementation window.
naftiko: "0.5"
info:
label: "ServiceNow Change Request Approval Check"
description: "Retrieves a ServiceNow change request and returns its approval status, risk level, and implementation window."
tags:
- it-ops
- servicenow
- change-management
capability:
exposes:
- type: mcp
namespace: it-change
port: 8080
tools:
- name: get-change-approval
description: "Look up a ServiceNow change request. Returns approval status, risk level, and window."
inputParameters:
- name: change_number
in: body
type: string
description: "The ServiceNow change request number."
call: servicenow.get-change
with:
change_number: "{{change_number}}"
outputParameters:
- name: approval_status
type: string
mapping: "$.result.approval"
- name: risk
type: string
mapping: "$.result.risk"
consumes:
- type: http
namespace: servicenow
baseUri: "https://halliburton.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: changes
path: "/table/change_request/{{change_number}}"
inputParameters:
- name: change_number
in: path
operations:
- name: get-change
method: GET
Retrieves a ServiceNow CMDB configuration item by asset tag, returning serial number, assigned user, location, and lifecycle status.
naftiko: "0.5"
info:
label: "ServiceNow CMDB Asset Lookup"
description: "Retrieves a ServiceNow CMDB configuration item by asset tag, returning serial number, assigned user, location, and lifecycle status."
tags:
- it-ops
- servicenow
- asset-management
capability:
exposes:
- type: mcp
namespace: it-assets
port: 8080
tools:
- name: get-asset
description: "Look up a ServiceNow CMDB asset by tag. Returns serial number, assigned user, and location."
inputParameters:
- name: asset_tag
in: body
type: string
description: "The asset tag or CI name."
call: servicenow.get-ci
with:
asset_tag: "{{asset_tag}}"
outputParameters:
- name: serial_number
type: string
mapping: "$.result.serial_number"
- name: assigned_to
type: string
mapping: "$.result.assigned_to.display_value"
consumes:
- type: http
namespace: servicenow
baseUri: "https://halliburton.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cmdb
path: "/table/cmdb_ci?sysparm_query=asset_tag={{asset_tag}}"
inputParameters:
- name: asset_tag
in: path
operations:
- name: get-ci
method: GET
Retrieves a ServiceNow incident by number and returns its priority, state, assigned group, and short description.
naftiko: "0.5"
info:
label: "ServiceNow Incident Lookup"
description: "Retrieves a ServiceNow incident by number and returns its priority, state, assigned group, and short description."
tags:
- it-ops
- servicenow
- incident-management
capability:
exposes:
- type: mcp
namespace: it-ops
port: 8080
tools:
- name: get-incident
description: "Look up a ServiceNow incident by number. Returns priority, state, assigned group, and description."
inputParameters:
- name: incident_number
in: body
type: string
description: "The ServiceNow incident number."
call: servicenow.get-incident
with:
incident_number: "{{incident_number}}"
outputParameters:
- name: priority
type: string
mapping: "$.result.priority"
- name: state
type: string
mapping: "$.result.state"
- name: assigned_group
type: string
mapping: "$.result.assignment_group.display_value"
consumes:
- type: http
namespace: servicenow
baseUri: "https://halliburton.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident/{{incident_number}}"
inputParameters:
- name: incident_number
in: path
operations:
- name: get-incident
method: GET
Searches the ServiceNow knowledge base for articles matching a query, returning article title, number, and snippet.
naftiko: "0.5"
info:
label: "ServiceNow Knowledge Article Search"
description: "Searches the ServiceNow knowledge base for articles matching a query, returning article title, number, and snippet."
tags:
- it-ops
- servicenow
- knowledge-management
capability:
exposes:
- type: mcp
namespace: it-selfservice
port: 8080
tools:
- name: search-knowledge-base
description: "Search ServiceNow knowledge base by keyword. Returns article title, number, and snippet."
inputParameters:
- name: query
in: body
type: string
description: "Search keyword or phrase."
call: servicenow.search-kb
with:
query: "{{query}}"
outputParameters:
- name: articles
type: array
mapping: "$.result"
consumes:
- type: http
namespace: servicenow
baseUri: "https://halliburton.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: knowledge
path: "/table/kb_knowledge?sysparm_query=short_descriptionLIKE{{query}}&sysparm_limit=10"
inputParameters:
- name: query
in: path
operations:
- name: search-kb
method: GET
When a P1 incident is created in ServiceNow, pages the on-call engineer via PagerDuty and posts incident details to the incident bridge Teams channel.
naftiko: "0.5"
info:
label: "ServiceNow Major Incident Bridge Launcher"
description: "When a P1 incident is created in ServiceNow, pages the on-call engineer via PagerDuty and posts incident details to the incident bridge Teams channel."
tags:
- it-ops
- incident-management
- servicenow
- pagerduty
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: incident-response
port: 8080
tools:
- name: launch-incident-bridge
description: "Given a ServiceNow P1 incident, page on-call via PagerDuty and create a Teams bridge."
inputParameters:
- name: incident_number
in: body
type: string
description: "The ServiceNow incident number."
steps:
- name: get-incident
type: call
call: servicenow.get-incident
with:
incident_number: "{{incident_number}}"
- name: page-oncall
type: call
call: pagerduty.create-incident
with:
service_id: "{{get-incident.service_id}}"
title: "P1: {{get-incident.short_description}}"
- name: post-bridge
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_incident_channel_id"
text: "P1 Bridge: {{incident_number}} | {{get-incident.short_description}} | PagerDuty: {{page-oncall.incident_key}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://halliburton.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident/{{incident_number}}"
inputParameters:
- name: incident_number
in: path
operations:
- name: get-incident
method: GET
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
On a critical Datadog infrastructure alert, creates a ServiceNow P1 incident, pages the on-call team via PagerDuty, and posts to the IT ops Teams channel.
naftiko: "0.5"
info:
label: "ServiceNow P1 Incident Response with PagerDuty"
description: "On a critical Datadog infrastructure alert, creates a ServiceNow P1 incident, pages the on-call team via PagerDuty, and posts to the IT ops Teams channel."
tags:
- itsm
- incident-response
- datadog
- servicenow
- pagerduty
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: itsm-ops
port: 8080
tools:
- name: handle-critical-alert
description: "Given a Datadog alert ID and monitor name, create a ServiceNow P1 incident, trigger PagerDuty escalation, and notify the IT ops Teams channel."
inputParameters:
- name: alert_id
in: body
type: string
description: "The Datadog alert ID triggering the P1 incident."
- name: monitor_name
in: body
type: string
description: "The Datadog monitor name that fired."
steps:
- name: create-p1
type: call
call: servicenow.create-p1-incident
with:
short_description: "P1 Alert: {{monitor_name}}"
impact: "1"
urgency: "1"
- name: page-oncall
type: call
call: pagerduty.create-incident
with:
title: "P1: {{monitor_name}}"
service_id: "$secrets.pagerduty_service_id"
body: "ServiceNow: {{create-p1.number}}"
- name: notify-ops
type: call
call: msteams.post-p1-alert
with:
channel: "it-ops-p1"
text: "P1 Incident: {{monitor_name}} | SN: {{create-p1.number}} | PD: {{page-oncall.id}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://halliburton.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-p1-incident
method: POST
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.pagerduty_token"
placement: header
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/it-ops/channels/p1/messages"
operations:
- name: post-p1-alert
method: POST
Archives a daily drilling report to SharePoint, creating a folder structure by well and date, and notifies the operations team.
naftiko: "0.5"
info:
label: "SharePoint Drilling Report Archive"
description: "Archives a daily drilling report to SharePoint, creating a folder structure by well and date, and notifies the operations team."
tags:
- collaboration
- sharepoint
- drilling
- field-operations
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: field-docs
port: 8080
tools:
- name: archive-drilling-report
description: "Given a well ID and report date, create a SharePoint folder and archive the drilling report, then notify ops team."
inputParameters:
- name: well_id
in: body
type: string
description: "The well identifier."
- name: report_date
in: body
type: string
description: "Report date in YYYY-MM-DD format."
steps:
- name: create-folder
type: call
call: sharepoint.create-folder
with:
site_id: "$secrets.sharepoint_drilling_site_id"
folder_path: "DrillingReports/{{well_id}}/{{report_date}}"
- name: notify-ops
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_drilling_ops_channel_id"
text: "Drilling report archived: Well {{well_id}} | Date: {{report_date}} | Folder: {{create-folder.web_url}}"
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: drive-items
path: "/{{site_id}}/drive/root:/{{folder_path}}"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
operations:
- name: create-folder
method: PUT
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Searches the HSE SharePoint site for policy documents matching a keyword, returning document title, version, and download link.
naftiko: "0.5"
info:
label: "SharePoint HSE Policy Document Lookup"
description: "Searches the HSE SharePoint site for policy documents matching a keyword, returning document title, version, and download link."
tags:
- hse
- sharepoint
- document-management
- compliance
capability:
exposes:
- type: mcp
namespace: hse-docs
port: 8080
tools:
- name: search-hse-policies
description: "Search HSE SharePoint site for policy documents by keyword. Returns title, version, and link."
inputParameters:
- name: query
in: body
type: string
description: "Search keyword or phrase."
call: sharepoint.search-hse
with:
query: "{{query}}"
outputParameters:
- name: results
type: array
mapping: "$.value"
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: search
path: "/$secrets.sharepoint_hse_site_id/drive/root/search(q='{{query}}')"
inputParameters:
- name: query
in: path
operations:
- name: search-hse
method: GET
Extracts well completion data from the operations database and pushes it to a Power BI dataset for operational analytics and reporting.
naftiko: "0.5"
info:
label: "Well Completion Report to Power BI"
description: "Extracts well completion data from the operations database and pushes it to a Power BI dataset for operational analytics and reporting."
tags:
- field-operations
- power-bi
- analytics
- drilling
capability:
exposes:
- type: mcp
namespace: field-analytics
port: 8080
tools:
- name: sync-completion-to-powerbi
description: "Given a well ID, extract completion data and push to Power BI for executive dashboard reporting."
inputParameters:
- name: well_id
in: body
type: string
description: "The well identifier."
steps:
- name: get-completion-data
type: call
call: ops-db.get-well-completion
with:
well_id: "{{well_id}}"
- name: push-to-powerbi
type: call
call: powerbi.push-rows
with:
dataset_id: "$secrets.powerbi_wells_dataset_id"
table_name: "CompletionData"
rows: "{{get-completion-data.records}}"
consumes:
- type: http
namespace: ops-db
baseUri: "https://halliburton-ops.azurewebsites.net/api/v1"
authentication:
type: bearer
token: "$secrets.ops_db_token"
resources:
- name: completions
path: "/wells/{{well_id}}/completion"
inputParameters:
- name: well_id
in: path
operations:
- name: get-well-completion
method: GET
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: push-datasets
path: "/datasets/{{dataset_id}}/tables/{{table_name}}/rows"
inputParameters:
- name: dataset_id
in: path
- name: table_name
in: path
operations:
- name: push-rows
method: POST
When drilling telemetry exceeds threshold parameters, retrieves sensor data, creates a ServiceNow incident, and alerts the well operations team via Teams.
naftiko: "0.5"
info:
label: "Well Operations Telemetry Anomaly Alert"
description: "When drilling telemetry exceeds threshold parameters, retrieves sensor data, creates a ServiceNow incident, and alerts the well operations team via Teams."
tags:
- field-operations
- drilling
- servicenow
- microsoft-teams
- iot
capability:
exposes:
- type: mcp
namespace: well-ops
port: 8080
tools:
- name: alert-telemetry-anomaly
description: "Given a well ID and sensor type, retrieve anomalous telemetry data, create a ServiceNow incident, and notify the operations team."
inputParameters:
- name: well_id
in: body
type: string
description: "The well identifier."
- name: sensor_type
in: body
type: string
description: "Sensor type, e.g. pressure, temperature, torque."
steps:
- name: get-telemetry
type: call
call: iot-platform.get-sensor-data
with:
well_id: "{{well_id}}"
sensor: "{{sensor_type}}"
- name: create-incident
type: call
call: servicenow.create-incident
with:
short_description: "Well telemetry anomaly: {{well_id}} — {{sensor_type}}"
description: "Value: {{get-telemetry.current_value}} | Threshold: {{get-telemetry.threshold}} | Well: {{well_id}}"
category: "field_operations"
- name: notify-ops
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_well_ops_channel_id"
text: "Telemetry Alert: Well {{well_id}} | {{sensor_type}}: {{get-telemetry.current_value}} (threshold: {{get-telemetry.threshold}}) | Incident: {{create-incident.number}}"
consumes:
- type: http
namespace: iot-platform
baseUri: "https://halliburton-iot.azure-devices.net/api/v1"
authentication:
type: bearer
token: "$secrets.iot_platform_token"
resources:
- name: sensors
path: "/wells/{{well_id}}/sensors/{{sensor}}/latest"
inputParameters:
- name: well_id
in: path
- name: sensor
in: path
operations:
- name: get-sensor-data
method: GET
- type: http
namespace: servicenow
baseUri: "https://halliburton.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Triggers a well site safety inspection workflow by creating a ServiceNow task, assigning an HSE inspector in Workday, and notifying the site team via Teams.
naftiko: "0.5"
info:
label: "Well Site Safety Inspection Workflow"
description: "Triggers a well site safety inspection workflow by creating a ServiceNow task, assigning an HSE inspector in Workday, and notifying the site team via Teams."
tags:
- hse
- safety
- servicenow
- workday
- microsoft-teams
- field-operations
capability:
exposes:
- type: mcp
namespace: hse-ops
port: 8080
tools:
- name: initiate-safety-inspection
description: "Create a safety inspection task, assign an HSE inspector, and notify the well site team."
inputParameters:
- name: well_site
in: body
type: string
description: "The well site identifier."
- name: inspection_type
in: body
type: string
description: "Type of safety inspection."
steps:
- name: create-task
type: call
call: servicenow.create-task
with:
short_description: "Safety inspection: {{inspection_type}} at {{well_site}}"
category: "hse"
assigned_group: "HSE_Inspectors"
- name: notify-site
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_field_ops_channel_id"
text: "Safety Inspection Scheduled: {{well_site}} | Type: {{inspection_type}} | Task: {{create-task.number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://halliburton.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/sc_task"
operations:
- name: create-task
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Checks Workday for employees with incomplete benefits enrollment and sends reminders via Microsoft Teams.
naftiko: "0.5"
info:
label: "Workday Benefits Enrollment Reminder"
description: "Checks Workday for employees with incomplete benefits enrollment and sends reminders via Microsoft Teams."
tags:
- hr
- workday
- benefits
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-benefits
port: 8080
tools:
- name: send-enrollment-reminders
description: "Query Workday for incomplete benefits enrollment and send Teams reminders."
inputParameters:
- name: enrollment_event_id
in: body
type: string
description: "The Workday benefits enrollment event ID."
steps:
- name: get-incomplete
type: call
call: workday.get-incomplete-enrollments
with:
event_id: "{{enrollment_event_id}}"
- name: notify-hr
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_hr_channel_id"
text: "Benefits Enrollment: {{get-incomplete.count}} employees pending | Deadline: {{get-incomplete.deadline}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: benefits
path: "/benefitsEnrollment/{{event_id}}/incomplete"
inputParameters:
- name: event_id
in: path
operations:
- name: get-incomplete-enrollments
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Retrieves a Workday employee compensation summary including base pay, bonus target, and total compensation.
naftiko: "0.5"
info:
label: "Workday Compensation Summary"
description: "Retrieves a Workday employee compensation summary including base pay, bonus target, and total compensation."
tags:
- hr
- compensation
- workday
capability:
exposes:
- type: mcp
namespace: hr-compensation
port: 8080
tools:
- name: get-compensation
description: "Look up employee compensation in Workday by worker ID. Returns base pay, bonus target, and total compensation."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID."
call: workday.get-compensation
with:
worker_id: "{{worker_id}}"
outputParameters:
- name: base_pay
type: number
mapping: "$.compensation.basePay"
- name: total_comp
type: number
mapping: "$.compensation.totalCompensation"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: compensation
path: "/workers/{{worker_id}}/compensation"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-compensation
method: GET
When an employee transfers departments in Workday, updates their Okta group memberships and notifies the new manager via Teams.
naftiko: "0.5"
info:
label: "Workday Employee Transfer Provisioning"
description: "When an employee transfers departments in Workday, updates their Okta group memberships and notifies the new manager via Teams."
tags:
- hr
- workday
- okta
- microsoft-teams
- identity
capability:
exposes:
- type: mcp
namespace: hr-provisioning
port: 8080
tools:
- name: provision-transfer
description: "Given a Workday worker ID and new department, update Okta groups and notify the new manager."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID."
- name: new_department
in: body
type: string
description: "The new department name."
steps:
- name: get-worker
type: call
call: workday.get-worker
with:
worker_id: "{{worker_id}}"
- name: update-okta-groups
type: call
call: okta.update-group-membership
with:
user_login: "{{get-worker.work_email}}"
new_group: "{{new_department}}_Team"
- name: notify-manager
type: call
call: msteams.send-message
with:
recipient_upn: "{{get-worker.new_manager_email}}"
text: "{{get-worker.full_name}} has transferred to {{new_department}}. Okta groups updated."
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: okta
baseUri: "https://halliburton.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_token"
resources:
- name: groups
path: "/groups/{{new_group}}/users"
inputParameters:
- name: new_group
in: path
operations:
- name: update-group-membership
method: PUT
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Pulls current headcount by division and cost center from Workday for workforce planning and finance reporting.
naftiko: "0.5"
info:
label: "Workday Headcount Snapshot"
description: "Pulls current headcount by division and cost center from Workday for workforce planning and finance reporting."
tags:
- hr
- finance
- workday
- reporting
- headcount
capability:
exposes:
- type: mcp
namespace: hr-reporting
port: 8080
tools:
- name: get-headcount-snapshot
description: "Returns active employees grouped by division and cost center from Workday with employment type. Use for workforce planning and cost analysis."
call: workday.headcount-export
outputParameters:
- name: employees
type: array
mapping: "$.data"
items:
- name: employee_id
type: string
mapping: "$.id"
- name: full_name
type: string
mapping: "$.displayName"
- name: division
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: "/halliburton/workers"
operations:
- name: headcount-export
method: GET
Retrieves a Workday job requisition by ID and returns approval status, hiring manager, and target start date.
naftiko: "0.5"
info:
label: "Workday Job Requisition Status"
description: "Retrieves a Workday job requisition by ID and returns approval status, hiring manager, and target start date."
tags:
- hr
- recruiting
- workday
capability:
exposes:
- type: mcp
namespace: hr-recruiting
port: 8080
tools:
- name: get-job-requisition
description: "Look up a Workday job requisition. Returns approval status, hiring manager, and target start."
inputParameters:
- name: requisition_id
in: body
type: string
description: "The Workday job requisition ID."
call: workday.get-requisition
with:
requisition_id: "{{requisition_id}}"
outputParameters:
- name: status
type: string
mapping: "$.requisitionStatus"
- name: hiring_manager
type: string
mapping: "$.hiringManager.name"
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/{{requisition_id}}"
inputParameters:
- name: requisition_id
in: path
operations:
- name: get-requisition
method: GET
Retrieves overdue learning assignments from Workday for a supervisory organization and sends a summary to the HR channel in Teams.
naftiko: "0.5"
info:
label: "Workday Learning Assignment Tracker"
description: "Retrieves overdue learning assignments from Workday for a supervisory organization and sends a summary to the HR channel in Teams."
tags:
- hr
- workday
- learning
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-learning
port: 8080
tools:
- name: track-overdue-assignments
description: "Query Workday for overdue learning assignments and notify HR via Teams."
inputParameters:
- name: org_id
in: body
type: string
description: "The Workday supervisory org ID."
steps:
- name: get-overdue
type: call
call: workday.get-overdue-learning
with:
org_id: "{{org_id}}"
- name: notify-hr
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_hr_channel_id"
text: "Overdue Learning: Org {{org_id}} | {{get-overdue.count}} employees with overdue assignments"
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: "/learningAssignments?orgId={{org_id}}&status=overdue"
inputParameters:
- name: org_id
in: path
operations:
- name: get-overdue-learning
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
When a new hire is created in Workday, creates a ServiceNow IT equipment request and notifies the hiring manager via Teams.
naftiko: "0.5"
info:
label: "Workday New Hire IT Equipment Provisioning"
description: "When a new hire is created in Workday, creates a ServiceNow IT equipment request and notifies the hiring manager via Teams."
tags:
- hr
- workday
- servicenow
- microsoft-teams
- onboarding
capability:
exposes:
- type: mcp
namespace: hr-provisioning
port: 8080
tools:
- name: provision-equipment
description: "Create IT equipment request for a new hire and notify the hiring manager."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID."
steps:
- name: get-worker
type: call
call: workday.get-worker
with:
worker_id: "{{worker_id}}"
- name: create-request
type: call
call: servicenow.create-request
with:
short_description: "IT equipment for {{get-worker.full_name}}"
category: "it_provisioning"
- name: notify-manager
type: call
call: msteams.send-message
with:
recipient_upn: "{{get-worker.manager_email}}"
text: "IT equipment request created for {{get-worker.full_name}}: {{create-request.number}}"
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://halliburton.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: requests
path: "/table/sc_request"
operations:
- name: create-request
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Retrieves the organizational hierarchy for a Workday worker, returning their manager, direct reports count, and supervisory organization.
naftiko: "0.5"
info:
label: "Workday Org Chart Lookup"
description: "Retrieves the organizational hierarchy for a Workday worker, returning their manager, direct reports count, and supervisory organization."
tags:
- hr
- workday
- organization
capability:
exposes:
- type: mcp
namespace: hr-org
port: 8080
tools:
- name: get-org-hierarchy
description: "Look up the org chart for a worker in Workday. Returns manager, direct reports, and supervisory org."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID."
call: workday.get-org-chart
with:
worker_id: "{{worker_id}}"
outputParameters:
- name: manager
type: string
mapping: "$.manager.name"
- name: direct_reports_count
type: number
mapping: "$.directReportsCount"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: org-chart
path: "/workers/{{worker_id}}/organizationHierarchy"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-org-chart
method: GET
Initiates the annual performance review cycle in Workday and sends manager notifications via Microsoft Teams.
naftiko: "0.5"
info:
label: "Workday Performance Review Cycle Launcher"
description: "Initiates the annual performance review cycle in Workday and sends manager notifications via Microsoft Teams."
tags:
- hr
- performance-management
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-performance
port: 8080
tools:
- name: launch-review-cycle
description: "Given a review cycle name and due date, create performance review tasks in Workday and broadcast a notification to the people managers Teams channel."
inputParameters:
- name: cycle_name
in: body
type: string
description: "The performance review cycle name, e.g. 2026 Annual Review."
- name: due_date
in: body
type: string
description: "Completion due date in YYYY-MM-DD format."
steps:
- name: create-review-cycle
type: call
call: workday.create-review-event
with:
cycle_name: "{{cycle_name}}"
due_date: "{{due_date}}"
- name: notify-managers
type: call
call: msteams.broadcast-review
with:
channel: "people-managers"
text: "Performance review cycle '{{cycle_name}}' is open. Due: {{due_date}}."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: review-events
path: "/halliburton/performanceReviews"
operations:
- name: create-review-event
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/hr/channels/managers/messages"
operations:
- name: broadcast-review
method: POST
When an employee changes role in Workday, updates their Okta group memberships to reflect the new job function and department.
naftiko: "0.5"
info:
label: "Workday Role Change and Okta Group Sync"
description: "When an employee changes role in Workday, updates their Okta group memberships to reflect the new job function and department."
tags:
- hr
- identity
- workday
- okta
- access-management
capability:
exposes:
- type: mcp
namespace: hr-access
port: 8080
tools:
- name: sync-role-change
description: "Given an Okta user ID, old group ID, and new group ID, remove the user from the old group and add them to the new group reflecting their role change."
inputParameters:
- name: okta_user_id
in: body
type: string
description: "The Okta user ID of the employee changing roles."
- name: old_group_id
in: body
type: string
description: "The Okta group ID to remove the user from."
- name: new_group_id
in: body
type: string
description: "The Okta group ID to add the user to for their new role."
steps:
- name: remove-old-group
type: call
call: okta.remove-from-group
with:
user_id: "{{okta_user_id}}"
group_id: "{{old_group_id}}"
- name: add-new-group
type: call
call: okta-assign.add-to-group
with:
user_id: "{{okta_user_id}}"
group_id: "{{new_group_id}}"
consumes:
- type: http
namespace: okta
baseUri: "https://halliburton.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: group-members
path: "/groups/{{group_id}}/users/{{user_id}}"
inputParameters:
- name: group_id
in: path
- name: user_id
in: path
operations:
- name: remove-from-group
method: DELETE
- type: http
namespace: okta-assign
baseUri: "https://halliburton.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: group-members
path: "/groups/{{group_id}}/users/{{user_id}}"
inputParameters:
- name: group_id
in: path
- name: user_id
in: path
operations:
- name: add-to-group
method: PUT
When an employee is terminated in Workday, deactivates their Okta account and notifies the security team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Workday Termination to Okta Deprovisioning"
description: "When an employee is terminated in Workday, deactivates their Okta account and notifies the security team via Microsoft Teams."
tags:
- hr
- security
- workday
- okta
- microsoft-teams
- identity
capability:
exposes:
- type: mcp
namespace: hr-security
port: 8080
tools:
- name: deprovision-terminated-employee
description: "Given a Workday worker ID for a terminated employee, deactivate their Okta account and notify the security team."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID."
steps:
- name: get-worker
type: call
call: workday.get-worker
with:
worker_id: "{{worker_id}}"
- name: deactivate-okta
type: call
call: okta.deactivate-user
with:
login: "{{get-worker.work_email}}"
- name: notify-security
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_security_channel_id"
text: "Okta account deactivated for {{get-worker.full_name}} — termination processed from Workday."
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: okta
baseUri: "https://halliburton.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_token"
resources:
- name: users
path: "/users/{{login}}/lifecycle/deactivate"
inputParameters:
- name: login
in: path
operations:
- name: deactivate-user
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Retrieves an employee time off balance from Workday, returning available PTO days, sick leave, and floating holidays.
naftiko: "0.5"
info:
label: "Workday Time Off Balance Lookup"
description: "Retrieves an employee time off balance from Workday, returning available PTO days, sick leave, and floating holidays."
tags:
- hr
- workday
- time-management
capability:
exposes:
- type: mcp
namespace: hr-time
port: 8080
tools:
- name: get-time-off-balance
description: "Look up an employee time off balance in Workday. Returns available PTO, sick leave, and floating holidays."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID."
call: workday.get-time-off-balance
with:
worker_id: "{{worker_id}}"
outputParameters:
- name: pto_balance
type: number
mapping: "$.timeOffBalance.pto"
- name: sick_leave
type: number
mapping: "$.timeOffBalance.sickLeave"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: time-off
path: "/workers/{{worker_id}}/timeOffBalance"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-time-off-balance
method: GET