State Farm Capabilities

Naftiko 0.5 capability definitions for State Farm - 122 capabilities showing integration workflows and service orchestrations.

Sort
Expand

Executes the actuarial catastrophe model in Snowflake for a specified peril and region, calculates probable maximum loss, and publishes results to the executive Power BI dashboard.

naftiko: "0.5"
info:
  label: "Actuarial Catastrophe Model Run"
  description: "Executes the actuarial catastrophe model in Snowflake for a specified peril and region, calculates probable maximum loss, and publishes results to the executive Power BI dashboard."
  tags:
    - insurance
    - actuarial
    - catastrophe
    - snowflake
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: cat-model
      port: 8080
      tools:
        - name: run-cat-model
          description: "Run catastrophe model for a peril and region. Calculates PML at various return periods and refreshes the dashboard. Use for annual catastrophe modeling."
          inputParameters:
            - name: peril
              in: body
              type: string
              description: "Peril type: hurricane, earthquake, tornado, wildfire."
            - name: region
              in: body
              type: string
              description: "Geographic region code."
          steps:
            - name: execute-model
              type: call
              call: "snowflake.run-query"
              with:
                query: "CALL ACTUARIAL_DB.PROCEDURES.RUN_CAT_MODEL('{{peril}}', '{{region}}')"
            - name: refresh-dashboard
              type: call
              call: "powerbi.refresh-dataset"
              with:
                group_id: "$secrets.powerbi_cat_group"
                dataset_id: "$secrets.powerbi_cat_model_dataset"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://statefarm.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-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-dataset
              method: POST

Runs the Incurred But Not Reported reserve estimation model in Snowflake for a line of business and accident year, then publishes results to the actuarial Power BI dashboard.

naftiko: "0.5"
info:
  label: "Actuarial IBNR Reserve Estimation"
  description: "Runs the Incurred But Not Reported reserve estimation model in Snowflake for a line of business and accident year, then publishes results to the actuarial Power BI dashboard."
  tags:
    - insurance
    - actuarial
    - claims
    - snowflake
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: ibnr-ops
      port: 8080
      tools:
        - name: estimate-ibnr-reserves
          description: "Run IBNR reserve estimation for a line of business and accident year. Executes model in Snowflake and refreshes dashboard. Use during quarterly reserve reviews."
          inputParameters:
            - name: line_of_business
              in: body
              type: string
              description: "Line of business: auto-liability, auto-physical, homeowner."
            - name: accident_year
              in: body
              type: integer
              description: "The accident year to estimate (e.g., 2025)."
          steps:
            - name: run-ibnr-model
              type: call
              call: "snowflake.run-query"
              with:
                query: "CALL ACTUARIAL_DB.PROCEDURES.ESTIMATE_IBNR('{{line_of_business}}', {{accident_year}})"
            - name: refresh-dashboard
              type: call
              call: "powerbi.refresh-dataset"
              with:
                group_id: "$secrets.powerbi_actuarial_group"
                dataset_id: "$secrets.powerbi_ibnr_dataset"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://statefarm.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-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-dataset
              method: POST

Queries Snowflake for incurred losses and earned premiums by line of business, calculates loss ratios, and refreshes the actuarial Power BI dashboard with the latest figures.

naftiko: "0.5"
info:
  label: "Actuarial Loss Ratio Dashboard Sync"
  description: "Queries Snowflake for incurred losses and earned premiums by line of business, calculates loss ratios, and refreshes the actuarial Power BI dashboard with the latest figures."
  tags:
    - insurance
    - actuarial
    - snowflake
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: loss-ratio-ops
      port: 8080
      tools:
        - name: sync-loss-ratio-dashboard
          description: "Calculate and refresh loss ratios for a line of business and period. Queries loss data from Snowflake and triggers Power BI refresh. Use for monthly actuarial reviews."
          inputParameters:
            - name: line_of_business
              in: body
              type: string
              description: "Line of business: auto, homeowner, life, or umbrella."
            - name: period
              in: body
              type: string
              description: "Reporting period in YYYY-MM format."
          steps:
            - name: query-loss-data
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT SUM(incurred_loss) as total_loss, SUM(earned_premium) as total_premium FROM ACTUARIAL_DB.PUBLIC.LOSS_TRIANGLE WHERE lob = '{{line_of_business}}' AND period = '{{period}}'"
            - name: refresh-dashboard
              type: call
              call: "powerbi.refresh-dataset"
              with:
                group_id: "$secrets.powerbi_actuarial_group"
                dataset_id: "$secrets.powerbi_loss_ratio_dataset"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://statefarm.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-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-dataset
              method: POST

Retrieves mortality rate data from the actuarial data warehouse for a specified age, gender, and table version, used in life insurance premium calculations.

naftiko: "0.5"
info:
  label: "Actuarial Mortality Table Lookup"
  description: "Retrieves mortality rate data from the actuarial data warehouse for a specified age, gender, and table version, used in life insurance premium calculations."
  tags:
    - insurance
    - actuarial
    - life
capability:
  exposes:
    - type: mcp
      namespace: mortality-ops
      port: 8080
      tools:
        - name: get-mortality-rate
          description: "Look up the mortality rate for a given age and gender from the specified actuarial table. Returns annual mortality rate, life expectancy, and table version. Use for life insurance pricing."
          inputParameters:
            - name: age
              in: body
              type: integer
              description: "The insured's current age."
            - name: gender
              in: body
              type: string
              description: "Gender: male or female."
            - name: table_version
              in: body
              type: string
              description: "Mortality table version (e.g., CSO2017)."
          call: "actuarial-api.get-mortality-rate"
          with:
            age: "{{age}}"
            gender: "{{gender}}"
            table_version: "{{table_version}}"
          outputParameters:
            - name: annual_mortality_rate
              type: number
              mapping: "$.annualMortalityRate"
            - name: life_expectancy
              type: number
              mapping: "$.lifeExpectancy"
            - name: table_version
              type: string
              mapping: "$.tableVersion"
  consumes:
    - type: http
      namespace: actuarial-api
      baseUri: "https://api.statefarm.com/actuarial/v1"
      authentication:
        type: bearer
        token: "$secrets.actuarial_api_token"
      resources:
        - name: mortality
          path: "/mortality-tables/{{table_version}}/rates"
          inputParameters:
            - name: table_version
              in: path
          operations:
            - name: get-mortality-rate
              method: GET

Triggers the quarterly actuarial reserve calculation in Snowflake, validates results against threshold parameters, and publishes the reserve report to Power BI for executive review.

naftiko: "0.5"
info:
  label: "Actuarial Reserve Calculation Trigger"
  description: "Triggers the quarterly actuarial reserve calculation in Snowflake, validates results against threshold parameters, and publishes the reserve report to Power BI for executive review."
  tags:
    - insurance
    - actuarial
    - snowflake
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: actuarial-ops
      port: 8080
      tools:
        - name: run-reserve-calculation
          description: "Trigger the actuarial reserve calculation for a specified line of business and quarter, validate results, and refresh the Power BI dashboard. Use during quarterly close."
          inputParameters:
            - name: line_of_business
              in: body
              type: string
              description: "Line of business: auto, homeowner, life, or umbrella."
            - name: quarter
              in: body
              type: string
              description: "Fiscal quarter in YYYY-Q format (e.g., 2026-Q1)."
          steps:
            - name: run-calculation
              type: call
              call: "snowflake.run-query"
              with:
                query: "CALL ACTUARIAL_DB.PROCEDURES.CALCULATE_RESERVES('{{line_of_business}}', '{{quarter}}')"
            - name: validate-results
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT * FROM ACTUARIAL_DB.PUBLIC.RESERVE_VALIDATION WHERE lob = '{{line_of_business}}' AND quarter = '{{quarter}}'"
            - name: refresh-dashboard
              type: call
              call: "powerbi.refresh-dataset"
              with:
                group_id: "$secrets.powerbi_actuarial_group"
                dataset_id: "$secrets.powerbi_reserves_dataset"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://statefarm.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-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-dataset
              method: POST

Retrieves the upcoming appointment schedule for a State Farm agent from the scheduling system.

naftiko: "0.5"
info:
  label: "Agent Appointment Schedule Lookup"
  description: "Retrieves the upcoming appointment schedule for a State Farm agent from the scheduling system."
  tags:
    - insurance
    - agent
    - scheduling
capability:
  exposes:
    - type: mcp
      namespace: sf-scheduling
      port: 8080
      tools:
        - name: get-appointments
          description: "Given an agent ID, return upcoming appointments and next available slot. Use when scheduling policyholder meetings."
          inputParameters:
            - name: agent_id
              in: body
              type: string
              description: "The agent identifier."
          call: "sf-scheduling.get-appointments"
          with:
            agent_id: "{{agent_id}}"
          outputParameters:
            - name: appointments
              type: array
              mapping: "$.appointments"
            - name: next_available
              type: string
              mapping: "$.next_available_slot"
  consumes:
    - namespace: sf-scheduling
      type: http
      baseUri: "https://api.statefarm.com/v1/scheduling"
      authentication:
        type: bearer
        token: "$secrets.sf_scheduling_token"
      resources:
        - name: appointments
          path: "/agents/{agent_id}/appointments"
          inputParameters:
            - name: agent_id
              in: path
          operations:
            - name: get-appointments
              method: GET

Retrieves the current appointment status of a State Farm agent by state, returning active appointments, lines of authority, and effective dates from the licensing system.

naftiko: "0.5"
info:
  label: "Agent Appointment Status Lookup"
  description: "Retrieves the current appointment status of a State Farm agent by state, returning active appointments, lines of authority, and effective dates from the licensing system."
  tags:
    - insurance
    - agent
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: appointment-ops
      port: 8080
      tools:
        - name: get-appointment-status
          description: "Look up agent appointment status by agent ID and state. Returns active appointments, lines of authority, and dates. Use for compliance verification."
          inputParameters:
            - name: agent_id
              in: body
              type: string
              description: "The State Farm agent identifier."
            - name: state_code
              in: body
              type: string
              description: "Two-letter state code."
          call: "licensing-api.get-appointments"
          with:
            agent_id: "{{agent_id}}"
            state_code: "{{state_code}}"
          outputParameters:
            - name: appointments
              type: array
              mapping: "$.appointments"
            - name: is_active
              type: boolean
              mapping: "$.isActive"
            - name: effective_date
              type: string
              mapping: "$.effectiveDate"
  consumes:
    - type: http
      namespace: licensing-api
      baseUri: "https://api.statefarm.com/licensing/v1"
      authentication:
        type: bearer
        token: "$secrets.licensing_api_token"
      resources:
        - name: appointments
          path: "/agents/{{agent_id}}/appointments/{{state_code}}"
          inputParameters:
            - name: agent_id
              in: path
            - name: state_code
              in: path
          operations:
            - name: get-appointments
              method: GET

Retrieves the current commission balance and pending payments for a State Farm agent.

naftiko: "0.5"
info:
  label: "Agent Commission Balance Lookup"
  description: "Retrieves the current commission balance and pending payments for a State Farm agent."
  tags:
    - insurance
    - agent
    - commission
capability:
  exposes:
    - type: mcp
      namespace: sf-commissions
      port: 8080
      tools:
        - name: get-commission-balance
          description: "Given an agent ID, return the current commission balance and pending payments. Use when an agent checks their earnings."
          inputParameters:
            - name: agent_id
              in: body
              type: string
              description: "The agent identifier."
          call: "sf-commissions.get-commission-balance"
          with:
            agent_id: "{{agent_id}}"
          outputParameters:
            - name: balance
              type: number
              mapping: "$.balance"
            - name: pending
              type: number
              mapping: "$.pending"
            - name: last_payment
              type: string
              mapping: "$.last_payment_date"
  consumes:
    - namespace: sf-commissions
      type: http
      baseUri: "https://api.statefarm.com/v1/commissions"
      authentication:
        type: bearer
        token: "$secrets.sf_commissions_token"
      resources:
        - name: balance
          path: "/agents/{agent_id}/balance"
          inputParameters:
            - name: agent_id
              in: path
          operations:
            - name: get-commission-balance
              method: GET

Retrieves the latest commission statement for a State Farm agent from the compensation system, returning total commissions, policy counts, and payment date.

naftiko: "0.5"
info:
  label: "Agent Commission Statement Lookup"
  description: "Retrieves the latest commission statement for a State Farm agent from the compensation system, returning total commissions, policy counts, and payment date."
  tags:
    - insurance
    - agent
    - finance
capability:
  exposes:
    - type: mcp
      namespace: commission-ops
      port: 8080
      tools:
        - name: get-commission-statement
          description: "Look up the most recent commission statement for an agent by agent ID. Returns total commissions earned, new policy count, renewal count, and payment date. Use when agents inquire about compensation."
          inputParameters:
            - name: agent_id
              in: body
              type: string
              description: "The State Farm agent identifier."
          call: "compensation-api.get-statement"
          with:
            agent_id: "{{agent_id}}"
          outputParameters:
            - name: total_commissions
              type: number
              mapping: "$.totalCommissions"
            - name: new_policy_count
              type: integer
              mapping: "$.newPolicyCount"
            - name: renewal_count
              type: integer
              mapping: "$.renewalCount"
            - name: payment_date
              type: string
              mapping: "$.paymentDate"
  consumes:
    - type: http
      namespace: compensation-api
      baseUri: "https://api.statefarm.com/compensation/v1"
      authentication:
        type: bearer
        token: "$secrets.compensation_api_token"
      resources:
        - name: statements
          path: "/agents/{{agent_id}}/statements/latest"
          inputParameters:
            - name: agent_id
              in: path
          operations:
            - name: get-statement
              method: GET

Retrieves the current license status and expiration dates for a State Farm agent from the compliance system, returning active licenses by state and line of authority.

naftiko: "0.5"
info:
  label: "Agent License Verification Lookup"
  description: "Retrieves the current license status and expiration dates for a State Farm agent from the compliance system, returning active licenses by state and line of authority."
  tags:
    - insurance
    - compliance
    - agent
capability:
  exposes:
    - type: mcp
      namespace: agent-compliance
      port: 8080
      tools:
        - name: get-agent-licenses
          description: "Look up active insurance licenses for an agent by agent ID. Returns license states, lines of authority, and expiration dates. Use for compliance verification."
          inputParameters:
            - name: agent_id
              in: body
              type: string
              description: "The State Farm agent identifier."
          call: "compliance-api.get-licenses"
          with:
            agent_id: "{{agent_id}}"
          outputParameters:
            - name: licenses
              type: array
              mapping: "$.licenses"
            - name: next_expiration
              type: string
              mapping: "$.nearestExpiration"
            - name: total_active
              type: integer
              mapping: "$.activeCount"
  consumes:
    - type: http
      namespace: compliance-api
      baseUri: "https://api.statefarm.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

Sends a new insurance claim description to the Anthropic Claude API for intelligent triage classification, returning a suggested claim type, priority, and recommended adjuster specialty.

naftiko: "0.5"
info:
  label: "Anthropic AI Claims Triage Assistant"
  description: "Sends a new insurance claim description to the Anthropic Claude API for intelligent triage classification, returning a suggested claim type, priority, and recommended adjuster specialty."
  tags:
    - ai
    - insurance
    - claims
    - anthropic
    - automation
capability:
  exposes:
    - type: mcp
      namespace: claims-ai
      port: 8080
      tools:
        - name: triage-claim
          description: "Given a claim description text, send it to Anthropic Claude for triage classification. Returns a suggested claim type (auto/home/life), priority level, and recommended adjuster specialty. Use when new claims require intelligent routing before manual review."
          inputParameters:
            - name: claim_description
              in: body
              type: string
              description: "The free-text description of the insurance claim submitted by the policyholder."
            - name: policy_type
              in: body
              type: string
              description: "The policy type context: auto, homeowner, life, or health."
          call: "anthropic.create-message"
          with:
            model: "claude-opus-4-5"
            max_tokens: 512
            system: "You are a State Farm insurance claims triage assistant. Classify the claim and recommend routing. Respond with JSON: {claimType, priority, adjusterSpecialty, summary}."
            user_content: "Policy type: {{policy_type}}\nClaim description: {{claim_description}}"
          outputParameters:
            - name: triage_result
              type: string
              mapping: "$.content[0].text"
  consumes:
    - type: http
      namespace: anthropic
      baseUri: "https://api.anthropic.com/v1"
      authentication:
        type: apikey
        key: "x-api-key"
        value: "$secrets.anthropic_api_key"
        placement: header
      resources:
        - name: messages
          path: "/messages"
          operations:
            - name: create-message
              method: POST

When a policyholder uploads vehicle damage photos, sends them to the AI damage assessment model, creates an estimate in the claims system, and notifies the adjuster via Microsoft Teams with the preliminary assessment.

naftiko: "0.5"
info:
  label: "Auto Claims Photo Damage Assessment"
  description: "When a policyholder uploads vehicle damage photos, sends them to the AI damage assessment model, creates an estimate in the claims system, and notifies the adjuster via Microsoft Teams with the preliminary assessment."
  tags:
    - insurance
    - claims
    - ai
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: damage-assessment
      port: 8080
      tools:
        - name: assess-vehicle-damage
          description: "Given a claim ID and photo URLs, run AI damage assessment, create a preliminary estimate, and notify the assigned adjuster. Use when damage photos are uploaded to a claim."
          inputParameters:
            - name: claim_id
              in: body
              type: string
              description: "The claim identifier."
            - name: photo_urls
              in: body
              type: string
              description: "Comma-separated URLs of uploaded damage photos."
          steps:
            - name: run-assessment
              type: call
              call: "ai-damage.analyze-photos"
              with:
                claim_id: "{{claim_id}}"
                photo_urls: "{{photo_urls}}"
            - name: create-estimate
              type: call
              call: "servicenow-claims.create-estimate"
              with:
                claim_id: "{{claim_id}}"
                estimated_amount: "{{run-assessment.estimated_repair_cost}}"
                damage_severity: "{{run-assessment.severity}}"
            - name: notify-adjuster
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.claims_teams_channel"
                text: "AI damage assessment complete for claim {{claim_id}}. Severity: {{run-assessment.severity}}. Estimated cost: ${{run-assessment.estimated_repair_cost}}"
  consumes:
    - type: http
      namespace: ai-damage
      baseUri: "https://api.statefarm.com/ai/damage-assessment/v1"
      authentication:
        type: bearer
        token: "$secrets.ai_damage_token"
      resources:
        - name: analysis
          path: "/analyze"
          operations:
            - name: analyze-photos
              method: POST
    - type: http
      namespace: servicenow-claims
      baseUri: "https://statefarm.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: estimates
          path: "/table/sn_claim_estimate"
          operations:
            - name: create-estimate
              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: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Fast-tracks an auto glass claim by verifying coverage, scheduling the glass repair with the preferred vendor, and sending confirmation details to the policyholder.

naftiko: "0.5"
info:
  label: "Auto Glass Claim Fast Track"
  description: "Fast-tracks an auto glass claim by verifying coverage, scheduling the glass repair with the preferred vendor, and sending confirmation details to the policyholder."
  tags:
    - insurance
    - claims
    - auto
capability:
  exposes:
    - type: mcp
      namespace: glass-claims
      port: 8080
      tools:
        - name: fast-track-glass-claim
          description: "Fast-track an auto glass repair claim. Verifies coverage, schedules repair, and sends confirmation. Use for windshield and glass-only claims."
          inputParameters:
            - name: policy_number
              in: body
              type: string
              description: "The auto policy number."
            - name: damage_type
              in: body
              type: string
              description: "Type: windshield-crack, windshield-chip, side-window, rear-window."
            - name: zip_code
              in: body
              type: string
              description: "Policyholder's ZIP code for vendor matching."
          steps:
            - name: verify-coverage
              type: call
              call: "claims-api.verify-glass-coverage"
              with:
                policy_number: "{{policy_number}}"
            - name: schedule-repair
              type: call
              call: "glass-vendor-api.schedule-repair"
              with:
                policy_number: "{{policy_number}}"
                damage_type: "{{damage_type}}"
                zip_code: "{{zip_code}}"
            - name: send-confirmation
              type: call
              call: "notification-api.send-notification"
              with:
                policy_number: "{{policy_number}}"
                template: "glass-repair-scheduled"
                vendor: "{{schedule-repair.vendor_name}}"
                date: "{{schedule-repair.appointment_date}}"
  consumes:
    - type: http
      namespace: claims-api
      baseUri: "https://api.statefarm.com/claims/v2"
      authentication:
        type: bearer
        token: "$secrets.claims_api_token"
      resources:
        - name: glass-coverage
          path: "/policies/{{policy_number}}/glass-coverage"
          inputParameters:
            - name: policy_number
              in: path
          operations:
            - name: verify-glass-coverage
              method: GET
    - type: http
      namespace: glass-vendor-api
      baseUri: "https://api.statefarm.com/vendors/glass/v1"
      authentication:
        type: bearer
        token: "$secrets.glass_vendor_token"
      resources:
        - name: repairs
          path: "/schedule"
          operations:
            - name: schedule-repair
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://api.statefarm.com/notifications/v1"
      authentication:
        type: bearer
        token: "$secrets.notification_api_token"
      resources:
        - name: notifications
          path: "/send"
          operations:
            - name: send-notification
              method: POST

Retrieves vehicle information by VIN from the auto data provider, returning make, model, year, safety rating, and estimated replacement cost for underwriting purposes.

naftiko: "0.5"
info:
  label: "Auto Policy Vehicle VIN Lookup"
  description: "Retrieves vehicle information by VIN from the auto data provider, returning make, model, year, safety rating, and estimated replacement cost for underwriting purposes."
  tags:
    - insurance
    - underwriting
    - auto
capability:
  exposes:
    - type: mcp
      namespace: vehicle-ops
      port: 8080
      tools:
        - name: lookup-vehicle-by-vin
          description: "Look up vehicle details by VIN. Returns make, model, year, safety rating, and replacement cost. Use during auto policy quoting and underwriting."
          inputParameters:
            - name: vin
              in: body
              type: string
              description: "The 17-character Vehicle Identification Number."
          call: "vehicle-api.get-vehicle"
          with:
            vin: "{{vin}}"
          outputParameters:
            - name: make
              type: string
              mapping: "$.make"
            - name: model
              type: string
              mapping: "$.model"
            - name: year
              type: integer
              mapping: "$.year"
            - name: safety_rating
              type: string
              mapping: "$.safetyRating"
            - name: replacement_cost
              type: number
              mapping: "$.estimatedReplacementCost"
  consumes:
    - type: http
      namespace: vehicle-api
      baseUri: "https://api.statefarm.com/vehicles/v1"
      authentication:
        type: bearer
        token: "$secrets.vehicle_api_token"
      resources:
        - name: vehicles
          path: "/vin/{{vin}}"
          inputParameters:
            - name: vin
              in: path
          operations:
            - name: get-vehicle
              method: GET

Detects Azure subscription cost anomalies for State Farm's cloud infrastructure, enriches the alert with resource group context, and posts a spend alert to the FinOps team's Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Azure Cloud Cost Anomaly Alert"
  description: "Detects Azure subscription cost anomalies for State Farm's cloud infrastructure, enriches the alert with resource group context, and posts a spend alert to the FinOps team's Microsoft Teams channel."
  tags:
    - cloud
    - finops
    - azure
    - microsoft-teams
    - cost-management
capability:
  exposes:
    - type: mcp
      namespace: cloud-finops
      port: 8080
      tools:
        - name: alert-cloud-cost-anomaly
          description: "Given an Azure subscription ID, resource group, and anomalous spend amount, retrieve resource group context and post a cost anomaly alert to the FinOps Teams channel. Use when Azure Cost Management detects unexpected spend spikes on State Farm cloud resources."
          inputParameters:
            - name: subscription_id
              in: body
              type: string
              description: "The Azure subscription ID where the anomaly was detected."
            - name: resource_group
              in: body
              type: string
              description: "The Azure resource group name associated with the anomaly."
            - name: anomaly_amount_usd
              in: body
              type: string
              description: "The anomalous spend amount in USD."
          steps:
            - name: get-resource-group
              type: call
              call: "azure-mgmt.get-resource-group"
              with:
                subscription_id: "{{subscription_id}}"
                resource_group: "{{resource_group}}"
            - name: post-cost-alert
              type: call
              call: "msteams-finops.post-message"
              with:
                channel_id: "$secrets.finops_teams_channel"
                text: "Azure cost anomaly: ${{anomaly_amount_usd}} in {{resource_group}} ({{get-resource-group.location}}). Subscription: {{subscription_id}}"
  consumes:
    - type: http
      namespace: azure-mgmt
      baseUri: "https://management.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azure_mgmt_token"
      resources:
        - name: resource-groups
          path: "/subscriptions/{{subscription_id}}/resourceGroups/{{resource_group}}"
          inputParameters:
            - name: subscription_id
              in: path
            - name: resource_group
              in: path
          operations:
            - name: get-resource-group
              method: GET
    - type: http
      namespace: msteams-finops
      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: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Checks the latest build status for a State Farm Azure DevOps pipeline.

naftiko: "0.5"
info:
  label: "Azure DevOps Build Status Check"
  description: "Checks the latest build status for a State Farm Azure DevOps pipeline."
  tags:
    - azure-devops
    - engineering
    - ci-cd
capability:
  exposes:
    - type: mcp
      namespace: azure-devops
      port: 8080
      tools:
        - name: get-build-status
          description: "Given a build definition ID, return the latest build status and result. Use when checking CI/CD pipeline health."
          inputParameters:
            - name: definition_id
              in: body
              type: string
              description: "The build definition ID."
          call: "azure-devops.get-build-status"
          with:
            definition_id: "{{definition_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.value[0].status"
            - name: result
              type: string
              mapping: "$.value[0].result"
            - name: build_number
              type: string
              mapping: "$.value[0].buildNumber"
  consumes:
    - namespace: azure-devops
      type: http
      baseUri: "https://dev.azure.com/statefarm"
      authentication:
        type: bearer
        token: "$secrets.azure_devops_token"
      resources:
        - name: builds
          path: "/_apis/build/builds"
          operations:
            - name: get-build-status
              method: GET

Queries Azure Cost Management for infrastructure spend by department and application, generates a cost allocation report, and publishes it to Confluence for finance review.

naftiko: "0.5"
info:
  label: "Azure Infrastructure Cost Allocation Report"
  description: "Queries Azure Cost Management for infrastructure spend by department and application, generates a cost allocation report, and publishes it to Confluence for finance review."
  tags:
    - cloud
    - finance
    - microsoft-azure
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: cost-ops
      port: 8080
      tools:
        - name: generate-cost-allocation-report
          description: "Generate an Azure cost allocation report by department for a billing period. Queries costs and publishes to Confluence. Use for monthly chargeback reporting."
          inputParameters:
            - name: billing_period
              in: body
              type: string
              description: "Billing period in YYYY-MM format."
          steps:
            - name: get-costs
              type: call
              call: "azure-cost.get-usage"
              with:
                billing_period: "{{billing_period}}"
                group_by: "department"
            - name: publish-report
              type: call
              call: "confluence.create-page"
              with:
                space_key: "FINOPS"
                title: "Azure Cost Allocation - {{billing_period}}"
                body: "Total spend: ${{get-costs.total_cost}}. Departments: {{get-costs.department_count}}"
  consumes:
    - type: http
      namespace: azure-cost
      baseUri: "https://management.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azure_mgmt_token"
      resources:
        - name: usage
          path: "/subscriptions/$secrets.azure_subscription_id/providers/Microsoft.CostManagement/query"
          operations:
            - name: get-usage
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://statefarm.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

When a catastrophe event is declared, activates the claims surge protocol by querying affected policies in Snowflake, provisioning additional adjusters in Workday, creating a ServiceNow incident, and broadcasting alerts via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Catastrophe Event Claims Surge Handler"
  description: "When a catastrophe event is declared, activates the claims surge protocol by querying affected policies in Snowflake, provisioning additional adjusters in Workday, creating a ServiceNow incident, and broadcasting alerts via Microsoft Teams."
  tags:
    - insurance
    - claims
    - catastrophe
    - snowflake
    - workday
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: cat-response
      port: 8080
      tools:
        - name: activate-cat-response
          description: "Activate catastrophe response for a declared event. Identify affected policies, provision surge adjusters, create an incident command center, and broadcast alerts. Use when a CAT event is declared."
          inputParameters:
            - name: event_name
              in: body
              type: string
              description: "Name of the catastrophe event."
            - name: affected_zip_codes
              in: body
              type: string
              description: "Comma-separated ZIP codes in the affected area."
            - name: event_type
              in: body
              type: string
              description: "Type of event: hurricane, tornado, wildfire, flood, or hail."
          steps:
            - name: count-affected-policies
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT COUNT(*) as policy_count FROM POLICY_DB.PUBLIC.ACTIVE_POLICIES WHERE zip_code IN ('{{affected_zip_codes}}')"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "CAT Event: {{event_name}} ({{event_type}})"
                category: "catastrophe"
                priority: "1"
                description: "Catastrophe event {{event_name}}. Affected ZIP codes: {{affected_zip_codes}}. Estimated affected policies: {{count-affected-policies.policy_count}}"
            - name: broadcast-alert
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.cat_response_channel"
                text: "CAT EVENT DECLARED: {{event_name}} ({{event_type}}). Affected policies: {{count-affected-policies.policy_count}}. Incident: {{create-incident.number}}. All hands on deck."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://statefarm.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://statefarm.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

When a new insurance claim is created, evaluates the loss type, coverage amount, and adjuster workload in Workday, then assigns the optimal claims adjuster in Salesforce and notifies them via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Claims Adjuster Assignment Router"
  description: "When a new insurance claim is created, evaluates the loss type, coverage amount, and adjuster workload in Workday, then assigns the optimal claims adjuster in Salesforce and notifies them via Microsoft Teams."
  tags:
    - insurance
    - claims
    - salesforce
    - workday
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: claims-routing
      port: 8080
      tools:
        - name: route-claim-to-adjuster
          description: "Given a claim ID and loss type, check adjuster capacity in Workday, assign the best-fit adjuster in Salesforce, and send a Teams notification. Use when a new claim needs adjuster assignment."
          inputParameters:
            - name: claim_id
              in: body
              type: string
              description: "The unique claim identifier."
            - name: loss_type
              in: body
              type: string
              description: "Type of loss: auto, homeowner, life, or health."
            - name: coverage_amount
              in: body
              type: number
              description: "The total coverage amount on the policy."
          steps:
            - name: get-adjuster-capacity
              type: call
              call: "workday-hr.get-team-capacity"
              with:
                department: "claims-{{loss_type}}"
            - name: assign-adjuster
              type: call
              call: "salesforce-claims.assign-adjuster"
              with:
                claim_id: "{{claim_id}}"
                adjuster_id: "{{get-adjuster-capacity.recommended_adjuster_id}}"
            - name: notify-adjuster
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.claims_teams_channel"
                text: "Claim {{claim_id}} ({{loss_type}}, ${{coverage_amount}}) assigned to you. Please review within 24 hours."
  consumes:
    - type: http
      namespace: workday-hr
      baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/statefarm"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: team-capacity
          path: "/staffing/teamCapacity"
          operations:
            - name: get-team-capacity
              method: GET
    - type: http
      namespace: salesforce-claims
      baseUri: "https://statefarm.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: claim-assignment
          path: "/sobjects/Claim__c/{{claim_id}}"
          inputParameters:
            - name: claim_id
              in: path
          operations:
            - name: assign-adjuster
              method: PATCH
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Returns the current case count and workload metrics for a claims adjuster.

naftiko: "0.5"
info:
  label: "Claims Adjuster Workload Lookup"
  description: "Returns the current case count and workload metrics for a claims adjuster."
  tags:
    - insurance
    - claims
    - adjuster
capability:
  exposes:
    - type: mcp
      namespace: sf-claims
      port: 8080
      tools:
        - name: get-adjuster-workload
          description: "Given an adjuster ID, return open case count, average cycle time, and capacity status. Use when assigning new claims."
          inputParameters:
            - name: adjuster_id
              in: body
              type: string
              description: "The claims adjuster identifier."
          call: "sf-claims.get-adjuster-workload"
          with:
            adjuster_id: "{{adjuster_id}}"
          outputParameters:
            - name: open_cases
              type: number
              mapping: "$.open_cases"
            - name: avg_cycle_time
              type: number
              mapping: "$.avg_cycle_time_days"
            - name: capacity
              type: string
              mapping: "$.capacity_status"
  consumes:
    - namespace: sf-claims
      type: http
      baseUri: "https://api.statefarm.com/v1/claims"
      authentication:
        type: bearer
        token: "$secrets.sf_claims_token"
      resources:
        - name: workload
          path: "/adjusters/{adjuster_id}/workload"
          inputParameters:
            - name: adjuster_id
              in: path
          operations:
            - name: get-adjuster-workload
              method: GET

Dispatches an appraisal vendor for a property claim by selecting the nearest qualified appraiser, creating a work order in ServiceNow, and notifying the claims adjuster via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Claims Appraisal Vendor Dispatch"
  description: "Dispatches an appraisal vendor for a property claim by selecting the nearest qualified appraiser, creating a work order in ServiceNow, and notifying the claims adjuster via Microsoft Teams."
  tags:
    - insurance
    - claims
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: appraisal-ops
      port: 8080
      tools:
        - name: dispatch-appraiser
          description: "Dispatch an appraisal vendor for a property claim. Finds appraiser, creates work order, and notifies adjuster. Use when a property inspection is needed."
          inputParameters:
            - name: claim_id
              in: body
              type: string
              description: "The claim identifier."
            - name: property_address
              in: body
              type: string
              description: "Property address requiring appraisal."
            - name: loss_type
              in: body
              type: string
              description: "Type of loss: fire, water, wind, theft."
          steps:
            - name: find-appraiser
              type: call
              call: "vendor-api.find-appraiser"
              with:
                location: "{{property_address}}"
                specialty: "{{loss_type}}"
            - name: create-work-order
              type: call
              call: "servicenow.create-work-order"
              with:
                short_description: "Property appraisal: Claim {{claim_id}}"
                assigned_to: "{{find-appraiser.vendor_id}}"
                location: "{{property_address}}"
                description: "{{loss_type}} damage appraisal for claim {{claim_id}}"
            - name: notify-adjuster
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.claims_teams_channel"
                text: "Appraiser dispatched for claim {{claim_id}}. Vendor: {{find-appraiser.vendor_name}}. ETA: {{find-appraiser.estimated_date}}"
  consumes:
    - type: http
      namespace: vendor-api
      baseUri: "https://api.statefarm.com/vendors/v1"
      authentication:
        type: bearer
        token: "$secrets.vendor_api_token"
      resources:
        - name: appraisers
          path: "/appraisers/search"
          operations:
            - name: find-appraiser
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://statefarm.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: work-orders
          path: "/table/wm_order"
          operations:
            - name: create-work-order
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Calculates the recommended reserve for a bodily injury claim using injury type, treatment data, and jurisdiction, then updates the reserve in ServiceNow and notifies the claims manager.

naftiko: "0.5"
info:
  label: "Claims Bodily Injury Reserve Calculator"
  description: "Calculates the recommended reserve for a bodily injury claim using injury type, treatment data, and jurisdiction, then updates the reserve in ServiceNow and notifies the claims manager."
  tags:
    - insurance
    - claims
    - actuarial
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: bi-reserve
      port: 8080
      tools:
        - name: calculate-bi-reserve
          description: "Calculate the recommended bodily injury reserve. Uses injury data and jurisdiction factors. Updates claim and notifies manager. Use when setting initial BI reserves."
          inputParameters:
            - name: claim_id
              in: body
              type: string
              description: "The claim identifier."
            - name: injury_type
              in: body
              type: string
              description: "Primary injury type: soft-tissue, fracture, spinal, tbi."
            - name: jurisdiction
              in: body
              type: string
              description: "Two-letter state code where the loss occurred."
          steps:
            - name: calculate-reserve
              type: call
              call: "reserve-engine.calculate-bi"
              with:
                injury_type: "{{injury_type}}"
                jurisdiction: "{{jurisdiction}}"
            - name: update-claim
              type: call
              call: "servicenow-claims.update-reserve"
              with:
                claim_id: "{{claim_id}}"
                reserve_amount: "{{calculate-reserve.recommended_reserve}}"
                reserve_basis: "{{calculate-reserve.calculation_basis}}"
            - name: notify-manager
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.claims_mgr_channel"
                text: "BI reserve set for claim {{claim_id}}: ${{calculate-reserve.recommended_reserve}} ({{injury_type}}, {{jurisdiction}})"
  consumes:
    - type: http
      namespace: reserve-engine
      baseUri: "https://api.statefarm.com/actuarial/v1"
      authentication:
        type: bearer
        token: "$secrets.actuarial_api_token"
      resources:
        - name: bi-reserves
          path: "/reserves/bodily-injury"
          operations:
            - name: calculate-bi
              method: POST
    - type: http
      namespace: servicenow-claims
      baseUri: "https://statefarm.service-now.com/api/now"
      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: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Retrieves the current repair or replacement estimate for an open insurance claim.

naftiko: "0.5"
info:
  label: "Claims Estimate Lookup"
  description: "Retrieves the current repair or replacement estimate for an open insurance claim."
  tags:
    - insurance
    - claims
    - estimates
capability:
  exposes:
    - type: mcp
      namespace: sf-claims
      port: 8080
      tools:
        - name: get-claim-estimate
          description: "Given a claim ID, return the estimate amount, estimator, and status. Use when reviewing claim repair costs."
          inputParameters:
            - name: claim_id
              in: body
              type: string
              description: "The claim identifier."
          call: "sf-claims.get-claim-estimate"
          with:
            claim_id: "{{claim_id}}"
          outputParameters:
            - name: estimate_amount
              type: number
              mapping: "$.estimate_amount"
            - name: estimator
              type: string
              mapping: "$.estimator_name"
            - name: status
              type: string
              mapping: "$.estimate_status"
  consumes:
    - namespace: sf-claims
      type: http
      baseUri: "https://api.statefarm.com/v1/claims"
      authentication:
        type: bearer
        token: "$secrets.sf_claims_token"
      resources:
        - name: estimate
          path: "/claims/{claim_id}/estimate"
          inputParameters:
            - name: claim_id
              in: path
          operations:
            - name: get-claim-estimate
              method: GET

Schedules an independent medical examination for a bodily injury claim by finding a qualified physician, booking the appointment, and notifying the claimant and adjuster.

naftiko: "0.5"
info:
  label: "Claims Independent Medical Exam Scheduling"
  description: "Schedules an independent medical examination for a bodily injury claim by finding a qualified physician, booking the appointment, and notifying the claimant and adjuster."
  tags:
    - insurance
    - claims
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: ime-ops
      port: 8080
      tools:
        - name: schedule-ime
          description: "Schedule an independent medical exam for a claim. Finds a physician, books the exam, and sends notifications. Use when an adjuster requests an IME."
          inputParameters:
            - name: claim_id
              in: body
              type: string
              description: "The claim identifier."
            - name: specialty
              in: body
              type: string
              description: "Medical specialty needed: orthopedic, neurological, general."
            - name: zip_code
              in: body
              type: string
              description: "ZIP code near the claimant."
          steps:
            - name: find-physician
              type: call
              call: "medical-network-api.find-ime-provider"
              with:
                specialty: "{{specialty}}"
                zip_code: "{{zip_code}}"
            - name: book-appointment
              type: call
              call: "scheduling-api.create-appointment"
              with:
                provider_id: "{{find-physician.provider_id}}"
                claim_id: "{{claim_id}}"
            - name: create-tracking-record
              type: call
              call: "servicenow.create-record"
              with:
                table: "u_ime_request"
                claim_id: "{{claim_id}}"
                provider: "{{find-physician.provider_name}}"
                date: "{{book-appointment.appointment_date}}"
  consumes:
    - type: http
      namespace: medical-network-api
      baseUri: "https://api.statefarm.com/medical-network/v1"
      authentication:
        type: bearer
        token: "$secrets.medical_network_token"
      resources:
        - name: providers
          path: "/ime-providers/search"
          operations:
            - name: find-ime-provider
              method: GET
    - type: http
      namespace: scheduling-api
      baseUri: "https://api.statefarm.com/scheduling/v1"
      authentication:
        type: bearer
        token: "$secrets.scheduling_api_token"
      resources:
        - name: appointments
          path: "/appointments"
          operations:
            - name: create-appointment
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://statefarm.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: records
          path: "/table/{{table}}"
          inputParameters:
            - name: table
              in: path
          operations:
            - name: create-record
              method: POST

When a claim enters litigation, places a litigation hold on all related documents, creates a legal case in ServiceNow, notifies the legal team via Microsoft Teams, and logs the hold in the compliance system.

naftiko: "0.5"
info:
  label: "Claims Litigation Hold Workflow"
  description: "When a claim enters litigation, places a litigation hold on all related documents, creates a legal case in ServiceNow, notifies the legal team via Microsoft Teams, and logs the hold in the compliance system."
  tags:
    - insurance
    - claims
    - compliance
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: litigation-ops
      port: 8080
      tools:
        - name: initiate-litigation-hold
          description: "Place a litigation hold on a claim's documents, create a legal case, and notify the legal team. Use when a claim is escalated to litigation."
          inputParameters:
            - name: claim_id
              in: body
              type: string
              description: "The claim identifier entering litigation."
            - name: attorney_name
              in: body
              type: string
              description: "Name of the opposing attorney or law firm."
          steps:
            - name: place-hold
              type: call
              call: "document-api.create-litigation-hold"
              with:
                claim_id: "{{claim_id}}"
                hold_type: "litigation"
            - name: create-legal-case
              type: call
              call: "servicenow.create-case"
              with:
                short_description: "Litigation: Claim {{claim_id}}"
                category: "legal"
                description: "Claim {{claim_id}} in litigation. Opposing counsel: {{attorney_name}}. Document hold placed: {{place-hold.hold_id}}"
            - name: notify-legal
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.legal_teams_channel"
                text: "Litigation hold placed on claim {{claim_id}}. Legal case: {{create-legal-case.number}}. Opposing counsel: {{attorney_name}}"
  consumes:
    - type: http
      namespace: document-api
      baseUri: "https://api.statefarm.com/documents/v1"
      authentication:
        type: bearer
        token: "$secrets.document_api_token"
      resources:
        - name: holds
          path: "/holds"
          operations:
            - name: create-litigation-hold
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://statefarm.service-now.com/api/now"
      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: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Generates and sends a medical record request for a bodily injury claim, creates a tracking record in ServiceNow, and sets a follow-up reminder for the adjuster in Jira.

naftiko: "0.5"
info:
  label: "Claims Medical Record Request Workflow"
  description: "Generates and sends a medical record request for a bodily injury claim, creates a tracking record in ServiceNow, and sets a follow-up reminder for the adjuster in Jira."
  tags:
    - insurance
    - claims
    - servicenow
    - jira
capability:
  exposes:
    - type: mcp
      namespace: medical-records
      port: 8080
      tools:
        - name: request-medical-records
          description: "Generate and send a medical record request for a claim. Creates tracking in ServiceNow and a follow-up in Jira. Use for bodily injury claims requiring medical documentation."
          inputParameters:
            - name: claim_id
              in: body
              type: string
              description: "The claim identifier."
            - name: provider_name
              in: body
              type: string
              description: "Name of the medical provider."
            - name: claimant_name
              in: body
              type: string
              description: "Name of the claimant."
          steps:
            - name: generate-request
              type: call
              call: "document-api.generate-medical-request"
              with:
                claim_id: "{{claim_id}}"
                provider_name: "{{provider_name}}"
                claimant_name: "{{claimant_name}}"
            - name: track-request
              type: call
              call: "servicenow.create-record"
              with:
                table: "u_medical_record_request"
                claim_id: "{{claim_id}}"
                provider: "{{provider_name}}"
                status: "sent"
            - name: create-followup
              type: call
              call: "jira.create-issue"
              with:
                project_key: "CLAIMS"
                issuetype: "Task"
                summary: "Follow up: Medical records for claim {{claim_id}}"
                description: "Follow up with {{provider_name}} for medical records. Claimant: {{claimant_name}}"
  consumes:
    - type: http
      namespace: document-api
      baseUri: "https://api.statefarm.com/documents/v1"
      authentication:
        type: bearer
        token: "$secrets.document_api_token"
      resources:
        - name: medical-requests
          path: "/generate/medical-request"
          operations:
            - name: generate-medical-request
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://statefarm.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: records
          path: "/table/{{table}}"
          inputParameters:
            - name: table
              in: path
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://statefarm.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

When a claims adjuster approves a payment, validates the payment against policy limits, processes the payment through the disbursement system, updates the claim record in ServiceNow, and notifies the policyholder.

naftiko: "0.5"
info:
  label: "Claims Payment Processing Workflow"
  description: "When a claims adjuster approves a payment, validates the payment against policy limits, processes the payment through the disbursement system, updates the claim record in ServiceNow, and notifies the policyholder."
  tags:
    - insurance
    - claims
    - payments
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: claims-payment
      port: 8080
      tools:
        - name: process-claims-payment
          description: "Process an approved claims payment. Validates against policy limits, disburses payment, updates claim record, and notifies the claimant. Use when an adjuster approves a claim payment."
          inputParameters:
            - name: claim_id
              in: body
              type: string
              description: "The claim identifier."
            - name: payment_amount
              in: body
              type: number
              description: "The approved payment amount."
            - name: payee_name
              in: body
              type: string
              description: "Name of the payment recipient."
          steps:
            - name: validate-payment
              type: call
              call: "claims-api.validate-payment"
              with:
                claim_id: "{{claim_id}}"
                amount: "{{payment_amount}}"
            - name: disburse-payment
              type: call
              call: "payment-api.create-disbursement"
              with:
                claim_id: "{{claim_id}}"
                amount: "{{payment_amount}}"
                payee: "{{payee_name}}"
            - name: update-claim
              type: call
              call: "servicenow-claims.update-case"
              with:
                claim_id: "{{claim_id}}"
                payment_status: "disbursed"
                payment_amount: "{{payment_amount}}"
  consumes:
    - type: http
      namespace: claims-api
      baseUri: "https://api.statefarm.com/claims/v2"
      authentication:
        type: bearer
        token: "$secrets.claims_api_token"
      resources:
        - name: validation
          path: "/payments/validate"
          operations:
            - name: validate-payment
              method: POST
    - type: http
      namespace: payment-api
      baseUri: "https://api.statefarm.com/payments/v1"
      authentication:
        type: bearer
        token: "$secrets.payment_api_token"
      resources:
        - name: disbursements
          path: "/disbursements"
          operations:
            - name: create-disbursement
              method: POST
    - type: http
      namespace: servicenow-claims
      baseUri: "https://statefarm.service-now.com/api/now"
      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-case
              method: PATCH

Authorizes a rental car for an auto claim policyholder by checking coverage limits, creating a rental authorization with the vendor, and updating the claim record in ServiceNow.

naftiko: "0.5"
info:
  label: "Claims Rental Car Authorization"
  description: "Authorizes a rental car for an auto claim policyholder by checking coverage limits, creating a rental authorization with the vendor, and updating the claim record in ServiceNow."
  tags:
    - insurance
    - claims
    - auto
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: rental-ops
      port: 8080
      tools:
        - name: authorize-rental-car
          description: "Authorize a rental car for an auto claim. Checks coverage, creates vendor authorization, and updates the claim. Use when a policyholder needs a rental during repairs."
          inputParameters:
            - name: claim_id
              in: body
              type: string
              description: "The claim identifier."
            - name: rental_days
              in: body
              type: integer
              description: "Number of rental days requested."
          steps:
            - name: check-coverage
              type: call
              call: "claims-api.check-rental-coverage"
              with:
                claim_id: "{{claim_id}}"
            - name: create-authorization
              type: call
              call: "rental-vendor-api.create-auth"
              with:
                claim_id: "{{claim_id}}"
                days: "{{rental_days}}"
                daily_limit: "{{check-coverage.daily_limit}}"
            - name: update-claim
              type: call
              call: "servicenow-claims.update-case"
              with:
                claim_id: "{{claim_id}}"
                rental_auth_id: "{{create-authorization.auth_id}}"
                rental_status: "authorized"
  consumes:
    - type: http
      namespace: claims-api
      baseUri: "https://api.statefarm.com/claims/v2"
      authentication:
        type: bearer
        token: "$secrets.claims_api_token"
      resources:
        - name: rental-coverage
          path: "/claims/{{claim_id}}/rental-coverage"
          inputParameters:
            - name: claim_id
              in: path
          operations:
            - name: check-rental-coverage
              method: GET
    - type: http
      namespace: rental-vendor-api
      baseUri: "https://api.statefarm.com/rental/v1"
      authentication:
        type: bearer
        token: "$secrets.rental_api_token"
      resources:
        - name: authorizations
          path: "/authorizations"
          operations:
            - name: create-auth
              method: POST
    - type: http
      namespace: servicenow-claims
      baseUri: "https://statefarm.service-now.com/api/now"
      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-case
              method: PATCH

When a claims adjuster requests a reserve adjustment, validates the new amount against authority limits, updates the reserve in the claims system, and notifies the claims manager if the adjustment exceeds threshold.

naftiko: "0.5"
info:
  label: "Claims Reserve Adjustment Workflow"
  description: "When a claims adjuster requests a reserve adjustment, validates the new amount against authority limits, updates the reserve in the claims system, and notifies the claims manager if the adjustment exceeds threshold."
  tags:
    - insurance
    - claims
    - actuarial
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: reserve-ops
      port: 8080
      tools:
        - name: adjust-claim-reserve
          description: "Process a reserve adjustment for a claim. Validates authority, updates the reserve, and escalates if above threshold. Use when an adjuster needs to change the reserve amount."
          inputParameters:
            - name: claim_id
              in: body
              type: string
              description: "The claim identifier."
            - name: new_reserve_amount
              in: body
              type: number
              description: "The proposed new reserve amount."
            - name: adjuster_id
              in: body
              type: string
              description: "The requesting adjuster's ID."
          steps:
            - name: check-authority
              type: call
              call: "claims-api.check-adjuster-authority"
              with:
                adjuster_id: "{{adjuster_id}}"
                amount: "{{new_reserve_amount}}"
            - name: update-reserve
              type: call
              call: "servicenow-claims.update-reserve"
              with:
                claim_id: "{{claim_id}}"
                reserve_amount: "{{new_reserve_amount}}"
            - name: notify-manager
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.claims_mgr_channel"
                text: "Reserve adjustment on claim {{claim_id}}: new reserve ${{new_reserve_amount}}. Adjuster: {{adjuster_id}}. Authority status: {{check-authority.status}}"
  consumes:
    - type: http
      namespace: claims-api
      baseUri: "https://api.statefarm.com/claims/v2"
      authentication:
        type: bearer
        token: "$secrets.claims_api_token"
      resources:
        - name: authority
          path: "/authority/check"
          operations:
            - name: check-adjuster-authority
              method: POST
    - type: http
      namespace: servicenow-claims
      baseUri: "https://statefarm.service-now.com/api/now"
      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: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

When a total loss claim is settled, lists the salvage vehicle on the auction platform, updates the claim record in ServiceNow, and notifies the salvage team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Claims Salvage Auction Listing"
  description: "When a total loss claim is settled, lists the salvage vehicle on the auction platform, updates the claim record in ServiceNow, and notifies the salvage team via Microsoft Teams."
  tags:
    - insurance
    - claims
    - auto
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: salvage-ops
      port: 8080
      tools:
        - name: list-salvage-vehicle
          description: "List a salvage vehicle for auction after total loss settlement. Creates auction listing, updates claim, and notifies salvage team. Use after total loss settlement is accepted."
          inputParameters:
            - name: claim_id
              in: body
              type: string
              description: "The claim identifier."
            - name: vin
              in: body
              type: string
              description: "The vehicle VIN."
            - name: salvage_value
              in: body
              type: number
              description: "Estimated salvage value."
          steps:
            - name: create-listing
              type: call
              call: "auction-api.create-listing"
              with:
                vin: "{{vin}}"
                claim_id: "{{claim_id}}"
                starting_bid: "{{salvage_value}}"
            - name: update-claim
              type: call
              call: "servicenow-claims.update-case"
              with:
                claim_id: "{{claim_id}}"
                salvage_status: "listed"
                auction_id: "{{create-listing.auction_id}}"
            - name: notify-salvage-team
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.salvage_teams_channel"
                text: "Salvage listed: VIN {{vin}} for claim {{claim_id}}. Auction ID: {{create-listing.auction_id}}. Starting bid: ${{salvage_value}}"
  consumes:
    - type: http
      namespace: auction-api
      baseUri: "https://api.statefarm.com/salvage/v1"
      authentication:
        type: bearer
        token: "$secrets.salvage_api_token"
      resources:
        - name: listings
          path: "/auctions"
          operations:
            - name: create-listing
              method: POST
    - type: http
      namespace: servicenow-claims
      baseUri: "https://statefarm.service-now.com/api/now"
      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-case
              method: PATCH
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Retrieves the current status of an insurance claim from ServiceNow, returning claim state, assigned adjuster, and last activity date.

naftiko: "0.5"
info:
  label: "Claims Status Lookup"
  description: "Retrieves the current status of an insurance claim from ServiceNow, returning claim state, assigned adjuster, and last activity date."
  tags:
    - insurance
    - claims
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: claims-ops
      port: 8080
      tools:
        - name: get-claim-status
          description: "Look up the current status of a State Farm insurance claim by claim number in ServiceNow. Returns claim state, assigned adjuster name, and last activity timestamp. Use when customers or agents inquire about claim progress."
          inputParameters:
            - name: claim_number
              in: body
              type: string
              description: "The State Farm claim number to look up."
          call: "servicenow-claims.get-case"
          with:
            claim_number: "{{claim_number}}"
          outputParameters:
            - name: state
              type: string
              mapping: "$.state"
            - name: adjuster_name
              type: string
              mapping: "$.assigned_to.display_value"
            - name: last_activity
              type: string
              mapping: "$.sys_updated_on"
  consumes:
    - type: http
      namespace: servicenow-claims
      baseUri: "https://statefarm.service-now.com/api/now"
      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

Monitors subrogation recovery status in the claims system, updates recovery amounts in Snowflake, and generates a weekly summary report for the recovery team in Confluence.

naftiko: "0.5"
info:
  label: "Claims Subrogation Recovery Tracker"
  description: "Monitors subrogation recovery status in the claims system, updates recovery amounts in Snowflake, and generates a weekly summary report for the recovery team in Confluence."
  tags:
    - insurance
    - claims
    - subrogation
    - snowflake
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: subrogation-ops
      port: 8080
      tools:
        - name: track-subrogation-recovery
          description: "Pull subrogation recovery data for a date range, update the analytics warehouse, and publish a summary to Confluence. Use for weekly recovery reporting."
          inputParameters:
            - name: start_date
              in: body
              type: string
              description: "Start date in ISO 8601 format."
            - name: end_date
              in: body
              type: string
              description: "End date in ISO 8601 format."
          steps:
            - name: get-recovery-data
              type: call
              call: "claims-api.get-subrogation-summary"
              with:
                start_date: "{{start_date}}"
                end_date: "{{end_date}}"
            - name: update-warehouse
              type: call
              call: "snowflake.run-query"
              with:
                query: "CALL CLAIMS_DB.PROCEDURES.UPDATE_SUBROGATION_SUMMARY('{{start_date}}', '{{end_date}}')"
            - name: publish-report
              type: call
              call: "confluence.create-page"
              with:
                space_key: "CLAIMS"
                title: "Subrogation Recovery Report {{start_date}} to {{end_date}}"
                body: "Total recovered: ${{get-recovery-data.total_recovered}}. Cases closed: {{get-recovery-data.cases_closed}}."
  consumes:
    - type: http
      namespace: claims-api
      baseUri: "https://api.statefarm.com/claims/v2"
      authentication:
        type: bearer
        token: "$secrets.claims_api_token"
      resources:
        - name: subrogation
          path: "/subrogation/summary"
          operations:
            - name: get-subrogation-summary
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://statefarm.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://statefarm.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

When a vehicle is declared a total loss, retrieves comparable vehicle values, calculates the settlement amount, updates the claim in ServiceNow, and notifies the policyholder with the offer.

naftiko: "0.5"
info:
  label: "Claims Total Loss Vehicle Valuation"
  description: "When a vehicle is declared a total loss, retrieves comparable vehicle values, calculates the settlement amount, updates the claim in ServiceNow, and notifies the policyholder with the offer."
  tags:
    - insurance
    - claims
    - auto
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: total-loss-ops
      port: 8080
      tools:
        - name: calculate-total-loss-value
          description: "Calculate total loss settlement for a vehicle. Gets comparable values, determines settlement, and updates the claim. Use when a vehicle is declared a total loss."
          inputParameters:
            - name: claim_id
              in: body
              type: string
              description: "The claim identifier."
            - name: vin
              in: body
              type: string
              description: "The vehicle's VIN."
            - name: mileage
              in: body
              type: integer
              description: "Current vehicle mileage."
          steps:
            - name: get-vehicle-value
              type: call
              call: "valuation-api.get-market-value"
              with:
                vin: "{{vin}}"
                mileage: "{{mileage}}"
            - name: update-claim
              type: call
              call: "servicenow-claims.update-case"
              with:
                claim_id: "{{claim_id}}"
                settlement_amount: "{{get-vehicle-value.fair_market_value}}"
                valuation_method: "comparable_sales"
            - name: send-offer
              type: call
              call: "notification-api.send-settlement-offer"
              with:
                claim_id: "{{claim_id}}"
                offer_amount: "{{get-vehicle-value.fair_market_value}}"
  consumes:
    - type: http
      namespace: valuation-api
      baseUri: "https://api.statefarm.com/vehicles/v1"
      authentication:
        type: bearer
        token: "$secrets.vehicle_api_token"
      resources:
        - name: valuations
          path: "/valuations"
          operations:
            - name: get-market-value
              method: POST
    - type: http
      namespace: servicenow-claims
      baseUri: "https://statefarm.service-now.com/api/now"
      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-case
              method: PATCH
    - type: http
      namespace: notification-api
      baseUri: "https://api.statefarm.com/notifications/v1"
      authentication:
        type: bearer
        token: "$secrets.notification_api_token"
      resources:
        - name: offers
          path: "/settlement-offers"
          operations:
            - name: send-settlement-offer
              method: POST

Reconciles vendor payments for claims services (body shops, medical providers) by comparing invoices against authorized amounts in the claims system, flagging discrepancies in ServiceNow.

naftiko: "0.5"
info:
  label: "Claims Vendor Payment Reconciliation"
  description: "Reconciles vendor payments for claims services (body shops, medical providers) by comparing invoices against authorized amounts in the claims system, flagging discrepancies in ServiceNow."
  tags:
    - insurance
    - claims
    - finance
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: vendor-reconcile
      port: 8080
      tools:
        - name: reconcile-vendor-payments
          description: "Reconcile vendor payments against claim authorizations. Identifies overpayments and discrepancies. Use for monthly vendor payment audits."
          inputParameters:
            - name: vendor_id
              in: body
              type: string
              description: "The vendor identifier."
            - name: period
              in: body
              type: string
              description: "Reconciliation period in YYYY-MM format."
          steps:
            - name: get-invoices
              type: call
              call: "claims-api.get-vendor-invoices"
              with:
                vendor_id: "{{vendor_id}}"
                period: "{{period}}"
            - name: get-authorizations
              type: call
              call: "claims-api.get-vendor-authorizations"
              with:
                vendor_id: "{{vendor_id}}"
                period: "{{period}}"
            - name: flag-discrepancies
              type: call
              call: "servicenow.create-case"
              with:
                short_description: "Vendor payment reconciliation: {{vendor_id}} - {{period}}"
                description: "Invoices: ${{get-invoices.total_amount}}. Authorizations: ${{get-authorizations.total_amount}}. Review required."
  consumes:
    - type: http
      namespace: claims-api
      baseUri: "https://api.statefarm.com/claims/v2"
      authentication:
        type: bearer
        token: "$secrets.claims_api_token"
      resources:
        - name: vendor-invoices
          path: "/vendors/{{vendor_id}}/invoices"
          inputParameters:
            - name: vendor_id
              in: path
          operations:
            - name: get-vendor-invoices
              method: GET
        - name: vendor-authorizations
          path: "/vendors/{{vendor_id}}/authorizations"
          inputParameters:
            - name: vendor_id
              in: path
          operations:
            - name: get-vendor-authorizations
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://statefarm.service-now.com/api/now"
      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

Screens new policy applicants against AML watchlists, logs results in the compliance system, and escalates matches to the compliance team via ServiceNow and Microsoft Teams.

naftiko: "0.5"
info:
  label: "Compliance Anti-Money Laundering Screening"
  description: "Screens new policy applicants against AML watchlists, logs results in the compliance system, and escalates matches to the compliance team via ServiceNow and Microsoft Teams."
  tags:
    - insurance
    - compliance
    - fraud
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: aml-ops
      port: 8080
      tools:
        - name: screen-applicant-aml
          description: "Screen a policy applicant against AML and sanctions watchlists. Logs results and escalates matches for review. Use during new business intake."
          inputParameters:
            - name: applicant_name
              in: body
              type: string
              description: "Full name of the applicant."
            - name: application_id
              in: body
              type: string
              description: "The policy application ID."
          steps:
            - name: run-screening
              type: call
              call: "aml-api.screen-individual"
              with:
                name: "{{applicant_name}}"
                reference_id: "{{application_id}}"
            - name: log-result
              type: call
              call: "servicenow.create-record"
              with:
                table: "u_aml_screening"
                applicant_name: "{{applicant_name}}"
                application_id: "{{application_id}}"
                result: "{{run-screening.status}}"
                match_count: "{{run-screening.match_count}}"
            - name: alert-compliance
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.compliance_teams_channel"
                text: "AML screening for {{applicant_name}} (App: {{application_id}}): {{run-screening.status}}. Matches: {{run-screening.match_count}}"
  consumes:
    - type: http
      namespace: aml-api
      baseUri: "https://api.statefarm.com/compliance/aml/v1"
      authentication:
        type: bearer
        token: "$secrets.aml_api_token"
      resources:
        - name: screening
          path: "/screen"
          operations:
            - name: screen-individual
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://statefarm.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: records
          path: "/table/{{table}}"
          inputParameters:
            - name: table
              in: path
          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: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Processes a GDPR data subject access request by querying all systems containing the individual's data, compiling the report, and logging the request in the compliance system for audit.

naftiko: "0.5"
info:
  label: "Compliance GDPR Data Subject Request"
  description: "Processes a GDPR data subject access request by querying all systems containing the individual's data, compiling the report, and logging the request in the compliance system for audit."
  tags:
    - insurance
    - compliance
    - privacy
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: privacy-ops
      port: 8080
      tools:
        - name: process-dsar
          description: "Process a GDPR data subject access request. Queries relevant systems, compiles data, and logs the request. Use when a data subject request is received."
          inputParameters:
            - name: requestor_email
              in: body
              type: string
              description: "The email of the data subject."
            - name: request_type
              in: body
              type: string
              description: "Type: access, deletion, portability."
          steps:
            - name: search-salesforce
              type: call
              call: "salesforce.search-customer"
              with:
                email: "{{requestor_email}}"
            - name: search-claims
              type: call
              call: "claims-api.search-by-email"
              with:
                email: "{{requestor_email}}"
            - name: log-request
              type: call
              call: "servicenow.create-record"
              with:
                table: "u_dsar_request"
                requestor_email: "{{requestor_email}}"
                request_type: "{{request_type}}"
                sf_records: "{{search-salesforce.count}}"
                claims_records: "{{search-claims.count}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://statefarm.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: search
          path: "/search"
          operations:
            - name: search-customer
              method: GET
    - type: http
      namespace: claims-api
      baseUri: "https://api.statefarm.com/claims/v2"
      authentication:
        type: bearer
        token: "$secrets.claims_api_token"
      resources:
        - name: search
          path: "/claims/search"
          operations:
            - name: search-by-email
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://statefarm.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: records
          path: "/table/{{table}}"
          inputParameters:
            - name: table
              in: path
          operations:
            - name: create-record
              method: POST

Monitors upcoming state regulatory filing deadlines in the compliance system, generates a summary report in Confluence, and alerts the compliance team via Microsoft Teams when filings are due within 30 days.

naftiko: "0.5"
info:
  label: "Compliance Regulatory Filing Tracker"
  description: "Monitors upcoming state regulatory filing deadlines in the compliance system, generates a summary report in Confluence, and alerts the compliance team via Microsoft Teams when filings are due within 30 days."
  tags:
    - insurance
    - compliance
    - confluence
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: compliance-ops
      port: 8080
      tools:
        - name: check-filing-deadlines
          description: "Check for upcoming regulatory filing deadlines within the specified number of days, create a Confluence summary page, and notify the compliance team. Use for monthly compliance reviews."
          inputParameters:
            - name: days_ahead
              in: body
              type: integer
              description: "Number of days ahead to check for upcoming deadlines."
            - name: state_code
              in: body
              type: string
              description: "Two-letter state code to filter filings, or ALL for all states."
          steps:
            - name: get-upcoming-filings
              type: call
              call: "compliance-api.get-filings"
              with:
                days_ahead: "{{days_ahead}}"
                state_code: "{{state_code}}"
            - name: create-summary-page
              type: call
              call: "confluence.create-page"
              with:
                space_key: "COMPLIANCE"
                title: "Regulatory Filing Deadlines - Next {{days_ahead}} Days"
                body: "{{get-upcoming-filings.summary}}"
            - name: notify-compliance
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.compliance_teams_channel"
                text: "Regulatory filing report generated: {{get-upcoming-filings.count}} filings due in next {{days_ahead}} days. See Confluence: {{create-summary-page.url}}"
  consumes:
    - type: http
      namespace: compliance-api
      baseUri: "https://api.statefarm.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://statefarm.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: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Prepares for a state regulatory audit by gathering policy, claims, and complaint data from Snowflake, compiling an audit package in Confluence, and notifying the compliance team.

naftiko: "0.5"
info:
  label: "Compliance State Audit Preparation"
  description: "Prepares for a state regulatory audit by gathering policy, claims, and complaint data from Snowflake, compiling an audit package in Confluence, and notifying the compliance team."
  tags:
    - insurance
    - compliance
    - snowflake
    - confluence
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: audit-prep
      port: 8080
      tools:
        - name: prepare-state-audit
          description: "Prepare materials for a state regulatory audit. Gathers data, creates audit package, and notifies compliance. Use when a state audit is announced."
          inputParameters:
            - name: state_code
              in: body
              type: string
              description: "Two-letter state code being audited."
            - name: audit_period_start
              in: body
              type: string
              description: "Audit period start date in ISO 8601 format."
            - name: audit_period_end
              in: body
              type: string
              description: "Audit period end date in ISO 8601 format."
          steps:
            - name: gather-data
              type: call
              call: "snowflake.run-query"
              with:
                query: "CALL COMPLIANCE_DB.PROCEDURES.PREPARE_AUDIT_DATA('{{state_code}}', '{{audit_period_start}}', '{{audit_period_end}}')"
            - name: create-audit-package
              type: call
              call: "confluence.create-page"
              with:
                space_key: "COMPLIANCE"
                title: "State Audit Package: {{state_code}} ({{audit_period_start}} to {{audit_period_end}})"
                body: "Policies: {{gather-data.policy_count}}. Claims: {{gather-data.claims_count}}. Complaints: {{gather-data.complaint_count}}"
            - name: notify-compliance
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.compliance_teams_channel"
                text: "Audit package prepared for {{state_code}}. {{gather-data.policy_count}} policies, {{gather-data.claims_count}} claims reviewed. Confluence: {{create-audit-package.url}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://statefarm.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://statefarm.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: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

When a claims procedure document is updated in Confluence, detects the change, generates a summary of modifications, and broadcasts the update to claims staff via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Confluence Claims Procedure Update Notifier"
  description: "When a claims procedure document is updated in Confluence, detects the change, generates a summary of modifications, and broadcasts the update to claims staff via Microsoft Teams."
  tags:
    - insurance
    - claims
    - confluence
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: procedure-notify
      port: 8080
      tools:
        - name: notify-procedure-update
          description: "Detect and notify claims staff about procedure updates in Confluence. Gets the latest version diff and posts to Teams. Use when claims procedures are modified."
          inputParameters:
            - name: page_id
              in: body
              type: string
              description: "The Confluence page ID of the updated procedure."
          steps:
            - name: get-page-history
              type: call
              call: "confluence.get-page-history"
              with:
                page_id: "{{page_id}}"
            - name: notify-claims-staff
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.claims_all_channel"
                text: "Claims procedure updated: {{get-page-history.title}}. Version: {{get-page-history.version}}. Updated by: {{get-page-history.last_modifier}}. Please review."
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://statefarm.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-page-history
              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: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

After a complex insurance claim is resolved in ServiceNow, publishes resolution notes and adjuster findings as a Confluence knowledge base article for future adjuster reference.

naftiko: "0.5"
info:
  label: "Confluence Knowledge Base for Claims Resolution"
  description: "After a complex insurance claim is resolved in ServiceNow, publishes resolution notes and adjuster findings as a Confluence knowledge base article for future adjuster reference."
  tags:
    - itsm
    - knowledge-management
    - confluence
    - servicenow
    - insurance
capability:
  exposes:
    - type: mcp
      namespace: claims-knowledge
      port: 8080
      tools:
        - name: publish-claims-resolution-article
          description: "Given a resolved ServiceNow claim case number, retrieve resolution notes and adjuster findings, and create a Confluence knowledge base article in the Claims space. Use after complex claims are closed to build institutional adjuster knowledge."
          inputParameters:
            - name: case_number
              in: body
              type: string
              description: "The ServiceNow claim case number (e.g., CS0012345)."
            - name: confluence_space_key
              in: body
              type: string
              description: "The Confluence space key for the claims knowledge base (e.g., CLAIMS)."
          steps:
            - name: get-case
              type: call
              call: "servicenow-kb.get-case"
              with:
                number: "{{case_number}}"
            - name: create-kb-article
              type: call
              call: "confluence-kb.create-page"
              with:
                space_key: "{{confluence_space_key}}"
                title: "Claim Resolution: {{get-case.short_description}} ({{case_number}})"
                body: "Case: {{case_number}}\nLoss Type: {{get-case.category}}\nResolution: {{get-case.resolution_notes}}\nAdjuster Notes: {{get-case.work_notes}}"
  consumes:
    - type: http
      namespace: servicenow-kb
      baseUri: "https://statefarm.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: cases
          path: "/table/sn_customerservice_case"
          inputParameters:
            - name: number
              in: query
          operations:
            - name: get-case
              method: GET
    - type: http
      namespace: confluence-kb
      baseUri: "https://statefarm.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: create-page
              method: POST

When a customer complaint is received, creates a case in ServiceNow, links it to the relevant policy in Salesforce, assigns a resolution specialist, and notifies the customer experience team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Customer Complaint Tracking Workflow"
  description: "When a customer complaint is received, creates a case in ServiceNow, links it to the relevant policy in Salesforce, assigns a resolution specialist, and notifies the customer experience team via Microsoft Teams."
  tags:
    - insurance
    - compliance
    - servicenow
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: complaint-ops
      port: 8080
      tools:
        - name: log-customer-complaint
          description: "Log and track a customer complaint. Creates a ServiceNow case, links to the policy, and assigns a specialist. Use when a complaint is received through any channel."
          inputParameters:
            - name: policy_number
              in: body
              type: string
              description: "The policyholder's policy number."
            - name: complaint_category
              in: body
              type: string
              description: "Category: claims, billing, service, underwriting."
            - name: complaint_description
              in: body
              type: string
              description: "Description of the complaint."
          steps:
            - name: create-case
              type: call
              call: "servicenow.create-case"
              with:
                short_description: "Customer complaint: {{complaint_category}} - Policy {{policy_number}}"
                category: "complaint"
                description: "{{complaint_description}}"
            - name: link-to-policy
              type: call
              call: "salesforce.create-case-note"
              with:
                policy_number: "{{policy_number}}"
                note: "Complaint logged: {{create-case.number}} - {{complaint_category}}"
            - name: notify-cx-team
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.cx_teams_channel"
                text: "New complaint for policy {{policy_number}} ({{complaint_category}}). Case: {{create-case.number}}. Please assign a specialist."
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://statefarm.service-now.com/api/now"
      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://statefarm.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: case-notes
          path: "/sobjects/CaseNote__c"
          operations:
            - name: create-case-note
              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: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Monitors Datadog for performance degradation on State Farm's claims processing application, creates a ServiceNow incident when thresholds are breached, and notifies the claims technology team in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Datadog Application Performance Monitor for Claims Systems"
  description: "Monitors Datadog for performance degradation on State Farm's claims processing application, creates a ServiceNow incident when thresholds are breached, and notifies the claims technology team in Microsoft Teams."
  tags:
    - observability
    - insurance
    - datadog
    - servicenow
    - microsoft-teams
    - monitoring
capability:
  exposes:
    - type: mcp
      namespace: claims-monitoring
      port: 8080
      tools:
        - name: handle-claims-system-alert
          description: "Given a Datadog monitor ID and alert details for claims processing systems, open a ServiceNow incident and notify the claims technology team in Teams. Use when Datadog detects claims API latency or error rate spikes."
          inputParameters:
            - name: monitor_id
              in: body
              type: string
              description: "The Datadog monitor ID that triggered the alert."
            - name: alert_title
              in: body
              type: string
              description: "The alert title from Datadog."
            - name: severity
              in: body
              type: string
              description: "Alert severity: critical, warning, or info."
          steps:
            - name: get-monitor
              type: call
              call: "datadog.get-monitor"
              with:
                monitor_id: "{{monitor_id}}"
            - name: create-incident
              type: call
              call: "servicenow-dd.create-incident"
              with:
                short_description: "[Datadog] {{alert_title}}"
                urgency: "{{severity}}"
                description: "Monitor: {{get-monitor.name}}\nQuery: {{get-monitor.query}}\nState: {{get-monitor.overall_state}}"
            - name: notify-claims-tech
              type: call
              call: "msteams-claims-tech.post-message"
              with:
                channel_id: "$secrets.claims_tech_teams_channel"
                text: "Claims system alert: {{alert_title}} | Severity: {{severity}} | ServiceNow: {{create-incident.number}}"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: monitors
          path: "/monitor/{{monitor_id}}"
          inputParameters:
            - name: monitor_id
              in: path
          operations:
            - name: get-monitor
              method: GET
    - type: http
      namespace: servicenow-dd
      baseUri: "https://statefarm.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-claims-tech
      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: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Monitors Datadog for claims API latency anomalies, creates a PagerDuty incident when P99 latency exceeds thresholds, and posts an alert to the engineering Teams channel.

naftiko: "0.5"
info:
  label: "Datadog Claims API Latency Monitor"
  description: "Monitors Datadog for claims API latency anomalies, creates a PagerDuty incident when P99 latency exceeds thresholds, and posts an alert to the engineering Teams channel."
  tags:
    - insurance
    - claims
    - datadog
    - pagerduty
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: claims-monitoring
      port: 8080
      tools:
        - name: check-claims-api-latency
          description: "Check claims API P99 latency from Datadog metrics. Creates PagerDuty incident and Teams alert if threshold exceeded. Use for proactive performance monitoring."
          inputParameters:
            - name: service_name
              in: body
              type: string
              description: "The Datadog service name to monitor."
            - name: threshold_ms
              in: body
              type: integer
              description: "P99 latency threshold in milliseconds."
          steps:
            - name: get-latency
              type: call
              call: "datadog.query-metrics"
              with:
                query: "p99:trace.http.request{service:{{service_name}}}.rollup(avg, 300)"
            - name: create-incident
              type: call
              call: "pagerduty.create-incident"
              with:
                service_id: "$secrets.claims_eng_pagerduty"
                title: "Claims API latency alert: {{service_name}} P99 > {{threshold_ms}}ms"
                body: "Current P99: {{get-latency.value}}ms. Threshold: {{threshold_ms}}ms"
            - name: notify-engineering
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.eng_teams_channel"
                text: "Claims API latency alert: {{service_name}} P99 at {{get-latency.value}}ms (threshold: {{threshold_ms}}ms). PagerDuty: {{create-incident.incident_key}}"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.datadog_api_key"
      resources:
        - name: metrics
          path: "/query"
          operations:
            - name: query-metrics
              method: GET
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: bearer
        token: "$secrets.pagerduty_token"
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

When a Datadog SLO breach is detected for State Farm's core insurance API services, opens a ServiceNow incident and triggers a PagerDuty page to the on-call platform engineer.

naftiko: "0.5"
info:
  label: "Datadog SLO Breach to PagerDuty Escalation"
  description: "When a Datadog SLO breach is detected for State Farm's core insurance API services, opens a ServiceNow incident and triggers a PagerDuty page to the on-call platform engineer."
  tags:
    - observability
    - slo
    - datadog
    - pagerduty
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: slo-response
      port: 8080
      tools:
        - name: handle-slo-breach
          description: "Given a Datadog SLO ID, service name, and remaining error budget percentage, open a ServiceNow incident and trigger PagerDuty for the on-call engineer. Use when a State Farm insurance service API falls below its SLO threshold."
          inputParameters:
            - name: slo_id
              in: body
              type: string
              description: "The Datadog SLO ID that breached its threshold."
            - name: service_name
              in: body
              type: string
              description: "The service name whose SLO was breached (e.g., claims-api, policy-api)."
            - name: remaining_budget_pct
              in: body
              type: string
              description: "The remaining error budget percentage at time of breach."
          steps:
            - name: get-slo
              type: call
              call: "datadog-slo.get-slo"
              with:
                slo_id: "{{slo_id}}"
            - name: create-incident
              type: call
              call: "servicenow-slo.create-incident"
              with:
                short_description: "SLO breach: {{service_name}} {{remaining_budget_pct}}% error budget remaining"
                category: "platform"
                urgency: "critical"
            - name: page-oncall
              type: call
              call: "pagerduty-slo.trigger-incident"
              with:
                service_id: "$secrets.pagerduty_service_id"
                summary: "SLO breach for {{service_name}}: {{remaining_budget_pct}}% budget remaining"
                severity: "critical"
  consumes:
    - type: http
      namespace: datadog-slo
      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/{{slo_id}}"
          inputParameters:
            - name: slo_id
              in: path
          operations:
            - name: get-slo
              method: GET
    - type: http
      namespace: servicenow-slo
      baseUri: "https://statefarm.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-slo
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.pagerduty_api_key"
        placement: header
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: trigger-incident
              method: POST

When a new hire record is created in Workday, provisions a Microsoft 365 account via Graph API, opens a ServiceNow onboarding ticket, and sends a Teams welcome message to the new agent or employee.

naftiko: "0.5"
info:
  label: "Employee Onboarding Orchestrator"
  description: "When a new hire record is created in Workday, provisions a Microsoft 365 account via Graph API, opens a ServiceNow onboarding ticket, and sends a Teams welcome message to the new agent or employee."
  tags:
    - hr
    - onboarding
    - workday
    - microsoft-365
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-onboarding
      port: 8080
      tools:
        - name: trigger-onboarding
          description: "Given a Workday worker ID and start date, orchestrate the full onboarding sequence: provision a Microsoft 365 account, open a ServiceNow ticket, and send a Teams welcome message. Use when a new hire is confirmed in Workday."
          inputParameters:
            - name: worker_id
              in: body
              type: string
              description: "The Workday worker ID for the new hire."
            - name: start_date
              in: body
              type: string
              description: "The new hire's start date in ISO 8601 format (YYYY-MM-DD)."
            - name: role_type
              in: body
              type: string
              description: "Role type: agent, claims-adjuster, or corporate."
          steps:
            - name: get-worker
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{worker_id}}"
            - name: provision-account
              type: call
              call: "msgraph.create-user"
              with:
                displayName: "{{get-worker.firstName}} {{get-worker.lastName}}"
                mail: "{{get-worker.email}}"
                department: "{{get-worker.department}}"
            - name: open-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "New hire onboarding: {{get-worker.firstName}} {{get-worker.lastName}} ({{role_type}})"
                category: "hr_onboarding"
                assignment_group: "IT_Onboarding"
            - name: send-welcome
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.hr_teams_channel"
                text: "Welcome {{get-worker.firstName}} {{get-worker.lastName}}! Starting {{start_date}} as {{role_type}}. ServiceNow: {{open-ticket.number}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/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://statefarm.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Checks for duplicate or overlapping claims in Snowflake based on the claimant, loss date, and loss type, flags potential duplicates, and creates an investigation alert in ServiceNow.

naftiko: "0.5"
info:
  label: "Fraud Claims Duplicate Detection"
  description: "Checks for duplicate or overlapping claims in Snowflake based on the claimant, loss date, and loss type, flags potential duplicates, and creates an investigation alert in ServiceNow."
  tags:
    - insurance
    - fraud
    - claims
    - snowflake
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: duplicate-detection
      port: 8080
      tools:
        - name: detect-duplicate-claims
          description: "Check for duplicate claims by claimant and loss details. Queries Snowflake and creates alerts for matches. Use during claims intake to prevent duplicate payments."
          inputParameters:
            - name: claimant_name
              in: body
              type: string
              description: "Full name of the claimant."
            - name: loss_date
              in: body
              type: string
              description: "Date of loss in ISO 8601 format."
            - name: loss_type
              in: body
              type: string
              description: "Type of loss reported."
          steps:
            - name: search-duplicates
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT claim_id, policy_number, status FROM CLAIMS_DB.PUBLIC.CLAIMS WHERE claimant_name = '{{claimant_name}}' AND loss_date BETWEEN DATEADD(day, -7, '{{loss_date}}') AND DATEADD(day, 7, '{{loss_date}}') AND loss_type = '{{loss_type}}'"
            - name: create-alert
              type: call
              call: "servicenow.create-record"
              with:
                table: "u_fraud_alert"
                alert_type: "duplicate_claim"
                claimant: "{{claimant_name}}"
                matches: "{{search-duplicates.row_count}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://statefarm.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://statefarm.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: records
          path: "/table/{{table}}"
          inputParameters:
            - name: table
              in: path
          operations:
            - name: create-record
              method: POST

When the fraud scoring model flags a suspicious claim, creates a Special Investigations Unit case in ServiceNow, attaches the fraud indicators, and alerts the SIU team via PagerDuty.

naftiko: "0.5"
info:
  label: "Fraud Detection Alert to SIU"
  description: "When the fraud scoring model flags a suspicious claim, creates a Special Investigations Unit case in ServiceNow, attaches the fraud indicators, and alerts the SIU team via PagerDuty."
  tags:
    - insurance
    - fraud
    - servicenow
    - pagerduty
capability:
  exposes:
    - type: mcp
      namespace: fraud-ops
      port: 8080
      tools:
        - name: escalate-fraud-alert
          description: "Given a claim ID and fraud score, create an SIU investigation case in ServiceNow and trigger a PagerDuty alert for the fraud team. Use when the fraud model returns a score above the threshold."
          inputParameters:
            - name: claim_id
              in: body
              type: string
              description: "The claim identifier flagged for fraud."
            - name: fraud_score
              in: body
              type: number
              description: "The fraud probability score from the detection model (0-100)."
            - name: fraud_indicators
              in: body
              type: string
              description: "Comma-separated list of fraud indicators detected."
          steps:
            - name: create-siu-case
              type: call
              call: "servicenow-siu.create-case"
              with:
                short_description: "Fraud alert: Claim {{claim_id}} (Score: {{fraud_score}})"
                category: "fraud_investigation"
                description: "Claim {{claim_id}} flagged with fraud score {{fraud_score}}. Indicators: {{fraud_indicators}}"
            - name: alert-siu-team
              type: call
              call: "pagerduty.create-incident"
              with:
                service_id: "$secrets.siu_pagerduty_service"
                title: "High-risk fraud alert: Claim {{claim_id}}"
                body: "Fraud score: {{fraud_score}}. ServiceNow case: {{create-siu-case.number}}"
  consumes:
    - type: http
      namespace: servicenow-siu
      baseUri: "https://statefarm.service-now.com/api/now"
      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 on claims data in Snowflake to detect potential fraud rings, creates investigation cases in ServiceNow for each identified ring, and alerts the SIU leadership via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Fraud Ring Detection Investigation"
  description: "Runs graph analytics on claims data in Snowflake to detect potential fraud rings, creates investigation cases in ServiceNow for each identified ring, and alerts the SIU leadership via Microsoft Teams."
  tags:
    - insurance
    - fraud
    - snowflake
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: fraud-ring-ops
      port: 8080
      tools:
        - name: detect-fraud-rings
          description: "Run fraud ring detection analytics for a specified date range and create investigation cases for identified rings. Use during monthly fraud review cycles."
          inputParameters:
            - name: start_date
              in: body
              type: string
              description: "Analysis start date in ISO 8601 format."
            - name: end_date
              in: body
              type: string
              description: "Analysis end date in ISO 8601 format."
          steps:
            - name: run-detection
              type: call
              call: "snowflake.run-query"
              with:
                query: "CALL FRAUD_DB.PROCEDURES.DETECT_FRAUD_RINGS('{{start_date}}', '{{end_date}}')"
            - name: create-investigation
              type: call
              call: "servicenow.create-case"
              with:
                short_description: "Fraud ring investigation: {{start_date}} to {{end_date}}"
                category: "fraud_ring"
                description: "Rings detected: {{run-detection.ring_count}}. Total claims involved: {{run-detection.claims_count}}"
            - name: alert-siu
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.siu_leadership_channel"
                text: "Fraud ring detection complete. {{run-detection.ring_count}} potential rings identified involving {{run-detection.claims_count}} claims. Investigation: {{create-investigation.number}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://statefarm.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://statefarm.service-now.com/api/now"
      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: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

When a GitHub Actions pipeline fails on a protected branch in State Farm's engineering repositories, creates a Jira bug and posts a failure alert to the engineering Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "GitHub Actions CI/CD Pipeline Failure Handler"
  description: "When a GitHub Actions pipeline fails on a protected branch in State Farm's engineering repositories, creates a Jira bug and posts a failure alert to the engineering Microsoft Teams channel."
  tags:
    - devops
    - cicd
    - github
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: cicd-ops
      port: 8080
      tools:
        - name: handle-pipeline-failure
          description: "Given a failed GitHub Actions run ID, repository, and branch, open a Jira bug and post a Teams alert with full context. Use when CI/CD pipelines fail on protected branches for State Farm engineering projects."
          inputParameters:
            - name: run_id
              in: body
              type: string
              description: "The GitHub Actions workflow run ID."
            - name: repo
              in: body
              type: string
              description: "The GitHub repository in owner/repo format."
            - name: branch
              in: body
              type: string
              description: "The branch where the failure occurred."
            - name: commit_sha
              in: body
              type: string
              description: "The commit SHA for the failed run."
          steps:
            - name: get-run
              type: call
              call: "github.get-workflow-run"
              with:
                repo: "{{repo}}"
                run_id: "{{run_id}}"
            - name: create-bug
              type: call
              call: "jira.create-issue"
              with:
                project_key: "ENG"
                issuetype: "Bug"
                summary: "[CI Failure] {{repo}} / {{branch}}"
                description: "Run: {{run_id}}\nCommit: {{commit_sha}}\nConclusion: {{get-run.conclusion}}"
            - name: post-alert
              type: call
              call: "msteams-cicd.post-message"
              with:
                channel_id: "$secrets.cicd_teams_channel"
                text: "Pipeline failure: {{repo}} | Branch: {{branch}} | Jira: {{create-bug.key}}"
  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://statefarm.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-cicd
      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: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

When GitHub Dependabot detects a critical security vulnerability in a repository, creates a Jira ticket for the security team and sends an alert to the engineering Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "GitHub Security Advisory to Jira"
  description: "When GitHub Dependabot detects a critical security vulnerability in a repository, creates a Jira ticket for the security team and sends an alert to the engineering Microsoft Teams channel."
  tags:
    - security
    - github
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: security-ops
      port: 8080
      tools:
        - name: process-security-advisory
          description: "Process a GitHub security advisory. Creates a Jira ticket and notifies engineering. Use when Dependabot finds critical vulnerabilities."
          inputParameters:
            - name: repository
              in: body
              type: string
              description: "The GitHub repository name."
            - name: advisory_id
              in: body
              type: string
              description: "The GitHub advisory identifier."
            - name: severity
              in: body
              type: string
              description: "Severity level: critical, high, medium, low."
          steps:
            - name: get-advisory
              type: call
              call: "github.get-advisory"
              with:
                owner: "statefarm"
                repo: "{{repository}}"
                advisory_id: "{{advisory_id}}"
            - name: create-ticket
              type: call
              call: "jira.create-issue"
              with:
                project_key: "SEC"
                issuetype: "Bug"
                summary: "Security: {{severity}} vulnerability in {{repository}}"
                description: "Advisory: {{advisory_id}}. Package: {{get-advisory.package_name}}. Fix: {{get-advisory.patched_version}}"
            - name: notify-engineering
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.eng_security_channel"
                text: "Security alert: {{severity}} vulnerability in {{repository}}. Package: {{get-advisory.package_name}}. Jira: {{create-ticket.key}}"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: advisories
          path: "/repos/{{owner}}/{{repo}}/dependabot/alerts/{{advisory_id}}"
          inputParameters:
            - name: owner
              in: path
            - name: repo
              in: path
            - name: advisory_id
              in: path
          operations:
            - name: get-advisory
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://statefarm.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: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Retrieves Dependabot vulnerability alerts for State Farm engineering repositories and creates Jira security tickets for high or critical severity findings.

naftiko: "0.5"
info:
  label: "GitHub Security Vulnerability Scanner"
  description: "Retrieves Dependabot vulnerability alerts for State Farm engineering repositories and creates Jira security tickets for high or critical severity findings."
  tags:
    - security
    - devops
    - github
    - jira
capability:
  exposes:
    - type: mcp
      namespace: security-scanning
      port: 8080
      tools:
        - name: scan-repo-vulnerabilities
          description: "Given a GitHub repository and severity threshold, retrieve Dependabot alerts and create Jira security tickets for findings at or above the threshold. Use for weekly security posture reviews of State Farm engineering repositories."
          inputParameters:
            - name: repo
              in: body
              type: string
              description: "The GitHub repository in owner/repo format."
            - name: severity_threshold
              in: body
              type: string
              description: "Minimum severity to report: low, medium, high, or critical."
          steps:
            - name: get-alerts
              type: call
              call: "github-sec.list-dependabot-alerts"
              with:
                repo: "{{repo}}"
                severity: "{{severity_threshold}}"
            - name: create-sec-ticket
              type: call
              call: "jira-sec.create-issue"
              with:
                project_key: "SEC"
                issuetype: "Bug"
                summary: "Security vulnerability in {{repo}}: {{get-alerts.securityVulnerability.package.name}}"
                description: "Severity: {{get-alerts.severity}}\nRepo: {{repo}}\nPackage: {{get-alerts.securityVulnerability.package.name}}"
  consumes:
    - type: http
      namespace: github-sec
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: dependabot-alerts
          path: "/repos/{{repo}}/dependabot/alerts"
          inputParameters:
            - name: repo
              in: path
            - name: severity
              in: query
          operations:
            - name: list-dependabot-alerts
              method: GET
    - type: http
      namespace: jira-sec
      baseUri: "https://statefarm.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

When a new homeowner policy application requires a property inspection, identifies available inspectors in the area, schedules the inspection, creates a ServiceNow work order, and notifies the applicant.

naftiko: "0.5"
info:
  label: "Homeowner Inspection Scheduling Workflow"
  description: "When a new homeowner policy application requires a property inspection, identifies available inspectors in the area, schedules the inspection, creates a ServiceNow work order, and notifies the applicant."
  tags:
    - insurance
    - underwriting
    - servicenow
    - scheduling
capability:
  exposes:
    - type: mcp
      namespace: inspection-ops
      port: 8080
      tools:
        - name: schedule-property-inspection
          description: "Schedule a property inspection for a homeowner policy application. Finds available inspectors, creates a work order, and notifies the applicant. Use when underwriting requires a property inspection."
          inputParameters:
            - name: application_id
              in: body
              type: string
              description: "The policy application ID."
            - name: property_address
              in: body
              type: string
              description: "Full property address for the inspection."
            - name: zip_code
              in: body
              type: string
              description: "Property ZIP code for inspector matching."
          steps:
            - name: find-inspector
              type: call
              call: "inspector-api.find-available"
              with:
                zip_code: "{{zip_code}}"
            - name: create-work-order
              type: call
              call: "servicenow.create-work-order"
              with:
                short_description: "Property inspection: {{application_id}}"
                location: "{{property_address}}"
                assigned_to: "{{find-inspector.inspector_id}}"
                description: "Homeowner policy inspection for application {{application_id}} at {{property_address}}"
            - name: notify-applicant
              type: call
              call: "notification-api.send-email"
              with:
                template: "inspection-scheduled"
                application_id: "{{application_id}}"
                inspection_date: "{{find-inspector.next_available_date}}"
  consumes:
    - type: http
      namespace: inspector-api
      baseUri: "https://api.statefarm.com/inspections/v1"
      authentication:
        type: bearer
        token: "$secrets.inspection_api_token"
      resources:
        - name: inspectors
          path: "/inspectors/available"
          operations:
            - name: find-available
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://statefarm.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: work-orders
          path: "/table/wm_order"
          operations:
            - name: create-work-order
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://api.statefarm.com/notifications/v1"
      authentication:
        type: bearer
        token: "$secrets.notification_api_token"
      resources:
        - name: emails
          path: "/send"
          operations:
            - name: send-email
              method: POST

When a new auto or homeowner insurance claim is submitted via the State Farm claims portal, creates a ServiceNow case for the claims adjuster team and sends a confirmation notification via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Insurance Claims Intake to ServiceNow"
  description: "When a new auto or homeowner insurance claim is submitted via the State Farm claims portal, creates a ServiceNow case for the claims adjuster team and sends a confirmation notification via Microsoft Teams."
  tags:
    - insurance
    - claims
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: claims-intake
      port: 8080
      tools:
        - name: create-claims-case
          description: "Given a claim submission payload (policy number, claimant name, loss type, and loss date), create a ServiceNow case for the claims adjuster team and notify the claims channel in Teams. Use when a new claim is submitted."
          inputParameters:
            - name: policy_number
              in: body
              type: string
              description: "The policyholder's State Farm policy number."
            - name: claimant_name
              in: body
              type: string
              description: "Full name of the claimant."
            - name: loss_type
              in: body
              type: string
              description: "Type of loss: auto, homeowner, life, or health."
            - name: loss_date
              in: body
              type: string
              description: "Date of the loss in ISO 8601 format."
          steps:
            - name: create-case
              type: call
              call: "servicenow-claims.create-case"
              with:
                short_description: "New {{loss_type}} claim: Policy {{policy_number}}"
                category: "insurance_claim"
                description: "Claimant: {{claimant_name}}\nPolicy: {{policy_number}}\nLoss Type: {{loss_type}}\nLoss Date: {{loss_date}}"
            - name: notify-claims-team
              type: call
              call: "msteams-claims.post-message"
              with:
                channel_id: "$secrets.claims_teams_channel"
                text: "New {{loss_type}} claim filed. Policy: {{policy_number}} | Claimant: {{claimant_name}} | ServiceNow: {{create-case.number}}"
  consumes:
    - type: http
      namespace: servicenow-claims
      baseUri: "https://statefarm.service-now.com/api/now"
      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: msteams-claims
      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: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Generates a weekly digest of the claims engineering team's Jira backlog including sprint progress, blockers, and upcoming deadlines, and posts the summary to Microsoft Teams.

naftiko: "0.5"
info:
  label: "Jira Claims Engineering Backlog Digest"
  description: "Generates a weekly digest of the claims engineering team's Jira backlog including sprint progress, blockers, and upcoming deadlines, and posts the summary to Microsoft Teams."
  tags:
    - engineering
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: eng-digest
      port: 8080
      tools:
        - name: generate-backlog-digest
          description: "Generate a Jira backlog digest for the claims engineering team. Summarizes sprint progress and posts to Teams. Use for weekly engineering standups."
          inputParameters:
            - name: board_id
              in: body
              type: string
              description: "The Jira board ID for claims engineering."
          steps:
            - name: get-sprint-data
              type: call
              call: "jira.get-active-sprint"
              with:
                board_id: "{{board_id}}"
            - name: get-blockers
              type: call
              call: "jira.search-issues"
              with:
                jql: "project = CLAIMS AND status = Blocked AND sprint in openSprints()"
            - name: post-digest
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.claims_eng_channel"
                text: "Claims Engineering Backlog Digest: Sprint {{get-sprint-data.sprint_name}}. Completed: {{get-sprint-data.done_count}}. In Progress: {{get-sprint-data.in_progress_count}}. Blockers: {{get-blockers.total}}"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://statefarm.atlassian.net/rest/agile/1.0"
      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-active-sprint
              method: GET
        - name: search
          path: "/search"
          operations:
            - name: search-issues
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Retrieves completed sprint data from Jira for State Farm's engineering teams, calculates velocity, and publishes a sprint summary to the engineering Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Jira Sprint Velocity Report for Engineering"
  description: "Retrieves completed sprint data from Jira for State Farm's engineering teams, calculates velocity, and publishes a sprint summary to the engineering Microsoft Teams channel."
  tags:
    - devops
    - agile
    - jira
    - reporting
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: sprint-reporting
      port: 8080
      tools:
        - name: publish-sprint-velocity
          description: "Given a Jira board ID and sprint ID, retrieve completed issues and story points to calculate velocity. Post the sprint summary to the engineering Teams channel. Use after each State Farm engineering sprint closes."
          inputParameters:
            - name: board_id
              in: body
              type: string
              description: "The Jira board ID (numeric)."
            - name: sprint_id
              in: body
              type: string
              description: "The completed Jira sprint ID."
          steps:
            - name: get-sprint
              type: call
              call: "jira-sprint.get-sprint"
              with:
                board_id: "{{board_id}}"
                sprint_id: "{{sprint_id}}"
            - name: get-sprint-issues
              type: call
              call: "jira-issues.search-issues"
              with:
                sprint_id: "{{sprint_id}}"
            - name: post-velocity-report
              type: call
              call: "msteams-sprint.post-message"
              with:
                channel_id: "$secrets.engineering_teams_channel"
                text: "Sprint {{get-sprint.name}} closed. Issues completed: {{get-sprint-issues.total}}. Sprint ID: {{sprint_id}}"
  consumes:
    - type: http
      namespace: jira-sprint
      baseUri: "https://statefarm.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
    - type: http
      namespace: jira-issues
      baseUri: "https://statefarm.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/search"
          inputParameters:
            - name: sprint_id
              in: query
          operations:
            - name: search-issues
              method: GET
    - type: http
      namespace: msteams-sprint
      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: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Publishes approved agent and corporate job requisitions from Workday Recruiting to LinkedIn Jobs and notifies the talent acquisition team in Microsoft Teams.

naftiko: "0.5"
info:
  label: "LinkedIn Job Posting for State Farm Recruiting"
  description: "Publishes approved agent and corporate job requisitions from Workday Recruiting to LinkedIn Jobs and notifies the talent acquisition team in Microsoft Teams."
  tags:
    - hr
    - recruiting
    - linkedin
    - workday
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: talent-acquisition
      port: 8080
      tools:
        - name: publish-job-to-linkedin
          description: "Given a Workday job requisition ID and LinkedIn organization URN, retrieve the job details and publish the posting to LinkedIn. Notify the TA team in Teams when the posting is live. Use for approved agent and corporate role openings."
          inputParameters:
            - name: requisition_id
              in: body
              type: string
              description: "The Workday job requisition ID."
            - name: linkedin_org_id
              in: body
              type: string
              description: "The LinkedIn organization URN for the State Farm entity posting the role."
          steps:
            - name: get-requisition
              type: call
              call: "workday-rec.get-job-requisition"
              with:
                requisition_id: "{{requisition_id}}"
            - name: post-job
              type: call
              call: "linkedin-jobs.create-job-posting"
              with:
                organization_id: "{{linkedin_org_id}}"
                title: "{{get-requisition.jobTitle}}"
                description: "{{get-requisition.jobDescription}}"
                location: "{{get-requisition.location}}"
            - name: notify-ta
              type: call
              call: "msteams-ta.post-message"
              with:
                channel_id: "$secrets.recruiting_teams_channel"
                text: "Job {{get-requisition.jobTitle}} posted to LinkedIn. Posting ID: {{post-job.postingId}}"
  consumes:
    - type: http
      namespace: workday-rec
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: job-requisitions
          path: "/jobRequisitions/{{requisition_id}}"
          inputParameters:
            - name: requisition_id
              in: path
          operations:
            - name: get-job-requisition
              method: GET
    - type: http
      namespace: linkedin-jobs
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: job-postings
          path: "/simpleJobPostings"
          operations:
            - name: create-job-posting
              method: POST
    - type: http
      namespace: msteams-ta
      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: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Fetches weekly campaign performance metrics from Marketo for State Farm's auto and home insurance product marketing programs and publishes a digest to the marketing team's Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Marketo Insurance Product Campaign Digest"
  description: "Fetches weekly campaign performance metrics from Marketo for State Farm's auto and home insurance product marketing programs and publishes a digest to the marketing team's Microsoft Teams channel."
  tags:
    - marketing
    - marketo
    - reporting
    - microsoft-teams
    - insurance
capability:
  exposes:
    - type: mcp
      namespace: marketing-reporting
      port: 8080
      tools:
        - name: digest-insurance-campaign-performance
          description: "Given a Marketo program ID and date range, retrieve email campaign performance metrics for State Farm insurance product marketing. Post the weekly digest to the marketing Teams channel. Use for weekly marketing performance reviews."
          inputParameters:
            - name: program_id
              in: body
              type: string
              description: "The Marketo program ID for the insurance product campaign."
            - name: start_date
              in: body
              type: string
              description: "Report start date in ISO 8601 format."
            - name: end_date
              in: body
              type: string
              description: "Report end date in ISO 8601 format."
          steps:
            - name: get-campaign-stats
              type: call
              call: "marketo.get-program-stats"
              with:
                program_id: "{{program_id}}"
                start_date: "{{start_date}}"
                end_date: "{{end_date}}"
            - name: post-digest
              type: call
              call: "msteams-mktg.post-message"
              with:
                channel_id: "$secrets.marketing_teams_channel"
                text: "Campaign digest {{start_date}}-{{end_date}} | Program {{program_id}} | Opens: {{get-campaign-stats.opens}} | Clicks: {{get-campaign-stats.clicks}} | Leads: {{get-campaign-stats.newLeads}}"
  consumes:
    - type: http
      namespace: marketo
      baseUri: "https://statefarm.mktorest.com/rest/v1"
      authentication:
        type: bearer
        token: "$secrets.marketo_token"
      resources:
        - name: program-stats
          path: "/stats/usage/last7days.json"
          inputParameters:
            - name: program_id
              in: query
          operations:
            - name: get-program-stats
              method: GET
    - type: http
      namespace: msteams-mktg
      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: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Triggers a targeted retention campaign in Marketo for policyholders identified as high churn risk by the analytics model, and logs the campaign execution in Salesforce.

naftiko: "0.5"
info:
  label: "Marketo Policyholder Retention Campaign"
  description: "Triggers a targeted retention campaign in Marketo for policyholders identified as high churn risk by the analytics model, and logs the campaign execution in Salesforce."
  tags:
    - insurance
    - policy
    - marketo
    - salesforce
    - analytics
capability:
  exposes:
    - type: mcp
      namespace: retention-campaign
      port: 8080
      tools:
        - name: launch-retention-campaign
          description: "Launch a retention campaign for high-risk policyholders. Triggers Marketo campaign and logs in Salesforce. Use when churn prediction model identifies at-risk customers."
          inputParameters:
            - name: segment_name
              in: body
              type: string
              description: "Name of the at-risk customer segment."
            - name: campaign_id
              in: body
              type: string
              description: "The Marketo campaign ID to trigger."
          steps:
            - name: trigger-campaign
              type: call
              call: "marketo.trigger-campaign"
              with:
                campaign_id: "{{campaign_id}}"
                segment: "{{segment_name}}"
            - name: log-campaign
              type: call
              call: "salesforce.create-campaign-log"
              with:
                campaign_name: "Retention: {{segment_name}}"
                campaign_type: "retention"
                marketo_campaign_id: "{{campaign_id}}"
                status: "launched"
  consumes:
    - type: http
      namespace: marketo
      baseUri: "https://statefarm.mktorest.com/rest/v1"
      authentication:
        type: bearer
        token: "$secrets.marketo_token"
      resources:
        - name: campaigns
          path: "/campaigns/{{campaign_id}}/trigger.json"
          inputParameters:
            - name: campaign_id
              in: path
          operations:
            - name: trigger-campaign
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://statefarm.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: campaign-logs
          path: "/sobjects/CampaignLog__c"
          operations:
            - name: create-campaign-log
              method: POST

When underwriting approves a new policy application, creates the policy record in Salesforce, generates policy documents, sets up billing in the payment system, and sends a welcome package notification to the policyholder.

naftiko: "0.5"
info:
  label: "New Policy Issuance Orchestrator"
  description: "When underwriting approves a new policy application, creates the policy record in Salesforce, generates policy documents, sets up billing in the payment system, and sends a welcome package notification to the policyholder."
  tags:
    - insurance
    - policy
    - underwriting
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: policy-issuance
      port: 8080
      tools:
        - name: issue-new-policy
          description: "Issue a new insurance policy after underwriting approval. Creates the policy record, generates documents, establishes billing, and notifies the policyholder. Use when an application is approved."
          inputParameters:
            - name: application_id
              in: body
              type: string
              description: "The approved application ID."
            - name: product_type
              in: body
              type: string
              description: "Product type: auto, homeowner, life, or umbrella."
            - name: premium_amount
              in: body
              type: number
              description: "Approved annual premium amount."
          steps:
            - name: create-policy
              type: call
              call: "salesforce.create-policy"
              with:
                application_id: "{{application_id}}"
                product_type: "{{product_type}}"
                premium: "{{premium_amount}}"
            - name: generate-documents
              type: call
              call: "document-api.generate-policy-documents"
              with:
                policy_number: "{{create-policy.policy_number}}"
                product_type: "{{product_type}}"
            - name: setup-billing
              type: call
              call: "billing-api.create-billing-schedule"
              with:
                policy_number: "{{create-policy.policy_number}}"
                annual_premium: "{{premium_amount}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://statefarm.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.statefarm.com/documents/v1"
      authentication:
        type: bearer
        token: "$secrets.document_api_token"
      resources:
        - name: generation
          path: "/generate"
          operations:
            - name: generate-policy-documents
              method: POST
    - type: http
      namespace: billing-api
      baseUri: "https://api.statefarm.com/billing/v1"
      authentication:
        type: bearer
        token: "$secrets.billing_api_token"
      resources:
        - name: schedules
          path: "/billing-schedules"
          operations:
            - name: create-billing-schedule
              method: POST

Assigns appropriate Okta application groups to new State Farm exclusive agents based on their license status and region from Workday, enabling access to the agent portal and policy management systems.

naftiko: "0.5"
info:
  label: "Okta Agent Portal Access Provisioning"
  description: "Assigns appropriate Okta application groups to new State Farm exclusive agents based on their license status and region from Workday, enabling access to the agent portal and policy management systems."
  tags:
    - identity
    - security
    - okta
    - workday
    - microsoft-teams
    - insurance
capability:
  exposes:
    - type: mcp
      namespace: agent-provisioning
      port: 8080
      tools:
        - name: provision-agent-portal-access
          description: "Given a Workday worker ID for a new agent, retrieve their license type and region, look up their Okta profile, and assign the appropriate agent portal access groups. Notify IT in Teams on completion. Use during agent onboarding."
          inputParameters:
            - name: worker_id
              in: body
              type: string
              description: "The Workday worker ID for the new State Farm agent."
            - name: okta_group_ids
              in: body
              type: string
              description: "Comma-separated Okta group IDs to assign for agent portal access."
          steps:
            - name: get-worker
              type: call
              call: "workday-agent.get-worker"
              with:
                worker_id: "{{worker_id}}"
            - name: find-okta-user
              type: call
              call: "okta-lookup.get-user"
              with:
                email: "{{get-worker.email}}"
            - name: assign-agent-groups
              type: call
              call: "okta-groups.assign-user-to-group"
              with:
                user_id: "{{find-okta-user.id}}"
                group_ids: "{{okta_group_ids}}"
            - name: notify-it
              type: call
              call: "msteams-it.post-message"
              with:
                channel_id: "$secrets.it_teams_channel"
                text: "Agent portal access provisioned for {{get-worker.email}}. Groups: {{okta_group_ids}}"
  consumes:
    - type: http
      namespace: workday-agent
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: okta-lookup
      baseUri: "https://statefarm.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: users
          path: "/users"
          inputParameters:
            - name: email
              in: query
          operations:
            - name: get-user
              method: GET
    - type: http
      namespace: okta-groups
      baseUri: "https://statefarm.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: group-members
          path: "/groups/{{group_id}}/users/{{user_id}}"
          inputParameters:
            - name: group_id
              in: path
            - name: user_id
              in: path
          operations:
            - name: assign-user-to-group
              method: PUT
    - type: http
      namespace: msteams-it
      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: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Pulls user access lists from Okta for claims-related applications, compares against authorized roles in Workday, and creates Jira tickets for any access discrepancies found.

naftiko: "0.5"
info:
  label: "Okta Claims System Access Review"
  description: "Pulls user access lists from Okta for claims-related applications, compares against authorized roles in Workday, and creates Jira tickets for any access discrepancies found."
  tags:
    - insurance
    - claims
    - okta
    - workday
    - jira
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: access-review
      port: 8080
      tools:
        - name: review-claims-access
          description: "Review user access to claims systems by comparing Okta assignments against Workday roles. Creates tickets for discrepancies. Use for quarterly access certification."
          inputParameters:
            - name: application_name
              in: body
              type: string
              description: "The Okta application name to review."
          steps:
            - name: get-okta-users
              type: call
              call: "okta.list-app-users"
              with:
                app_name: "{{application_name}}"
            - name: get-authorized-roles
              type: call
              call: "workday.get-department-roster"
              with:
                department: "claims"
            - name: create-discrepancy-ticket
              type: call
              call: "jira.create-issue"
              with:
                project_key: "SEC"
                issuetype: "Task"
                summary: "Access review: {{application_name}} discrepancies"
                description: "Okta users: {{get-okta-users.count}}. Authorized: {{get-authorized-roles.count}}. Review required."
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://statefarm.okta.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.okta_api_token"
      resources:
        - name: app-users
          path: "/apps/{{app_name}}/users"
          inputParameters:
            - name: app_name
              in: path
          operations:
            - name: list-app-users
              method: GET
    - type: http
      namespace: workday
      baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/statefarm"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: roster
          path: "/staffing/departmentRoster"
          operations:
            - name: get-department-roster
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://statefarm.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

When Okta detects a suspicious login for a State Farm employee or agent, suspends the account, opens a ServiceNow security incident, and alerts the security operations team in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Okta Suspicious Login Security Response"
  description: "When Okta detects a suspicious login for a State Farm employee or agent, suspends the account, opens a ServiceNow security incident, and alerts the security operations team in Microsoft Teams."
  tags:
    - security
    - identity
    - okta
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: security-response
      port: 8080
      tools:
        - name: handle-suspicious-login
          description: "Given an Okta user ID and suspicious event details, suspend the account, open a ServiceNow security incident, and notify the SOC team in Teams. Use when Okta ThreatInsight flags an anomalous login for a State Farm employee or agent."
          inputParameters:
            - name: okta_user_id
              in: body
              type: string
              description: "The Okta user ID with the suspicious login."
            - name: event_description
              in: body
              type: string
              description: "Description of the suspicious event from Okta ThreatInsight."
          steps:
            - name: suspend-user
              type: call
              call: "okta-suspend.suspend-user"
              with:
                user_id: "{{okta_user_id}}"
            - name: create-sec-incident
              type: call
              call: "servicenow-sec.create-incident"
              with:
                short_description: "Suspicious login: Okta user {{okta_user_id}}"
                category: "security"
                urgency: "high"
                description: "{{event_description}}\nAccount suspended pending review."
            - name: notify-soc
              type: call
              call: "msteams-soc.post-message"
              with:
                channel_id: "$secrets.security_teams_channel"
                text: "Security alert: Okta account {{okta_user_id}} suspended. ServiceNow: {{create-sec-incident.number}}"
  consumes:
    - type: http
      namespace: okta-suspend
      baseUri: "https://statefarm.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: user-lifecycle
          path: "/users/{{user_id}}/lifecycle/suspend"
          inputParameters:
            - name: user_id
              in: path
          operations:
            - name: suspend-user
              method: POST
    - type: http
      namespace: servicenow-sec
      baseUri: "https://statefarm.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-soc
      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: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Retrieves the current on-call schedule for the claims engineering team from PagerDuty, returning the primary and secondary on-call engineers.

naftiko: "0.5"
info:
  label: "PagerDuty Claims On-Call Lookup"
  description: "Retrieves the current on-call schedule for the claims engineering team from PagerDuty, returning the primary and secondary on-call engineers."
  tags:
    - engineering
    - pagerduty
    - claims
capability:
  exposes:
    - type: mcp
      namespace: oncall-ops
      port: 8080
      tools:
        - name: get-claims-oncall
          description: "Look up who is currently on call for the claims engineering team. Returns primary and secondary on-call engineers. Use when escalation contacts are needed."
          inputParameters:
            - name: schedule_id
              in: body
              type: string
              description: "The PagerDuty schedule ID for claims engineering."
          call: "pagerduty.get-oncall"
          with:
            schedule_id: "{{schedule_id}}"
          outputParameters:
            - name: primary_oncall
              type: string
              mapping: "$.oncalls[0].user.name"
            - name: primary_email
              type: string
              mapping: "$.oncalls[0].user.email"
            - name: secondary_oncall
              type: string
              mapping: "$.oncalls[1].user.name"
  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 billing status for a policy including outstanding balance, next payment due date, and payment history from the billing system.

naftiko: "0.5"
info:
  label: "Policy Billing Status Lookup"
  description: "Retrieves the current billing status for a policy including outstanding balance, next payment due date, and payment history from the billing system."
  tags:
    - insurance
    - policy
    - billing
    - finance
capability:
  exposes:
    - type: mcp
      namespace: billing-ops
      port: 8080
      tools:
        - name: get-billing-status
          description: "Look up billing status for a policy by policy number. Returns outstanding balance, next due date, payment method, and last payment details. Use when agents need to discuss billing with customers."
          inputParameters:
            - name: policy_number
              in: body
              type: string
              description: "The State Farm policy number."
          call: "billing-api.get-status"
          with:
            policy_number: "{{policy_number}}"
          outputParameters:
            - name: outstanding_balance
              type: number
              mapping: "$.outstandingBalance"
            - name: next_due_date
              type: string
              mapping: "$.nextDueDate"
            - name: payment_method
              type: string
              mapping: "$.paymentMethod"
            - name: last_payment_amount
              type: number
              mapping: "$.lastPayment.amount"
  consumes:
    - type: http
      namespace: billing-api
      baseUri: "https://api.statefarm.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

Processes a policy cancellation request by calculating the pro-rata refund, updating the policy status in Salesforce, scheduling the refund payment, and logging the cancellation in ServiceNow.

naftiko: "0.5"
info:
  label: "Policy Cancellation Processing"
  description: "Processes a policy cancellation request by calculating the pro-rata refund, updating the policy status in Salesforce, scheduling the refund payment, and logging the cancellation in ServiceNow."
  tags:
    - insurance
    - policy
    - salesforce
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: policy-cancel
      port: 8080
      tools:
        - name: process-cancellation
          description: "Process a policy cancellation. Calculates refund, updates status, schedules payment, and creates an audit record. Use when a policyholder or agent requests cancellation."
          inputParameters:
            - name: policy_number
              in: body
              type: string
              description: "The policy number to cancel."
            - name: cancellation_reason
              in: body
              type: string
              description: "Reason for cancellation."
            - name: effective_date
              in: body
              type: string
              description: "Cancellation effective date in ISO 8601 format."
          steps:
            - name: calculate-refund
              type: call
              call: "billing-api.calculate-prorata-refund"
              with:
                policy_number: "{{policy_number}}"
                effective_date: "{{effective_date}}"
            - name: update-policy-status
              type: call
              call: "salesforce.cancel-policy"
              with:
                policy_number: "{{policy_number}}"
                reason: "{{cancellation_reason}}"
                effective_date: "{{effective_date}}"
            - name: log-cancellation
              type: call
              call: "servicenow.create-case"
              with:
                short_description: "Policy cancellation: {{policy_number}}"
                description: "Reason: {{cancellation_reason}}. Effective: {{effective_date}}. Refund: ${{calculate-refund.refund_amount}}"
  consumes:
    - type: http
      namespace: billing-api
      baseUri: "https://api.statefarm.com/billing/v1"
      authentication:
        type: bearer
        token: "$secrets.billing_api_token"
      resources:
        - name: refunds
          path: "/refunds/calculate"
          operations:
            - name: calculate-prorata-refund
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://statefarm.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: policies
          path: "/sobjects/Policy__c"
          operations:
            - name: cancel-policy
              method: PATCH
    - type: http
      namespace: servicenow
      baseUri: "https://statefarm.service-now.com/api/now"
      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 a policy document from the document management system by policy number and document type, returning the document URL and metadata.

naftiko: "0.5"
info:
  label: "Policy Document Retrieval"
  description: "Retrieves a policy document from the document management system by policy number and document type, returning the document URL and metadata."
  tags:
    - insurance
    - policy
    - document-management
capability:
  exposes:
    - type: mcp
      namespace: document-ops
      port: 8080
      tools:
        - name: get-policy-document
          description: "Retrieve a policy document by policy number and document type (declaration, endorsement, certificate). Returns document URL and last modified date. Use when agents need to access policy documents."
          inputParameters:
            - name: policy_number
              in: body
              type: string
              description: "The State Farm policy number."
            - name: document_type
              in: body
              type: string
              description: "Type of document: declaration, endorsement, or certificate."
          call: "document-api.get-document"
          with:
            policy_number: "{{policy_number}}"
            document_type: "{{document_type}}"
          outputParameters:
            - name: document_url
              type: string
              mapping: "$.documentUrl"
            - name: last_modified
              type: string
              mapping: "$.lastModified"
            - name: version
              type: string
              mapping: "$.version"
  consumes:
    - type: http
      namespace: document-api
      baseUri: "https://api.statefarm.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-document
              method: GET

Processes a policy endorsement request by validating the change, updating the policy in Salesforce, recalculating the premium, and generating an updated declarations page.

naftiko: "0.5"
info:
  label: "Policy Endorsement Processing"
  description: "Processes a policy endorsement request by validating the change, updating the policy in Salesforce, recalculating the premium, and generating an updated declarations page."
  tags:
    - insurance
    - policy
    - salesforce
    - underwriting
capability:
  exposes:
    - type: mcp
      namespace: endorsement-ops
      port: 8080
      tools:
        - name: process-endorsement
          description: "Process a policy endorsement. Validates the change, updates the policy, recalculates premium, and generates new documents. Use when a policyholder requests coverage changes."
          inputParameters:
            - name: policy_number
              in: body
              type: string
              description: "The policy number to endorse."
            - name: endorsement_type
              in: body
              type: string
              description: "Type of endorsement: add-coverage, remove-coverage, change-limits, add-driver."
            - name: effective_date
              in: body
              type: string
              description: "Endorsement effective date in ISO 8601 format."
          steps:
            - name: validate-endorsement
              type: call
              call: "underwriting-engine.validate-endorsement"
              with:
                policy_number: "{{policy_number}}"
                endorsement_type: "{{endorsement_type}}"
            - name: update-policy
              type: call
              call: "salesforce.update-policy"
              with:
                policy_number: "{{policy_number}}"
                endorsement_type: "{{endorsement_type}}"
                effective_date: "{{effective_date}}"
            - name: recalculate-premium
              type: call
              call: "rating-engine.recalculate"
              with:
                policy_number: "{{policy_number}}"
            - name: generate-dec-page
              type: call
              call: "document-api.generate-declaration"
              with:
                policy_number: "{{policy_number}}"
  consumes:
    - type: http
      namespace: underwriting-engine
      baseUri: "https://api.statefarm.com/underwriting/v2"
      authentication:
        type: bearer
        token: "$secrets.underwriting_api_token"
      resources:
        - name: endorsements
          path: "/endorsements/validate"
          operations:
            - name: validate-endorsement
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://statefarm.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: policies
          path: "/sobjects/Policy__c"
          operations:
            - name: update-policy
              method: PATCH
    - type: http
      namespace: rating-engine
      baseUri: "https://api.statefarm.com/rating/v2"
      authentication:
        type: bearer
        token: "$secrets.rating_engine_token"
      resources:
        - name: recalculation
          path: "/recalculate"
          operations:
            - name: recalculate
              method: POST
    - type: http
      namespace: document-api
      baseUri: "https://api.statefarm.com/documents/v1"
      authentication:
        type: bearer
        token: "$secrets.document_api_token"
      resources:
        - name: declarations
          path: "/generate/declaration"
          operations:
            - name: generate-declaration
              method: POST

Identifies policies at risk of lapsing due to non-payment from Salesforce, triggers outreach campaigns via Marketo, and assigns follow-up tasks to agents in Jira.

naftiko: "0.5"
info:
  label: "Policy Lapse Prevention Outreach"
  description: "Identifies policies at risk of lapsing due to non-payment from Salesforce, triggers outreach campaigns via Marketo, and assigns follow-up tasks to agents in Jira."
  tags:
    - insurance
    - policy
    - salesforce
    - marketo
    - jira
capability:
  exposes:
    - type: mcp
      namespace: lapse-prevention
      port: 8080
      tools:
        - name: run-lapse-prevention
          description: "Identify at-risk policies and trigger retention outreach. Queries lapsing policies, sends campaigns, and creates agent tasks. Use for weekly retention runs."
          inputParameters:
            - name: days_until_lapse
              in: body
              type: integer
              description: "Number of days until policy lapse to target."
          steps:
            - name: get-at-risk-policies
              type: call
              call: "salesforce.query-lapsing-policies"
              with:
                days_until_lapse: "{{days_until_lapse}}"
            - name: trigger-campaign
              type: call
              call: "marketo.trigger-campaign"
              with:
                campaign_id: "$secrets.lapse_prevention_campaign_id"
                lead_list: "{{get-at-risk-policies.customer_ids}}"
            - name: create-agent-tasks
              type: call
              call: "jira.create-issue"
              with:
                project_key: "RETENTION"
                issuetype: "Task"
                summary: "Lapse prevention follow-up: {{get-at-risk-policies.count}} policies"
                description: "{{get-at-risk-policies.count}} policies within {{days_until_lapse}} days of lapsing. Campaign triggered. Agent follow-up required."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://statefarm.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: queries
          path: "/query"
          operations:
            - name: query-lapsing-policies
              method: GET
    - type: http
      namespace: marketo
      baseUri: "https://statefarm.mktorest.com/rest/v1"
      authentication:
        type: bearer
        token: "$secrets.marketo_token"
      resources:
        - name: campaigns
          path: "/campaigns/{{campaign_id}}/trigger.json"
          inputParameters:
            - name: campaign_id
              in: path
          operations:
            - name: trigger-campaign
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://statefarm.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 the current premium calculation breakdown for a given policy number from the actuarial rating engine, returning base rate, risk factors, and final premium.

naftiko: "0.5"
info:
  label: "Policy Premium Calculation Lookup"
  description: "Retrieves the current premium calculation breakdown for a given policy number from the actuarial rating engine, returning base rate, risk factors, and final premium."
  tags:
    - insurance
    - policy
    - actuarial
    - premium
capability:
  exposes:
    - type: mcp
      namespace: premium-ops
      port: 8080
      tools:
        - name: get-premium-breakdown
          description: "Look up premium calculation details for a State Farm policy by policy number. Returns base rate, applied risk factors, discounts, and final annual premium. Use when agents need to explain premium details to customers."
          inputParameters:
            - name: policy_number
              in: body
              type: string
              description: "The State Farm policy number to look up."
          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: discount_amount
              type: number
              mapping: "$.totalDiscount"
            - name: final_premium
              type: number
              mapping: "$.finalAnnualPremium"
  consumes:
    - type: http
      namespace: rating-engine
      baseUri: "https://api.statefarm.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

Generates an insurance quote by collecting risk factors, running the rating engine, and creating a quote record in Salesforce for the agent to present to the prospect.

naftiko: "0.5"
info:
  label: "Policy Quote Generation Workflow"
  description: "Generates an insurance quote by collecting risk factors, running the rating engine, and creating a quote record in Salesforce for the agent to present to the prospect."
  tags:
    - insurance
    - underwriting
    - policy
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: quote-ops
      port: 8080
      tools:
        - name: generate-quote
          description: "Generate an insurance quote for a prospect. Runs rating, applies discounts, and creates a Salesforce quote record. Use when an agent requests a new quote."
          inputParameters:
            - name: product_type
              in: body
              type: string
              description: "Product type: auto, homeowner, life, umbrella."
            - name: applicant_data
              in: body
              type: string
              description: "JSON string of applicant risk data."
          steps:
            - name: calculate-rate
              type: call
              call: "rating-engine.calculate-quote"
              with:
                product_type: "{{product_type}}"
                risk_data: "{{applicant_data}}"
            - name: create-quote
              type: call
              call: "salesforce.create-quote"
              with:
                product_type: "{{product_type}}"
                quoted_premium: "{{calculate-rate.annual_premium}}"
                coverage_options: "{{calculate-rate.coverage_options}}"
  consumes:
    - type: http
      namespace: rating-engine
      baseUri: "https://api.statefarm.com/rating/v2"
      authentication:
        type: bearer
        token: "$secrets.rating_engine_token"
      resources:
        - name: quotes
          path: "/quote"
          operations:
            - name: calculate-quote
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://statefarm.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

Processes a lapsed policy reinstatement request by verifying eligibility, calculating any back premium owed, reinstating the policy in Salesforce, and notifying the agent.

naftiko: "0.5"
info:
  label: "Policy Reinstatement Workflow"
  description: "Processes a lapsed policy reinstatement request by verifying eligibility, calculating any back premium owed, reinstating the policy in Salesforce, and notifying the agent."
  tags:
    - insurance
    - policy
    - salesforce
    - billing
capability:
  exposes:
    - type: mcp
      namespace: reinstatement-ops
      port: 8080
      tools:
        - name: reinstate-policy
          description: "Process a policy reinstatement. Checks eligibility, calculates back premium, reinstates in Salesforce, and notifies the agent. Use when a lapsed policyholder requests reinstatement."
          inputParameters:
            - name: policy_number
              in: body
              type: string
              description: "The lapsed policy number."
          steps:
            - name: check-eligibility
              type: call
              call: "underwriting-engine.check-reinstatement-eligibility"
              with:
                policy_number: "{{policy_number}}"
            - name: calculate-back-premium
              type: call
              call: "billing-api.calculate-back-premium"
              with:
                policy_number: "{{policy_number}}"
            - name: reinstate-policy
              type: call
              call: "salesforce.reinstate-policy"
              with:
                policy_number: "{{policy_number}}"
                back_premium: "{{calculate-back-premium.amount}}"
  consumes:
    - type: http
      namespace: underwriting-engine
      baseUri: "https://api.statefarm.com/underwriting/v2"
      authentication:
        type: bearer
        token: "$secrets.underwriting_api_token"
      resources:
        - name: reinstatement
          path: "/reinstatement/eligibility"
          operations:
            - name: check-reinstatement-eligibility
              method: POST
    - type: http
      namespace: billing-api
      baseUri: "https://api.statefarm.com/billing/v1"
      authentication:
        type: bearer
        token: "$secrets.billing_api_token"
      resources:
        - name: back-premium
          path: "/back-premium/calculate"
          operations:
            - name: calculate-back-premium
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://statefarm.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: policies
          path: "/sobjects/Policy__c"
          operations:
            - name: reinstate-policy
              method: PATCH

When a policy approaches renewal, pulls claims history from Snowflake, recalculates risk in the underwriting engine, updates the renewal offer in Salesforce, and notifies the agent via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Policy Renewal Underwriting Review"
  description: "When a policy approaches renewal, pulls claims history from Snowflake, recalculates risk in the underwriting engine, updates the renewal offer in Salesforce, and notifies the agent via Microsoft Teams."
  tags:
    - insurance
    - underwriting
    - policy
    - snowflake
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: renewal-review
      port: 8080
      tools:
        - name: process-renewal-review
          description: "Given a policy number approaching renewal, pull claims history, recalculate risk, update the renewal offer, and notify the servicing agent. Use during the 60-day pre-renewal window."
          inputParameters:
            - name: policy_number
              in: body
              type: string
              description: "The policy number up for renewal."
            - name: agent_email
              in: body
              type: string
              description: "Email of the servicing agent."
          steps:
            - name: get-claims-history
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT * FROM CLAIMS_DB.PUBLIC.CLAIMS WHERE policy_number = '{{policy_number}}' AND claim_date >= DATEADD(year, -3, CURRENT_DATE())"
            - name: recalculate-risk
              type: call
              call: "underwriting-engine.calculate-renewal-risk"
              with:
                policy_number: "{{policy_number}}"
                claims_count: "{{get-claims-history.row_count}}"
            - name: update-renewal-offer
              type: call
              call: "salesforce.update-renewal"
              with:
                policy_number: "{{policy_number}}"
                new_premium: "{{recalculate-risk.recommended_premium}}"
                risk_grade: "{{recalculate-risk.risk_grade}}"
            - name: notify-agent
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.agents_teams_channel"
                text: "Renewal review complete for {{policy_number}}. New risk grade: {{recalculate-risk.risk_grade}}. Recommended premium: ${{recalculate-risk.recommended_premium}}."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://statefarm.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: underwriting-engine
      baseUri: "https://api.statefarm.com/underwriting/v2"
      authentication:
        type: bearer
        token: "$secrets.underwriting_api_token"
      resources:
        - name: renewal-risk
          path: "/renewal-risk"
          operations:
            - name: calculate-renewal-risk
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://statefarm.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
    - 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: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

When a policyholder requests an address change, validates the new address, updates the policy record in Salesforce, triggers a premium recalculation for homeowner policies, and sends confirmation via email.

naftiko: "0.5"
info:
  label: "Policyholder Address Change Workflow"
  description: "When a policyholder requests an address change, validates the new address, updates the policy record in Salesforce, triggers a premium recalculation for homeowner policies, and sends confirmation via email."
  tags:
    - insurance
    - policy
    - salesforce
    - underwriting
capability:
  exposes:
    - type: mcp
      namespace: policy-servicing
      port: 8080
      tools:
        - name: process-address-change
          description: "Process a policyholder address change request. Validates the address, updates Salesforce, recalculates premium if applicable, and sends confirmation. Use for address change service requests."
          inputParameters:
            - name: policy_number
              in: body
              type: string
              description: "The policy number to update."
            - name: new_address
              in: body
              type: string
              description: "The new street address."
            - name: new_city
              in: body
              type: string
              description: "The new city."
            - name: new_state
              in: body
              type: string
              description: "The new two-letter state code."
            - name: new_zip
              in: body
              type: string
              description: "The new ZIP code."
          steps:
            - name: validate-address
              type: call
              call: "address-api.validate"
              with:
                street: "{{new_address}}"
                city: "{{new_city}}"
                state: "{{new_state}}"
                zip: "{{new_zip}}"
            - name: update-policy
              type: call
              call: "salesforce.update-policy-address"
              with:
                policy_number: "{{policy_number}}"
                address: "{{validate-address.standardized_address}}"
            - name: recalculate-premium
              type: call
              call: "rating-engine.recalculate"
              with:
                policy_number: "{{policy_number}}"
                new_zip: "{{new_zip}}"
  consumes:
    - type: http
      namespace: address-api
      baseUri: "https://api.statefarm.com/address/v1"
      authentication:
        type: bearer
        token: "$secrets.address_api_token"
      resources:
        - name: validation
          path: "/validate"
          operations:
            - name: validate
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://statefarm.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: policies
          path: "/sobjects/Policy__c"
          operations:
            - name: update-policy-address
              method: PATCH
    - type: http
      namespace: rating-engine
      baseUri: "https://api.statefarm.com/rating/v2"
      authentication:
        type: bearer
        token: "$secrets.rating_engine_token"
      resources:
        - name: recalculation
          path: "/recalculate"
          operations:
            - name: recalculate
              method: POST

Retrieves a policyholder's complete claims history from Snowflake, returning all claims with dates, types, amounts, and outcomes for use in underwriting and service interactions.

naftiko: "0.5"
info:
  label: "Policyholder Claims History Lookup"
  description: "Retrieves a policyholder's complete claims history from Snowflake, returning all claims with dates, types, amounts, and outcomes for use in underwriting and service interactions."
  tags:
    - insurance
    - claims
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: claims-history
      port: 8080
      tools:
        - name: get-claims-history
          description: "Look up a policyholder's claims history by customer ID. Returns all historical claims with dates, types, and outcomes. Use during underwriting review or customer service."
          inputParameters:
            - name: customer_id
              in: body
              type: string
              description: "The State Farm customer ID."
          call: "snowflake.query-claims-history"
          with:
            customer_id: "{{customer_id}}"
          outputParameters:
            - name: total_claims
              type: integer
              mapping: "$.totalClaims"
            - name: claims
              type: array
              mapping: "$.claims"
            - name: total_paid
              type: number
              mapping: "$.totalPaid"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://statefarm.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: query-claims-history
              method: POST

Retrieves the contact information on file for a policyholder including phone, email, and mailing address.

naftiko: "0.5"
info:
  label: "Policyholder Contact Info Lookup"
  description: "Retrieves the contact information on file for a policyholder including phone, email, and mailing address."
  tags:
    - insurance
    - policyholder
    - contact
capability:
  exposes:
    - type: mcp
      namespace: sf-customers
      port: 8080
      tools:
        - name: get-contact-info
          description: "Given a customer ID, return phone, email, and mailing address. Use when verifying policyholder contact details."
          inputParameters:
            - name: customer_id
              in: body
              type: string
              description: "The customer identifier."
          call: "sf-customers.get-contact-info"
          with:
            customer_id: "{{customer_id}}"
          outputParameters:
            - name: phone
              type: string
              mapping: "$.phone"
            - name: email
              type: string
              mapping: "$.email"
            - name: address
              type: string
              mapping: "$.mailing_address"
  consumes:
    - namespace: sf-customers
      type: http
      baseUri: "https://api.statefarm.com/v1/customers"
      authentication:
        type: bearer
        token: "$secrets.sf_customers_token"
      resources:
        - name: contact
          path: "/customers/{customer_id}/contact"
          inputParameters:
            - name: customer_id
              in: path
          operations:
            - name: get-contact-info
              method: GET

Retrieves the coverage limits for each coverage type on a policyholder's active policy.

naftiko: "0.5"
info:
  label: "Policyholder Coverage Limit Lookup"
  description: "Retrieves the coverage limits for each coverage type on a policyholder's active policy."
  tags:
    - insurance
    - policy
    - coverage
capability:
  exposes:
    - type: mcp
      namespace: sf-policies
      port: 8080
      tools:
        - name: get-coverage-limits
          description: "Given a policy ID, return coverage limits for all coverage types. Use when verifying what a policy covers."
          inputParameters:
            - name: policy_id
              in: body
              type: string
              description: "The policy identifier."
          call: "sf-policies.get-coverage-limits"
          with:
            policy_id: "{{policy_id}}"
          outputParameters:
            - name: coverages
              type: array
              mapping: "$.coverages"
            - name: total_limit
              type: number
              mapping: "$.total_limit"
  consumes:
    - namespace: sf-policies
      type: http
      baseUri: "https://api.statefarm.com/v1/policies"
      authentication:
        type: bearer
        token: "$secrets.sf_policies_token"
      resources:
        - name: coverage-limits
          path: "/policies/{policy_id}/coverage-limits"
          inputParameters:
            - name: policy_id
              in: path
          operations:
            - name: get-coverage-limits
              method: GET

Retrieves a consolidated coverage summary for a policyholder across all active policies from Salesforce, returning policy types, coverage limits, deductibles, and total premium.

naftiko: "0.5"
info:
  label: "Policyholder Coverage Summary Lookup"
  description: "Retrieves a consolidated coverage summary for a policyholder across all active policies from Salesforce, returning policy types, coverage limits, deductibles, and total premium."
  tags:
    - insurance
    - policy
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: coverage-ops
      port: 8080
      tools:
        - name: get-coverage-summary
          description: "Look up all active coverage for a policyholder by customer ID. Returns a summary of all policies with coverage limits, deductibles, and premiums. Use when agents need a holistic view of a customer's coverage."
          inputParameters:
            - name: customer_id
              in: body
              type: string
              description: "The State Farm customer ID."
          call: "salesforce.get-customer-policies"
          with:
            customer_id: "{{customer_id}}"
          outputParameters:
            - name: total_policies
              type: integer
              mapping: "$.totalSize"
            - name: policies
              type: array
              mapping: "$.records"
            - name: total_annual_premium
              type: number
              mapping: "$.totalAnnualPremium"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://statefarm.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: customer-policies
          path: "/query/?q=SELECT+Id,Policy_Number__c,Product_Type__c,Coverage_Limit__c,Deductible__c,Annual_Premium__c+FROM+Policy__c+WHERE+Customer__c='{{customer_id}}'+AND+Status__c='Active'"
          inputParameters:
            - name: customer_id
              in: path
          operations:
            - name: get-customer-policies
              method: GET

Retrieves the deductible amounts for all coverage types on a policyholder's active policy.

naftiko: "0.5"
info:
  label: "Policyholder Deductible Lookup"
  description: "Retrieves the deductible amounts for all coverage types on a policyholder's active policy."
  tags:
    - insurance
    - policy
    - deductible
capability:
  exposes:
    - type: mcp
      namespace: sf-policies
      port: 8080
      tools:
        - name: get-deductible
          description: "Given a policy ID, return deductible amounts for each coverage type. Use when a policyholder asks about their deductible."
          inputParameters:
            - name: policy_id
              in: body
              type: string
              description: "The policy identifier."
          call: "sf-policies.get-deductible"
          with:
            policy_id: "{{policy_id}}"
          outputParameters:
            - name: deductibles
              type: array
              mapping: "$.deductibles"
            - name: policy_type
              type: string
              mapping: "$.policy_type"
  consumes:
    - namespace: sf-policies
      type: http
      baseUri: "https://api.statefarm.com/v1/policies"
      authentication:
        type: bearer
        token: "$secrets.sf_policies_token"
      resources:
        - name: deductibles
          path: "/policies/{policy_id}/deductibles"
          inputParameters:
            - name: policy_id
              in: path
          operations:
            - name: get-deductible
              method: GET

Generates a digital insurance ID card for a policyholder by retrieving policy and vehicle data from Salesforce and creating the card document via the document generation service.

naftiko: "0.5"
info:
  label: "Policyholder Digital ID Card Generator"
  description: "Generates a digital insurance ID card for a policyholder by retrieving policy and vehicle data from Salesforce and creating the card document via the document generation service."
  tags:
    - insurance
    - policy
    - salesforce
    - document-management
capability:
  exposes:
    - type: mcp
      namespace: id-card-ops
      port: 8080
      tools:
        - name: generate-id-card
          description: "Generate a digital insurance ID card for a policy. Retrieves policy data and creates the card. Use when a policyholder requests a new ID card."
          inputParameters:
            - name: policy_number
              in: body
              type: string
              description: "The auto policy number."
          steps:
            - name: get-policy-data
              type: call
              call: "salesforce.get-policy"
              with:
                policy_number: "{{policy_number}}"
            - name: generate-card
              type: call
              call: "document-api.generate-id-card"
              with:
                policy_number: "{{policy_number}}"
                policyholder_name: "{{get-policy-data.PolicyHolder__r.Name}}"
                vehicle_info: "{{get-policy-data.Vehicle_Description__c}}"
                effective_date: "{{get-policy-data.Effective_Date__c}}"
                expiration_date: "{{get-policy-data.Expiration_Date__c}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://statefarm.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
    - type: http
      namespace: document-api
      baseUri: "https://api.statefarm.com/documents/v1"
      authentication:
        type: bearer
        token: "$secrets.document_api_token"
      resources:
        - name: id-cards
          path: "/generate/id-card"
          operations:
            - name: generate-id-card
              method: POST

Checks a policyholder's eligibility for available premium discounts such as safe driver, multi-policy, and good student.

naftiko: "0.5"
info:
  label: "Policyholder Discount Eligibility Check"
  description: "Checks a policyholder's eligibility for available premium discounts such as safe driver, multi-policy, and good student."
  tags:
    - insurance
    - policy
    - discounts
capability:
  exposes:
    - type: mcp
      namespace: sf-discounts
      port: 8080
      tools:
        - name: check-discount-eligibility
          description: "Given a policy ID, return eligible discounts and current discount percentage. Use when reviewing policyholder savings opportunities."
          inputParameters:
            - name: policy_id
              in: body
              type: string
              description: "The policy identifier."
          call: "sf-discounts.check-discount-eligibility"
          with:
            policy_id: "{{policy_id}}"
          outputParameters:
            - name: eligible_discounts
              type: array
              mapping: "$.eligible_discounts"
            - name: current_discount_pct
              type: number
              mapping: "$.current_discount_pct"
  consumes:
    - namespace: sf-discounts
      type: http
      baseUri: "https://api.statefarm.com/v1/discounts"
      authentication:
        type: bearer
        token: "$secrets.sf_discounts_token"
      resources:
        - name: eligibility
          path: "/policies/{policy_id}/discount-eligibility"
          inputParameters:
            - name: policy_id
              in: path
          operations:
            - name: check-discount-eligibility
              method: GET

Returns the recent premium payment history for a policyholder's account.

naftiko: "0.5"
info:
  label: "Policyholder Payment History Lookup"
  description: "Returns the recent premium payment history for a policyholder's account."
  tags:
    - insurance
    - policy
    - payments
capability:
  exposes:
    - type: mcp
      namespace: sf-billing
      port: 8080
      tools:
        - name: get-payment-history
          description: "Given an account ID, return recent premium payments. Use when reviewing policyholder billing history."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "The billing account ID."
          call: "sf-billing.get-payment-history"
          with:
            account_id: "{{account_id}}"
          outputParameters:
            - name: payments
              type: array
              mapping: "$.payments"
            - name: total_paid
              type: number
              mapping: "$.total_paid"
  consumes:
    - namespace: sf-billing
      type: http
      baseUri: "https://api.statefarm.com/v1/billing"
      authentication:
        type: bearer
        token: "$secrets.sf_billing_token"
      resources:
        - name: payments
          path: "/accounts/{account_id}/payments"
          inputParameters:
            - name: account_id
              in: path
          operations:
            - name: get-payment-history
              method: GET

Updates a policyholder's payment method in the billing system and confirms the change by sending a notification through the customer communications platform.

naftiko: "0.5"
info:
  label: "Policyholder Payment Method Update"
  description: "Updates a policyholder's payment method in the billing system and confirms the change by sending a notification through the customer communications platform."
  tags:
    - insurance
    - policy
    - billing
    - finance
capability:
  exposes:
    - type: mcp
      namespace: payment-ops
      port: 8080
      tools:
        - name: update-payment-method
          description: "Update the payment method for a policy. Validates new method and sends confirmation. Use when a policyholder requests a billing change."
          inputParameters:
            - name: policy_number
              in: body
              type: string
              description: "The policy number."
            - name: payment_method
              in: body
              type: string
              description: "New payment method: eft, credit-card, check."
          steps:
            - name: update-billing
              type: call
              call: "billing-api.update-payment-method"
              with:
                policy_number: "{{policy_number}}"
                method: "{{payment_method}}"
            - name: send-confirmation
              type: call
              call: "notification-api.send-notification"
              with:
                policy_number: "{{policy_number}}"
                template: "payment-method-updated"
                method: "{{payment_method}}"
  consumes:
    - type: http
      namespace: billing-api
      baseUri: "https://api.statefarm.com/billing/v1"
      authentication:
        type: bearer
        token: "$secrets.billing_api_token"
      resources:
        - name: payment-methods
          path: "/policies/{{policy_number}}/payment-method"
          inputParameters:
            - name: policy_number
              in: path
          operations:
            - name: update-payment-method
              method: PUT
    - type: http
      namespace: notification-api
      baseUri: "https://api.statefarm.com/notifications/v1"
      authentication:
        type: bearer
        token: "$secrets.notification_api_token"
      resources:
        - name: notifications
          path: "/send"
          operations:
            - name: send-notification
              method: POST

Triggers a Power BI dataset refresh for the State Farm actuarial and loss ratio dashboard and notifies the actuarial team in Microsoft Teams when the refresh completes.

naftiko: "0.5"
info:
  label: "Power BI Actuarial Dashboard Refresh"
  description: "Triggers a Power BI dataset refresh for the State Farm actuarial and loss ratio dashboard and notifies the actuarial team in Microsoft Teams when the refresh completes."
  tags:
    - finance
    - analytics
    - power-bi
    - microsoft-teams
    - insurance
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: actuarial-reporting
      port: 8080
      tools:
        - name: refresh-actuarial-dashboard
          description: "Given a Power BI workspace ID and dataset ID, trigger a dataset refresh for the State Farm actuarial dashboard and notify the actuarial team in Teams. Use at period close or before underwriting review meetings."
          inputParameters:
            - name: workspace_id
              in: body
              type: string
              description: "The Power BI workspace ID containing the actuarial 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-actuarial
              type: call
              call: "msteams-actuarial.post-message"
              with:
                channel_id: "$secrets.actuarial_teams_channel"
                text: "Actuarial dashboard refresh triggered. Dataset: {{dataset_id}} in workspace {{workspace_id}}."
  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-actuarial
      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: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Checks the latest refresh status for a Power BI dataset used in insurance analytics.

naftiko: "0.5"
info:
  label: "Power BI Report Refresh Status"
  description: "Checks the latest refresh status for a Power BI dataset used in insurance analytics."
  tags:
    - power-bi
    - analytics
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: powerbi
      port: 8080
      tools:
        - name: get-refresh-status
          description: "Given a dataset ID, return the latest refresh status and completion time. Use when verifying dashboard data freshness."
          inputParameters:
            - name: dataset_id
              in: body
              type: string
              description: "The Power BI dataset ID."
          call: "powerbi.get-refresh-status"
          with:
            dataset_id: "{{dataset_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.value[0].status"
            - name: end_time
              type: string
              mapping: "$.value[0].endTime"
  consumes:
    - namespace: powerbi
      type: http
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: refreshes
          path: "/datasets/{dataset_id}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: get-refresh-status
              method: GET

Checks the status of a scheduled or completed property inspection for an underwriting review.

naftiko: "0.5"
info:
  label: "Property Inspection Status Lookup"
  description: "Checks the status of a scheduled or completed property inspection for an underwriting review."
  tags:
    - insurance
    - property
    - inspections
capability:
  exposes:
    - type: mcp
      namespace: sf-inspections
      port: 8080
      tools:
        - name: get-inspection-status
          description: "Given an inspection ID, return the current status, inspector name, and scheduled date. Use when checking on a property inspection."
          inputParameters:
            - name: inspection_id
              in: body
              type: string
              description: "The inspection identifier."
          call: "sf-inspections.get-inspection-status"
          with:
            inspection_id: "{{inspection_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.status"
            - name: inspector
              type: string
              mapping: "$.inspector_name"
            - name: scheduled_date
              type: string
              mapping: "$.scheduled_date"
  consumes:
    - namespace: sf-inspections
      type: http
      baseUri: "https://api.statefarm.com/v1/inspections"
      authentication:
        type: bearer
        token: "$secrets.sf_inspections_token"
      resources:
        - name: status
          path: "/inspections/{inspection_id}/status"
          inputParameters:
            - name: inspection_id
              in: path
          operations:
            - name: get-inspection-status
              method: GET

Prepares and submits a rate filing to state regulators by compiling actuarial data from Snowflake, generating the filing document, and logging the submission in the compliance system.

naftiko: "0.5"
info:
  label: "Regulatory Rate Filing Submission"
  description: "Prepares and submits a rate filing to state regulators by compiling actuarial data from Snowflake, generating the filing document, and logging the submission in the compliance system."
  tags:
    - insurance
    - compliance
    - actuarial
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: rate-filing
      port: 8080
      tools:
        - name: submit-rate-filing
          description: "Prepare and submit a rate filing for a product and state. Compiles data, generates documents, and logs submission. Use when rate changes need regulatory approval."
          inputParameters:
            - name: product_type
              in: body
              type: string
              description: "Product type: auto, homeowner, life."
            - name: state_code
              in: body
              type: string
              description: "Two-letter state code."
            - name: rate_change_percentage
              in: body
              type: number
              description: "The proposed overall rate change percentage."
          steps:
            - name: compile-data
              type: call
              call: "snowflake.run-query"
              with:
                query: "CALL ACTUARIAL_DB.PROCEDURES.COMPILE_RATE_FILING_DATA('{{product_type}}', '{{state_code}}')"
            - name: generate-filing
              type: call
              call: "document-api.generate-rate-filing"
              with:
                product_type: "{{product_type}}"
                state_code: "{{state_code}}"
                rate_change: "{{rate_change_percentage}}"
            - name: log-submission
              type: call
              call: "compliance-api.log-filing"
              with:
                product_type: "{{product_type}}"
                state_code: "{{state_code}}"
                filing_id: "{{generate-filing.filing_id}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://statefarm.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: document-api
      baseUri: "https://api.statefarm.com/documents/v1"
      authentication:
        type: bearer
        token: "$secrets.document_api_token"
      resources:
        - name: filings
          path: "/generate/rate-filing"
          operations:
            - name: generate-rate-filing
              method: POST
    - type: http
      namespace: compliance-api
      baseUri: "https://api.statefarm.com/compliance/v1"
      authentication:
        type: bearer
        token: "$secrets.compliance_api_token"
      resources:
        - name: filings
          path: "/filings"
          operations:
            - name: log-filing
              method: POST

Generates a reinsurance treaty compliance report by querying ceded premium and loss data from Snowflake, validating against treaty terms, and publishing the report to Confluence for review.

naftiko: "0.5"
info:
  label: "Reinsurance Treaty Compliance Report"
  description: "Generates a reinsurance treaty compliance report by querying ceded premium and loss data from Snowflake, validating against treaty terms, and publishing the report to Confluence for review."
  tags:
    - insurance
    - actuarial
    - compliance
    - snowflake
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: reinsurance-ops
      port: 8080
      tools:
        - name: generate-treaty-compliance-report
          description: "Generate a reinsurance treaty compliance report for a specified treaty and period. Queries loss and premium data, validates against terms, and publishes to Confluence. Use for quarterly treaty reviews."
          inputParameters:
            - name: treaty_id
              in: body
              type: string
              description: "The reinsurance treaty identifier."
            - name: reporting_period
              in: body
              type: string
              description: "Reporting period in YYYY-Q format."
          steps:
            - name: query-treaty-data
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT * FROM REINSURANCE_DB.PUBLIC.TREATY_SUMMARY WHERE treaty_id = '{{treaty_id}}' AND period = '{{reporting_period}}'"
            - name: validate-compliance
              type: call
              call: "reinsurance-api.validate-treaty"
              with:
                treaty_id: "{{treaty_id}}"
                ceded_premium: "{{query-treaty-data.ceded_premium}}"
                ceded_losses: "{{query-treaty-data.ceded_losses}}"
            - name: publish-report
              type: call
              call: "confluence.create-page"
              with:
                space_key: "REINSURANCE"
                title: "Treaty {{treaty_id}} Compliance - {{reporting_period}}"
                body: "Status: {{validate-compliance.status}}. Ceded premium: ${{query-treaty-data.ceded_premium}}. Ceded losses: ${{query-treaty-data.ceded_losses}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://statefarm.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: reinsurance-api
      baseUri: "https://api.statefarm.com/reinsurance/v1"
      authentication:
        type: bearer
        token: "$secrets.reinsurance_api_token"
      resources:
        - name: validation
          path: "/treaties/validate"
          operations:
            - name: validate-treaty
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://statefarm.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

When a new business account is added to Salesforce for State Farm's commercial insurance arm, enriches the record with ZoomInfo firmographic data to support underwriting and commercial sales.

naftiko: "0.5"
info:
  label: "Salesforce Account Enrichment with ZoomInfo"
  description: "When a new business account is added to Salesforce for State Farm's commercial insurance arm, enriches the record with ZoomInfo firmographic data to support underwriting and commercial sales."
  tags:
    - sales
    - crm
    - salesforce
    - zoominfo
    - insurance
    - commercial
capability:
  exposes:
    - type: mcp
      namespace: account-enrichment
      port: 8080
      tools:
        - name: enrich-commercial-account
          description: "Given a Salesforce account ID for a commercial insurance prospect, look up the company in ZoomInfo and update the Salesforce record with employee count, industry, revenue, and SIC code. Use when new commercial accounts are added for underwriting qualification."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "The Salesforce account ID for the commercial prospect (18-character ID)."
          steps:
            - name: get-account
              type: call
              call: "salesforce-acct.get-account"
              with:
                account_id: "{{account_id}}"
            - name: enrich-with-zoominfo
              type: call
              call: "zoominfo.search-company"
              with:
                company_name: "{{get-account.Name}}"
                domain: "{{get-account.Website}}"
            - name: update-account
              type: call
              call: "salesforce-acct-update.update-account"
              with:
                account_id: "{{account_id}}"
                employee_count: "{{enrich-with-zoominfo.employeeCount}}"
                industry: "{{enrich-with-zoominfo.industry}}"
                revenue: "{{enrich-with-zoominfo.revenue}}"
  consumes:
    - type: http
      namespace: salesforce-acct
      baseUri: "https://statefarm.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{account_id}}"
          inputParameters:
            - name: account_id
              in: path
          operations:
            - name: get-account
              method: GET
    - type: http
      namespace: zoominfo
      baseUri: "https://api.zoominfo.com/search"
      authentication:
        type: bearer
        token: "$secrets.zoominfo_token"
      resources:
        - name: companies
          path: "/company"
          operations:
            - name: search-company
              method: POST
    - type: http
      namespace: salesforce-acct-update
      baseUri: "https://statefarm.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: update-account
              method: PATCH

Retrieves a summary of an agent's book of business from Salesforce, including total policies, premium volume, retention rate, and product mix breakdown.

naftiko: "0.5"
info:
  label: "Salesforce Agent Book of Business Lookup"
  description: "Retrieves a summary of an agent's book of business from Salesforce, including total policies, premium volume, retention rate, and product mix breakdown."
  tags:
    - insurance
    - agent
    - salesforce
    - sales
capability:
  exposes:
    - type: mcp
      namespace: book-ops
      port: 8080
      tools:
        - name: get-book-of-business
          description: "Look up an agent's book of business summary from Salesforce. Returns policy count, premium volume, and retention metrics. Use for agent performance reviews."
          inputParameters:
            - name: agent_id
              in: body
              type: string
              description: "The State Farm agent identifier."
          call: "salesforce.get-agent-book"
          with:
            agent_id: "{{agent_id}}"
          outputParameters:
            - name: total_policies
              type: integer
              mapping: "$.totalPolicies"
            - name: total_premium
              type: number
              mapping: "$.totalPremium"
            - name: retention_rate
              type: number
              mapping: "$.retentionRate"
            - name: product_mix
              type: object
              mapping: "$.productMix"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://statefarm.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: agent-book
          path: "/query/?q=SELECT+Product_Type__c,COUNT(Id),SUM(Annual_Premium__c)+FROM+Policy__c+WHERE+Agent__c='{{agent_id}}'+AND+Status__c='Active'+GROUP+BY+Product_Type__c"
          inputParameters:
            - name: agent_id
              in: path
          operations:
            - name: get-agent-book
              method: GET

Returns the current lead count and pipeline value for a State Farm agent from Salesforce.

naftiko: "0.5"
info:
  label: "Salesforce Agent Lead Count Lookup"
  description: "Returns the current lead count and pipeline value for a State Farm agent from Salesforce."
  tags:
    - salesforce
    - agent
    - sales
capability:
  exposes:
    - type: mcp
      namespace: salesforce
      port: 8080
      tools:
        - name: get-agent-leads
          description: "Given an agent's Salesforce ID, return their lead count. Use when reviewing agent pipeline performance."
          inputParameters:
            - name: agent_sf_id
              in: body
              type: string
              description: "The agent's Salesforce user ID."
          call: "salesforce.get-agent-leads"
          with:
            agent_sf_id: "{{agent_sf_id}}"
          outputParameters:
            - name: lead_count
              type: number
              mapping: "$.totalSize"
            - name: records
              type: array
              mapping: "$.records"
  consumes:
    - namespace: salesforce
      type: http
      baseUri: "https://statefarm.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: query
          path: "/query"
          operations:
            - name: get-agent-leads
              method: GET

Retrieves weekly sales and policy metrics for State Farm exclusive agents from Salesforce and posts a performance summary digest to the regional sales manager's Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Salesforce Agent Performance Dashboard Summary"
  description: "Retrieves weekly sales and policy metrics for State Farm exclusive agents from Salesforce and posts a performance summary digest to the regional sales manager's Microsoft Teams channel."
  tags:
    - sales
    - crm
    - salesforce
    - reporting
    - microsoft-teams
    - insurance
capability:
  exposes:
    - type: mcp
      namespace: agent-performance
      port: 8080
      tools:
        - name: digest-agent-performance
          description: "Given a Salesforce agent ID and reporting week, retrieve new policies written, renewal rates, and open opportunity counts. Post a performance digest to the regional manager's Teams channel. Use for weekly agent performance reviews."
          inputParameters:
            - name: agent_id
              in: body
              type: string
              description: "The Salesforce user ID for the State Farm exclusive agent."
            - name: reporting_week
              in: body
              type: string
              description: "The reporting week start date in ISO 8601 format."
          steps:
            - name: get-agent-metrics
              type: call
              call: "salesforce-perf.get-agent-metrics"
              with:
                agent_id: "{{agent_id}}"
                reporting_week: "{{reporting_week}}"
            - name: get-agent-profile
              type: call
              call: "salesforce-profile.get-user"
              with:
                user_id: "{{agent_id}}"
            - name: post-performance-digest
              type: call
              call: "msteams-regional.post-message"
              with:
                channel_id: "$secrets.regional_manager_teams_channel"
                text: "Agent performance week of {{reporting_week}} | Agent: {{get-agent-profile.Name}} | New Policies: {{get-agent-metrics.newPolicies}} | Open Opps: {{get-agent-metrics.openOpportunities}}"
  consumes:
    - type: http
      namespace: salesforce-perf
      baseUri: "https://statefarm.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: agent-metrics
          path: "/query"
          inputParameters:
            - name: agent_id
              in: query
            - name: reporting_week
              in: query
          operations:
            - name: get-agent-metrics
              method: GET
    - type: http
      namespace: salesforce-profile
      baseUri: "https://statefarm.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: users
          path: "/sobjects/User/{{user_id}}"
          inputParameters:
            - name: user_id
              in: path
          operations:
            - name: get-user
              method: GET
    - type: http
      namespace: msteams-regional
      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: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Tracks open insurance sales opportunities in Salesforce for the State Farm exclusive agent network, providing pipeline summaries by agent and region to sales leadership.

naftiko: "0.5"
info:
  label: "Salesforce Agent Pipeline Opportunity Tracker"
  description: "Tracks open insurance sales opportunities in Salesforce for the State Farm exclusive agent network, providing pipeline summaries by agent and region to sales leadership."
  tags:
    - sales
    - crm
    - salesforce
    - reporting
    - insurance
capability:
  exposes:
    - type: mcp
      namespace: agent-pipeline
      port: 8080
      tools:
        - name: get-agent-pipeline
          description: "Given a Salesforce agent ID, retrieve all open opportunities in the agent's pipeline including product type, policy stage, and expected close date. Use for agent performance reviews and pipeline reporting."
          inputParameters:
            - name: agent_id
              in: body
              type: string
              description: "The Salesforce user ID for the State Farm exclusive agent."
          call: "salesforce.query-opportunities"
          with:
            agent_id: "{{agent_id}}"
          outputParameters:
            - name: total_opportunities
              type: number
              mapping: "$.totalSize"
            - name: opportunities
              type: array
              mapping: "$.records"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://statefarm.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/query"
          inputParameters:
            - name: agent_id
              in: query
          operations:
            - name: query-opportunities
              method: GET

Analyzes a customer's existing coverage in Salesforce, identifies cross-sell opportunities for missing product lines, and creates opportunities for the servicing agent to pursue.

naftiko: "0.5"
info:
  label: "Salesforce Cross-Sell Opportunity Creator"
  description: "Analyzes a customer's existing coverage in Salesforce, identifies cross-sell opportunities for missing product lines, and creates opportunities for the servicing agent to pursue."
  tags:
    - insurance
    - policy
    - salesforce
    - sales
capability:
  exposes:
    - type: mcp
      namespace: cross-sell
      port: 8080
      tools:
        - name: identify-cross-sell
          description: "Analyze a customer's coverage and create cross-sell opportunities. Checks existing policies and identifies gaps. Use during customer reviews or renewal conversations."
          inputParameters:
            - name: customer_id
              in: body
              type: string
              description: "The Salesforce customer ID."
          steps:
            - name: get-existing-policies
              type: call
              call: "salesforce.get-customer-policies"
              with:
                customer_id: "{{customer_id}}"
            - name: analyze-gaps
              type: call
              call: "analytics-api.identify-coverage-gaps"
              with:
                customer_id: "{{customer_id}}"
                existing_products: "{{get-existing-policies.product_types}}"
            - name: create-opportunity
              type: call
              call: "salesforce.create-opportunity"
              with:
                customer_id: "{{customer_id}}"
                opportunity_name: "Cross-sell: {{analyze-gaps.recommended_product}}"
                product_type: "{{analyze-gaps.recommended_product}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://statefarm.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: policies
          path: "/query"
          operations:
            - name: get-customer-policies
              method: GET
        - name: opportunities
          path: "/sobjects/Opportunity"
          operations:
            - name: create-opportunity
              method: POST
    - type: http
      namespace: analytics-api
      baseUri: "https://api.statefarm.com/analytics/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_api_token"
      resources:
        - name: coverage-gaps
          path: "/coverage-gaps"
          operations:
            - name: identify-coverage-gaps
              method: POST

After a claim is closed in ServiceNow, looks up the policyholder in Salesforce and triggers an NPS satisfaction survey via Marketo email, then logs the survey sent event back to Salesforce.

naftiko: "0.5"
info:
  label: "Salesforce Customer NPS Survey Trigger"
  description: "After a claim is closed in ServiceNow, looks up the policyholder in Salesforce and triggers an NPS satisfaction survey via Marketo email, then logs the survey sent event back to Salesforce."
  tags:
    - customer-experience
    - crm
    - salesforce
    - marketo
    - servicenow
    - insurance
capability:
  exposes:
    - type: mcp
      namespace: nps-ops
      port: 8080
      tools:
        - name: trigger-claim-nps-survey
          description: "Given a closed ServiceNow claim case number, look up the policyholder in Salesforce and trigger an NPS satisfaction email via Marketo. Log the outreach back to the Salesforce customer record. Use 24 hours after a claim is resolved."
          inputParameters:
            - name: case_number
              in: body
              type: string
              description: "The ServiceNow case number for the closed claim."
            - name: marketo_program_id
              in: body
              type: string
              description: "The Marketo program ID for the NPS survey campaign."
          steps:
            - name: get-case
              type: call
              call: "servicenow-nps.get-case"
              with:
                number: "{{case_number}}"
            - name: get-policyholder
              type: call
              call: "salesforce-nps.get-contact"
              with:
                policy_number: "{{get-case.policy_number}}"
            - name: trigger-marketo-email
              type: call
              call: "marketo.trigger-campaign"
              with:
                program_id: "{{marketo_program_id}}"
                email: "{{get-policyholder.Email}}"
                first_name: "{{get-policyholder.FirstName}}"
                claim_number: "{{case_number}}"
            - name: log-outreach
              type: call
              call: "salesforce-nps-log.create-task"
              with:
                who_id: "{{get-policyholder.Id}}"
                subject: "NPS survey sent for claim {{case_number}}"
                status: "Completed"
  consumes:
    - type: http
      namespace: servicenow-nps
      baseUri: "https://statefarm.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: cases
          path: "/table/sn_customerservice_case"
          inputParameters:
            - name: number
              in: query
          operations:
            - name: get-case
              method: GET
    - type: http
      namespace: salesforce-nps
      baseUri: "https://statefarm.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: contacts
          path: "/query"
          inputParameters:
            - name: policy_number
              in: query
          operations:
            - name: get-contact
              method: GET
    - type: http
      namespace: marketo
      baseUri: "https://statefarm.mktorest.com/rest/v1"
      authentication:
        type: bearer
        token: "$secrets.marketo_token"
      resources:
        - name: campaigns
          path: "/campaigns/{{program_id}}/trigger.json"
          inputParameters:
            - name: program_id
              in: path
          operations:
            - name: trigger-campaign
              method: POST
    - type: http
      namespace: salesforce-nps-log
      baseUri: "https://statefarm.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: tasks
          path: "/sobjects/Task"
          operations:
            - name: create-task
              method: POST

Queries Salesforce for policies with upcoming renewal dates within the next 30 days, and sends renewal reminder alerts to the assigned agent's Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Salesforce Customer Policy Renewal Alert"
  description: "Queries Salesforce for policies with upcoming renewal dates within the next 30 days, and sends renewal reminder alerts to the assigned agent's Microsoft Teams channel."
  tags:
    - insurance
    - crm
    - salesforce
    - microsoft-teams
    - renewal
capability:
  exposes:
    - type: mcp
      namespace: policy-renewals
      port: 8080
      tools:
        - name: alert-upcoming-renewals
          description: "Given a Salesforce region or agent ID, retrieve policies expiring within the next 30 days and post renewal alerts to the agent's Teams channel. Use for daily or weekly renewal pipeline management."
          inputParameters:
            - name: agent_id
              in: body
              type: string
              description: "The Salesforce user ID for the agent to check renewals for."
            - name: days_ahead
              in: body
              type: integer
              description: "Number of days ahead to look for expiring policies (e.g., 30)."
          steps:
            - name: get-expiring-policies
              type: call
              call: "salesforce-renewal.query-expiring"
              with:
                agent_id: "{{agent_id}}"
                days_ahead: "{{days_ahead}}"
            - name: post-renewal-alert
              type: call
              call: "msteams-renewal.post-message"
              with:
                channel_id: "$secrets.agent_teams_channel"
                text: "Renewal alert: {{get-expiring-policies.totalSize}} policies expiring in {{days_ahead}} days. Agent ID: {{agent_id}}"
  consumes:
    - type: http
      namespace: salesforce-renewal
      baseUri: "https://statefarm.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: policies
          path: "/query"
          inputParameters:
            - name: agent_id
              in: query
            - name: days_ahead
              in: query
          operations:
            - name: query-expiring
              method: GET
    - type: http
      namespace: msteams-renewal
      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: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Reconciles vendor invoices in SAP against purchase orders, identifies discrepancies, and creates ServiceNow tickets for the accounts payable team to resolve mismatches.

naftiko: "0.5"
info:
  label: "SAP Invoice Reconciliation Workflow"
  description: "Reconciles vendor invoices in SAP against purchase orders, identifies discrepancies, and creates ServiceNow tickets for the accounts payable team to resolve mismatches."
  tags:
    - finance
    - sap
    - servicenow
    - procurement
capability:
  exposes:
    - type: mcp
      namespace: invoice-ops
      port: 8080
      tools:
        - name: reconcile-invoices
          description: "Reconcile vendor invoices against purchase orders in SAP. Identifies mismatches and creates tickets. Use during monthly AP close."
          inputParameters:
            - name: vendor_id
              in: body
              type: string
              description: "The SAP vendor identifier."
            - name: period
              in: body
              type: string
              description: "Billing period in YYYY-MM format."
          steps:
            - name: get-invoices
              type: call
              call: "sap.get-vendor-invoices"
              with:
                vendor_id: "{{vendor_id}}"
                period: "{{period}}"
            - name: get-purchase-orders
              type: call
              call: "sap.get-vendor-pos"
              with:
                vendor_id: "{{vendor_id}}"
                period: "{{period}}"
            - name: create-discrepancy-ticket
              type: call
              call: "servicenow.create-case"
              with:
                short_description: "Invoice reconciliation: Vendor {{vendor_id}} - {{period}}"
                description: "Invoices: {{get-invoices.count}}. POs: {{get-purchase-orders.count}}. Review required."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://statefarm-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-vendor-invoices
              method: GET
        - name: purchase-orders
          path: "/purchase-orders"
          operations:
            - name: get-vendor-pos
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://statefarm.service-now.com/api/now"
      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 the current status and assigned team for a ServiceNow IT incident at State Farm.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Status Check"
  description: "Retrieves the current status and assigned team for a ServiceNow IT incident at State Farm."
  tags:
    - servicenow
    - it
    - incident-management
capability:
  exposes:
    - type: mcp
      namespace: servicenow
      port: 8080
      tools:
        - name: get-incident-status
          description: "Given an incident ID, return its state, assignee, and priority. Use when checking on IT incidents."
          inputParameters:
            - name: incident_id
              in: body
              type: string
              description: "The ServiceNow incident ID."
          call: "servicenow.get-incident-status"
          with:
            incident_id: "{{incident_id}}"
          outputParameters:
            - name: state
              type: string
              mapping: "$.state"
            - name: assigned_to
              type: string
              mapping: "$.assigned_to.display_value"
            - name: priority
              type: string
              mapping: "$.priority"
  consumes:
    - namespace: servicenow
      type: http
      baseUri: "https://statefarm.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident/{incident_id}"
          inputParameters:
            - name: incident_id
              in: path
          operations:
            - name: get-incident-status
              method: GET

Creates a ServiceNow change request for planned changes to State Farm's policy administration or claims processing systems and notifies the CAB in Microsoft Teams.

naftiko: "0.5"
info:
  label: "ServiceNow IT Change Request for Insurance Systems"
  description: "Creates a ServiceNow change request for planned changes to State Farm's policy administration or claims processing systems and notifies the CAB in Microsoft Teams."
  tags:
    - itsm
    - change-management
    - servicenow
    - microsoft-teams
    - insurance
capability:
  exposes:
    - type: mcp
      namespace: change-mgmt
      port: 8080
      tools:
        - name: create-insurance-change-request
          description: "Given a change summary, affected insurance system, risk level, and assignment group, create a ServiceNow change request and notify the Change Advisory Board in Teams. Use for planned changes to claims, policy, or agent systems."
          inputParameters:
            - name: short_description
              in: body
              type: string
              description: "Brief description of the planned change."
            - name: affected_system
              in: body
              type: string
              description: "The insurance system affected (e.g., claims-processing, policy-admin, agent-portal)."
            - name: risk
              in: body
              type: string
              description: "Risk level: low, medium, or high."
            - name: assignment_group
              in: body
              type: string
              description: "The ServiceNow group responsible for the change."
          steps:
            - name: create-cr
              type: call
              call: "servicenow-cr.create-change"
              with:
                short_description: "{{short_description}} ({{affected_system}})"
                risk: "{{risk}}"
                assignment_group: "{{assignment_group}}"
            - name: notify-cab
              type: call
              call: "msteams-cab.post-message"
              with:
                channel_id: "$secrets.cab_teams_channel"
                text: "Change request {{create-cr.number}} submitted for {{affected_system}}. Risk: {{risk}}. {{short_description}}"
  consumes:
    - type: http
      namespace: servicenow-cr
      baseUri: "https://statefarm.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: change-requests
          path: "/table/change_request"
          operations:
            - name: create-change
              method: POST
    - type: http
      namespace: msteams-cab
      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: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Searches the ServiceNow knowledge base for articles matching a query, returning relevant articles for claims adjusters and customer service representatives.

naftiko: "0.5"
info:
  label: "ServiceNow Knowledge Article Search"
  description: "Searches the ServiceNow knowledge base for articles matching a query, returning relevant articles for claims adjusters and customer service representatives."
  tags:
    - insurance
    - servicenow
    - knowledge-management
capability:
  exposes:
    - type: mcp
      namespace: kb-ops
      port: 8080
      tools:
        - name: search-knowledge-base
          description: "Search ServiceNow knowledge base for relevant articles. Returns matching articles with titles and summaries. Use when agents need procedural guidance."
          inputParameters:
            - name: query
              in: body
              type: string
              description: "Search query text."
            - name: category
              in: body
              type: string
              description: "Article category: claims, policy, billing, underwriting."
          call: "servicenow.search-articles"
          with:
            query: "{{query}}"
            category: "{{category}}"
          outputParameters:
            - name: articles
              type: array
              mapping: "$.result"
            - name: total_results
              type: integer
              mapping: "$.totalResults"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://statefarm.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: knowledge
          path: "/table/kb_knowledge"
          operations:
            - name: search-articles
              method: GET

When a critical P1 ServiceNow incident is raised for State Farm's core insurance systems, triggers a PagerDuty alert for the on-call engineer and posts an alert to the IT operations Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "ServiceNow P1 Incident to PagerDuty Escalation"
  description: "When a critical P1 ServiceNow incident is raised for State Farm's core insurance systems, triggers a PagerDuty alert for the on-call engineer and posts an alert to the IT operations Microsoft Teams channel."
  tags:
    - itsm
    - incident-response
    - servicenow
    - pagerduty
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: incident-response
      port: 8080
      tools:
        - name: escalate-p1-incident
          description: "Given a ServiceNow P1 incident number and affected system, trigger a PagerDuty alert for the on-call team and notify the IT ops channel in Teams. Use when critical insurance processing systems are impacted."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "The ServiceNow incident number (e.g., INC0012345)."
            - name: affected_system
              in: body
              type: string
              description: "The core system affected (e.g., claims-processing, policy-admin, agent-portal)."
          steps:
            - name: get-incident
              type: call
              call: "servicenow-p1.get-incident"
              with:
                number: "{{incident_number}}"
            - name: trigger-pagerduty
              type: call
              call: "pagerduty.trigger-incident"
              with:
                service_id: "$secrets.pagerduty_service_id"
                summary: "P1 Incident {{incident_number}}: {{affected_system}} impacted"
                severity: "critical"
            - name: notify-ops
              type: call
              call: "msteams-ops.post-message"
              with:
                channel_id: "$secrets.it_ops_teams_channel"
                text: "P1 Incident {{incident_number}} | System: {{affected_system}} | PagerDuty triggered | Desc: {{get-incident.short_description}}"
  consumes:
    - type: http
      namespace: servicenow-p1
      baseUri: "https://statefarm.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          inputParameters:
            - name: number
              in: query
          operations:
            - name: get-incident
              method: GET
    - 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: trigger-incident
              method: POST
    - type: http
      namespace: msteams-ops
      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: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Runs data quality checks on claims data in Snowflake, identifies anomalies and missing fields, and creates Jira tickets for the data engineering team when quality thresholds are breached.

naftiko: "0.5"
info:
  label: "Snowflake Claims Data Quality Monitor"
  description: "Runs data quality checks on claims data in Snowflake, identifies anomalies and missing fields, and creates Jira tickets for the data engineering team when quality thresholds are breached."
  tags:
    - insurance
    - claims
    - data
    - snowflake
    - jira
capability:
  exposes:
    - type: mcp
      namespace: data-quality
      port: 8080
      tools:
        - name: check-claims-data-quality
          description: "Run data quality checks on claims data for a given date range. Creates Jira tickets for identified issues. Use for daily data quality monitoring."
          inputParameters:
            - name: check_date
              in: body
              type: string
              description: "The date to check data quality for in ISO 8601 format."
          steps:
            - name: run-quality-checks
              type: call
              call: "snowflake.run-query"
              with:
                query: "CALL CLAIMS_DB.PROCEDURES.RUN_DATA_QUALITY_CHECKS('{{check_date}}')"
            - name: create-ticket
              type: call
              call: "jira.create-issue"
              with:
                project_key: "DATA"
                issuetype: "Bug"
                summary: "Claims data quality issues detected for {{check_date}}"
                description: "Quality check results: {{run-quality-checks.summary}}. Failed checks: {{run-quality-checks.failed_count}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://statefarm.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://statefarm.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 the calculated customer lifetime value score from the Snowflake analytics warehouse for a given customer, including retention probability and revenue projection.

naftiko: "0.5"
info:
  label: "Snowflake Customer Lifetime Value Lookup"
  description: "Retrieves the calculated customer lifetime value score from the Snowflake analytics warehouse for a given customer, including retention probability and revenue projection."
  tags:
    - insurance
    - analytics
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: clv-ops
      port: 8080
      tools:
        - name: get-customer-ltv
          description: "Look up customer lifetime value from Snowflake analytics. Returns CLV score, retention probability, and projected revenue. Use for retention and cross-sell prioritization."
          inputParameters:
            - name: customer_id
              in: body
              type: string
              description: "The State Farm customer ID."
          call: "snowflake.query-clv"
          with:
            customer_id: "{{customer_id}}"
          outputParameters:
            - name: ltv_score
              type: number
              mapping: "$.ltvScore"
            - name: retention_probability
              type: number
              mapping: "$.retentionProbability"
            - name: projected_annual_revenue
              type: number
              mapping: "$.projectedAnnualRevenue"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://statefarm.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: query-clv
              method: POST

Monitors Snowflake pipeline jobs for State Farm's actuarial and underwriting analytics, detects failures, and opens Jira tickets for the data engineering team.

naftiko: "0.5"
info:
  label: "Snowflake Insurance Analytics Pipeline Health Check"
  description: "Monitors Snowflake pipeline jobs for State Farm's actuarial and underwriting analytics, detects failures, and opens Jira tickets for the data engineering team."
  tags:
    - data
    - analytics
    - snowflake
    - jira
    - monitoring
    - insurance
capability:
  exposes:
    - type: mcp
      namespace: analytics-ops
      port: 8080
      tools:
        - name: check-analytics-pipeline-health
          description: "Check Snowflake task history for failed analytics pipeline tasks in the specified database over the last N hours. Create a Jira ticket if critical failures are detected. Use for monitoring actuarial and underwriting data pipelines."
          inputParameters:
            - name: database
              in: body
              type: string
              description: "The Snowflake database to check (e.g., SF_ACTUARIAL_ANALYTICS)."
            - name: lookback_hours
              in: body
              type: integer
              description: "Number of hours to look back for task failures."
          steps:
            - name: get-task-failures
              type: call
              call: "snowflake.get-task-history"
              with:
                database: "{{database}}"
                lookback_hours: "{{lookback_hours}}"
            - name: create-ticket
              type: call
              call: "jira-data.create-issue"
              with:
                project_key: "DATA"
                issuetype: "Bug"
                summary: "Analytics pipeline failure in {{database}}"
                description: "Snowflake task failures detected over last {{lookback_hours}} hours in {{database}}."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://statefarm.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
    - type: http
      namespace: jira-data
      baseUri: "https://statefarm.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

Generates an underwriting profitability report from Snowflake data by product line and state, calculating combined ratios and publishing results to Power BI.

naftiko: "0.5"
info:
  label: "Snowflake Underwriting Profitability Report"
  description: "Generates an underwriting profitability report from Snowflake data by product line and state, calculating combined ratios and publishing results to Power BI."
  tags:
    - insurance
    - underwriting
    - actuarial
    - snowflake
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: uw-profitability
      port: 8080
      tools:
        - name: generate-profitability-report
          description: "Generate underwriting profitability report for a product line and period. Queries Snowflake and refreshes Power BI. Use for quarterly business reviews."
          inputParameters:
            - name: product_line
              in: body
              type: string
              description: "Product line: personal-auto, homeowner, commercial."
            - name: reporting_period
              in: body
              type: string
              description: "Period in YYYY-Q format."
          steps:
            - name: query-profitability
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT state, earned_premium, incurred_losses, expenses, combined_ratio FROM UNDERWRITING_DB.PUBLIC.PROFITABILITY WHERE product_line = '{{product_line}}' AND period = '{{reporting_period}}'"
            - name: refresh-dashboard
              type: call
              call: "powerbi.refresh-dataset"
              with:
                group_id: "$secrets.powerbi_uw_group"
                dataset_id: "$secrets.powerbi_profitability_dataset"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://statefarm.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-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-dataset
              method: POST

Queries Splunk for recent security events matching a specific source or host pattern.

naftiko: "0.5"
info:
  label: "Splunk Security Event Lookup"
  description: "Queries Splunk for recent security events matching a specific source or host pattern."
  tags:
    - splunk
    - security
    - monitoring
capability:
  exposes:
    - type: mcp
      namespace: splunk
      port: 8080
      tools:
        - name: search-events
          description: "Given a search query, return matching security events from Splunk. Use when investigating security incidents."
          inputParameters:
            - name: search_query
              in: body
              type: string
              description: "The Splunk search query."
          call: "splunk.search-events"
          with:
            search_query: "{{search_query}}"
          outputParameters:
            - name: events
              type: array
              mapping: "$.results"
            - name: count
              type: number
              mapping: "$.results.length"
  consumes:
    - namespace: splunk
      type: http
      baseUri: "https://statefarm-splunk.com:8089/services"
      authentication:
        type: bearer
        token: "$secrets.splunk_token"
      resources:
        - name: search
          path: "/search/jobs"
          operations:
            - name: search-events
              method: POST

Retrieves a policyholder's telematics driving score from the Drive Safe & Save program, returning overall score, mileage, braking events, and discount eligibility.

naftiko: "0.5"
info:
  label: "Telematics Driving Score Lookup"
  description: "Retrieves a policyholder's telematics driving score from the Drive Safe & Save program, returning overall score, mileage, braking events, and discount eligibility."
  tags:
    - insurance
    - auto
    - telematics
capability:
  exposes:
    - type: mcp
      namespace: telematics-ops
      port: 8080
      tools:
        - name: get-driving-score
          description: "Look up the telematics driving score for a policyholder. Returns overall score, mileage driven, hard braking count, and discount percentage. Use when agents discuss Drive Safe & Save discounts."
          inputParameters:
            - name: policy_number
              in: body
              type: string
              description: "The auto policy number enrolled in telematics."
          call: "telematics-api.get-score"
          with:
            policy_number: "{{policy_number}}"
          outputParameters:
            - name: overall_score
              type: number
              mapping: "$.overallScore"
            - name: miles_driven
              type: number
              mapping: "$.milesDriven"
            - name: hard_braking_events
              type: integer
              mapping: "$.hardBrakingEvents"
            - name: discount_percentage
              type: number
              mapping: "$.discountPercentage"
  consumes:
    - type: http
      namespace: telematics-api
      baseUri: "https://api.statefarm.com/telematics/v1"
      authentication:
        type: bearer
        token: "$secrets.telematics_api_token"
      resources:
        - name: scores
          path: "/policies/{{policy_number}}/score"
          inputParameters:
            - name: policy_number
              in: path
          operations:
            - name: get-score
              method: GET

Provisions cloud infrastructure for claims processing workloads via Terraform Cloud, validates the plan, and notifies the platform team via Microsoft Teams when provisioning completes.

naftiko: "0.5"
info:
  label: "Terraform Claims Infrastructure Provisioning"
  description: "Provisions cloud infrastructure for claims processing workloads via Terraform Cloud, validates the plan, and notifies the platform team via Microsoft Teams when provisioning completes."
  tags:
    - engineering
    - terraform
    - microsoft-azure
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: infra-ops
      port: 8080
      tools:
        - name: provision-claims-infra
          description: "Provision claims infrastructure via Terraform Cloud. Creates a run, monitors progress, and notifies the team. Use for new environment provisioning."
          inputParameters:
            - name: workspace_name
              in: body
              type: string
              description: "The Terraform Cloud workspace name."
            - name: environment
              in: body
              type: string
              description: "Target environment: dev, staging, production."
          steps:
            - name: create-run
              type: call
              call: "terraform.create-run"
              with:
                workspace_name: "{{workspace_name}}"
                message: "Claims infra provisioning for {{environment}}"
            - name: notify-platform
              type: call
              call: "msteams.post-message"
              with:
                channel_id: "$secrets.platform_teams_channel"
                text: "Terraform run created for {{workspace_name}} ({{environment}}). Run ID: {{create-run.run_id}}. Status: {{create-run.status}}"
  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: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Conducts a vendor risk assessment by pulling vendor data from SAP Ariba, running security scoring, and creating a risk assessment record in ServiceNow with findings.

naftiko: "0.5"
info:
  label: "Third-Party Vendor Risk Assessment"
  description: "Conducts a vendor risk assessment by pulling vendor data from SAP Ariba, running security scoring, and creating a risk assessment record in ServiceNow with findings."
  tags:
    - insurance
    - compliance
    - sap-ariba
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: vendor-risk
      port: 8080
      tools:
        - name: assess-vendor-risk
          description: "Run a risk assessment for a third-party vendor. Pulls vendor profile, scores risk, and creates an assessment record. Use during vendor onboarding or annual review."
          inputParameters:
            - name: vendor_id
              in: body
              type: string
              description: "The SAP Ariba vendor identifier."
            - name: assessment_type
              in: body
              type: string
              description: "Type: initial, annual, or triggered."
          steps:
            - name: get-vendor-profile
              type: call
              call: "sap-ariba.get-vendor"
              with:
                vendor_id: "{{vendor_id}}"
            - name: score-risk
              type: call
              call: "risk-scoring-api.score-vendor"
              with:
                vendor_name: "{{get-vendor-profile.name}}"
                vendor_category: "{{get-vendor-profile.category}}"
                assessment_type: "{{assessment_type}}"
            - name: create-assessment
              type: call
              call: "servicenow.create-record"
              with:
                table: "u_vendor_risk_assessment"
                vendor_id: "{{vendor_id}}"
                risk_score: "{{score-risk.overall_score}}"
                risk_level: "{{score-risk.risk_level}}"
  consumes:
    - type: http
      namespace: sap-ariba
      baseUri: "https://openapi.ariba.com/api/supplier-management/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_ariba_token"
      resources:
        - name: vendors
          path: "/suppliers/{{vendor_id}}"
          inputParameters:
            - name: vendor_id
              in: path
          operations:
            - name: get-vendor
              method: GET
    - type: http
      namespace: risk-scoring-api
      baseUri: "https://api.statefarm.com/risk/v1"
      authentication:
        type: bearer
        token: "$secrets.risk_scoring_token"
      resources:
        - name: vendor-scoring
          path: "/vendors/score"
          operations:
            - name: score-vendor
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://statefarm.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: records
          path: "/table/{{table}}"
          inputParameters:
            - name: table
              in: path
          operations:
            - name: create-record
              method: POST

Checks the current underwriting appetite for a specific product, state, and risk class, returning whether new business is being accepted and any restrictions in place.

naftiko: "0.5"
info:
  label: "Underwriting Appetite Check Lookup"
  description: "Checks the current underwriting appetite for a specific product, state, and risk class, returning whether new business is being accepted and any restrictions in place."
  tags:
    - insurance
    - underwriting
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: appetite-ops
      port: 8080
      tools:
        - name: check-underwriting-appetite
          description: "Check if a product, state, and risk class combination is within current underwriting appetite. Returns acceptance status and any restrictions. Use before quoting new business."
          inputParameters:
            - name: product_type
              in: body
              type: string
              description: "Product type: auto, homeowner, life, umbrella."
            - name: state_code
              in: body
              type: string
              description: "Two-letter state code."
            - name: risk_class
              in: body
              type: string
              description: "Risk classification: preferred, standard, substandard."
          call: "underwriting-api.check-appetite"
          with:
            product_type: "{{product_type}}"
            state_code: "{{state_code}}"
            risk_class: "{{risk_class}}"
          outputParameters:
            - name: is_accepting
              type: boolean
              mapping: "$.isAccepting"
            - name: restrictions
              type: array
              mapping: "$.restrictions"
            - name: effective_date
              type: string
              mapping: "$.effectiveDate"
  consumes:
    - type: http
      namespace: underwriting-api
      baseUri: "https://api.statefarm.com/underwriting/v2"
      authentication:
        type: bearer
        token: "$secrets.underwriting_api_token"
      resources:
        - name: appetite
          path: "/appetite"
          operations:
            - name: check-appetite
              method: GET

Validates a policy application against current underwriting guidelines stored in Confluence, logs the compliance result, and flags exceptions for senior underwriter review in Jira.

naftiko: "0.5"
info:
  label: "Underwriting Guideline Compliance Check"
  description: "Validates a policy application against current underwriting guidelines stored in Confluence, logs the compliance result, and flags exceptions for senior underwriter review in Jira."
  tags:
    - insurance
    - underwriting
    - compliance
    - confluence
    - jira
capability:
  exposes:
    - type: mcp
      namespace: uw-compliance
      port: 8080
      tools:
        - name: check-uw-guidelines
          description: "Validate a policy application against underwriting guidelines. Retrieves current guidelines, checks compliance, and creates a Jira ticket for any exceptions. Use during application review."
          inputParameters:
            - name: application_id
              in: body
              type: string
              description: "The policy application ID to validate."
            - name: product_type
              in: body
              type: string
              description: "Product type being underwritten."
          steps:
            - name: get-guidelines
              type: call
              call: "confluence.get-page"
              with:
                space_key: "UNDERWRITING"
                title: "Guidelines - {{product_type}}"
            - name: run-compliance-check
              type: call
              call: "underwriting-engine.check-compliance"
              with:
                application_id: "{{application_id}}"
                guidelines_version: "{{get-guidelines.version}}"
            - name: create-exception-ticket
              type: call
              call: "jira.create-issue"
              with:
                project_key: "UW"
                issuetype: "Task"
                summary: "UW exception review: Application {{application_id}}"
                description: "Application {{application_id}} requires senior review. Exceptions: {{run-compliance-check.exceptions}}"
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://statefarm.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: get-page
              method: GET
    - type: http
      namespace: underwriting-engine
      baseUri: "https://api.statefarm.com/underwriting/v2"
      authentication:
        type: bearer
        token: "$secrets.underwriting_api_token"
      resources:
        - name: compliance
          path: "/compliance-check"
          operations:
            - name: check-compliance
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://statefarm.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

Runs a property hazard assessment for homeowner underwriting by checking flood zones, wildfire risk, and crime data for the property location, then logging results in the underwriting system.

naftiko: "0.5"
info:
  label: "Underwriting Property Hazard Check"
  description: "Runs a property hazard assessment for homeowner underwriting by checking flood zones, wildfire risk, and crime data for the property location, then logging results in the underwriting system."
  tags:
    - insurance
    - underwriting
    - homeowner
capability:
  exposes:
    - type: mcp
      namespace: hazard-ops
      port: 8080
      tools:
        - name: check-property-hazards
          description: "Assess property hazards for underwriting. Checks flood, wildfire, and crime risk. Logs results for the underwriter. Use during homeowner application review."
          inputParameters:
            - name: application_id
              in: body
              type: string
              description: "The policy application ID."
            - name: address
              in: body
              type: string
              description: "Full property address."
            - name: zip_code
              in: body
              type: string
              description: "Property ZIP code."
          steps:
            - name: check-flood-zone
              type: call
              call: "hazard-api.check-flood"
              with:
                address: "{{address}}"
                zip_code: "{{zip_code}}"
            - name: check-wildfire-risk
              type: call
              call: "hazard-api.check-wildfire"
              with:
                zip_code: "{{zip_code}}"
            - name: log-results
              type: call
              call: "underwriting-engine.log-hazard-assessment"
              with:
                application_id: "{{application_id}}"
                flood_zone: "{{check-flood-zone.zone}}"
                wildfire_score: "{{check-wildfire-risk.risk_score}}"
  consumes:
    - type: http
      namespace: hazard-api
      baseUri: "https://api.statefarm.com/hazards/v1"
      authentication:
        type: bearer
        token: "$secrets.hazard_api_token"
      resources:
        - name: flood
          path: "/flood-zones"
          operations:
            - name: check-flood
              method: GET
        - name: wildfire
          path: "/wildfire-risk"
          operations:
            - name: check-wildfire
              method: GET
    - type: http
      namespace: underwriting-engine
      baseUri: "https://api.statefarm.com/underwriting/v2"
      authentication:
        type: bearer
        token: "$secrets.underwriting_api_token"
      resources:
        - name: hazards
          path: "/hazard-assessments"
          operations:
            - name: log-hazard-assessment
              method: POST

Retrieves the underwriting risk assessment score for a policy application from the risk scoring API, returning overall risk grade, component scores, and recommended action.

naftiko: "0.5"
info:
  label: "Underwriting Risk Score Lookup"
  description: "Retrieves the underwriting risk assessment score for a policy application from the risk scoring API, returning overall risk grade, component scores, and recommended action."
  tags:
    - insurance
    - underwriting
    - risk
capability:
  exposes:
    - type: mcp
      namespace: underwriting-ops
      port: 8080
      tools:
        - name: get-risk-score
          description: "Look up the underwriting risk score for a policy application by application ID. Returns risk grade, individual component scores, and recommended underwriting action. Use during policy review."
          inputParameters:
            - name: application_id
              in: body
              type: string
              description: "The policy application ID to score."
          call: "risk-engine.get-score"
          with:
            application_id: "{{application_id}}"
          outputParameters:
            - name: risk_grade
              type: string
              mapping: "$.riskGrade"
            - name: overall_score
              type: number
              mapping: "$.overallScore"
            - name: recommended_action
              type: string
              mapping: "$.recommendedAction"
  consumes:
    - type: http
      namespace: risk-engine
      baseUri: "https://api.statefarm.com/underwriting/v2"
      authentication:
        type: bearer
        token: "$secrets.underwriting_api_token"
      resources:
        - name: risk-scores
          path: "/applications/{{application_id}}/risk-score"
          inputParameters:
            - name: application_id
              in: path
          operations:
            - name: get-score
              method: GET

Retrieves vehicle details from the VIN database for underwriting and claims processing.

naftiko: "0.5"
info:
  label: "Vehicle VIN Lookup"
  description: "Retrieves vehicle details from the VIN database for underwriting and claims processing."
  tags:
    - insurance
    - auto
    - vehicle
capability:
  exposes:
    - type: mcp
      namespace: sf-vehicles
      port: 8080
      tools:
        - name: get-vehicle-by-vin
          description: "Given a VIN, return vehicle make, model, year, and valuation. Use when processing auto claims or new policy applications."
          inputParameters:
            - name: vin
              in: body
              type: string
              description: "The vehicle identification number."
          call: "sf-vehicles.get-vehicle-by-vin"
          with:
            vin: "{{vin}}"
          outputParameters:
            - name: make
              type: string
              mapping: "$.make"
            - name: model
              type: string
              mapping: "$.model"
            - name: year
              type: number
              mapping: "$.year"
            - name: valuation
              type: number
              mapping: "$.valuation"
  consumes:
    - namespace: sf-vehicles
      type: http
      baseUri: "https://api.statefarm.com/v1/vehicles"
      authentication:
        type: bearer
        token: "$secrets.sf_vehicles_token"
      resources:
        - name: vin
          path: "/vin/{vin}"
          inputParameters:
            - name: vin
              in: path
          operations:
            - name: get-vehicle-by-vin
              method: GET

Retrieves active weather alerts for a geographic area from the National Weather Service integration.

naftiko: "0.5"
info:
  label: "Weather Alert Lookup"
  description: "Retrieves active weather alerts for a geographic area from the National Weather Service integration."
  tags:
    - insurance
    - weather
    - catastrophe
capability:
  exposes:
    - type: mcp
      namespace: nws
      port: 8080
      tools:
        - name: get-weather-alerts
          description: "Given a state code, return active weather alerts. Use when assessing catastrophe exposure for a region."
          inputParameters:
            - name: state_code
              in: body
              type: string
              description: "The two-letter state code."
          call: "nws.get-weather-alerts"
          with:
            state_code: "{{state_code}}"
          outputParameters:
            - name: alerts
              type: array
              mapping: "$.features"
            - name: count
              type: number
              mapping: "$.features.length"
  consumes:
    - namespace: nws
      type: http
      baseUri: "https://api.weather.gov"
      authentication:
        type: bearer
        token: "$secrets.nws_token"
      resources:
        - name: alerts
          path: "/alerts/active"
          operations:
            - name: get-weather-alerts
              method: GET

When a severe weather event is forecasted, queries policy exposure data from Snowflake for the affected region, calculates potential losses, and generates an exposure report in Power BI.

naftiko: "0.5"
info:
  label: "Weather Event Exposure Analysis"
  description: "When a severe weather event is forecasted, queries policy exposure data from Snowflake for the affected region, calculates potential losses, and generates an exposure report in Power BI."
  tags:
    - insurance
    - actuarial
    - catastrophe
    - snowflake
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: weather-exposure
      port: 8080
      tools:
        - name: analyze-weather-exposure
          description: "Analyze policy exposure for a forecasted weather event. Queries exposure data and generates a report. Use when severe weather is forecasted."
          inputParameters:
            - name: event_type
              in: body
              type: string
              description: "Weather event type: hurricane, tornado, hail, flood."
            - name: affected_zip_codes
              in: body
              type: string
              description: "Comma-separated ZIP codes in the forecast area."
          steps:
            - name: query-exposure
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT lob, COUNT(*) as policy_count, SUM(total_insured_value) as tiv FROM POLICY_DB.PUBLIC.ACTIVE_POLICIES WHERE zip_code IN ('{{affected_zip_codes}}') GROUP BY lob"
            - name: refresh-exposure-dashboard
              type: call
              call: "powerbi.refresh-dataset"
              with:
                group_id: "$secrets.powerbi_cat_group"
                dataset_id: "$secrets.powerbi_exposure_dataset"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://statefarm.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-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-dataset
              method: POST

Retrieves employee benefits eligibility information from Workday, including current enrolled plans, eligible plans, and open enrollment status.

naftiko: "0.5"
info:
  label: "Workday Benefits Eligibility Lookup"
  description: "Retrieves employee benefits eligibility information from Workday, including current enrolled plans, eligible plans, and open enrollment status."
  tags:
    - hr
    - workday
    - benefits
capability:
  exposes:
    - type: mcp
      namespace: benefits-ops
      port: 8080
      tools:
        - name: get-benefits-eligibility
          description: "Look up an employee's benefits eligibility in Workday. Returns current plans, eligible options, and enrollment status. Use when employees inquire about benefits."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday employee ID."
          call: "workday.get-benefits"
          with:
            employee_id: "{{employee_id}}"
          outputParameters:
            - name: enrolled_plans
              type: array
              mapping: "$.enrolledPlans"
            - name: eligible_plans
              type: array
              mapping: "$.eligiblePlans"
            - name: enrollment_status
              type: string
              mapping: "$.enrollmentStatus"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/statefarm"
      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

Assigns mandatory compliance and insurance licensing training to State Farm employees and agents in Workday Learning based on their role and license requirements, then sends a Teams reminder with the training deadline.

naftiko: "0.5"
info:
  label: "Workday Compliance Training Assignment"
  description: "Assigns mandatory compliance and insurance licensing training to State Farm employees and agents in Workday Learning based on their role and license requirements, then sends a Teams reminder with the training deadline."
  tags:
    - hr
    - learning
    - workday
    - compliance
    - microsoft-teams
    - insurance
capability:
  exposes:
    - type: mcp
      namespace: compliance-training
      port: 8080
      tools:
        - name: assign-compliance-training
          description: "Given a Workday worker ID, course ID, and due date, assign mandatory compliance training in Workday Learning and send a Teams reminder to the employee. Use for regulatory compliance, insurance licensing, and annual training rollouts."
          inputParameters:
            - name: worker_id
              in: body
              type: string
              description: "The Workday worker ID for the employee or agent."
            - name: course_id
              in: body
              type: string
              description: "The Workday Learning course ID to assign."
            - name: due_date
              in: body
              type: string
              description: "The training completion deadline in ISO 8601 format."
          steps:
            - name: get-worker
              type: call
              call: "workday-lms.get-worker"
              with:
                worker_id: "{{worker_id}}"
            - name: assign-course
              type: call
              call: "workday-lms-assign.assign-learning"
              with:
                worker_id: "{{worker_id}}"
                course_id: "{{course_id}}"
                due_date: "{{due_date}}"
            - name: notify-worker
              type: call
              call: "msteams-training.post-message"
              with:
                channel_id: "$secrets.hr_teams_channel"
                text: "Compliance training assigned to {{get-worker.firstName}} {{get-worker.lastName}}: Course {{course_id}} due by {{due_date}}."
  consumes:
    - type: http
      namespace: workday-lms
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: workday-lms-assign
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: learning-assignments
          path: "/learningEnrollments"
          operations:
            - name: assign-learning
              method: POST
    - type: http
      namespace: msteams-training
      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: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

When an employee or agent termination is processed in Workday, disables their Microsoft 365 account, suspends Okta SSO access, and notifies HR and IT via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Workday Employee Offboarding Orchestrator"
  description: "When an employee or agent termination is processed in Workday, disables their Microsoft 365 account, suspends Okta SSO access, and notifies HR and IT via Microsoft Teams."
  tags:
    - hr
    - offboarding
    - workday
    - okta
    - microsoft-365
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-offboarding
      port: 8080
      tools:
        - name: trigger-offboarding
          description: "Given a Workday worker ID and termination date, disable the Microsoft 365 account, suspend Okta access, and notify HR and IT in Teams. Use when an agent or employee termination is confirmed in Workday."
          inputParameters:
            - name: worker_id
              in: body
              type: string
              description: "The Workday worker ID for the departing employee or agent."
            - name: termination_date
              in: body
              type: string
              description: "The effective termination date in ISO 8601 format."
          steps:
            - name: get-worker
              type: call
              call: "workday-offboard.get-worker"
              with:
                worker_id: "{{worker_id}}"
            - name: disable-m365
              type: call
              call: "msgraph-offboard.disable-user"
              with:
                user_id: "{{get-worker.email}}"
            - name: suspend-okta
              type: call
              call: "okta-offboard.suspend-user"
              with:
                email: "{{get-worker.email}}"
            - name: notify-hr-it
              type: call
              call: "msteams-offboard.post-message"
              with:
                channel_id: "$secrets.hr_teams_channel"
                text: "Offboarding complete for {{get-worker.firstName}} {{get-worker.lastName}}. M365 and Okta access revoked as of {{termination_date}}."
  consumes:
    - type: http
      namespace: workday-offboard
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: msgraph-offboard
      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-offboard
      baseUri: "https://statefarm.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: user-lifecycle
          path: "/users/{{user_id}}/lifecycle/suspend"
          inputParameters:
            - name: user_id
              in: path
          operations:
            - name: suspend-user
              method: POST
    - type: http
      namespace: msteams-offboard
      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: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Retrieves current headcount by department and cost center from Workday and publishes a structured snapshot to the finance team's Microsoft Teams channel for workforce planning and budget review.

naftiko: "0.5"
info:
  label: "Workday Headcount Snapshot for Finance"
  description: "Retrieves current headcount by department and cost center from Workday and publishes a structured snapshot to the finance team's Microsoft Teams channel for workforce planning and budget review."
  tags:
    - hr
    - finance
    - workday
    - reporting
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-analytics
      port: 8080
      tools:
        - name: get-headcount-snapshot
          description: "Return current headcount grouped by department and cost center from Workday and post the summary to the finance Teams channel. Use for quarterly workforce planning, budget reviews, and headcount reporting to leadership."
          inputParameters:
            - name: company_code
              in: body
              type: string
              description: "The Workday company code to filter headcount by (e.g., State Farm Mutual)."
          steps:
            - name: get-headcount
              type: call
              call: "workday-hc.get-workers"
              with:
                company_code: "{{company_code}}"
            - name: post-snapshot
              type: call
              call: "msteams-hc.post-message"
              with:
                channel_id: "$secrets.finance_teams_channel"
                text: "Headcount snapshot for {{company_code}}: {{get-headcount.totalCount}} active employees across {{get-headcount.departmentCount}} departments."
  consumes:
    - type: http
      namespace: workday-hc
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers"
          inputParameters:
            - name: company_code
              in: query
          operations:
            - name: get-workers
              method: GET
    - type: http
      namespace: msteams-hc
      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: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

At payroll period close, retrieves headcount and total compensation data from Workday and publishes a period close summary to the finance team's Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Workday Payroll Period Close Report"
  description: "At payroll period close, retrieves headcount and total compensation data from Workday and publishes a period close summary to the finance team's Microsoft Teams channel."
  tags:
    - hr
    - finance
    - payroll
    - workday
    - microsoft-teams
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: payroll-close
      port: 8080
      tools:
        - name: publish-payroll-period-report
          description: "Given a Workday payroll period ID and company code, retrieve period headcount and total compensation and post a close summary to the finance Teams channel. Use at the end of each State Farm payroll period."
          inputParameters:
            - name: period_id
              in: body
              type: string
              description: "The Workday payroll period ID."
            - name: company_code
              in: body
              type: string
              description: "The Workday company code (e.g., State Farm Mutual)."
          steps:
            - name: get-payroll-data
              type: call
              call: "workday-payroll.get-payroll-results"
              with:
                period_id: "{{period_id}}"
                company_code: "{{company_code}}"
            - name: post-close-summary
              type: call
              call: "msteams-finance.post-message"
              with:
                channel_id: "$secrets.finance_teams_channel"
                text: "Payroll period {{period_id}} closed for {{company_code}}. Headcount: {{get-payroll-data.headcount}}. Total compensation: {{get-payroll-data.totalCompensation}}"
  consumes:
    - type: http
      namespace: workday-payroll
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: payroll-results
          path: "/payrollResults"
          inputParameters:
            - name: period_id
              in: query
            - name: company_code
              in: query
          operations:
            - name: get-payroll-results
              method: GET
    - type: http
      namespace: msteams-finance
      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: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Retrieves an employee's current time off balances from Workday, including vacation, sick, and personal days available.

naftiko: "0.5"
info:
  label: "Workday Time Off Balance Lookup"
  description: "Retrieves an employee's current time off balances from Workday, including vacation, sick, and personal days available."
  tags:
    - hr
    - workday
capability:
  exposes:
    - type: mcp
      namespace: time-off-ops
      port: 8080
      tools:
        - name: get-time-off-balance
          description: "Look up current time off balances for an employee in Workday. Returns vacation, sick, and personal day balances. Use when employees inquire about available time off."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday employee ID."
          call: "workday.get-time-off-balance"
          with:
            employee_id: "{{employee_id}}"
          outputParameters:
            - name: vacation_hours
              type: number
              mapping: "$.vacationBalance"
            - name: sick_hours
              type: number
              mapping: "$.sickBalance"
            - name: personal_hours
              type: number
              mapping: "$.personalBalance"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/statefarm"
      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-time-off-balance
              method: GET

Enriches a prospect record in Salesforce with firmographic and contact data from ZoomInfo, improving lead quality for commercial insurance agents.

naftiko: "0.5"
info:
  label: "ZoomInfo Prospect Enrichment"
  description: "Enriches a prospect record in Salesforce with firmographic and contact data from ZoomInfo, improving lead quality for commercial insurance agents."
  tags:
    - insurance
    - sales
    - zoominfo
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: enrichment-ops
      port: 8080
      tools:
        - name: enrich-prospect
          description: "Enrich a Salesforce prospect with ZoomInfo data. Pulls company and contact info and updates the lead record. Use for commercial insurance lead enrichment."
          inputParameters:
            - name: lead_id
              in: body
              type: string
              description: "The Salesforce lead ID."
            - name: company_name
              in: body
              type: string
              description: "Company name to search in ZoomInfo."
          steps:
            - name: get-company-data
              type: call
              call: "zoominfo.search-company"
              with:
                company_name: "{{company_name}}"
            - name: update-lead
              type: call
              call: "salesforce.update-lead"
              with:
                lead_id: "{{lead_id}}"
                industry: "{{get-company-data.industry}}"
                employee_count: "{{get-company-data.employeeCount}}"
                revenue: "{{get-company-data.revenue}}"
  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-company
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://statefarm.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