Berkshire Hathaway Capabilities
Naftiko 0.5 capability definitions for Berkshire Hathaway - 100 capabilities showing integration workflows and service orchestrations.
Runs IBNR model in Snowflake and publishes results to Power BI.
naftiko: "0.5"
info:
label: "Actuarial IBNR Reserve Estimation"
description: "Runs IBNR model in Snowflake and publishes results to Power BI."
tags:
- insurance
- actuarial
- claims
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: ibnr-ops
port: 8080
tools:
- name: estimate-ibnr
description: "Estimate IBNR reserves."
inputParameters:
- name: lob
in: body
type: string
description: "LOB."
- name: year
in: body
type: integer
description: "Accident year."
steps:
- name: model
type: call
call: "snowflake.query"
with:
query: "CALL ESTIMATE_IBNR('{{lob}}',{{year}})"
- name: refresh
type: call
call: "powerbi.refresh"
with:
group_id: "$secrets.pbi_actuarial"
dataset_id: "$secrets.pbi_ibnr"
consumes:
- type: http
namespace: snowflake
baseUri: "https://berkshire.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/groups/{{group_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: group_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh
method: POST
Queries Snowflake for loss and premium data and refreshes Power BI dashboard.
naftiko: "0.5"
info:
label: "Actuarial Loss Ratio Dashboard Sync"
description: "Queries Snowflake for loss and premium data and refreshes Power BI dashboard."
tags:
- insurance
- actuarial
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: lossratio-ops
port: 8080
tools:
- name: sync-ratios
description: "Sync loss ratios."
inputParameters:
- name: lob
in: body
type: string
description: "LOB."
- name: period
in: body
type: string
description: "YYYY-MM."
steps:
- name: query
type: call
call: "snowflake.query"
with:
query: "SELECT SUM(loss),SUM(premium) FROM LOSS_TRIANGLE WHERE lob='{{lob}}'"
- name: refresh
type: call
call: "powerbi.refresh"
with:
group_id: "$secrets.pbi_actuarial"
dataset_id: "$secrets.pbi_lossratio"
consumes:
- type: http
namespace: snowflake
baseUri: "https://berkshire.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/groups/{{group_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: group_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh
method: POST
Retrieves mortality rate data for age, gender, and table version for life insurance pricing.
naftiko: "0.5"
info:
label: "Actuarial Mortality Table Lookup"
description: "Retrieves mortality rate data for age, gender, and table version for life insurance pricing."
tags:
- insurance
- actuarial
- life
capability:
exposes:
- type: mcp
namespace: mortality-ops
port: 8080
tools:
- name: get-rate
description: "Look up mortality rate. Returns rate and expectancy."
inputParameters:
- name: age
in: body
type: integer
description: "Insured age."
- name: gender
in: body
type: string
description: "Gender."
- name: table
in: body
type: string
description: "Table version."
call: "actuarial-api.get-rate"
with:
age: "{{age}}"
gender: "{{gender}}"
table: "{{table}}"
outputParameters:
- name: rate
type: number
mapping: "$.annualMortalityRate"
- name: expectancy
type: number
mapping: "$.lifeExpectancy"
consumes:
- type: http
namespace: actuarial-api
baseUri: "https://api.berkshirehathaway.com/actuarial/v1"
authentication:
type: bearer
token: "$secrets.actuarial_api_token"
resources:
- name: mortality
path: "/mortality-tables/{{table}}/rates"
inputParameters:
- name: table
in: path
operations:
- name: get-rate
method: GET
Triggers quarterly reserve calculations in Snowflake, validates results, and publishes to Power BI.
naftiko: "0.5"
info:
label: "Actuarial Reserve Calculation Trigger"
description: "Triggers quarterly reserve calculations in Snowflake, validates results, and publishes to Power BI."
tags:
- insurance
- actuarial
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: reserve-ops
port: 8080
tools:
- name: run-reserves
description: "Run quarterly reserves. Executes and refreshes dashboard."
inputParameters:
- name: lob
in: body
type: string
description: "LOB."
- name: quarter
in: body
type: string
description: "YYYY-Q."
steps:
- name: calc
type: call
call: "snowflake.query"
with:
query: "CALL CALCULATE_RESERVES('{{lob}}','{{quarter}}')"
- name: validate
type: call
call: "snowflake.query"
with:
query: "SELECT * FROM RESERVE_VALIDATION WHERE lob='{{lob}}'"
- name: refresh
type: call
call: "powerbi.refresh"
with:
group_id: "$secrets.pbi_group"
dataset_id: "$secrets.pbi_reserves"
consumes:
- type: http
namespace: snowflake
baseUri: "https://berkshire.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/groups/{{group_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: group_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh
method: POST
Validates address, updates policy, and recalculates premium.
naftiko: "0.5"
info:
label: "Address Change Workflow"
description: "Validates address, updates policy, and recalculates premium."
tags:
- insurance
- policy
- salesforce
- underwriting
capability:
exposes:
- type: mcp
namespace: addr-ops
port: 8080
tools:
- name: change-address
description: "Process address change."
inputParameters:
- name: policy
in: body
type: string
description: "Policy."
- name: address
in: body
type: string
description: "Address."
- name: zip
in: body
type: string
description: "ZIP."
steps:
- name: validate
type: call
call: "address-api.validate"
with:
address: "{{address}}"
zip: "{{zip}}"
- name: update
type: call
call: "salesforce.update"
with:
policy: "{{policy}}"
address: "{{validate.standardized}}"
- name: recalc
type: call
call: "rating.recalc"
with:
policy: "{{policy}}"
consumes:
- type: http
namespace: address-api
baseUri: "https://api.berkshirehathaway.com/address/v1"
authentication:
type: bearer
token: "$secrets.address_token"
resources:
- name: validation
path: "/validate"
operations:
- name: validate
method: POST
- type: http
namespace: salesforce
baseUri: "https://berkshire.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: policies
path: "/sobjects/Policy__c"
operations:
- name: update
method: PATCH
- type: http
namespace: rating
baseUri: "https://api.berkshirehathaway.com/rating/v2"
authentication:
type: bearer
token: "$secrets.rating_token"
resources:
- name: recalc
path: "/recalculate"
operations:
- name: recalc
method: POST
Retrieves active insurance licenses for an agent including states, authority, and expirations.
naftiko: "0.5"
info:
label: "Agent License Status Lookup"
description: "Retrieves active insurance licenses for an agent including states, authority, and expirations."
tags:
- insurance
- compliance
- agent
capability:
exposes:
- type: mcp
namespace: license-ops
port: 8080
tools:
- name: get-licenses
description: "Look up agent licenses. Returns states, authority, expirations."
inputParameters:
- name: agent_id
in: body
type: string
description: "Agent identifier."
call: "compliance-api.get-licenses"
with:
agent_id: "{{agent_id}}"
outputParameters:
- name: licenses
type: array
mapping: "$.licenses"
- name: next_expiry
type: string
mapping: "$.nearestExpiration"
- name: count
type: integer
mapping: "$.activeCount"
consumes:
- type: http
namespace: compliance-api
baseUri: "https://api.berkshirehathaway.com/compliance/v1"
authentication:
type: bearer
token: "$secrets.compliance_api_token"
resources:
- name: licenses
path: "/agents/{{agent_id}}/licenses"
inputParameters:
- name: agent_id
in: path
operations:
- name: get-licenses
method: GET
Retrieves an insurance policy document from SharePoint and uses OpenAI to generate a structured executive summary of coverage terms, exclusions, and key dates for GEICO or other Berkshire insurance subsidiaries.
naftiko: "0.5"
info:
label: "AI-Assisted Insurance Policy Document Summarization"
description: "Retrieves an insurance policy document from SharePoint and uses OpenAI to generate a structured executive summary of coverage terms, exclusions, and key dates for GEICO or other Berkshire insurance subsidiaries."
tags:
- ai
- insurance
- openai
- sharepoint
- document-processing
- geico
capability:
exposes:
- type: mcp
namespace: policy-ai
port: 8080
tools:
- name: summarize-policy-document
description: "Given a SharePoint site ID and document item ID for an insurance policy or endorsement, retrieve the document and generate a 5-point executive summary using OpenAI. Use for rapid advisor review or customer service."
inputParameters:
- name: site_id
in: body
type: string
description: "The SharePoint site ID where the policy document is stored."
- name: item_id
in: body
type: string
description: "The SharePoint drive item ID for the policy document."
- name: document_type
in: body
type: string
description: "Document type: 'auto policy', 'homeowners policy', 'commercial policy', 'reinsurance treaty', 'endorsement'."
steps:
- name: get-document
type: call
call: "sharepoint.get-document-content"
with:
site_id: "{{site_id}}"
item_id: "{{item_id}}"
- name: generate-summary
type: call
call: "openai.create-chat-completion"
with:
model: "gpt-4o"
system_prompt: "You are an expert insurance analyst. Summarize this {{document_type}} document in 5 bullet points covering coverage limits, exclusions, deductibles, key dates, and any notable conditions."
user_message: "{{get-document.content}}"
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: document-content
path: "/sites/{{site_id}}/drive/items/{{item_id}}/content"
inputParameters:
- name: site_id
in: path
- name: item_id
in: path
operations:
- name: get-document-content
method: GET
- type: http
namespace: openai
baseUri: "https://api.openai.com/v1"
authentication:
type: bearer
token: "$secrets.openai_api_key"
resources:
- name: chat-completions
path: "/chat/completions"
operations:
- name: create-chat-completion
method: POST
Monitors Datadog latency, creates PagerDuty incident, and alerts engineering.
naftiko: "0.5"
info:
label: "API Latency Alert Workflow"
description: "Monitors Datadog latency, creates PagerDuty incident, and alerts engineering."
tags:
- engineering
- datadog
- pagerduty
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: latency-ops
port: 8080
tools:
- name: check-latency
description: "Check API latency."
inputParameters:
- name: service
in: body
type: string
description: "Service."
- name: threshold
in: body
type: integer
description: "Threshold ms."
steps:
- name: get
type: call
call: "datadog.query"
with:
query: "p99:trace.http.request{service:{{service}}}"
- name: incident
type: call
call: "pagerduty.create-incident"
with:
service_id: "$secrets.eng_pd"
title: "Latency: {{service}}"
- name: notify
type: call
call: "msteams.post"
with:
channel_id: "$secrets.eng_channel"
text: "Latency: {{service}} > {{threshold}}ms"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
resources:
- name: metrics
path: "/query"
operations:
- name: query
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: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
Dispatches appraiser, creates work order, and notifies adjuster.
naftiko: "0.5"
info:
label: "Appraisal Vendor Dispatch Workflow"
description: "Dispatches appraiser, creates work order, and notifies adjuster."
tags:
- insurance
- claims
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: appraisal-ops
port: 8080
tools:
- name: dispatch
description: "Dispatch appraiser."
inputParameters:
- name: claim_id
in: body
type: string
description: "Claim."
- name: address
in: body
type: string
description: "Address."
- name: loss
in: body
type: string
description: "Loss type."
steps:
- name: find
type: call
call: "vendor-api.find"
with:
location: "{{address}}"
specialty: "{{loss}}"
- name: wo
type: call
call: "servicenow.create-wo"
with:
short_description: "Appraisal: {{claim_id}}"
- name: notify
type: call
call: "msteams.post"
with:
channel_id: "$secrets.claims_channel"
text: "Appraiser: {{claim_id}}"
consumes:
- type: http
namespace: vendor-api
baseUri: "https://api.berkshirehathaway.com/vendors/v1"
authentication:
type: bearer
token: "$secrets.vendor_token"
resources:
- name: appraisers
path: "/appraisers/search"
operations:
- name: find
method: GET
- type: http
namespace: servicenow
baseUri: "https://berkshire.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: work-orders
path: "/table/wm_order"
operations:
- name: create-wo
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
Gathers data from Snowflake, compiles Confluence package, and notifies compliance.
naftiko: "0.5"
info:
label: "Compliance Audit Preparation Workflow"
description: "Gathers data from Snowflake, compiles Confluence package, and notifies compliance."
tags:
- insurance
- compliance
- snowflake
- confluence
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: audit-ops
port: 8080
tools:
- name: prepare-audit
description: "Prepare audit."
inputParameters:
- name: state
in: body
type: string
description: "State."
- name: start
in: body
type: string
description: "Start."
- name: end
in: body
type: string
description: "End."
steps:
- name: gather
type: call
call: "snowflake.query"
with:
query: "CALL PREPARE_AUDIT('{{state}}','{{start}}','{{end}}')"
- name: package
type: call
call: "confluence.create-page"
with:
space_key: "COMPLIANCE"
title: "Audit: {{state}}"
- name: notify
type: call
call: "msteams.post"
with:
channel_id: "$secrets.compliance_channel"
text: "Audit ready: {{state}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://berkshire.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: confluence
baseUri: "https://berkshirehathaway.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
Queries Azure costs and publishes allocation to Confluence.
naftiko: "0.5"
info:
label: "Azure Cost Allocation Report Workflow"
description: "Queries Azure costs and publishes allocation to Confluence."
tags:
- cloud
- finance
- microsoft-azure
- confluence
capability:
exposes:
- type: mcp
namespace: cost-ops
port: 8080
tools:
- name: gen-report
description: "Generate cost report."
inputParameters:
- name: period
in: body
type: string
description: "YYYY-MM."
steps:
- name: costs
type: call
call: "azure-cost.get-usage"
with:
period: "{{period}}"
- name: publish
type: call
call: "confluence.create-page"
with:
space_key: "FINOPS"
title: "Azure Costs {{period}}"
consumes:
- type: http
namespace: azure-cost
baseUri: "https://management.azure.com"
authentication:
type: bearer
token: "$secrets.azure_token"
resources:
- name: usage
path: "/subscriptions/$secrets.azure_sub/providers/Microsoft.CostManagement/query"
operations:
- name: get-usage
method: POST
- type: http
namespace: confluence
baseUri: "https://berkshirehathaway.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
Calculates BI reserve, updates claim, and notifies manager.
naftiko: "0.5"
info:
label: "Bodily Injury Reserve Calculator"
description: "Calculates BI reserve, updates claim, and notifies manager."
tags:
- insurance
- claims
- actuarial
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: bi-reserve
port: 8080
tools:
- name: calc-bi
description: "Calculate BI reserve."
inputParameters:
- name: claim_id
in: body
type: string
description: "Claim."
- name: injury
in: body
type: string
description: "Injury."
- name: jurisdiction
in: body
type: string
description: "State."
steps:
- name: calc
type: call
call: "reserve-engine.calc"
with:
injury: "{{injury}}"
jurisdiction: "{{jurisdiction}}"
- name: update
type: call
call: "servicenow.update"
with:
claim_id: "{{claim_id}}"
reserve: "{{calc.amount}}"
- name: notify
type: call
call: "msteams.post"
with:
channel_id: "$secrets.claims_mgr"
text: "BI: {{claim_id}} = ${{calc.amount}}"
consumes:
- type: http
namespace: reserve-engine
baseUri: "https://api.berkshirehathaway.com/actuarial/v1"
authentication:
type: bearer
token: "$secrets.actuarial_api_token"
resources:
- name: bi-reserves
path: "/reserves/bodily-injury"
operations:
- name: calc
method: POST
- type: http
namespace: servicenow
baseUri: "https://berkshire.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: reserves
path: "/table/sn_claim_reserve/{{claim_id}}"
inputParameters:
- name: claim_id
in: path
operations:
- name: update
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/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
Queries affected policies in Snowflake, creates ServiceNow incident, and broadcasts alerts via Microsoft Teams.
naftiko: "0.5"
info:
label: "Catastrophe Event Response Handler"
description: "Queries affected policies in Snowflake, creates ServiceNow incident, and broadcasts alerts via Microsoft Teams."
tags:
- insurance
- claims
- catastrophe
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: cat-ops
port: 8080
tools:
- name: activate-cat
description: "Activate CAT response."
inputParameters:
- name: event
in: body
type: string
description: "Event name."
- name: zips
in: body
type: string
description: "Affected ZIPs."
- name: type
in: body
type: string
description: "Event type."
steps:
- name: count
type: call
call: "snowflake.query"
with:
query: "SELECT COUNT(*) FROM POLICIES WHERE zip IN ('{{zips}}')"
- name: incident
type: call
call: "servicenow.create-incident"
with:
short_description: "CAT: {{event}}"
priority: "1"
- name: broadcast
type: call
call: "msteams.post"
with:
channel_id: "$secrets.cat_channel"
text: "CAT: {{event}}. Incident: {{incident.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://berkshire.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: servicenow
baseUri: "https://berkshire.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
Executes CAT model in Snowflake and publishes PML to Power BI.
naftiko: "0.5"
info:
label: "Catastrophe Model Run Workflow"
description: "Executes CAT model in Snowflake and publishes PML to Power BI."
tags:
- insurance
- actuarial
- catastrophe
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: cat-model
port: 8080
tools:
- name: run-cat
description: "Run CAT model."
inputParameters:
- name: peril
in: body
type: string
description: "Peril."
- name: region
in: body
type: string
description: "Region."
steps:
- name: execute
type: call
call: "snowflake.query"
with:
query: "CALL RUN_CAT_MODEL('{{peril}}','{{region}}')"
- name: refresh
type: call
call: "powerbi.refresh"
with:
group_id: "$secrets.pbi_cat"
dataset_id: "$secrets.pbi_cat_model"
consumes:
- type: http
namespace: snowflake
baseUri: "https://berkshire.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/groups/{{group_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: group_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh
method: POST
Evaluates loss type and adjuster workload, assigns optimal adjuster in Salesforce, and notifies via Microsoft Teams.
naftiko: "0.5"
info:
label: "Claims Adjuster Assignment Router"
description: "Evaluates loss type and adjuster workload, assigns optimal adjuster in Salesforce, and notifies via Microsoft Teams."
tags:
- insurance
- claims
- salesforce
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: claims-route
port: 8080
tools:
- name: route-claim
description: "Route claim to best adjuster. Checks capacity, assigns, notifies."
inputParameters:
- name: claim_id
in: body
type: string
description: "Claim ID."
- name: loss_type
in: body
type: string
description: "Loss type."
steps:
- name: get-capacity
type: call
call: "workday.get-capacity"
with:
department: "claims-{{loss_type}}"
- name: assign
type: call
call: "salesforce.assign"
with:
claim_id: "{{claim_id}}"
adjuster: "{{get-capacity.id}}"
- name: notify
type: call
call: "msteams.post"
with:
channel_id: "$secrets.claims_channel"
text: "Claim {{claim_id}} ({{loss_type}}) assigned."
consumes:
- type: http
namespace: workday
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/berkshire"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: capacity
path: "/staffing/teamCapacity"
operations:
- name: get-capacity
method: GET
- type: http
namespace: salesforce
baseUri: "https://berkshire.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: claims
path: "/sobjects/Claim__c/{{claim_id}}"
inputParameters:
- name: claim_id
in: path
operations:
- name: assign
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/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
Places litigation hold on documents, creates legal case, and notifies legal team.
naftiko: "0.5"
info:
label: "Claims Litigation Hold Workflow"
description: "Places litigation hold on documents, creates legal case, and notifies legal team."
tags:
- insurance
- claims
- compliance
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: lit-ops
port: 8080
tools:
- name: initiate-hold
description: "Place litigation hold."
inputParameters:
- name: claim_id
in: body
type: string
description: "Claim."
- name: attorney
in: body
type: string
description: "Opposing counsel."
steps:
- name: hold
type: call
call: "document-api.create-hold"
with:
claim_id: "{{claim_id}}"
type: "litigation"
- name: case
type: call
call: "servicenow.create-case"
with:
short_description: "Litigation: {{claim_id}}"
- name: notify
type: call
call: "msteams.post"
with:
channel_id: "$secrets.legal_channel"
text: "Hold: {{claim_id}}. Case: {{case.number}}"
consumes:
- type: http
namespace: document-api
baseUri: "https://api.berkshirehathaway.com/documents/v1"
authentication:
type: bearer
token: "$secrets.document_api_token"
resources:
- name: holds
path: "/holds"
operations:
- name: create-hold
method: POST
- type: http
namespace: servicenow
baseUri: "https://berkshire.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cases
path: "/table/sn_legal_case"
operations:
- name: create-case
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
Generates medical record request, creates tracking, and sets Jira follow-up.
naftiko: "0.5"
info:
label: "Claims Medical Record Request Workflow"
description: "Generates medical record request, creates tracking, and sets Jira follow-up."
tags:
- insurance
- claims
- servicenow
- jira
capability:
exposes:
- type: mcp
namespace: medrecord-ops
port: 8080
tools:
- name: request-records
description: "Request medical records."
inputParameters:
- name: claim_id
in: body
type: string
description: "Claim."
- name: provider
in: body
type: string
description: "Provider."
- name: claimant
in: body
type: string
description: "Claimant."
steps:
- name: gen
type: call
call: "document-api.generate"
with:
claim_id: "{{claim_id}}"
provider: "{{provider}}"
- name: track
type: call
call: "servicenow.create-record"
with:
table: "u_med_request"
claim_id: "{{claim_id}}"
- name: followup
type: call
call: "jira.create-issue"
with:
project_key: "CLAIMS"
issuetype: "Task"
summary: "Med records: {{claim_id}}"
consumes:
- type: http
namespace: document-api
baseUri: "https://api.berkshirehathaway.com/documents/v1"
authentication:
type: bearer
token: "$secrets.document_api_token"
resources:
- name: medical
path: "/generate/medical-request"
operations:
- name: generate
method: POST
- type: http
namespace: servicenow
baseUri: "https://berkshire.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/u_med_request"
operations:
- name: create-record
method: POST
- type: http
namespace: jira
baseUri: "https://berkshirehathaway.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Validates payment against limits, processes disbursement, and updates claim in ServiceNow.
naftiko: "0.5"
info:
label: "Claims Payment Processing Workflow"
description: "Validates payment against limits, processes disbursement, and updates claim in ServiceNow."
tags:
- insurance
- claims
- payments
- servicenow
capability:
exposes:
- type: mcp
namespace: payment-ops
port: 8080
tools:
- name: process-payment
description: "Process claims payment."
inputParameters:
- name: claim_id
in: body
type: string
description: "Claim ID."
- name: amount
in: body
type: number
description: "Amount."
- name: payee
in: body
type: string
description: "Recipient."
steps:
- name: validate
type: call
call: "claims-api.validate"
with:
claim_id: "{{claim_id}}"
amount: "{{amount}}"
- name: disburse
type: call
call: "payment-api.disburse"
with:
claim_id: "{{claim_id}}"
amount: "{{amount}}"
- name: update
type: call
call: "servicenow.update"
with:
claim_id: "{{claim_id}}"
status: "disbursed"
consumes:
- type: http
namespace: claims-api
baseUri: "https://api.berkshirehathaway.com/claims/v2"
authentication:
type: bearer
token: "$secrets.claims_api_token"
resources:
- name: validation
path: "/payments/validate"
operations:
- name: validate
method: POST
- type: http
namespace: payment-api
baseUri: "https://api.berkshirehathaway.com/payments/v1"
authentication:
type: bearer
token: "$secrets.payment_api_token"
resources:
- name: disbursements
path: "/disbursements"
operations:
- name: disburse
method: POST
- type: http
namespace: servicenow
baseUri: "https://berkshire.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cases
path: "/table/sn_customerservice_case/{{claim_id}}"
inputParameters:
- name: claim_id
in: path
operations:
- name: update
method: PATCH
Validates adjuster authority, updates reserve in ServiceNow, and notifies claims manager.
naftiko: "0.5"
info:
label: "Claims Reserve Adjustment Workflow"
description: "Validates adjuster authority, updates reserve in ServiceNow, and notifies claims manager."
tags:
- insurance
- claims
- actuarial
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: reserve-adj
port: 8080
tools:
- name: adjust-reserve
description: "Adjust claim reserve."
inputParameters:
- name: claim_id
in: body
type: string
description: "Claim."
- name: amount
in: body
type: number
description: "New reserve."
- name: adjuster
in: body
type: string
description: "Adjuster."
steps:
- name: check
type: call
call: "claims-api.check-auth"
with:
adjuster: "{{adjuster}}"
amount: "{{amount}}"
- name: update
type: call
call: "servicenow.update-reserve"
with:
claim_id: "{{claim_id}}"
reserve: "{{amount}}"
- name: notify
type: call
call: "msteams.post"
with:
channel_id: "$secrets.claims_mgr"
text: "Reserve: {{claim_id}} = ${{amount}}"
consumes:
- type: http
namespace: claims-api
baseUri: "https://api.berkshirehathaway.com/claims/v2"
authentication:
type: bearer
token: "$secrets.claims_api_token"
resources:
- name: authority
path: "/authority/check"
operations:
- name: check-auth
method: POST
- type: http
namespace: servicenow
baseUri: "https://berkshire.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: reserves
path: "/table/sn_claim_reserve/{{claim_id}}"
inputParameters:
- name: claim_id
in: path
operations:
- name: update-reserve
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/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
Retrieves current claim status from ServiceNow including state, adjuster, and last update.
naftiko: "0.5"
info:
label: "Claims Status Inquiry"
description: "Retrieves current claim status from ServiceNow including state, adjuster, and last update."
tags:
- insurance
- claims
- servicenow
capability:
exposes:
- type: mcp
namespace: claims-ops
port: 8080
tools:
- name: get-claim-status
description: "Look up claim status by number. Returns state, adjuster, last activity. Use for claim inquiries."
inputParameters:
- name: claim_number
in: body
type: string
description: "Berkshire Hathaway claim number."
call: "servicenow.get-case"
with:
claim_number: "{{claim_number}}"
outputParameters:
- name: state
type: string
mapping: "$.state"
- name: adjuster
type: string
mapping: "$.assigned_to.display_value"
- name: last_activity
type: string
mapping: "$.sys_updated_on"
consumes:
- type: http
namespace: servicenow
baseUri: "https://berkshire.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cases
path: "/table/sn_customerservice_case/{{claim_number}}"
inputParameters:
- name: claim_number
in: path
operations:
- name: get-case
method: GET
When an AWS cost anomaly is detected across Berkshire Hathaway's subsidiary accounts, annotates it in Datadog, opens a ServiceNow change request, and notifies the FinOps team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Cloud Cost Anomaly Response"
description: "When an AWS cost anomaly is detected across Berkshire Hathaway's subsidiary accounts, annotates it in Datadog, opens a ServiceNow change request, and notifies the FinOps team via Microsoft Teams."
tags:
- finops
- cloud
- aws
- datadog
- servicenow
- cost-management
capability:
exposes:
- type: mcp
namespace: finops
port: 8080
tools:
- name: handle-cost-anomaly
description: "Given an AWS service name, overage amount, and subsidiary account ID, create a Datadog annotation, open a ServiceNow FinOps change request, and alert the Cloud Cost Management Teams channel."
inputParameters:
- name: aws_service
in: body
type: string
description: "AWS service reporting the anomaly, e.g. 'Amazon EC2', 'AWS S3'."
- name: overage_usd
in: body
type: number
description: "Estimated cost overage in USD."
- name: account_id
in: body
type: string
description: "The AWS account ID (subsidiary account) where the anomaly occurred."
- name: subsidiary
in: body
type: string
description: "The Berkshire subsidiary that owns the account, e.g. 'GEICO', 'BNSF'."
steps:
- name: annotate-datadog
type: call
call: "datadog.create-event"
with:
title: "AWS Cost Anomaly: {{aws_service}} [{{subsidiary}}]"
text: "Account {{account_id}} — overage: ${{overage_usd}}"
alert_type: "warning"
- name: open-change-request
type: call
call: "servicenow.create-change"
with:
short_description: "FinOps review: {{aws_service}} overage ${{overage_usd}} — {{subsidiary}}"
category: "finops"
justification: "AWS anomaly on account {{account_id}}"
- name: notify-finops
type: call
call: "msteams.post-channel-message"
with:
channel: "cloud-cost-management"
message: "Cost anomaly: {{aws_service}} [{{subsidiary}}] | Overage: ${{overage_usd}} | SNOW: {{open-change-request.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: events
path: "/events"
operations:
- name: create-event
method: POST
- type: http
namespace: servicenow
baseUri: "https://berkshirehathaway.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: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Screens applicants against AML watchlists, logs results, and escalates matches.
naftiko: "0.5"
info:
label: "Compliance AML Screening Workflow"
description: "Screens applicants against AML watchlists, logs results, and escalates matches."
tags:
- insurance
- compliance
- fraud
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: aml-ops
port: 8080
tools:
- name: screen-aml
description: "Screen for AML."
inputParameters:
- name: name
in: body
type: string
description: "Applicant name."
- name: app_id
in: body
type: string
description: "Application ID."
steps:
- name: screen
type: call
call: "aml-api.screen"
with:
name: "{{name}}"
ref: "{{app_id}}"
- name: log
type: call
call: "servicenow.create-record"
with:
table: "u_aml"
result: "{{screen.status}}"
- name: alert
type: call
call: "msteams.post"
with:
channel_id: "$secrets.compliance_channel"
text: "AML: {{name}} - {{screen.status}}"
consumes:
- type: http
namespace: aml-api
baseUri: "https://api.berkshirehathaway.com/compliance/aml/v1"
authentication:
type: bearer
token: "$secrets.aml_api_token"
resources:
- name: screening
path: "/screen"
operations:
- name: screen
method: POST
- type: http
namespace: servicenow
baseUri: "https://berkshire.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/u_aml"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
Monitors regulatory filing deadlines, generates Confluence summary, and alerts compliance via Microsoft Teams.
naftiko: "0.5"
info:
label: "Compliance Regulatory Filing Tracker"
description: "Monitors regulatory filing deadlines, generates Confluence summary, and alerts compliance via Microsoft Teams."
tags:
- insurance
- compliance
- confluence
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: compliance-ops
port: 8080
tools:
- name: check-filings
description: "Check filing deadlines and notify."
inputParameters:
- name: days_ahead
in: body
type: integer
description: "Days ahead."
- name: state
in: body
type: string
description: "State or ALL."
steps:
- name: get-filings
type: call
call: "compliance-api.get-filings"
with:
days: "{{days_ahead}}"
state: "{{state}}"
- name: create-page
type: call
call: "confluence.create-page"
with:
space_key: "COMPLIANCE"
title: "Filings Next {{days_ahead}} Days"
- name: notify
type: call
call: "msteams.post"
with:
channel_id: "$secrets.compliance_channel"
text: "{{get-filings.count}} filings due."
consumes:
- type: http
namespace: compliance-api
baseUri: "https://api.berkshirehathaway.com/compliance/v1"
authentication:
type: bearer
token: "$secrets.compliance_api_token"
resources:
- name: filings
path: "/filings/upcoming"
operations:
- name: get-filings
method: GET
- type: http
namespace: confluence
baseUri: "https://berkshirehathaway.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
Retrieves Confluence page content by ID returning title, body, and last modified.
naftiko: "0.5"
info:
label: "Confluence Page Content Lookup"
description: "Retrieves Confluence page content by ID returning title, body, and last modified."
tags:
- knowledge-management
- confluence
capability:
exposes:
- type: mcp
namespace: content-ops
port: 8080
tools:
- name: get-page
description: "Look up Confluence page."
inputParameters:
- name: page_id
in: body
type: string
description: "Page ID."
call: "confluence.get-page"
with:
page_id: "{{page_id}}"
outputParameters:
- name: title
type: string
mapping: "$.title"
- name: body
type: string
mapping: "$.body.storage.value"
- name: modified
type: string
mapping: "$.version.when"
consumes:
- type: http
namespace: confluence
baseUri: "https://berkshirehathaway.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content/{{page_id}}"
inputParameters:
- name: page_id
in: path
operations:
- name: get-page
method: GET
When a critical Datadog alert fires for a Berkshire Hathaway technology platform, creates a ServiceNow P1 incident, pages the on-call engineer via PagerDuty, and posts a war-room notification in Microsoft Teams.
naftiko: "0.5"
info:
label: "Critical IT Incident Response Workflow"
description: "When a critical Datadog alert fires for a Berkshire Hathaway technology platform, creates a ServiceNow P1 incident, pages the on-call engineer via PagerDuty, and posts a war-room notification in Microsoft Teams."
tags:
- itsm
- incident-response
- datadog
- servicenow
- pagerduty
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: incident-ops
port: 8080
tools:
- name: handle-critical-incident
description: "Given a Datadog monitor ID, severity, and affected service, create a ServiceNow P1 incident, page PagerDuty on-call, and open a Teams war-room thread."
inputParameters:
- name: monitor_id
in: body
type: string
description: "The Datadog monitor ID that triggered the critical alert."
- name: affected_service
in: body
type: string
description: "Affected platform name, e.g. 'GEICO Claims Portal', 'BNSF Operations System'."
- name: alert_message
in: body
type: string
description: "The Datadog alert message describing the failure."
- name: subsidiary
in: body
type: string
description: "The Berkshire subsidiary owning the impacted system."
steps:
- name: create-p1-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "P1: {{affected_service}} [{{subsidiary}}] — {{alert_message}}"
urgency: "1"
impact: "1"
category: "infrastructure"
- name: page-oncall
type: call
call: "pagerduty.create-incident"
with:
title: "CRITICAL: {{affected_service}} — {{alert_message}}"
service_id: "$secrets.pagerduty_service_id"
severity: "critical"
body: "Monitor: {{monitor_id}} | SNOW: {{create-p1-incident.number}} | Subsidiary: {{subsidiary}}"
- name: open-war-room
type: call
call: "msteams.post-channel-message"
with:
channel: "incident-war-room"
message: "P1 INCIDENT: {{affected_service}} [{{subsidiary}}] | {{alert_message}} | SNOW: {{create-p1-incident.number}} | PD: {{page-oncall.id}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://berkshirehathaway.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: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.pagerduty_api_key"
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: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Analyzes coverage in Salesforce, identifies gaps, and creates cross-sell opportunities.
naftiko: "0.5"
info:
label: "Cross-Sell Opportunity Workflow"
description: "Analyzes coverage in Salesforce, identifies gaps, and creates cross-sell opportunities."
tags:
- insurance
- policy
- salesforce
- sales
capability:
exposes:
- type: mcp
namespace: cross-sell
port: 8080
tools:
- name: cross-sell
description: "Create cross-sell opportunities."
inputParameters:
- name: customer_id
in: body
type: string
description: "Customer ID."
steps:
- name: policies
type: call
call: "salesforce.get-policies"
with:
customer_id: "{{customer_id}}"
- name: gaps
type: call
call: "analytics.identify-gaps"
with:
customer_id: "{{customer_id}}"
- name: opp
type: call
call: "salesforce.create-opp"
with:
customer_id: "{{customer_id}}"
product: "{{gaps.recommended}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://berkshire.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: policies
path: "/query"
operations:
- name: get-policies
method: GET
- type: http
namespace: analytics
baseUri: "https://api.berkshirehathaway.com/analytics/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: gaps
path: "/coverage-gaps"
operations:
- name: identify-gaps
method: POST
- type: http
namespace: salesforce
baseUri: "https://berkshire.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity"
operations:
- name: create-opp
method: POST
Creates ServiceNow case, links to Salesforce policy, and notifies CX team.
naftiko: "0.5"
info:
label: "Customer Complaint Tracking Workflow"
description: "Creates ServiceNow case, links to Salesforce policy, and notifies CX team."
tags:
- insurance
- compliance
- servicenow
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: complaint-ops
port: 8080
tools:
- name: log-complaint
description: "Log complaint."
inputParameters:
- name: policy
in: body
type: string
description: "Policy."
- name: category
in: body
type: string
description: "Category."
- name: desc
in: body
type: string
description: "Description."
steps:
- name: case
type: call
call: "servicenow.create-case"
with:
short_description: "Complaint: {{category}} - {{policy}}"
description: "{{desc}}"
- name: link
type: call
call: "salesforce.create-note"
with:
policy: "{{policy}}"
note: "Complaint: {{case.number}}"
- name: notify
type: call
call: "msteams.post"
with:
channel_id: "$secrets.cx_channel"
text: "Complaint: {{policy}}. Case: {{case.number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://berkshire.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cases
path: "/table/sn_customerservice_case"
operations:
- name: create-case
method: POST
- type: http
namespace: salesforce
baseUri: "https://berkshire.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: notes
path: "/sobjects/CaseNote__c"
operations:
- name: create-note
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
Processes GDPR/CCPA requests by querying systems and logging in ServiceNow.
naftiko: "0.5"
info:
label: "Data Subject Request Workflow"
description: "Processes GDPR/CCPA requests by querying systems and logging in ServiceNow."
tags:
- insurance
- compliance
- privacy
- servicenow
capability:
exposes:
- type: mcp
namespace: dsar-ops
port: 8080
tools:
- name: process-dsar
description: "Process DSAR."
inputParameters:
- name: email
in: body
type: string
description: "Subject email."
- name: type
in: body
type: string
description: "Request type."
steps:
- name: sf
type: call
call: "salesforce.search"
with:
email: "{{email}}"
- name: claims
type: call
call: "claims-api.search"
with:
email: "{{email}}"
- name: log
type: call
call: "servicenow.create-record"
with:
table: "u_dsar"
email: "{{email}}"
type: "{{type}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://berkshire.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: search
path: "/search"
operations:
- name: search
method: GET
- type: http
namespace: claims-api
baseUri: "https://api.berkshirehathaway.com/claims/v2"
authentication:
type: bearer
token: "$secrets.claims_api_token"
resources:
- name: search
path: "/claims/search"
operations:
- name: search
method: GET
- type: http
namespace: servicenow
baseUri: "https://berkshire.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/u_dsar"
operations:
- name: create-record
method: POST
Queries Datadog for SLO compliance metrics across Berkshire Hathaway's production platforms and posts a daily availability and reliability digest to the Operations Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Datadog Platform SLO Digest"
description: "Queries Datadog for SLO compliance metrics across Berkshire Hathaway's production platforms and posts a daily availability and reliability digest to the Operations Microsoft Teams channel."
tags:
- observability
- monitoring
- datadog
- slo
- microsoft-teams
- reporting
capability:
exposes:
- type: mcp
namespace: platform-observability
port: 8080
tools:
- name: digest-platform-slos
description: "Query Datadog SLOs for the specified environment and time window, then post a structured daily health digest to the Operations Teams channel."
inputParameters:
- name: environment
in: body
type: string
description: "Target environment: 'production', 'staging', or 'dr'."
- name: time_window_hours
in: body
type: integer
description: "Look-back window in hours. Typically 24."
steps:
- name: get-slos
type: call
call: "datadog.list-slos"
with:
tags: "env:{{environment}}"
limit: "50"
- name: post-digest
type: call
call: "msteams.post-channel-message"
with:
channel: "platform-operations"
message: "SLO Report ({{environment}}, last {{time_window_hours}}h): {{get-slos.passing}} passing, {{get-slos.failing}} failing. Compliance: {{get-slos.compliance_pct}}%"
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: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves health metrics from Datadog including error rate, latency, and throughput.
naftiko: "0.5"
info:
label: "Datadog Service Health Lookup"
description: "Retrieves health metrics from Datadog including error rate, latency, and throughput."
tags:
- engineering
- datadog
- monitoring
capability:
exposes:
- type: mcp
namespace: health-ops
port: 8080
tools:
- name: get-health
description: "Look up service health."
inputParameters:
- name: service
in: body
type: string
description: "Service name."
call: "datadog.get-metrics"
with:
service: "{{service}}"
outputParameters:
- name: error_rate
type: number
mapping: "$.errorRate"
- name: latency
type: number
mapping: "$.p99Latency"
- name: throughput
type: number
mapping: "$.throughput"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
resources:
- name: metrics
path: "/query"
operations:
- name: get-metrics
method: GET
Checks Snowflake for duplicate claims and flags matches in ServiceNow.
naftiko: "0.5"
info:
label: "Duplicate Claims Detection Workflow"
description: "Checks Snowflake for duplicate claims and flags matches in ServiceNow."
tags:
- insurance
- fraud
- claims
- snowflake
- servicenow
capability:
exposes:
- type: mcp
namespace: dup-detect
port: 8080
tools:
- name: detect-dupes
description: "Detect duplicates."
inputParameters:
- name: claimant
in: body
type: string
description: "Claimant."
- name: loss_date
in: body
type: string
description: "Loss date."
- name: loss_type
in: body
type: string
description: "Loss type."
steps:
- name: search
type: call
call: "snowflake.query"
with:
query: "SELECT * FROM CLAIMS WHERE claimant='{{claimant}}' AND loss_date NEAR '{{loss_date}}'"
- name: flag
type: call
call: "servicenow.create-record"
with:
table: "u_fraud_alert"
type: "duplicate"
consumes:
- type: http
namespace: snowflake
baseUri: "https://berkshire.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: servicenow
baseUri: "https://berkshire.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/u_fraud_alert"
operations:
- name: create-record
method: POST
When an employee termination is recorded in Workday, disables their Microsoft 365 account, revokes Okta sessions, and opens a ServiceNow offboarding checklist ticket.
naftiko: "0.5"
info:
label: "Employee Offboarding and Access Revocation"
description: "When an employee termination is recorded in Workday, disables their Microsoft 365 account, revokes Okta sessions, and opens a ServiceNow offboarding checklist ticket."
tags:
- hr
- offboarding
- workday
- okta
- servicenow
- microsoft-graph
capability:
exposes:
- type: mcp
namespace: hr-offboarding
port: 8080
tools:
- name: trigger-employee-offboarding
description: "Given a Workday employee ID and termination date, disable the Microsoft 365 account, revoke all Okta sessions, and create a ServiceNow offboarding ticket for equipment recovery."
inputParameters:
- name: workday_employee_id
in: body
type: string
description: "The Workday worker ID for the departing employee."
- name: termination_date
in: body
type: string
description: "Employee's last day in ISO 8601 format (YYYY-MM-DD)."
steps:
- name: get-worker
type: call
call: "workday.get-worker"
with:
worker_id: "{{workday_employee_id}}"
- name: disable-m365
type: call
call: "msgraph.disable-user"
with:
user_id: "{{get-worker.work_email}}"
- name: revoke-okta
type: call
call: "okta.revoke-user-sessions"
with:
user_login: "{{get-worker.work_email}}"
- name: create-offboarding-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "Offboarding: {{get-worker.full_name}} — last day {{termination_date}}"
category: "hr_offboarding"
assignment_group: "IT_Asset_Recovery"
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: "/berkshire/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: msgraph
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: users
path: "/users/{{user_id}}"
inputParameters:
- name: user_id
in: path
operations:
- name: disable-user
method: PATCH
- type: http
namespace: okta
baseUri: "https://berkshirehathaway.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: user-sessions
path: "/users/{{user_login}}/sessions"
inputParameters:
- name: user_login
in: path
operations:
- name: revoke-user-sessions
method: DELETE
- type: http
namespace: servicenow
baseUri: "https://berkshirehathaway.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
Generates Jira backlog digest and posts to Microsoft Teams.
naftiko: "0.5"
info:
label: "Engineering Backlog Digest Workflow"
description: "Generates Jira backlog digest and posts to Microsoft Teams."
tags:
- engineering
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: backlog-ops
port: 8080
tools:
- name: gen-digest
description: "Generate digest."
inputParameters:
- name: board_id
in: body
type: string
description: "Board ID."
steps:
- name: sprint
type: call
call: "jira.get-sprint"
with:
board_id: "{{board_id}}"
- name: blockers
type: call
call: "jira.search"
with:
jql: "status=Blocked"
- name: post
type: call
call: "msteams.post"
with:
channel_id: "$secrets.eng_channel"
text: "Sprint: {{sprint.name}}. Blockers: {{blockers.total}}"
consumes:
- type: http
namespace: jira
baseUri: "https://berkshirehathaway.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: sprints
path: "/board/{{board_id}}/sprint"
inputParameters:
- name: board_id
in: path
operations:
- name: get-sprint
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/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
Creates SIU case in ServiceNow and alerts team via PagerDuty when fraud scoring flags a claim.
naftiko: "0.5"
info:
label: "Fraud Detection Alert to SIU"
description: "Creates SIU case in ServiceNow and alerts team via PagerDuty when fraud scoring flags a claim."
tags:
- insurance
- fraud
- servicenow
- pagerduty
capability:
exposes:
- type: mcp
namespace: fraud-ops
port: 8080
tools:
- name: escalate-fraud
description: "Escalate fraud alert. Creates case and PagerDuty alert."
inputParameters:
- name: claim_id
in: body
type: string
description: "Flagged claim."
- name: fraud_score
in: body
type: number
description: "Score 0-100."
- name: indicators
in: body
type: string
description: "Indicators."
steps:
- name: create-case
type: call
call: "servicenow.create-case"
with:
short_description: "Fraud: {{claim_id}} ({{fraud_score}})"
category: "fraud"
- name: alert
type: call
call: "pagerduty.create-incident"
with:
service_id: "$secrets.siu_service"
title: "Fraud: {{claim_id}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://berkshire.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cases
path: "/table/sn_si_incident"
operations:
- name: create-case
method: POST
- 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
Runs graph analytics in Snowflake to detect fraud rings, creates cases, and alerts SIU.
naftiko: "0.5"
info:
label: "Fraud Ring Detection Investigation"
description: "Runs graph analytics in Snowflake to detect fraud rings, creates cases, and alerts SIU."
tags:
- insurance
- fraud
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: fraud-ring
port: 8080
tools:
- name: detect-rings
description: "Detect fraud rings."
inputParameters:
- name: start
in: body
type: string
description: "Start date."
- name: end
in: body
type: string
description: "End date."
steps:
- name: detect
type: call
call: "snowflake.query"
with:
query: "CALL DETECT_FRAUD_RINGS('{{start}}','{{end}}')"
- name: case
type: call
call: "servicenow.create-case"
with:
short_description: "Fraud rings: {{start}} to {{end}}"
- name: alert
type: call
call: "msteams.post"
with:
channel_id: "$secrets.siu_channel"
text: "Rings detected. Case: {{case.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://berkshire.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: servicenow
baseUri: "https://berkshire.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cases
path: "/table/sn_si_incident"
operations:
- name: create-case
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
When a GitHub Actions deployment workflow fails on a production branch, creates a Jira incident ticket and posts a failure alert to the DevOps Microsoft Teams channel.
naftiko: "0.5"
info:
label: "GitHub Deployment Failure Handler"
description: "When a GitHub Actions deployment workflow fails on a production branch, creates a Jira incident ticket and posts a failure alert to the DevOps Microsoft Teams channel."
tags:
- devops
- ci-cd
- github
- jira
- microsoft-teams
- deployment
capability:
exposes:
- type: mcp
namespace: devops-cicd
port: 8080
tools:
- name: handle-deployment-failure
description: "Given a failed GitHub Actions workflow run ID and repository, retrieve failure details, create a Jira incident, and alert the DevOps Teams channel."
inputParameters:
- name: repo_full_name
in: body
type: string
description: "GitHub repository full name, e.g. 'berkshire-hathaway/geico-claims-service'."
- name: run_id
in: body
type: integer
description: "The GitHub Actions workflow run ID that failed."
- name: branch
in: body
type: string
description: "The target branch name, typically 'main' or 'release'."
steps:
- name: get-run
type: call
call: "github.get-workflow-run"
with:
repo: "{{repo_full_name}}"
run_id: "{{run_id}}"
- name: create-jira-incident
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Incident"
summary: "Deployment failure: {{repo_full_name}} on {{branch}}"
description: "Run ID: {{run_id}} | Status: {{get-run.conclusion}} | URL: {{get-run.html_url}}"
- name: alert-devops
type: call
call: "msteams.post-channel-message"
with:
channel: "devops-alerts"
message: "Deployment FAILED: {{repo_full_name}} | Branch: {{branch}} | Jira: {{create-jira-incident.key}} | Run: {{get-run.html_url}}"
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/{{run_id}}"
inputParameters:
- name: repo
in: path
- name: run_id
in: path
operations:
- name: get-workflow-run
method: GET
- type: http
namespace: jira
baseUri: "https://berkshirehathaway.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
On a pull request opened against a protected branch in a Berkshire Hathaway technology repository, posts a security checklist comment and creates a Jira security review ticket.
naftiko: "0.5"
info:
label: "GitHub Pull Request Security Review Gate"
description: "On a pull request opened against a protected branch in a Berkshire Hathaway technology repository, posts a security checklist comment and creates a Jira security review ticket."
tags:
- devops
- security
- github
- jira
- ci-cd
- compliance
capability:
exposes:
- type: mcp
namespace: pr-security
port: 8080
tools:
- name: handle-pr-security-gate
description: "Given a GitHub repository, PR number, and commit SHA, post a mandatory security review checklist comment on the PR and open a Jira security ticket for sign-off before merge."
inputParameters:
- name: repo_full_name
in: body
type: string
description: "GitHub repository full name, e.g. 'berkshire-hathaway/geico-api'."
- name: pr_number
in: body
type: integer
description: "The pull request number to gate."
- name: commit_sha
in: body
type: string
description: "The head commit SHA for the PR."
steps:
- name: get-pr
type: call
call: "github.get-pull-request"
with:
repo: "{{repo_full_name}}"
pull_number: "{{pr_number}}"
- name: post-checklist
type: call
call: "github.create-pr-comment"
with:
repo: "{{repo_full_name}}"
pull_number: "{{pr_number}}"
body: "Security review required for commit {{commit_sha}}. Jira ticket created for mandatory security sign-off before merge."
- name: create-security-ticket
type: call
call: "jira.create-issue"
with:
project_key: "SEC"
issuetype: "Task"
summary: "Security review: {{repo_full_name}} PR #{{pr_number}}"
description: "Commit: {{commit_sha}} | PR: {{get-pr.html_url}} | 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/{{pull_number}}"
inputParameters:
- name: repo
in: path
- name: pull_number
in: path
operations:
- name: get-pull-request
method: GET
- name: pr-comments
path: "/repos/{{repo}}/issues/{{pull_number}}/comments"
inputParameters:
- name: repo
in: path
- name: pull_number
in: path
operations:
- name: create-pr-comment
method: POST
- type: http
namespace: jira
baseUri: "https://berkshirehathaway.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Creates Jira ticket and alerts engineering via Teams for critical vulnerabilities.
naftiko: "0.5"
info:
label: "GitHub Security Advisory Workflow"
description: "Creates Jira ticket and alerts engineering via Teams for critical vulnerabilities."
tags:
- security
- github
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: sec-ops
port: 8080
tools:
- name: handle-advisory
description: "Handle security advisory."
inputParameters:
- name: repo
in: body
type: string
description: "Repository."
- name: advisory
in: body
type: string
description: "Advisory ID."
- name: severity
in: body
type: string
description: "Severity."
steps:
- name: get
type: call
call: "github.get-advisory"
with:
repo: "{{repo}}"
id: "{{advisory}}"
- name: ticket
type: call
call: "jira.create-issue"
with:
project_key: "SEC"
issuetype: "Bug"
summary: "{{severity}} in {{repo}}"
- name: notify
type: call
call: "msteams.post"
with:
channel_id: "$secrets.sec_channel"
text: "{{severity}} in {{repo}}. Jira: {{ticket.key}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: advisories
path: "/repos/{{repo}}/dependabot/alerts/{{advisory}}"
inputParameters:
- name: repo
in: path
- name: advisory
in: path
operations:
- name: get-advisory
method: GET
- type: http
namespace: jira
baseUri: "https://berkshirehathaway.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
Verifies glass coverage, schedules vendor repair, and confirms to policyholder.
naftiko: "0.5"
info:
label: "Glass Repair Fast Track Workflow"
description: "Verifies glass coverage, schedules vendor repair, and confirms to policyholder."
tags:
- insurance
- claims
- auto
capability:
exposes:
- type: mcp
namespace: glass-ops
port: 8080
tools:
- name: fast-track
description: "Fast-track glass claim."
inputParameters:
- name: policy
in: body
type: string
description: "Policy."
- name: damage
in: body
type: string
description: "Damage type."
- name: zip
in: body
type: string
description: "ZIP."
steps:
- name: verify
type: call
call: "claims-api.verify"
with:
policy: "{{policy}}"
- name: schedule
type: call
call: "glass-vendor.schedule"
with:
policy: "{{policy}}"
damage: "{{damage}}"
- name: confirm
type: call
call: "notification-api.send"
with:
policy: "{{policy}}"
template: "glass-scheduled"
consumes:
- type: http
namespace: claims-api
baseUri: "https://api.berkshirehathaway.com/claims/v2"
authentication:
type: bearer
token: "$secrets.claims_api_token"
resources:
- name: glass
path: "/policies/{{policy}}/glass"
inputParameters:
- name: policy
in: path
operations:
- name: verify
method: GET
- type: http
namespace: glass-vendor
baseUri: "https://api.berkshirehathaway.com/vendors/glass/v1"
authentication:
type: bearer
token: "$secrets.glass_token"
resources:
- name: repairs
path: "/schedule"
operations:
- name: schedule
method: POST
- type: http
namespace: notification-api
baseUri: "https://api.berkshirehathaway.com/notifications/v1"
authentication:
type: bearer
token: "$secrets.notification_token"
resources:
- name: notifications
path: "/send"
operations:
- name: send
method: POST
Finds physician, books IME, and creates tracking in ServiceNow.
naftiko: "0.5"
info:
label: "Independent Medical Exam Scheduling Workflow"
description: "Finds physician, books IME, and creates tracking in ServiceNow."
tags:
- insurance
- claims
- servicenow
capability:
exposes:
- type: mcp
namespace: ime-ops
port: 8080
tools:
- name: schedule-ime
description: "Schedule IME."
inputParameters:
- name: claim_id
in: body
type: string
description: "Claim."
- name: specialty
in: body
type: string
description: "Specialty."
- name: zip
in: body
type: string
description: "ZIP."
steps:
- name: find
type: call
call: "medical-api.find"
with:
specialty: "{{specialty}}"
zip: "{{zip}}"
- name: book
type: call
call: "scheduling-api.book"
with:
provider: "{{find.id}}"
claim: "{{claim_id}}"
- name: track
type: call
call: "servicenow.create-record"
with:
table: "u_ime"
claim_id: "{{claim_id}}"
consumes:
- type: http
namespace: medical-api
baseUri: "https://api.berkshirehathaway.com/medical-network/v1"
authentication:
type: bearer
token: "$secrets.medical_token"
resources:
- name: providers
path: "/ime-providers/search"
operations:
- name: find
method: GET
- type: http
namespace: scheduling-api
baseUri: "https://api.berkshirehathaway.com/scheduling/v1"
authentication:
type: bearer
token: "$secrets.scheduling_token"
resources:
- name: appointments
path: "/appointments"
operations:
- name: book
method: POST
- type: http
namespace: servicenow
baseUri: "https://berkshire.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/u_ime"
operations:
- name: create-record
method: POST
Retrieves investment portfolio performance metrics from Snowflake for a subsidiary, returning total assets, returns, and asset allocation breakdown.
naftiko: "0.5"
info:
label: "Investment Portfolio Performance Lookup"
description: "Retrieves investment portfolio performance metrics from Snowflake for a subsidiary, returning total assets, returns, and asset allocation breakdown."
tags:
- insurance
- finance
- snowflake
- analytics
capability:
exposes:
- type: mcp
namespace: investment-ops
port: 8080
tools:
- name: get-portfolio-performance
description: "Look up investment portfolio performance for a subsidiary. Returns total assets, returns, and allocation. Use for investment committee reviews."
inputParameters:
- name: subsidiary_code
in: body
type: string
description: "Subsidiary code."
- name: as_of_date
in: body
type: string
description: "Performance as-of date in ISO 8601 format."
call: "snowflake.query-performance"
with:
subsidiary_code: "{{subsidiary_code}}"
as_of_date: "{{as_of_date}}"
outputParameters:
- name: total_assets
type: number
mapping: "$.totalAssets"
- name: ytd_return
type: number
mapping: "$.ytdReturn"
- name: allocation
type: object
mapping: "$.assetAllocation"
consumes:
- type: http
namespace: snowflake
baseUri: "https://berkshire.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: queries
path: "/statements"
operations:
- name: query-performance
method: POST
Retrieves completed sprint data from Jira and posts a sprint velocity summary to the Engineering Microsoft Teams channel for Berkshire's technology divisions.
naftiko: "0.5"
info:
label: "Jira Engineering Sprint Velocity Report"
description: "Retrieves completed sprint data from Jira and posts a sprint velocity summary to the Engineering Microsoft Teams channel for Berkshire's technology divisions."
tags:
- devops
- jira
- agile
- reporting
- microsoft-teams
- engineering
capability:
exposes:
- type: mcp
namespace: agile-reporting
port: 8080
tools:
- name: publish-sprint-velocity-report
description: "Given a Jira board ID and sprint ID, retrieve sprint metrics and post a formatted velocity report to the Engineering Teams channel."
inputParameters:
- name: board_id
in: body
type: integer
description: "The Jira board ID for the engineering team."
- name: sprint_id
in: body
type: integer
description: "The completed sprint ID to report on."
steps:
- name: get-sprint
type: call
call: "jira.get-sprint"
with:
board_id: "{{board_id}}"
sprint_id: "{{sprint_id}}"
- name: get-sprint-issues
type: call
call: "jira.list-sprint-issues"
with:
sprint_id: "{{sprint_id}}"
- name: post-velocity-report
type: call
call: "msteams.post-channel-message"
with:
channel: "engineering-metrics"
message: "Sprint {{get-sprint.name}}: {{get-sprint-issues.completed_points}} story pts | {{get-sprint-issues.count}} issues | Velocity: {{get-sprint-issues.velocity}}"
consumes:
- type: http
namespace: jira
baseUri: "https://berkshirehathaway.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: sprints
path: "/board/{{board_id}}/sprint/{{sprint_id}}"
inputParameters:
- name: board_id
in: path
- name: sprint_id
in: path
operations:
- name: get-sprint
method: GET
- name: sprint-issues
path: "/sprint/{{sprint_id}}/issue"
inputParameters:
- name: sprint_id
in: path
operations:
- name: list-sprint-issues
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/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves Jira issue status including assignee and priority.
naftiko: "0.5"
info:
label: "Jira Ticket Status Lookup"
description: "Retrieves Jira issue status including assignee and priority."
tags:
- engineering
- jira
capability:
exposes:
- type: mcp
namespace: jira-ops
port: 8080
tools:
- name: get-ticket
description: "Look up Jira ticket."
inputParameters:
- name: key
in: body
type: string
description: "Issue key."
call: "jira.get-issue"
with:
key: "{{key}}"
outputParameters:
- name: status
type: string
mapping: "$.fields.status.name"
- name: assignee
type: string
mapping: "$.fields.assignee.displayName"
- name: priority
type: string
mapping: "$.fields.priority.name"
consumes:
- type: http
namespace: jira
baseUri: "https://berkshirehathaway.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue/{{key}}"
inputParameters:
- name: key
in: path
operations:
- name: get-issue
method: GET
Fetches LinkedIn follower growth and engagement metrics for Berkshire Hathaway's corporate and subsidiary brand pages and posts a weekly brand performance digest to the Marketing Teams channel.
naftiko: "0.5"
info:
label: "LinkedIn Employer Brand Digest"
description: "Fetches LinkedIn follower growth and engagement metrics for Berkshire Hathaway's corporate and subsidiary brand pages and posts a weekly brand performance digest to the Marketing Teams channel."
tags:
- marketing
- social
- linkedin
- microsoft-teams
- reporting
- employer-brand
capability:
exposes:
- type: mcp
namespace: brand-marketing
port: 8080
tools:
- name: digest-linkedin-brand-metrics
description: "Given a LinkedIn organization URN and date range, fetch follower statistics and post a weekly employer brand performance digest to the Marketing Teams channel."
inputParameters:
- name: org_urn
in: body
type: string
description: "The LinkedIn organization URN for Berkshire Hathaway."
- name: start_date
in: body
type: string
description: "Report start date in YYYY-MM-DD format."
- name: end_date
in: body
type: string
description: "Report end date in YYYY-MM-DD format."
steps:
- name: get-follower-stats
type: call
call: "linkedin.get-follower-statistics"
with:
organizationalEntity: "{{org_urn}}"
- name: post-brand-digest
type: call
call: "msteams.post-channel-message"
with:
channel: "marketing-brand"
message: "LinkedIn brand digest ({{start_date}} to {{end_date}}): Total followers {{get-follower-stats.followerCount}} | New followers {{get-follower-stats.newFollowers}}"
consumes:
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: follower-statistics
path: "/organizationalEntityFollowerStatistics"
operations:
- name: get-follower-statistics
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/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
When a new hire record is created in Workday, provisions an Active Directory account via Microsoft Graph, opens a ServiceNow onboarding ticket, and sends a Microsoft Teams welcome message.
naftiko: "0.5"
info:
label: "New Employee Onboarding Orchestrator"
description: "When a new hire record is created in Workday, provisions an Active Directory account via Microsoft Graph, opens a ServiceNow onboarding ticket, and sends a Microsoft Teams welcome message."
tags:
- hr
- onboarding
- workday
- servicenow
- microsoft-graph
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-onboarding
port: 8080
tools:
- name: trigger-employee-onboarding
description: "Given a Workday employee ID and start date, provision an Active Directory account via Microsoft Graph, open a ServiceNow IT onboarding ticket, 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: "Employee start date in ISO 8601 format (YYYY-MM-DD)."
- name: subsidiary
in: body
type: string
description: "The Berkshire Hathaway subsidiary the employee is joining, e.g. 'GEICO', 'BNSF Railway', 'Berkshire Hathaway Energy'."
steps:
- name: get-worker
type: call
call: "workday.get-worker"
with:
worker_id: "{{workday_employee_id}}"
- name: provision-ad
type: call
call: "msgraph.create-user"
with:
displayName: "{{get-worker.full_name}}"
userPrincipalName: "{{get-worker.work_email}}"
department: "{{subsidiary}}"
- name: create-it-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "IT Onboarding: {{get-worker.full_name}} — {{subsidiary}} — starts {{start_date}}"
category: "hr_onboarding"
assignment_group: "IT_Onboarding"
- name: send-welcome
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{get-worker.work_email}}"
message: "Welcome to {{subsidiary}}, {{get-worker.first_name}}! Your IT setup ticket is {{create-it-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: "/berkshire/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: msgraph
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: users
path: "/users"
operations:
- name: create-user
method: POST
- type: http
namespace: servicenow
baseUri: "https://berkshirehathaway.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: mail
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Creates policy in Salesforce, generates documents, and sets up billing after underwriting approval.
naftiko: "0.5"
info:
label: "New Policy Issuance Workflow"
description: "Creates policy in Salesforce, generates documents, and sets up billing after underwriting approval."
tags:
- insurance
- policy
- underwriting
- salesforce
capability:
exposes:
- type: mcp
namespace: issuance-ops
port: 8080
tools:
- name: issue-policy
description: "Issue new policy."
inputParameters:
- name: app_id
in: body
type: string
description: "Application ID."
- name: product
in: body
type: string
description: "Product type."
- name: premium
in: body
type: number
description: "Premium."
steps:
- name: create
type: call
call: "salesforce.create-policy"
with:
app_id: "{{app_id}}"
product: "{{product}}"
premium: "{{premium}}"
- name: docs
type: call
call: "document-api.generate"
with:
policy: "{{create.policy_number}}"
- name: billing
type: call
call: "billing-api.create-schedule"
with:
policy: "{{create.policy_number}}"
premium: "{{premium}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://berkshire.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: policies
path: "/sobjects/Policy__c"
operations:
- name: create-policy
method: POST
- type: http
namespace: document-api
baseUri: "https://api.berkshirehathaway.com/documents/v1"
authentication:
type: bearer
token: "$secrets.document_api_token"
resources:
- name: generation
path: "/generate"
operations:
- name: generate
method: POST
- type: http
namespace: billing-api
baseUri: "https://api.berkshirehathaway.com/billing/v1"
authentication:
type: bearer
token: "$secrets.billing_api_token"
resources:
- name: schedules
path: "/billing-schedules"
operations:
- name: create-schedule
method: POST
Compares Okta access against Workday roles and creates Jira tickets for discrepancies.
naftiko: "0.5"
info:
label: "Okta System Access Review Workflow"
description: "Compares Okta access against Workday roles and creates Jira tickets for discrepancies."
tags:
- insurance
- okta
- workday
- jira
- compliance
capability:
exposes:
- type: mcp
namespace: access-rev
port: 8080
tools:
- name: review-access
description: "Review system access."
inputParameters:
- name: app
in: body
type: string
description: "Application."
steps:
- name: okta
type: call
call: "okta.list-users"
with:
app: "{{app}}"
- name: roles
type: call
call: "workday.get-roster"
with:
dept: "all"
- name: ticket
type: call
call: "jira.create-issue"
with:
project_key: "SEC"
issuetype: "Task"
summary: "Access review: {{app}}"
consumes:
- type: http
namespace: okta
baseUri: "https://berkshirehathaway.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_api_token"
resources:
- name: app-users
path: "/apps/{{app}}/users"
inputParameters:
- name: app
in: path
operations:
- name: list-users
method: GET
- type: http
namespace: workday
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/berkshire"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: roster
path: "/staffing/departmentRoster"
operations:
- name: get-roster
method: GET
- type: http
namespace: jira
baseUri: "https://berkshirehathaway.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Retrieves all Okta application assignments and group memberships for a user and posts a formatted access certification report to the Cybersecurity Microsoft Teams channel for quarterly review.
naftiko: "0.5"
info:
label: "Okta User Access Certification"
description: "Retrieves all Okta application assignments and group memberships for a user and posts a formatted access certification report to the Cybersecurity Microsoft Teams channel for quarterly review."
tags:
- identity
- security
- okta
- microsoft-teams
- access-review
- compliance
capability:
exposes:
- type: mcp
namespace: access-certification
port: 8080
tools:
- name: certify-user-access
description: "Given an Okta user login, retrieve all application assignments and group memberships, then post a structured access report to the Cybersecurity Teams channel for quarterly certification."
inputParameters:
- name: user_login
in: body
type: string
description: "The Okta user login (email) to certify."
steps:
- name: get-user-apps
type: call
call: "okta.list-user-apps"
with:
user_login: "{{user_login}}"
- name: get-user-groups
type: call
call: "okta.list-user-groups"
with:
user_login: "{{user_login}}"
- name: post-cert-report
type: call
call: "msteams.post-channel-message"
with:
channel: "cybersecurity-access-certs"
message: "Access cert for {{user_login}}: {{get-user-apps.count}} apps | {{get-user-groups.count}} groups | Apps: {{get-user-apps.names}}"
consumes:
- type: http
namespace: okta
baseUri: "https://berkshirehathaway.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: user-apps
path: "/users/{{user_login}}/appLinks"
inputParameters:
- name: user_login
in: path
operations:
- name: list-user-apps
method: GET
- name: user-groups
path: "/users/{{user_login}}/groups"
inputParameters:
- name: user_login
in: path
operations:
- name: list-user-groups
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/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves Okta group memberships for a user returning groups and access.
naftiko: "0.5"
info:
label: "Okta User Group Membership Lookup"
description: "Retrieves Okta group memberships for a user returning groups and access."
tags:
- security
- okta
- compliance
capability:
exposes:
- type: mcp
namespace: identity-ops
port: 8080
tools:
- name: get-groups
description: "Look up Okta groups. Returns memberships."
inputParameters:
- name: email
in: body
type: string
description: "User email."
call: "okta.get-groups"
with:
email: "{{email}}"
outputParameters:
- name: groups
type: array
mapping: "$.groups"
- name: count
type: integer
mapping: "$.totalGroups"
consumes:
- type: http
namespace: okta
baseUri: "https://berkshirehathaway.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_api_token"
resources:
- name: user-groups
path: "/users/{{email}}/groups"
inputParameters:
- name: email
in: path
operations:
- name: get-groups
method: GET
Retrieves current on-call engineer from PagerDuty returning primary and secondary contacts.
naftiko: "0.5"
info:
label: "PagerDuty On-Call Lookup"
description: "Retrieves current on-call engineer from PagerDuty returning primary and secondary contacts."
tags:
- engineering
- pagerduty
capability:
exposes:
- type: mcp
namespace: oncall-ops
port: 8080
tools:
- name: get-oncall
description: "Look up on-call schedule. Returns contacts."
inputParameters:
- name: schedule_id
in: body
type: string
description: "PagerDuty schedule ID."
call: "pagerduty.get-oncall"
with:
schedule_id: "{{schedule_id}}"
outputParameters:
- name: primary
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"
operations:
- name: get-oncall
method: GET
Retrieves the current on-call engineer from a PagerDuty escalation policy to support incident routing across Berkshire Hathaway's technology teams.
naftiko: "0.5"
info:
label: "PagerDuty On-Call Schedule Lookup"
description: "Retrieves the current on-call engineer from a PagerDuty escalation policy to support incident routing across Berkshire Hathaway's technology teams."
tags:
- itsm
- pagerduty
- on-call
- incident-response
- lookup
capability:
exposes:
- type: mcp
namespace: oncall-lookup
port: 8080
tools:
- name: get-current-oncall
description: "Given a PagerDuty escalation policy ID, return the current on-call engineer name and email. Use to route production incidents to the correct responder."
inputParameters:
- name: escalation_policy_id
in: body
type: string
description: "The PagerDuty escalation policy ID for the relevant system or subsidiary team."
call: "pagerduty.get-oncall"
with:
escalation_policy_id: "{{escalation_policy_id}}"
outputParameters:
- name: oncall_name
type: string
mapping: "$.oncalls[0].user.summary"
- name: oncall_email
type: string
mapping: "$.oncalls[0].user.email"
consumes:
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.pagerduty_api_key"
placement: header
resources:
- name: oncalls
path: "/oncalls"
operations:
- name: get-oncall
method: GET
Updates payment method in billing and sends confirmation.
naftiko: "0.5"
info:
label: "Payment Method Update Workflow"
description: "Updates payment method in billing and sends confirmation."
tags:
- insurance
- policy
- billing
capability:
exposes:
- type: mcp
namespace: pay-ops
port: 8080
tools:
- name: update-method
description: "Update payment method."
inputParameters:
- name: policy
in: body
type: string
description: "Policy."
- name: method
in: body
type: string
description: "Method."
steps:
- name: update
type: call
call: "billing-api.update"
with:
policy: "{{policy}}"
method: "{{method}}"
- name: confirm
type: call
call: "notification-api.send"
with:
policy: "{{policy}}"
template: "payment-updated"
consumes:
- type: http
namespace: billing-api
baseUri: "https://api.berkshirehathaway.com/billing/v1"
authentication:
type: bearer
token: "$secrets.billing_api_token"
resources:
- name: methods
path: "/policies/{{policy}}/payment-method"
inputParameters:
- name: policy
in: path
operations:
- name: update
method: PUT
- type: http
namespace: notification-api
baseUri: "https://api.berkshirehathaway.com/notifications/v1"
authentication:
type: bearer
token: "$secrets.notification_token"
resources:
- name: notifications
path: "/send"
operations:
- name: send
method: POST
Exports headcount and cost center data from ADP for a given Berkshire Hathaway subsidiary, uploads the report to SharePoint, and sends a digest to the HR Finance Teams channel.
naftiko: "0.5"
info:
label: "Payroll Headcount Snapshot by Subsidiary"
description: "Exports headcount and cost center data from ADP for a given Berkshire Hathaway subsidiary, uploads the report to SharePoint, and sends a digest to the HR Finance Teams channel."
tags:
- hr
- finance
- payroll
- headcount
- adp
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-finance
port: 8080
tools:
- name: get-subsidiary-headcount-snapshot
description: "Export headcount data from ADP for a subsidiary and report month, upload to SharePoint, and post a summary to the HR Finance Teams channel."
inputParameters:
- name: report_month
in: body
type: string
description: "Report month in YYYY-MM format, e.g. '2026-03'."
- name: subsidiary
in: body
type: string
description: "Berkshire subsidiary code, e.g. 'GEICO', 'BNSF', 'BHE', 'BHRG'."
steps:
- name: export-headcount
type: call
call: "adp.export-workers"
with:
asOfDate: "{{report_month}}"
companyCode: "{{subsidiary}}"
- name: upload-report
type: call
call: "sharepoint.upload-file"
with:
site_id: "hr-finance-reports"
folder: "Headcount/{{subsidiary}}/{{report_month}}"
filename: "headcount-{{subsidiary}}-{{report_month}}.csv"
content: "{{export-headcount.csv_data}}"
- name: post-digest
type: call
call: "msteams.post-channel-message"
with:
channel: "hr-finance-reporting"
message: "{{subsidiary}} headcount ({{report_month}}): {{export-headcount.total_count}} employees. Report uploaded to SharePoint."
consumes:
- type: http
namespace: adp
baseUri: "https://api.adp.com"
authentication:
type: bearer
token: "$secrets.adp_token"
resources:
- name: workers-export
path: "/hr/v2/workers/export"
operations:
- name: export-workers
method: GET
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: drive-items
path: "/sites/{{site_id}}/drive/root:/{{folder}}/{{filename}}:/content"
inputParameters:
- name: site_id
in: path
- name: folder
in: path
- name: filename
in: path
operations:
- name: upload-file
method: PUT
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves current billing status including balance, next due date, and payment method.
naftiko: "0.5"
info:
label: "Policy Billing Status Lookup"
description: "Retrieves current billing status including balance, next due date, and payment method."
tags:
- insurance
- policy
- billing
capability:
exposes:
- type: mcp
namespace: billing-ops
port: 8080
tools:
- name: get-billing
description: "Look up billing status. Returns balance, due date, method."
inputParameters:
- name: policy_number
in: body
type: string
description: "Berkshire Hathaway policy number."
call: "billing-api.get-status"
with:
policy_number: "{{policy_number}}"
outputParameters:
- name: balance
type: number
mapping: "$.outstandingBalance"
- name: next_due
type: string
mapping: "$.nextDueDate"
- name: method
type: string
mapping: "$.paymentMethod"
consumes:
- type: http
namespace: billing-api
baseUri: "https://api.berkshirehathaway.com/billing/v1"
authentication:
type: bearer
token: "$secrets.billing_api_token"
resources:
- name: status
path: "/policies/{{policy_number}}/billing-status"
inputParameters:
- name: policy_number
in: path
operations:
- name: get-status
method: GET
Calculates pro-rata refund, updates status in Salesforce, and logs cancellation in ServiceNow.
naftiko: "0.5"
info:
label: "Policy Cancellation Workflow"
description: "Calculates pro-rata refund, updates status in Salesforce, and logs cancellation in ServiceNow."
tags:
- insurance
- policy
- salesforce
- servicenow
capability:
exposes:
- type: mcp
namespace: cancel-ops
port: 8080
tools:
- name: process-cancel
description: "Process cancellation."
inputParameters:
- name: policy
in: body
type: string
description: "Policy number."
- name: reason
in: body
type: string
description: "Reason."
- name: date
in: body
type: string
description: "Effective date."
steps:
- name: refund
type: call
call: "billing-api.calc-refund"
with:
policy: "{{policy}}"
date: "{{date}}"
- name: update
type: call
call: "salesforce.cancel"
with:
policy: "{{policy}}"
reason: "{{reason}}"
- name: log
type: call
call: "servicenow.create-case"
with:
short_description: "Cancel: {{policy}}"
consumes:
- type: http
namespace: billing-api
baseUri: "https://api.berkshirehathaway.com/billing/v1"
authentication:
type: bearer
token: "$secrets.billing_api_token"
resources:
- name: refunds
path: "/refunds/calculate"
operations:
- name: calc-refund
method: POST
- type: http
namespace: salesforce
baseUri: "https://berkshire.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: policies
path: "/sobjects/Policy__c"
operations:
- name: cancel
method: PATCH
- type: http
namespace: servicenow
baseUri: "https://berkshire.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cases
path: "/table/sn_customerservice_case"
operations:
- name: create-case
method: POST
Retrieves policy coverage details from Salesforce including limits, deductibles, and endorsements.
naftiko: "0.5"
info:
label: "Policy Coverage Details Lookup"
description: "Retrieves policy coverage details from Salesforce including limits, deductibles, and endorsements."
tags:
- insurance
- policy
- salesforce
capability:
exposes:
- type: mcp
namespace: policy-ops
port: 8080
tools:
- name: get-coverage
description: "Look up coverage for a policy. Returns limits, deductibles, endorsements."
inputParameters:
- name: policy_number
in: body
type: string
description: "Berkshire Hathaway policy number."
call: "salesforce.get-policy"
with:
policy_number: "{{policy_number}}"
outputParameters:
- name: limits
type: object
mapping: "$.coverageLimits"
- name: deductible
type: number
mapping: "$.deductible"
- name: endorsements
type: array
mapping: "$.endorsements"
consumes:
- type: http
namespace: salesforce
baseUri: "https://berkshire.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: policies
path: "/sobjects/Policy__c/{{policy_number}}"
inputParameters:
- name: policy_number
in: path
operations:
- name: get-policy
method: GET
Retrieves a policy document by number and type returning URL and metadata.
naftiko: "0.5"
info:
label: "Policy Document Retrieval"
description: "Retrieves a policy document by number and type returning URL and metadata."
tags:
- insurance
- policy
- document-management
capability:
exposes:
- type: mcp
namespace: doc-ops
port: 8080
tools:
- name: get-document
description: "Retrieve policy document. Returns URL and metadata."
inputParameters:
- name: policy_number
in: body
type: string
description: "Berkshire Hathaway policy number."
- name: doc_type
in: body
type: string
description: "Type: declaration, endorsement, certificate."
call: "document-api.get-doc"
with:
policy_number: "{{policy_number}}"
doc_type: "{{doc_type}}"
outputParameters:
- name: url
type: string
mapping: "$.documentUrl"
- name: modified
type: string
mapping: "$.lastModified"
consumes:
- type: http
namespace: document-api
baseUri: "https://api.berkshirehathaway.com/documents/v1"
authentication:
type: bearer
token: "$secrets.document_api_token"
resources:
- name: documents
path: "/policies/{{policy_number}}/documents"
inputParameters:
- name: policy_number
in: path
operations:
- name: get-doc
method: GET
Validates endorsement, updates policy in Salesforce, and recalculates premium.
naftiko: "0.5"
info:
label: "Policy Endorsement Processing Workflow"
description: "Validates endorsement, updates policy in Salesforce, and recalculates premium."
tags:
- insurance
- policy
- salesforce
- underwriting
capability:
exposes:
- type: mcp
namespace: endorse-ops
port: 8080
tools:
- name: process-endorsement
description: "Process endorsement."
inputParameters:
- name: policy
in: body
type: string
description: "Policy."
- name: type
in: body
type: string
description: "Endorsement type."
- name: date
in: body
type: string
description: "Effective date."
steps:
- name: validate
type: call
call: "underwriting.validate"
with:
policy: "{{policy}}"
type: "{{type}}"
- name: update
type: call
call: "salesforce.update"
with:
policy: "{{policy}}"
type: "{{type}}"
- name: recalc
type: call
call: "rating.recalc"
with:
policy: "{{policy}}"
consumes:
- type: http
namespace: underwriting
baseUri: "https://api.berkshirehathaway.com/underwriting/v2"
authentication:
type: bearer
token: "$secrets.underwriting_api_token"
resources:
- name: endorsements
path: "/endorsements/validate"
operations:
- name: validate
method: POST
- type: http
namespace: salesforce
baseUri: "https://berkshire.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: policies
path: "/sobjects/Policy__c"
operations:
- name: update
method: PATCH
- type: http
namespace: rating
baseUri: "https://api.berkshirehathaway.com/rating/v2"
authentication:
type: bearer
token: "$secrets.rating_token"
resources:
- name: recalc
path: "/recalculate"
operations:
- name: recalc
method: POST
Identifies at-risk policies, triggers Marketo campaigns, and creates agent tasks in Jira.
naftiko: "0.5"
info:
label: "Policy Lapse Prevention Workflow"
description: "Identifies at-risk policies, triggers Marketo campaigns, and creates agent tasks in Jira."
tags:
- insurance
- policy
- salesforce
- marketo
- jira
capability:
exposes:
- type: mcp
namespace: lapse-ops
port: 8080
tools:
- name: prevent-lapse
description: "Prevent policy lapse."
inputParameters:
- name: days
in: body
type: integer
description: "Days until lapse."
steps:
- name: at-risk
type: call
call: "salesforce.query-lapsing"
with:
days: "{{days}}"
- name: campaign
type: call
call: "marketo.trigger"
with:
campaign_id: "$secrets.lapse_campaign"
- name: tasks
type: call
call: "jira.create-issue"
with:
project_key: "RETENTION"
issuetype: "Task"
summary: "Lapse prevention"
consumes:
- type: http
namespace: salesforce
baseUri: "https://berkshire.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: queries
path: "/query"
operations:
- name: query-lapsing
method: GET
- type: http
namespace: marketo
baseUri: "https://berkshirehathaway.mktorest.com/rest/v1"
authentication:
type: bearer
token: "$secrets.marketo_token"
resources:
- name: campaigns
path: "/campaigns/trigger.json"
operations:
- name: trigger
method: POST
- type: http
namespace: jira
baseUri: "https://berkshirehathaway.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Retrieves premium breakdown returning base rate, risk factors, and final premium.
naftiko: "0.5"
info:
label: "Policy Premium Breakdown Lookup"
description: "Retrieves premium breakdown returning base rate, risk factors, and final premium."
tags:
- insurance
- policy
- actuarial
capability:
exposes:
- type: mcp
namespace: premium-ops
port: 8080
tools:
- name: get-premium
description: "Look up premium breakdown. Returns base rate, factors, final premium."
inputParameters:
- name: policy_number
in: body
type: string
description: "Berkshire Hathaway policy number."
call: "rating-engine.get-premium"
with:
policy_number: "{{policy_number}}"
outputParameters:
- name: base_rate
type: number
mapping: "$.baseRate"
- name: risk_factors
type: array
mapping: "$.riskFactors"
- name: final_premium
type: number
mapping: "$.finalAnnualPremium"
consumes:
- type: http
namespace: rating-engine
baseUri: "https://api.berkshirehathaway.com/rating/v2"
authentication:
type: bearer
token: "$secrets.rating_engine_token"
resources:
- name: premiums
path: "/policies/{{policy_number}}/premium"
inputParameters:
- name: policy_number
in: path
operations:
- name: get-premium
method: GET
Runs rating engine and creates quote record in Salesforce.
naftiko: "0.5"
info:
label: "Policy Quote Generation Workflow"
description: "Runs rating engine and creates quote record in Salesforce."
tags:
- insurance
- underwriting
- policy
- salesforce
capability:
exposes:
- type: mcp
namespace: quote-ops
port: 8080
tools:
- name: generate-quote
description: "Generate quote."
inputParameters:
- name: product
in: body
type: string
description: "Product."
- name: data
in: body
type: string
description: "Applicant data."
steps:
- name: rate
type: call
call: "rating.quote"
with:
product: "{{product}}"
data: "{{data}}"
- name: create
type: call
call: "salesforce.create-quote"
with:
product: "{{product}}"
premium: "{{rate.premium}}"
consumes:
- type: http
namespace: rating
baseUri: "https://api.berkshirehathaway.com/rating/v2"
authentication:
type: bearer
token: "$secrets.rating_token"
resources:
- name: quotes
path: "/quote"
operations:
- name: quote
method: POST
- type: http
namespace: salesforce
baseUri: "https://berkshire.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: quotes
path: "/sobjects/Quote__c"
operations:
- name: create-quote
method: POST
Verifies eligibility, calculates back premium, and reinstates in Salesforce.
naftiko: "0.5"
info:
label: "Policy Reinstatement Workflow"
description: "Verifies eligibility, calculates back premium, and reinstates in Salesforce."
tags:
- insurance
- policy
- salesforce
- billing
capability:
exposes:
- type: mcp
namespace: reinstate-ops
port: 8080
tools:
- name: reinstate
description: "Reinstate policy."
inputParameters:
- name: policy
in: body
type: string
description: "Lapsed policy."
steps:
- name: check
type: call
call: "underwriting.check"
with:
policy: "{{policy}}"
- name: calc
type: call
call: "billing-api.calc"
with:
policy: "{{policy}}"
- name: reinstate
type: call
call: "salesforce.reinstate"
with:
policy: "{{policy}}"
premium: "{{calc.amount}}"
consumes:
- type: http
namespace: underwriting
baseUri: "https://api.berkshirehathaway.com/underwriting/v2"
authentication:
type: bearer
token: "$secrets.underwriting_api_token"
resources:
- name: reinstatement
path: "/reinstatement/eligibility"
operations:
- name: check
method: POST
- type: http
namespace: billing-api
baseUri: "https://api.berkshirehathaway.com/billing/v1"
authentication:
type: bearer
token: "$secrets.billing_api_token"
resources:
- name: back-premium
path: "/back-premium/calculate"
operations:
- name: calc
method: POST
- type: http
namespace: salesforce
baseUri: "https://berkshire.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: policies
path: "/sobjects/Policy__c"
operations:
- name: reinstate
method: PATCH
Pulls claims history from Snowflake, recalculates risk, updates renewal offer in Salesforce, and notifies agent.
naftiko: "0.5"
info:
label: "Policy Renewal Underwriting Review"
description: "Pulls claims history from Snowflake, recalculates risk, updates renewal offer in Salesforce, and notifies agent."
tags:
- insurance
- underwriting
- policy
- snowflake
- salesforce
capability:
exposes:
- type: mcp
namespace: renewal-ops
port: 8080
tools:
- name: process-renewal
description: "Process renewal review. Pulls history, recalcs, updates."
inputParameters:
- name: policy_number
in: body
type: string
description: "Policy number."
steps:
- name: history
type: call
call: "snowflake.query"
with:
query: "SELECT * FROM CLAIMS WHERE policy='{{policy_number}}'"
- name: recalc
type: call
call: "underwriting.calculate"
with:
policy_number: "{{policy_number}}"
- name: update
type: call
call: "salesforce.update-renewal"
with:
policy_number: "{{policy_number}}"
premium: "{{recalc.premium}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://berkshire.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: salesforce
baseUri: "https://berkshire.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: renewals
path: "/sobjects/Renewal__c"
operations:
- name: update-renewal
method: PATCH
Retrieves complete claims history from Snowflake including dates, types, and outcomes.
naftiko: "0.5"
info:
label: "Policyholder Claims History Lookup"
description: "Retrieves complete claims history from Snowflake including dates, types, and outcomes."
tags:
- insurance
- claims
- snowflake
capability:
exposes:
- type: mcp
namespace: claims-hist
port: 8080
tools:
- name: get-history
description: "Look up claims history. Returns all claims."
inputParameters:
- name: customer_id
in: body
type: string
description: "Berkshire Hathaway customer ID."
call: "snowflake.query-claims"
with:
customer_id: "{{customer_id}}"
outputParameters:
- name: total
type: integer
mapping: "$.totalClaims"
- name: claims
type: array
mapping: "$.claims"
- name: paid
type: number
mapping: "$.totalPaid"
consumes:
- type: http
namespace: snowflake
baseUri: "https://berkshire.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: queries
path: "/statements"
operations:
- name: query-claims
method: POST
Triggers a Power BI dataset refresh for the Berkshire Hathaway investment portfolio and subsidiary performance dashboard, and posts the refresh status to the Finance Teams channel.
naftiko: "0.5"
info:
label: "Power BI Portfolio Dashboard Refresh"
description: "Triggers a Power BI dataset refresh for the Berkshire Hathaway investment portfolio and subsidiary performance dashboard, and posts the refresh status to the Finance Teams channel."
tags:
- analytics
- power-bi
- microsoft-teams
- reporting
- finance
- investment
capability:
exposes:
- type: mcp
namespace: portfolio-bi
port: 8080
tools:
- name: trigger-portfolio-dashboard-refresh
description: "Given a Power BI workspace ID and dataset ID, trigger a portfolio performance dataset refresh and notify the Finance Teams channel with the status."
inputParameters:
- name: workspace_id
in: body
type: string
description: "The Power BI workspace ID containing the portfolio dataset."
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID to refresh."
steps:
- name: trigger-refresh
type: call
call: "powerbi.trigger-refresh"
with:
workspace_id: "{{workspace_id}}"
dataset_id: "{{dataset_id}}"
- name: notify-finance
type: call
call: "msteams.post-channel-message"
with:
channel: "finance-reporting"
message: "Portfolio Power BI dataset {{dataset_id}} refresh triggered. Status: {{trigger-refresh.status}}"
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: dataset-refreshes
path: "/groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: workspace_id
in: path
- name: dataset_id
in: path
operations:
- name: trigger-refresh
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Detects Confluence updates and broadcasts to staff via Microsoft Teams.
naftiko: "0.5"
info:
label: "Procedure Update Notifier Workflow"
description: "Detects Confluence updates and broadcasts to staff via Microsoft Teams."
tags:
- insurance
- confluence
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: proc-notify
port: 8080
tools:
- name: notify-update
description: "Notify procedure updates."
inputParameters:
- name: page_id
in: body
type: string
description: "Page ID."
steps:
- name: history
type: call
call: "confluence.get-history"
with:
page_id: "{{page_id}}"
- name: notify
type: call
call: "msteams.post"
with:
channel_id: "$secrets.all_staff"
text: "Updated: {{history.title}}"
consumes:
- type: http
namespace: confluence
baseUri: "https://berkshirehathaway.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: history
path: "/content/{{page_id}}/history"
inputParameters:
- name: page_id
in: path
operations:
- name: get-history
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/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
Checks flood and wildfire risk for a property and logs in underwriting.
naftiko: "0.5"
info:
label: "Property Hazard Check Workflow"
description: "Checks flood and wildfire risk for a property and logs in underwriting."
tags:
- insurance
- underwriting
- homeowner
capability:
exposes:
- type: mcp
namespace: hazard-ops
port: 8080
tools:
- name: check-hazards
description: "Check property hazards."
inputParameters:
- name: app_id
in: body
type: string
description: "Application."
- name: address
in: body
type: string
description: "Address."
- name: zip
in: body
type: string
description: "ZIP."
steps:
- name: flood
type: call
call: "hazard-api.check-flood"
with:
address: "{{address}}"
zip: "{{zip}}"
- name: wildfire
type: call
call: "hazard-api.check-wildfire"
with:
zip: "{{zip}}"
- name: log
type: call
call: "underwriting.log"
with:
app_id: "{{app_id}}"
flood: "{{flood.zone}}"
consumes:
- type: http
namespace: hazard-api
baseUri: "https://api.berkshirehathaway.com/hazards/v1"
authentication:
type: bearer
token: "$secrets.hazard_token"
resources:
- name: flood
path: "/flood-zones"
operations:
- name: check-flood
method: GET
- type: http
namespace: underwriting
baseUri: "https://api.berkshirehathaway.com/underwriting/v2"
authentication:
type: bearer
token: "$secrets.underwriting_api_token"
resources:
- name: hazards
path: "/hazard-assessments"
operations:
- name: log
method: POST
Enriches Salesforce prospect with firmographic data from ZoomInfo.
naftiko: "0.5"
info:
label: "Prospect Enrichment Workflow"
description: "Enriches Salesforce prospect with firmographic data from ZoomInfo."
tags:
- insurance
- sales
- zoominfo
- salesforce
capability:
exposes:
- type: mcp
namespace: enrichment
port: 8080
tools:
- name: enrich
description: "Enrich prospect."
inputParameters:
- name: lead_id
in: body
type: string
description: "Lead ID."
- name: company
in: body
type: string
description: "Company."
steps:
- name: search
type: call
call: "zoominfo.search"
with:
company: "{{company}}"
- name: update
type: call
call: "salesforce.update-lead"
with:
lead_id: "{{lead_id}}"
industry: "{{search.industry}}"
consumes:
- type: http
namespace: zoominfo
baseUri: "https://api.zoominfo.com"
authentication:
type: bearer
token: "$secrets.zoominfo_token"
resources:
- name: companies
path: "/search/company"
operations:
- name: search
method: POST
- type: http
namespace: salesforce
baseUri: "https://berkshire.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: leads
path: "/sobjects/Lead/{{lead_id}}"
inputParameters:
- name: lead_id
in: path
operations:
- name: update-lead
method: PATCH
Compiles actuarial data from Snowflake, generates filing documents, and logs submission.
naftiko: "0.5"
info:
label: "Regulatory Rate Filing Workflow"
description: "Compiles actuarial data from Snowflake, generates filing documents, and logs submission."
tags:
- insurance
- compliance
- actuarial
- snowflake
capability:
exposes:
- type: mcp
namespace: rate-filing
port: 8080
tools:
- name: submit-filing
description: "Submit rate filing."
inputParameters:
- name: product
in: body
type: string
description: "Product."
- name: state
in: body
type: string
description: "State."
- name: change
in: body
type: number
description: "Rate change %"
steps:
- name: compile
type: call
call: "snowflake.query"
with:
query: "CALL COMPILE_RATE_FILING('{{product}}','{{state}}')"
- name: gen
type: call
call: "document-api.generate"
with:
product: "{{product}}"
state: "{{state}}"
- name: log
type: call
call: "compliance-api.log"
with:
product: "{{product}}"
state: "{{state}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://berkshire.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: document-api
baseUri: "https://api.berkshirehathaway.com/documents/v1"
authentication:
type: bearer
token: "$secrets.document_api_token"
resources:
- name: filings
path: "/generate/rate-filing"
operations:
- name: generate
method: POST
- type: http
namespace: compliance-api
baseUri: "https://api.berkshirehathaway.com/compliance/v1"
authentication:
type: bearer
token: "$secrets.compliance_api_token"
resources:
- name: filings
path: "/filings"
operations:
- name: log
method: POST
Tracks reinsurance cessions across Berkshire Hathaway subsidiaries by querying ceded premium data from Snowflake, validating treaty limits, and publishing a consolidated report to Confluence.
naftiko: "0.5"
info:
label: "Reinsurance Cession Tracking Workflow"
description: "Tracks reinsurance cessions across Berkshire Hathaway subsidiaries by querying ceded premium data from Snowflake, validating treaty limits, and publishing a consolidated report to Confluence."
tags:
- insurance
- actuarial
- compliance
- snowflake
- confluence
capability:
exposes:
- type: mcp
namespace: cession-ops
port: 8080
tools:
- name: track-cessions
description: "Track reinsurance cessions across subsidiaries. Queries data, validates limits, and publishes report. Use for quarterly reinsurance reviews."
inputParameters:
- name: treaty_id
in: body
type: string
description: "Reinsurance treaty identifier."
- name: period
in: body
type: string
description: "Reporting period YYYY-Q."
steps:
- name: query-cessions
type: call
call: "snowflake.query"
with:
query: "SELECT subsidiary, SUM(ceded_premium), SUM(ceded_losses) FROM REINSURANCE_DB.CESSIONS WHERE treaty='{{treaty_id}}' AND period='{{period}}' GROUP BY subsidiary"
- name: validate-limits
type: call
call: "reinsurance-api.validate"
with:
treaty_id: "{{treaty_id}}"
period: "{{period}}"
- name: publish-report
type: call
call: "confluence.create-page"
with:
space_key: "REINSURANCE"
title: "Cession Tracking: Treaty {{treaty_id}} - {{period}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://berkshire.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: reinsurance-api
baseUri: "https://api.berkshirehathaway.com/reinsurance/v1"
authentication:
type: bearer
token: "$secrets.reinsurance_token"
resources:
- name: validation
path: "/treaties/validate"
operations:
- name: validate
method: POST
- type: http
namespace: confluence
baseUri: "https://berkshirehathaway.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
Queries Snowflake for treaty data, validates terms, and publishes to Confluence.
naftiko: "0.5"
info:
label: "Reinsurance Treaty Compliance Report"
description: "Queries Snowflake for treaty data, validates terms, and publishes to Confluence."
tags:
- insurance
- actuarial
- compliance
- snowflake
- confluence
capability:
exposes:
- type: mcp
namespace: reinsurance-ops
port: 8080
tools:
- name: treaty-report
description: "Generate treaty report."
inputParameters:
- name: treaty
in: body
type: string
description: "Treaty ID."
- name: period
in: body
type: string
description: "YYYY-Q."
steps:
- name: query
type: call
call: "snowflake.query"
with:
query: "SELECT * FROM TREATY WHERE treaty='{{treaty}}'"
- name: validate
type: call
call: "reinsurance-api.validate"
with:
treaty: "{{treaty}}"
- name: publish
type: call
call: "confluence.create-page"
with:
space_key: "REINSURANCE"
title: "Treaty {{treaty}} - {{period}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://berkshire.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: reinsurance-api
baseUri: "https://api.berkshirehathaway.com/reinsurance/v1"
authentication:
type: bearer
token: "$secrets.reinsurance_token"
resources:
- name: validation
path: "/treaties/validate"
operations:
- name: validate
method: POST
- type: http
namespace: confluence
baseUri: "https://berkshirehathaway.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
Checks coverage, creates vendor auth, and updates claim in ServiceNow.
naftiko: "0.5"
info:
label: "Rental Car Authorization Workflow"
description: "Checks coverage, creates vendor auth, and updates claim in ServiceNow."
tags:
- insurance
- claims
- servicenow
capability:
exposes:
- type: mcp
namespace: rental-ops
port: 8080
tools:
- name: auth-rental
description: "Authorize rental."
inputParameters:
- name: claim_id
in: body
type: string
description: "Claim."
- name: days
in: body
type: integer
description: "Days."
steps:
- name: check
type: call
call: "claims-api.check-rental"
with:
claim_id: "{{claim_id}}"
- name: auth
type: call
call: "rental-api.create-auth"
with:
claim_id: "{{claim_id}}"
days: "{{days}}"
- name: update
type: call
call: "servicenow.update"
with:
claim_id: "{{claim_id}}"
rental: "{{auth.id}}"
consumes:
- type: http
namespace: claims-api
baseUri: "https://api.berkshirehathaway.com/claims/v2"
authentication:
type: bearer
token: "$secrets.claims_api_token"
resources:
- name: rental
path: "/claims/{{claim_id}}/rental"
inputParameters:
- name: claim_id
in: path
operations:
- name: check-rental
method: GET
- type: http
namespace: rental-api
baseUri: "https://api.berkshirehathaway.com/rental/v1"
authentication:
type: bearer
token: "$secrets.rental_token"
resources:
- name: auths
path: "/authorizations"
operations:
- name: create-auth
method: POST
- type: http
namespace: servicenow
baseUri: "https://berkshire.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cases
path: "/table/sn_customerservice_case/{{claim_id}}"
inputParameters:
- name: claim_id
in: path
operations:
- name: update
method: PATCH
Triggers Marketo retention campaigns and logs in Salesforce.
naftiko: "0.5"
info:
label: "Retention Campaign Launcher"
description: "Triggers Marketo retention campaigns and logs in Salesforce."
tags:
- insurance
- policy
- marketo
- salesforce
capability:
exposes:
- type: mcp
namespace: retention-ops
port: 8080
tools:
- name: launch-retention
description: "Launch retention campaign."
inputParameters:
- name: segment
in: body
type: string
description: "Segment."
- name: campaign
in: body
type: string
description: "Campaign ID."
steps:
- name: trigger
type: call
call: "marketo.trigger"
with:
campaign_id: "{{campaign}}"
segment: "{{segment}}"
- name: log
type: call
call: "salesforce.create-log"
with:
campaign: "Retention: {{segment}}"
consumes:
- type: http
namespace: marketo
baseUri: "https://berkshirehathaway.mktorest.com/rest/v1"
authentication:
type: bearer
token: "$secrets.marketo_token"
resources:
- name: campaigns
path: "/campaigns/{{campaign}}/trigger.json"
inputParameters:
- name: campaign
in: path
operations:
- name: trigger
method: POST
- type: http
namespace: salesforce
baseUri: "https://berkshire.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: logs
path: "/sobjects/CampaignLog__c"
operations:
- name: create-log
method: POST
Retrieves customer account from Salesforce including contact details and policy count.
naftiko: "0.5"
info:
label: "Salesforce Account Lookup"
description: "Retrieves customer account from Salesforce including contact details and policy count."
tags:
- insurance
- salesforce
- crm
capability:
exposes:
- type: mcp
namespace: account-ops
port: 8080
tools:
- name: get-account
description: "Look up Salesforce account."
inputParameters:
- name: account_id
in: body
type: string
description: "Account ID."
call: "salesforce.get-account"
with:
account_id: "{{account_id}}"
outputParameters:
- name: name
type: string
mapping: "$.Name"
- name: policies
type: integer
mapping: "$.Policy_Count__c"
- name: tier
type: string
mapping: "$.Account_Tier__c"
consumes:
- type: http
namespace: salesforce
baseUri: "https://berkshire.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account
method: GET
Queries Salesforce for open client opportunities by Berkshire Hathaway subsidiary and posts a quarterly pipeline digest to the Sales Leadership Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Salesforce Subsidiary Client Pipeline Digest"
description: "Queries Salesforce for open client opportunities by Berkshire Hathaway subsidiary and posts a quarterly pipeline digest to the Sales Leadership Microsoft Teams channel."
tags:
- sales
- crm
- salesforce
- microsoft-teams
- reporting
- insurance
capability:
exposes:
- type: mcp
namespace: sales-pipeline
port: 8080
tools:
- name: digest-subsidiary-pipeline
description: "Query Salesforce for open opportunities by subsidiary closing this quarter, then post a pipeline summary to the Sales Leadership Teams channel."
inputParameters:
- name: subsidiary
in: body
type: string
description: "Berkshire subsidiary to report on, e.g. 'GEICO', 'General Re', 'Berkshire Hathaway Reinsurance'."
- name: fiscal_quarter
in: body
type: string
description: "Fiscal quarter in YYYY-QX format, e.g. '2026-Q1'."
steps:
- name: query-pipeline
type: call
call: "salesforce.query-opportunities"
with:
quarter: "{{fiscal_quarter}}"
subsidiary: "{{subsidiary}}"
- name: post-digest
type: call
call: "msteams.post-channel-message"
with:
channel: "sales-leadership"
message: "{{subsidiary}} pipeline Q{{fiscal_quarter}}: {{query-pipeline.count}} opportunities | Total: ${{query-pipeline.total_value}} | Weighted: ${{query-pipeline.weighted_value}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://berkshirehathaway.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunity-query
path: "/query"
inputParameters:
- name: q
in: 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: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Queries SAP Concur for expense reports pending manager approval beyond the SLA threshold and sends reminder notifications to the Finance Approvals Microsoft Teams channel.
naftiko: "0.5"
info:
label: "SAP Concur Expense Report Approval Reminder"
description: "Queries SAP Concur for expense reports pending manager approval beyond the SLA threshold and sends reminder notifications to the Finance Approvals Microsoft Teams channel."
tags:
- finance
- expense-management
- sap-concur
- microsoft-teams
- approval
capability:
exposes:
- type: mcp
namespace: expense-approvals
port: 8080
tools:
- name: send-expense-approval-reminders
description: "Query SAP Concur for expense reports pending approval longer than the specified days, and post a reminder to the Finance Approvals Teams channel."
inputParameters:
- name: days_pending
in: body
type: integer
description: "Minimum days a report must be pending before sending a reminder. Default: 5."
steps:
- name: get-pending-reports
type: call
call: "concur.list-pending-reports"
with:
approvalStatus: "A_PEND"
daysOld: "{{days_pending}}"
- name: notify-approvers
type: call
call: "msteams.post-channel-message"
with:
channel: "finance-approvals"
message: "{{get-pending-reports.count}} expense reports pending for more than {{days_pending}} days. Please review in SAP Concur."
consumes:
- type: http
namespace: concur
baseUri: "https://www.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_token"
resources:
- name: expense-reports
path: "/expense/reports"
operations:
- name: list-pending-reports
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/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Reconciles invoices against POs in SAP and creates ServiceNow tickets.
naftiko: "0.5"
info:
label: "SAP Invoice Reconciliation Workflow"
description: "Reconciles invoices against POs in SAP and creates ServiceNow tickets."
tags:
- finance
- sap
- servicenow
capability:
exposes:
- type: mcp
namespace: invoice-ops
port: 8080
tools:
- name: reconcile
description: "Reconcile invoices."
inputParameters:
- name: vendor
in: body
type: string
description: "Vendor."
- name: period
in: body
type: string
description: "YYYY-MM."
steps:
- name: invoices
type: call
call: "sap.get-invoices"
with:
vendor: "{{vendor}}"
period: "{{period}}"
- name: pos
type: call
call: "sap.get-pos"
with:
vendor: "{{vendor}}"
period: "{{period}}"
- name: ticket
type: call
call: "servicenow.create-case"
with:
short_description: "Recon: {{vendor}} - {{period}}"
consumes:
- type: http
namespace: sap
baseUri: "https://berkshirehathaway-sap.s4hana.cloud.sap/api/v1"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: invoices
path: "/invoices"
operations:
- name: get-invoices
method: GET
- type: http
namespace: servicenow
baseUri: "https://berkshire.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cases
path: "/table/sn_customerservice_case"
operations:
- name: create-case
method: POST
Looks up purchase order in SAP returning status, supplier, and value.
naftiko: "0.5"
info:
label: "SAP Purchase Order Lookup"
description: "Looks up purchase order in SAP returning status, supplier, and value."
tags:
- procurement
- finance
- sap
capability:
exposes:
- type: mcp
namespace: po-ops
port: 8080
tools:
- name: get-po
description: "Look up PO. Returns status, supplier, value."
inputParameters:
- name: po_number
in: body
type: string
description: "SAP PO number."
call: "sap.get-po"
with:
po_number: "{{po_number}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: supplier
type: string
mapping: "$.supplier.name"
- name: value
type: number
mapping: "$.totalCost.amount"
consumes:
- type: http
namespace: sap
baseUri: "https://berkshirehathaway-sap.s4hana.cloud.sap/api/v1"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: purchase-orders
path: "/purchase-orders/{{po_number}}"
inputParameters:
- name: po_number
in: path
operations:
- name: get-po
method: GET
Creates a ServiceNow change request for infrastructure changes at Berkshire Hathaway subsidiaries, routes it to the CAB, and notifies stakeholders via Microsoft Teams.
naftiko: "0.5"
info:
label: "ServiceNow IT Change Advisory Board Submission"
description: "Creates a ServiceNow change request for infrastructure changes at Berkshire Hathaway subsidiaries, routes it to the CAB, and notifies stakeholders via Microsoft Teams."
tags:
- itsm
- change-management
- servicenow
- microsoft-teams
- approval
capability:
exposes:
- type: mcp
namespace: change-management
port: 8080
tools:
- name: submit-change-request
description: "Given change details, risk level, and planned date, create a ServiceNow change request and notify the Change Advisory Board via the Teams CAB channel."
inputParameters:
- name: change_title
in: body
type: string
description: "Short title of the proposed change."
- name: change_description
in: body
type: string
description: "Full description including business justification, impact scope, and rollback plan."
- name: risk_level
in: body
type: string
description: "Risk level: 'low', 'medium', or 'high'."
- name: planned_date
in: body
type: string
description: "Planned implementation date in YYYY-MM-DD format."
steps:
- name: create-change
type: call
call: "servicenow.create-change"
with:
short_description: "{{change_title}}"
description: "{{change_description}}"
risk: "{{risk_level}}"
planned_start_date: "{{planned_date}}"
- name: notify-cab
type: call
call: "msteams.post-channel-message"
with:
channel: "change-advisory-board"
message: "New CAB submission: {{change_title}} | Risk: {{risk_level}} | Planned: {{planned_date}} | SNOW: {{create-change.number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://berkshirehathaway.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: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Searches ServiceNow knowledge base for articles matching a query.
naftiko: "0.5"
info:
label: "ServiceNow Knowledge Article Search"
description: "Searches ServiceNow knowledge base for articles matching a query."
tags:
- insurance
- servicenow
- knowledge-management
capability:
exposes:
- type: mcp
namespace: kb-ops
port: 8080
tools:
- name: search-kb
description: "Search knowledge base. Returns articles."
inputParameters:
- name: query
in: body
type: string
description: "Search query."
- name: category
in: body
type: string
description: "Category."
call: "servicenow.search"
with:
query: "{{query}}"
category: "{{category}}"
outputParameters:
- name: articles
type: array
mapping: "$.result"
- name: total
type: integer
mapping: "$.totalResults"
consumes:
- type: http
namespace: servicenow
baseUri: "https://berkshire.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: knowledge
path: "/table/kb_knowledge"
operations:
- name: search
method: GET
Runs data quality checks in Snowflake and creates Jira tickets for breached thresholds.
naftiko: "0.5"
info:
label: "Snowflake Claims Data Quality Check"
description: "Runs data quality checks in Snowflake and creates Jira tickets for breached thresholds."
tags:
- insurance
- claims
- data
- snowflake
- jira
capability:
exposes:
- type: mcp
namespace: dq-ops
port: 8080
tools:
- name: check-quality
description: "Check data quality."
inputParameters:
- name: date
in: body
type: string
description: "Check date."
steps:
- name: check
type: call
call: "snowflake.query"
with:
query: "CALL RUN_DQ_CHECKS('{{date}}')"
- name: ticket
type: call
call: "jira.create-issue"
with:
project_key: "DATA"
issuetype: "Bug"
summary: "DQ issues {{date}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://berkshire.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: jira
baseUri: "https://berkshirehathaway.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Retrieves CLV score from Snowflake including retention probability and revenue projection.
naftiko: "0.5"
info:
label: "Snowflake Customer Lifetime Value Lookup"
description: "Retrieves CLV score from Snowflake including retention probability and revenue projection."
tags:
- insurance
- analytics
- snowflake
capability:
exposes:
- type: mcp
namespace: clv-ops
port: 8080
tools:
- name: get-clv
description: "Look up CLV. Returns score, retention, revenue."
inputParameters:
- name: customer_id
in: body
type: string
description: "Berkshire Hathaway customer ID."
call: "snowflake.query-clv"
with:
customer_id: "{{customer_id}}"
outputParameters:
- name: ltv
type: number
mapping: "$.ltvScore"
- name: retention
type: number
mapping: "$.retentionProbability"
- name: revenue
type: number
mapping: "$.projectedAnnualRevenue"
consumes:
- type: http
namespace: snowflake
baseUri: "https://berkshire.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: queries
path: "/statements"
operations:
- name: query-clv
method: POST
Executes data quality checks on Berkshire Hathaway's Snowflake insurance data warehouse, detecting anomalies and data integrity issues, and posts results to the Data Engineering Teams channel.
naftiko: "0.5"
info:
label: "Snowflake Insurance Data Quality Monitoring"
description: "Executes data quality checks on Berkshire Hathaway's Snowflake insurance data warehouse, detecting anomalies and data integrity issues, and posts results to the Data Engineering Teams channel."
tags:
- data
- analytics
- snowflake
- data-quality
- insurance
- operations
capability:
exposes:
- type: mcp
namespace: insurance-data-ops
port: 8080
tools:
- name: run-insurance-data-quality-check
description: "Given a Snowflake table name and check date, run data quality validation SQL against insurance data, then post pass/fail results to the Data Engineering Teams channel."
inputParameters:
- name: table_name
in: body
type: string
description: "Fully qualified Snowflake table, e.g. 'BH_INSURANCE_PROD.GEICO.POLICIES'."
- name: check_date
in: body
type: string
description: "Business date to validate in YYYY-MM-DD format."
steps:
- name: run-dq-check
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT COUNT(*) as total, COUNT_IF(premium_amount IS NULL) as null_premium, COUNT_IF(policy_status NOT IN ('ACTIVE','LAPSED','CANCELLED')) as invalid_status FROM {{table_name}} WHERE effective_date = '{{check_date}}'"
- name: post-dq-results
type: call
call: "msteams.post-channel-message"
with:
channel: "data-engineering"
message: "DQ check {{table_name}} for {{check_date}}: {{run-dq-check.total}} records | Null premiums: {{run-dq-check.null_premium}} | Invalid statuses: {{run-dq-check.invalid_status}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://berkshirehathaway.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves the most recent execution status of a named Snowflake pipeline task in the Berkshire Hathaway data warehouse, including run state, timestamps, and error details.
naftiko: "0.5"
info:
label: "Snowflake Pipeline Task Status Lookup"
description: "Retrieves the most recent execution status of a named Snowflake pipeline task in the Berkshire Hathaway data warehouse, including run state, timestamps, and error details."
tags:
- data
- analytics
- snowflake
- monitoring
- lookup
capability:
exposes:
- type: mcp
namespace: pipeline-status
port: 8080
tools:
- name: get-pipeline-task-status
description: "Given a Snowflake database and task name, return the most recent run state, scheduled time, completion time, and error message."
inputParameters:
- name: database_name
in: body
type: string
description: "The Snowflake database name, e.g. 'BH_INSURANCE_PROD'."
- name: task_name
in: body
type: string
description: "The Snowflake task name to query status for."
call: "snowflake.get-task-history"
with:
database: "{{database_name}}"
task_name: "{{task_name}}"
outputParameters:
- name: state
type: string
mapping: "$.data[0].STATE"
- name: scheduled_time
type: string
mapping: "$.data[0].SCHEDULED_TIME"
- name: completed_time
type: string
mapping: "$.data[0].COMPLETED_TIME"
- name: error_message
type: string
mapping: "$.data[0].ERROR_MESSAGE"
consumes:
- type: http
namespace: snowflake
baseUri: "https://berkshirehathaway.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: task-history
path: "/databases/{{database}}/schemas/information_schema/task_history"
inputParameters:
- name: database
in: path
operations:
- name: get-task-history
method: GET
Monitors recovery, updates Snowflake, and generates Confluence reports.
naftiko: "0.5"
info:
label: "Subrogation Recovery Tracker Workflow"
description: "Monitors recovery, updates Snowflake, and generates Confluence reports."
tags:
- insurance
- claims
- subrogation
- snowflake
- confluence
capability:
exposes:
- type: mcp
namespace: subro-ops
port: 8080
tools:
- name: track-recovery
description: "Track subrogation."
inputParameters:
- name: start
in: body
type: string
description: "Start."
- name: end
in: body
type: string
description: "End."
steps:
- name: data
type: call
call: "claims-api.get-subro"
with:
start: "{{start}}"
end: "{{end}}"
- name: update
type: call
call: "snowflake.query"
with:
query: "CALL UPDATE_SUBROGATION('{{start}}','{{end}}')"
- name: publish
type: call
call: "confluence.create-page"
with:
space_key: "CLAIMS"
title: "Subrogation {{start}} to {{end}}"
consumes:
- type: http
namespace: claims-api
baseUri: "https://api.berkshirehathaway.com/claims/v2"
authentication:
type: bearer
token: "$secrets.claims_api_token"
resources:
- name: subrogation
path: "/subrogation/summary"
operations:
- name: get-subro
method: GET
- type: http
namespace: snowflake
baseUri: "https://berkshire.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: confluence
baseUri: "https://berkshirehathaway.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
Generates a compliance scorecard for a Berkshire Hathaway subsidiary by querying audit, regulatory, and training data from Snowflake and publishing to Confluence.
naftiko: "0.5"
info:
label: "Subsidiary Compliance Scorecard Workflow"
description: "Generates a compliance scorecard for a Berkshire Hathaway subsidiary by querying audit, regulatory, and training data from Snowflake and publishing to Confluence."
tags:
- insurance
- compliance
- snowflake
- confluence
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: compliance-score
port: 8080
tools:
- name: generate-compliance-scorecard
description: "Generate compliance scorecard for a subsidiary. Queries data and publishes report. Use for quarterly compliance reviews."
inputParameters:
- name: subsidiary_code
in: body
type: string
description: "Subsidiary code."
- name: period
in: body
type: string
description: "Period YYYY-Q."
steps:
- name: query-compliance-data
type: call
call: "snowflake.query"
with:
query: "CALL COMPLIANCE_DB.GENERATE_SCORECARD('{{subsidiary_code}}', '{{period}}')"
- name: publish-scorecard
type: call
call: "confluence.create-page"
with:
space_key: "COMPLIANCE"
title: "Compliance Scorecard: {{subsidiary_code}} - {{period}}"
- name: notify-leadership
type: call
call: "msteams.post"
with:
channel_id: "$secrets.compliance_channel"
text: "Compliance scorecard published for {{subsidiary_code}} ({{period}})."
consumes:
- type: http
namespace: snowflake
baseUri: "https://berkshire.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: confluence
baseUri: "https://berkshirehathaway.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
Retrieves a consolidated policy portfolio summary for a Berkshire Hathaway subsidiary from Snowflake, returning policy counts, premium volumes, and loss ratios by line of business.
naftiko: "0.5"
info:
label: "Subsidiary Policy Portfolio Lookup"
description: "Retrieves a consolidated policy portfolio summary for a Berkshire Hathaway subsidiary from Snowflake, returning policy counts, premium volumes, and loss ratios by line of business."
tags:
- insurance
- policy
- snowflake
- analytics
capability:
exposes:
- type: mcp
namespace: portfolio-ops
port: 8080
tools:
- name: get-subsidiary-portfolio
description: "Look up policy portfolio for a subsidiary. Returns counts, premiums, and loss ratios by LOB. Use for subsidiary performance reviews."
inputParameters:
- name: subsidiary_code
in: body
type: string
description: "The subsidiary code (e.g., GEICO, BHSI, GenRe)."
call: "snowflake.query-portfolio"
with:
subsidiary_code: "{{subsidiary_code}}"
outputParameters:
- name: total_policies
type: integer
mapping: "$.totalPolicies"
- name: total_premium
type: number
mapping: "$.totalPremium"
- name: overall_loss_ratio
type: number
mapping: "$.overallLossRatio"
consumes:
- type: http
namespace: snowflake
baseUri: "https://berkshire.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: queries
path: "/statements"
operations:
- name: query-portfolio
method: POST
Triggers a Terraform Cloud workspace run to provision or update infrastructure for a Berkshire Hathaway subsidiary, and notifies the Platform Engineering team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Terraform Cloud Infrastructure Provisioning"
description: "Triggers a Terraform Cloud workspace run to provision or update infrastructure for a Berkshire Hathaway subsidiary, and notifies the Platform Engineering team via Microsoft Teams."
tags:
- cloud
- infrastructure
- terraform
- microsoft-teams
- devops
- provisioning
capability:
exposes:
- type: mcp
namespace: infra-provisioning
port: 8080
tools:
- name: trigger-terraform-run
description: "Given a Terraform Cloud workspace ID and run description, trigger an infrastructure plan-and-apply run and notify the Platform Engineering Teams channel."
inputParameters:
- name: workspace_id
in: body
type: string
description: "The Terraform Cloud workspace ID to run against."
- name: run_message
in: body
type: string
description: "Description of the infrastructure change, e.g. 'Scale GEICO API cluster for renewal season'."
steps:
- name: trigger-run
type: call
call: "terraform.create-run"
with:
workspace_id: "{{workspace_id}}"
message: "{{run_message}}"
- name: notify-platform
type: call
call: "msteams.post-channel-message"
with:
channel: "platform-engineering"
message: "Terraform run triggered: {{run_message}} | Workspace: {{workspace_id}} | Run: {{trigger-run.id}}"
consumes:
- type: http
namespace: terraform
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: runs
path: "/runs"
operations:
- name: create-run
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Provisions infrastructure via Terraform Cloud and notifies platform team.
naftiko: "0.5"
info:
label: "Terraform Infrastructure Provisioning Workflow"
description: "Provisions infrastructure via Terraform Cloud and notifies platform team."
tags:
- engineering
- terraform
- microsoft-azure
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: infra-ops
port: 8080
tools:
- name: provision
description: "Provision infrastructure."
inputParameters:
- name: workspace
in: body
type: string
description: "Workspace."
- name: env
in: body
type: string
description: "Environment."
steps:
- name: run
type: call
call: "terraform.create-run"
with:
workspace: "{{workspace}}"
message: "Provisioning {{env}}"
- name: notify
type: call
call: "msteams.post"
with:
channel_id: "$secrets.platform_channel"
text: "Terraform: {{workspace}} ({{env}})"
consumes:
- type: http
namespace: terraform
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: runs
path: "/runs"
operations:
- name: create-run
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
Checks current underwriting appetite for product, state, and risk class.
naftiko: "0.5"
info:
label: "Underwriting Appetite Check"
description: "Checks current underwriting appetite for product, state, and risk class."
tags:
- insurance
- underwriting
- compliance
capability:
exposes:
- type: mcp
namespace: appetite-ops
port: 8080
tools:
- name: check-appetite
description: "Check appetite. Returns status and restrictions."
inputParameters:
- name: product
in: body
type: string
description: "Product type."
- name: state
in: body
type: string
description: "State code."
- name: risk_class
in: body
type: string
description: "Risk class."
call: "uw-api.check"
with:
product: "{{product}}"
state: "{{state}}"
risk_class: "{{risk_class}}"
outputParameters:
- name: accepting
type: boolean
mapping: "$.isAccepting"
- name: restrictions
type: array
mapping: "$.restrictions"
consumes:
- type: http
namespace: uw-api
baseUri: "https://api.berkshirehathaway.com/underwriting/v2"
authentication:
type: bearer
token: "$secrets.underwriting_api_token"
resources:
- name: appetite
path: "/appetite"
operations:
- name: check
method: GET
Generates profitability report from Snowflake and publishes to Power BI.
naftiko: "0.5"
info:
label: "Underwriting Profitability Report"
description: "Generates profitability report from Snowflake and publishes to Power BI."
tags:
- insurance
- underwriting
- actuarial
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: uw-profit
port: 8080
tools:
- name: gen-profitability
description: "Generate UW profitability."
inputParameters:
- name: product
in: body
type: string
description: "Product."
- name: period
in: body
type: string
description: "YYYY-Q."
steps:
- name: query
type: call
call: "snowflake.query"
with:
query: "SELECT state,combined_ratio FROM PROFITABILITY WHERE product='{{product}}'"
- name: refresh
type: call
call: "powerbi.refresh"
with:
group_id: "$secrets.pbi_uw"
dataset_id: "$secrets.pbi_profit"
consumes:
- type: http
namespace: snowflake
baseUri: "https://berkshire.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/groups/{{group_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: group_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh
method: POST
Retrieves underwriting risk score for a policy application returning grade, score, and action.
naftiko: "0.5"
info:
label: "Underwriting Risk Score Lookup"
description: "Retrieves underwriting risk score for a policy application returning grade, score, and action."
tags:
- insurance
- underwriting
- risk
capability:
exposes:
- type: mcp
namespace: uw-ops
port: 8080
tools:
- name: get-risk-score
description: "Look up risk score for application. Returns grade and action."
inputParameters:
- name: application_id
in: body
type: string
description: "Application ID."
call: "risk-engine.get-score"
with:
application_id: "{{application_id}}"
outputParameters:
- name: risk_grade
type: string
mapping: "$.riskGrade"
- name: score
type: number
mapping: "$.overallScore"
- name: action
type: string
mapping: "$.recommendedAction"
consumes:
- type: http
namespace: risk-engine
baseUri: "https://api.berkshirehathaway.com/underwriting/v2"
authentication:
type: bearer
token: "$secrets.underwriting_api_token"
resources:
- name: scores
path: "/applications/{{application_id}}/risk-score"
inputParameters:
- name: application_id
in: path
operations:
- name: get-score
method: GET
Reconciles vendor payments against authorizations and flags discrepancies.
naftiko: "0.5"
info:
label: "Vendor Payment Reconciliation Workflow"
description: "Reconciles vendor payments against authorizations and flags discrepancies."
tags:
- insurance
- claims
- finance
- servicenow
capability:
exposes:
- type: mcp
namespace: vendor-recon
port: 8080
tools:
- name: reconcile-vendor
description: "Reconcile vendor payments."
inputParameters:
- name: vendor
in: body
type: string
description: "Vendor."
- name: period
in: body
type: string
description: "YYYY-MM."
steps:
- name: invoices
type: call
call: "claims-api.get-invoices"
with:
vendor: "{{vendor}}"
period: "{{period}}"
- name: auths
type: call
call: "claims-api.get-auths"
with:
vendor: "{{vendor}}"
period: "{{period}}"
- name: flag
type: call
call: "servicenow.create-case"
with:
short_description: "Vendor recon: {{vendor}} - {{period}}"
consumes:
- type: http
namespace: claims-api
baseUri: "https://api.berkshirehathaway.com/claims/v2"
authentication:
type: bearer
token: "$secrets.claims_api_token"
resources:
- name: vendor-data
path: "/vendors/{{vendor}}/invoices"
inputParameters:
- name: vendor
in: path
operations:
- name: get-invoices
method: GET
- type: http
namespace: servicenow
baseUri: "https://berkshire.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cases
path: "/table/sn_customerservice_case"
operations:
- name: create-case
method: POST
Pulls vendor data from SAP, scores risk, and creates assessment in ServiceNow.
naftiko: "0.5"
info:
label: "Vendor Risk Assessment Workflow"
description: "Pulls vendor data from SAP, scores risk, and creates assessment in ServiceNow."
tags:
- insurance
- compliance
- sap
- servicenow
capability:
exposes:
- type: mcp
namespace: vendor-risk
port: 8080
tools:
- name: assess-vendor
description: "Assess vendor risk."
inputParameters:
- name: vendor_id
in: body
type: string
description: "Vendor ID."
- name: type
in: body
type: string
description: "Assessment type."
steps:
- name: get
type: call
call: "sap.get-vendor"
with:
vendor_id: "{{vendor_id}}"
- name: score
type: call
call: "risk-api.score"
with:
name: "{{get.name}}"
type: "{{type}}"
- name: log
type: call
call: "servicenow.create-record"
with:
table: "u_vendor_risk"
vendor: "{{vendor_id}}"
level: "{{score.level}}"
consumes:
- type: http
namespace: sap
baseUri: "https://berkshirehathaway-sap.s4hana.cloud.sap/api/v1"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: vendors
path: "/suppliers/{{vendor_id}}"
inputParameters:
- name: vendor_id
in: path
operations:
- name: get-vendor
method: GET
- type: http
namespace: risk-api
baseUri: "https://api.berkshirehathaway.com/risk/v1"
authentication:
type: bearer
token: "$secrets.risk_token"
resources:
- name: scoring
path: "/vendors/score"
operations:
- name: score
method: POST
- type: http
namespace: servicenow
baseUri: "https://berkshire.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/u_vendor_risk"
operations:
- name: create-record
method: POST
Queries Snowflake for policy exposure in severe weather regions and refreshes Power BI.
naftiko: "0.5"
info:
label: "Weather Exposure Analysis Workflow"
description: "Queries Snowflake for policy exposure in severe weather regions and refreshes Power BI."
tags:
- insurance
- actuarial
- catastrophe
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: exposure-ops
port: 8080
tools:
- name: analyze-exposure
description: "Analyze weather exposure."
inputParameters:
- name: type
in: body
type: string
description: "Weather type."
- name: zips
in: body
type: string
description: "Affected ZIPs."
steps:
- name: query
type: call
call: "snowflake.query"
with:
query: "SELECT lob,COUNT(*),SUM(tiv) FROM POLICIES WHERE zip IN ('{{zips}}') GROUP BY lob"
- name: refresh
type: call
call: "powerbi.refresh"
with:
group_id: "$secrets.pbi_cat"
dataset_id: "$secrets.pbi_exposure"
consumes:
- type: http
namespace: snowflake
baseUri: "https://berkshire.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/groups/{{group_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: group_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh
method: POST
Looks up the current approval status, leave dates, and leave type of an employee absence request in Workday for manager review or employee self-service.
naftiko: "0.5"
info:
label: "Workday Absence Request Status Lookup"
description: "Looks up the current approval status, leave dates, and leave type of an employee absence request in Workday for manager review or employee self-service."
tags:
- hr
- workday
- absence-management
- lookup
capability:
exposes:
- type: mcp
namespace: hr-absence
port: 8080
tools:
- name: get-absence-request-status
description: "Given a Workday absence request ID, return the approval status, start date, end date, and leave type."
inputParameters:
- name: absence_request_id
in: body
type: string
description: "The Workday absence request ID to look up."
call: "workday.get-absence-request"
with:
request_id: "{{absence_request_id}}"
outputParameters:
- name: status
type: string
mapping: "$.data.approvalStatus"
- name: start_date
type: string
mapping: "$.data.startDate"
- name: end_date
type: string
mapping: "$.data.endDate"
- name: leave_type
type: string
mapping: "$.data.leaveType"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: absence-requests
path: "/berkshire/absenceRequests/{{request_id}}"
inputParameters:
- name: request_id
in: path
operations:
- name: get-absence-request
method: GET
Retrieves employee benefits eligibility from Workday including enrolled and eligible plans.
naftiko: "0.5"
info:
label: "Workday Benefits Eligibility Lookup"
description: "Retrieves employee benefits eligibility from Workday including enrolled and eligible plans."
tags:
- hr
- workday
- benefits
capability:
exposes:
- type: mcp
namespace: benefits-ops
port: 8080
tools:
- name: get-benefits
description: "Look up benefits eligibility."
inputParameters:
- name: employee_id
in: body
type: string
description: "Workday employee ID."
call: "workday.get-benefits"
with:
employee_id: "{{employee_id}}"
outputParameters:
- name: enrolled
type: array
mapping: "$.enrolledPlans"
- name: eligible
type: array
mapping: "$.eligiblePlans"
- name: status
type: string
mapping: "$.enrollmentStatus"
consumes:
- type: http
namespace: workday
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/berkshire"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: benefits
path: "/benefits/eligibility/{{employee_id}}"
inputParameters:
- name: employee_id
in: path
operations:
- name: get-benefits
method: GET
Initiates an annual performance review cycle in Workday for a given Berkshire subsidiary division, creates ServiceNow HR tracking tasks, and notifies managers via Microsoft Teams.
naftiko: "0.5"
info:
label: "Workday Performance Review Cycle Launch"
description: "Initiates an annual performance review cycle in Workday for a given Berkshire subsidiary division, creates ServiceNow HR tracking tasks, and notifies managers via Microsoft Teams."
tags:
- hr
- performance
- workday
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-performance
port: 8080
tools:
- name: launch-performance-review-cycle
description: "Given a Workday department ID and review year, start the performance review cycle, create ServiceNow HR tasks, and notify the HR Announcements Teams channel."
inputParameters:
- name: department_id
in: body
type: string
description: "The Workday organization unit ID for the review cycle."
- name: review_year
in: body
type: string
description: "The performance review year, e.g. '2026'."
steps:
- name: initiate-review
type: call
call: "workday.initiate-performance-review"
with:
department_id: "{{department_id}}"
review_period: "{{review_year}}"
- name: create-hr-task
type: call
call: "servicenow.create-task"
with:
short_description: "Performance review {{review_year}} — dept {{department_id}}"
assignment_group: "HR_Operations"
due_date: "{{initiate-review.deadline}}"
- name: notify-managers
type: call
call: "msteams.post-channel-message"
with:
channel: "hr-announcements"
message: "Performance review {{review_year}} launched for department {{department_id}}. Deadline: {{initiate-review.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: performance-reviews
path: "/berkshire/performanceReviews"
operations:
- name: initiate-performance-review
method: POST
- type: http
namespace: servicenow
baseUri: "https://berkshirehathaway.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/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
When an employee role change is processed in Workday, updates their Okta group memberships and creates a ServiceNow task to confirm access provisioning.
naftiko: "0.5"
info:
label: "Workday Role Change Access Provisioning"
description: "When an employee role change is processed in Workday, updates their Okta group memberships and creates a ServiceNow task to confirm access provisioning."
tags:
- hr
- identity
- workday
- okta
- servicenow
- role-change
- access-management
capability:
exposes:
- type: mcp
namespace: hr-access
port: 8080
tools:
- name: sync-role-change-access
description: "Given a Workday worker ID, new role, and previous role, update Okta group memberships and create a ServiceNow provisioning confirmation task."
inputParameters:
- name: workday_employee_id
in: body
type: string
description: "The Workday worker ID for the employee with the role change."
- name: new_role
in: body
type: string
description: "The new job role from the Berkshire role catalogue."
- name: old_role
in: body
type: string
description: "The previous job role for de-provisioning reference."
steps:
- name: get-worker
type: call
call: "workday.get-worker"
with:
worker_id: "{{workday_employee_id}}"
- name: update-okta-groups
type: call
call: "okta.update-user-groups"
with:
user_login: "{{get-worker.work_email}}"
add_group: "{{new_role}}"
remove_group: "{{old_role}}"
- name: create-provisioning-task
type: call
call: "servicenow.create-task"
with:
short_description: "Role change access: {{get-worker.full_name}} — {{old_role}} to {{new_role}}"
assignment_group: "IT_Access_Management"
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: "/berkshire/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: okta
baseUri: "https://berkshirehathaway.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: user-groups
path: "/users/{{user_login}}/groups"
inputParameters:
- name: user_login
in: path
operations:
- name: update-user-groups
method: PUT
- type: http
namespace: servicenow
baseUri: "https://berkshirehathaway.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 employee time off balances from Workday including vacation, sick, and personal hours.
naftiko: "0.5"
info:
label: "Workday Time Off Balance Lookup"
description: "Retrieves employee time off balances from Workday including vacation, sick, and personal hours."
tags:
- hr
- workday
capability:
exposes:
- type: mcp
namespace: timeoff-ops
port: 8080
tools:
- name: get-balance
description: "Look up time off balances."
inputParameters:
- name: employee_id
in: body
type: string
description: "Workday employee ID."
call: "workday.get-balance"
with:
employee_id: "{{employee_id}}"
outputParameters:
- name: vacation
type: number
mapping: "$.vacationBalance"
- name: sick
type: number
mapping: "$.sickBalance"
- name: personal
type: number
mapping: "$.personalBalance"
consumes:
- type: http
namespace: workday
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/berkshire"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: time-off
path: "/timeOff/balances/{{employee_id}}"
inputParameters:
- name: employee_id
in: path
operations:
- name: get-balance
method: GET