Berkshire Hathaway Capabilities

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

Sort
Expand

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