Zurich Insurance Capabilities
Naftiko 0.5 capability definitions for Zurich Insurance - 100 capabilities showing integration workflows and service orchestrations.
Runs IBNR model in Snowflake and publishes results to Power BI.
naftiko: "0.5"
info:
label: "Actuarial IBNR Reserve Estimation"
description: "Runs IBNR model in Snowflake and publishes results to Power BI."
tags:
- insurance
- actuarial
- claims
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: ibnr-ops
port: 8080
tools:
- name: estimate-ibnr
description: "Estimate IBNR reserves."
inputParameters:
- name: lob
in: body
type: string
description: "LOB."
- name: year
in: body
type: integer
description: "Accident year."
steps:
- name: model
type: call
call: "snowflake.query"
with:
query: "CALL ESTIMATE_IBNR('{{lob}}',{{year}})"
- name: refresh
type: call
call: "powerbi.refresh"
with:
group_id: "$secrets.pbi_actuarial"
dataset_id: "$secrets.pbi_ibnr"
consumes:
- type: http
namespace: snowflake
baseUri: "https://zurich.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/groups/{{group_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: group_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh
method: POST
Queries Snowflake for loss and premium data and refreshes Power BI dashboard.
naftiko: "0.5"
info:
label: "Actuarial Loss Ratio Dashboard Sync"
description: "Queries Snowflake for loss and premium data and refreshes Power BI dashboard."
tags:
- insurance
- actuarial
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: lossratio-ops
port: 8080
tools:
- name: sync-ratios
description: "Sync loss ratios."
inputParameters:
- name: lob
in: body
type: string
description: "LOB."
- name: period
in: body
type: string
description: "YYYY-MM."
steps:
- name: query
type: call
call: "snowflake.query"
with:
query: "SELECT SUM(loss),SUM(premium) FROM LOSS_TRIANGLE WHERE lob='{{lob}}'"
- name: refresh
type: call
call: "powerbi.refresh"
with:
group_id: "$secrets.pbi_actuarial"
dataset_id: "$secrets.pbi_lossratio"
consumes:
- type: http
namespace: snowflake
baseUri: "https://zurich.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/groups/{{group_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: group_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh
method: POST
Retrieves mortality rate data for age, gender, and table version for life insurance pricing.
naftiko: "0.5"
info:
label: "Actuarial Mortality Table Lookup"
description: "Retrieves mortality rate data for age, gender, and table version for life insurance pricing."
tags:
- insurance
- actuarial
- life
capability:
exposes:
- type: mcp
namespace: mortality-ops
port: 8080
tools:
- name: get-rate
description: "Look up mortality rate. Returns rate and expectancy."
inputParameters:
- name: age
in: body
type: integer
description: "Insured age."
- name: gender
in: body
type: string
description: "Gender."
- name: table
in: body
type: string
description: "Table version."
call: "actuarial-api.get-rate"
with:
age: "{{age}}"
gender: "{{gender}}"
table: "{{table}}"
outputParameters:
- name: rate
type: number
mapping: "$.annualMortalityRate"
- name: expectancy
type: number
mapping: "$.lifeExpectancy"
consumes:
- type: http
namespace: actuarial-api
baseUri: "https://api.zurichinsurance.com/actuarial/v1"
authentication:
type: bearer
token: "$secrets.actuarial_api_token"
resources:
- name: mortality
path: "/mortality-tables/{{table}}/rates"
inputParameters:
- name: table
in: path
operations:
- name: get-rate
method: GET
Triggers quarterly reserve calculations in Snowflake, validates results, and publishes to Power BI.
naftiko: "0.5"
info:
label: "Actuarial Reserve Calculation Trigger"
description: "Triggers quarterly reserve calculations in Snowflake, validates results, and publishes to Power BI."
tags:
- insurance
- actuarial
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: reserve-ops
port: 8080
tools:
- name: run-reserves
description: "Run quarterly reserves. Executes and refreshes dashboard."
inputParameters:
- name: lob
in: body
type: string
description: "LOB."
- name: quarter
in: body
type: string
description: "YYYY-Q."
steps:
- name: calc
type: call
call: "snowflake.query"
with:
query: "CALL CALCULATE_RESERVES('{{lob}}','{{quarter}}')"
- name: validate
type: call
call: "snowflake.query"
with:
query: "SELECT * FROM RESERVE_VALIDATION WHERE lob='{{lob}}'"
- name: refresh
type: call
call: "powerbi.refresh"
with:
group_id: "$secrets.pbi_group"
dataset_id: "$secrets.pbi_reserves"
consumes:
- type: http
namespace: snowflake
baseUri: "https://zurich.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/groups/{{group_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: group_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh
method: POST
Validates address, updates policy, and recalculates premium.
naftiko: "0.5"
info:
label: "Address Change Workflow"
description: "Validates address, updates policy, and recalculates premium."
tags:
- insurance
- policy
- salesforce
- underwriting
capability:
exposes:
- type: mcp
namespace: addr-ops
port: 8080
tools:
- name: change-address
description: "Process address change."
inputParameters:
- name: policy
in: body
type: string
description: "Policy."
- name: address
in: body
type: string
description: "Address."
- name: zip
in: body
type: string
description: "ZIP."
steps:
- name: validate
type: call
call: "address-api.validate"
with:
address: "{{address}}"
zip: "{{zip}}"
- name: update
type: call
call: "salesforce.update"
with:
policy: "{{policy}}"
address: "{{validate.standardized}}"
- name: recalc
type: call
call: "rating.recalc"
with:
policy: "{{policy}}"
consumes:
- type: http
namespace: address-api
baseUri: "https://api.zurichinsurance.com/address/v1"
authentication:
type: bearer
token: "$secrets.address_token"
resources:
- name: validation
path: "/validate"
operations:
- name: validate
method: POST
- type: http
namespace: salesforce
baseUri: "https://zurich.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: policies
path: "/sobjects/Policy__c"
operations:
- name: update
method: PATCH
- type: http
namespace: rating
baseUri: "https://api.zurichinsurance.com/rating/v2"
authentication:
type: bearer
token: "$secrets.rating_token"
resources:
- name: recalc
path: "/recalculate"
operations:
- name: recalc
method: POST
Retrieves active insurance licenses for an agent including states, authority, and expirations.
naftiko: "0.5"
info:
label: "Agent License Status Lookup"
description: "Retrieves active insurance licenses for an agent including states, authority, and expirations."
tags:
- insurance
- compliance
- agent
capability:
exposes:
- type: mcp
namespace: license-ops
port: 8080
tools:
- name: get-licenses
description: "Look up agent licenses. Returns states, authority, expirations."
inputParameters:
- name: agent_id
in: body
type: string
description: "Agent identifier."
call: "compliance-api.get-licenses"
with:
agent_id: "{{agent_id}}"
outputParameters:
- name: licenses
type: array
mapping: "$.licenses"
- name: next_expiry
type: string
mapping: "$.nearestExpiration"
- name: count
type: integer
mapping: "$.activeCount"
consumes:
- type: http
namespace: compliance-api
baseUri: "https://api.zurichinsurance.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
Monitors Datadog latency, creates PagerDuty incident, and alerts engineering.
naftiko: "0.5"
info:
label: "API Latency Alert Workflow"
description: "Monitors Datadog latency, creates PagerDuty incident, and alerts engineering."
tags:
- engineering
- datadog
- pagerduty
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: latency-ops
port: 8080
tools:
- name: check-latency
description: "Check API latency."
inputParameters:
- name: service
in: body
type: string
description: "Service."
- name: threshold
in: body
type: integer
description: "Threshold ms."
steps:
- name: get
type: call
call: "datadog.query"
with:
query: "p99:trace.http.request{service:{{service}}}"
- name: incident
type: call
call: "pagerduty.create-incident"
with:
service_id: "$secrets.eng_pd"
title: "Latency: {{service}}"
- name: notify
type: call
call: "msteams.post"
with:
channel_id: "$secrets.eng_channel"
text: "Latency: {{service}} > {{threshold}}ms"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
resources:
- name: metrics
path: "/query"
operations:
- name: query
method: GET
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
Dispatches appraiser, creates work order, and notifies adjuster.
naftiko: "0.5"
info:
label: "Appraisal Vendor Dispatch Workflow"
description: "Dispatches appraiser, creates work order, and notifies adjuster."
tags:
- insurance
- claims
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: appraisal-ops
port: 8080
tools:
- name: dispatch
description: "Dispatch appraiser."
inputParameters:
- name: claim_id
in: body
type: string
description: "Claim."
- name: address
in: body
type: string
description: "Address."
- name: loss
in: body
type: string
description: "Loss type."
steps:
- name: find
type: call
call: "vendor-api.find"
with:
location: "{{address}}"
specialty: "{{loss}}"
- name: wo
type: call
call: "servicenow.create-wo"
with:
short_description: "Appraisal: {{claim_id}}"
- name: notify
type: call
call: "msteams.post"
with:
channel_id: "$secrets.claims_channel"
text: "Appraiser: {{claim_id}}"
consumes:
- type: http
namespace: vendor-api
baseUri: "https://api.zurichinsurance.com/vendors/v1"
authentication:
type: bearer
token: "$secrets.vendor_token"
resources:
- name: appraisers
path: "/appraisers/search"
operations:
- name: find
method: GET
- type: http
namespace: servicenow
baseUri: "https://zurich.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: work-orders
path: "/table/wm_order"
operations:
- name: create-wo
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
Gathers data from Snowflake, compiles Confluence package, and notifies compliance.
naftiko: "0.5"
info:
label: "Compliance Audit Preparation Workflow"
description: "Gathers data from Snowflake, compiles Confluence package, and notifies compliance."
tags:
- insurance
- compliance
- snowflake
- confluence
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: audit-ops
port: 8080
tools:
- name: prepare-audit
description: "Prepare audit."
inputParameters:
- name: state
in: body
type: string
description: "State."
- name: start
in: body
type: string
description: "Start."
- name: end
in: body
type: string
description: "End."
steps:
- name: gather
type: call
call: "snowflake.query"
with:
query: "CALL PREPARE_AUDIT('{{state}}','{{start}}','{{end}}')"
- name: package
type: call
call: "confluence.create-page"
with:
space_key: "COMPLIANCE"
title: "Audit: {{state}}"
- name: notify
type: call
call: "msteams.post"
with:
channel_id: "$secrets.compliance_channel"
text: "Audit ready: {{state}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://zurich.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: confluence
baseUri: "https://zurichinsurance.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
Detects Azure subscription spend anomalies above a daily threshold and notifies the FinOps team via Microsoft Teams with a cost breakdown.
naftiko: "0.5"
info:
label: "Azure Cloud Cost Anomaly Detection"
description: "Detects Azure subscription spend anomalies above a daily threshold and notifies the FinOps team via Microsoft Teams with a cost breakdown."
tags:
- cloud
- finops
- azure
- microsoft-teams
- cost-management
capability:
exposes:
- type: mcp
namespace: cloud-finops
port: 8080
tools:
- name: alert-azure-cost-anomaly
description: "Given an Azure subscription ID and spend threshold, retrieve daily usage cost data and post an anomaly alert to the FinOps Teams channel if the threshold is exceeded. Use for daily cloud spend governance on insurance platform infrastructure."
inputParameters:
- name: subscription_id
in: body
type: string
description: "Azure subscription ID to monitor (GUID format)."
- name: threshold_usd
in: body
type: number
description: "Daily spend threshold in USD above which to alert."
steps:
- name: get-usage-cost
type: call
call: azure-cost.get-usage-details
with:
subscription_id: "{{subscription_id}}"
- name: post-cost-anomaly-alert
type: call
call: msteams-finops.send-message
with:
channel_id: "$secrets.teams_finops_channel_id"
text: "Azure cost anomaly: Subscription {{subscription_id}} daily spend {{get-usage-cost.total_cost}} exceeds threshold ${{threshold_usd}}. Top service: {{get-usage-cost.top_service}}."
consumes:
- type: http
namespace: azure-cost
baseUri: "https://management.azure.com/subscriptions"
authentication:
type: bearer
token: "$secrets.azure_mgmt_token"
resources:
- name: usage-details
path: "/{{subscription_id}}/providers/Microsoft.Consumption/usageDetails"
inputParameters:
- name: subscription_id
in: path
operations:
- name: get-usage-details
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: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Queries Azure costs and publishes allocation to Confluence.
naftiko: "0.5"
info:
label: "Azure Cost Allocation Report Workflow"
description: "Queries Azure costs and publishes allocation to Confluence."
tags:
- cloud
- finance
- microsoft-azure
- confluence
capability:
exposes:
- type: mcp
namespace: cost-ops
port: 8080
tools:
- name: gen-report
description: "Generate cost report."
inputParameters:
- name: period
in: body
type: string
description: "YYYY-MM."
steps:
- name: costs
type: call
call: "azure-cost.get-usage"
with:
period: "{{period}}"
- name: publish
type: call
call: "confluence.create-page"
with:
space_key: "FINOPS"
title: "Azure Costs {{period}}"
consumes:
- type: http
namespace: azure-cost
baseUri: "https://management.azure.com"
authentication:
type: bearer
token: "$secrets.azure_token"
resources:
- name: usage
path: "/subscriptions/$secrets.azure_sub/providers/Microsoft.CostManagement/query"
operations:
- name: get-usage
method: POST
- type: http
namespace: confluence
baseUri: "https://zurichinsurance.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
Calculates BI reserve, updates claim, and notifies manager.
naftiko: "0.5"
info:
label: "Bodily Injury Reserve Calculator"
description: "Calculates BI reserve, updates claim, and notifies manager."
tags:
- insurance
- claims
- actuarial
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: bi-reserve
port: 8080
tools:
- name: calc-bi
description: "Calculate BI reserve."
inputParameters:
- name: claim_id
in: body
type: string
description: "Claim."
- name: injury
in: body
type: string
description: "Injury."
- name: jurisdiction
in: body
type: string
description: "State."
steps:
- name: calc
type: call
call: "reserve-engine.calc"
with:
injury: "{{injury}}"
jurisdiction: "{{jurisdiction}}"
- name: update
type: call
call: "servicenow.update"
with:
claim_id: "{{claim_id}}"
reserve: "{{calc.amount}}"
- name: notify
type: call
call: "msteams.post"
with:
channel_id: "$secrets.claims_mgr"
text: "BI: {{claim_id}} = ${{calc.amount}}"
consumes:
- type: http
namespace: reserve-engine
baseUri: "https://api.zurichinsurance.com/actuarial/v1"
authentication:
type: bearer
token: "$secrets.actuarial_api_token"
resources:
- name: bi-reserves
path: "/reserves/bodily-injury"
operations:
- name: calc
method: POST
- type: http
namespace: servicenow
baseUri: "https://zurich.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: reserves
path: "/table/sn_claim_reserve/{{claim_id}}"
inputParameters:
- name: claim_id
in: path
operations:
- name: update
method: PATCH
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
Queries affected policies in Snowflake, creates ServiceNow incident, and broadcasts alerts via Microsoft Teams.
naftiko: "0.5"
info:
label: "Catastrophe Event Response Handler"
description: "Queries affected policies in Snowflake, creates ServiceNow incident, and broadcasts alerts via Microsoft Teams."
tags:
- insurance
- claims
- catastrophe
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: cat-ops
port: 8080
tools:
- name: activate-cat
description: "Activate CAT response."
inputParameters:
- name: event
in: body
type: string
description: "Event name."
- name: zips
in: body
type: string
description: "Affected ZIPs."
- name: type
in: body
type: string
description: "Event type."
steps:
- name: count
type: call
call: "snowflake.query"
with:
query: "SELECT COUNT(*) FROM POLICIES WHERE zip IN ('{{zips}}')"
- name: incident
type: call
call: "servicenow.create-incident"
with:
short_description: "CAT: {{event}}"
priority: "1"
- name: broadcast
type: call
call: "msteams.post"
with:
channel_id: "$secrets.cat_channel"
text: "CAT: {{event}}. Incident: {{incident.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://zurich.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: servicenow
baseUri: "https://zurich.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
Executes CAT model in Snowflake and publishes PML to Power BI.
naftiko: "0.5"
info:
label: "Catastrophe Model Run Workflow"
description: "Executes CAT model in Snowflake and publishes PML to Power BI."
tags:
- insurance
- actuarial
- catastrophe
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: cat-model
port: 8080
tools:
- name: run-cat
description: "Run CAT model."
inputParameters:
- name: peril
in: body
type: string
description: "Peril."
- name: region
in: body
type: string
description: "Region."
steps:
- name: execute
type: call
call: "snowflake.query"
with:
query: "CALL RUN_CAT_MODEL('{{peril}}','{{region}}')"
- name: refresh
type: call
call: "powerbi.refresh"
with:
group_id: "$secrets.pbi_cat"
dataset_id: "$secrets.pbi_cat_model"
consumes:
- type: http
namespace: snowflake
baseUri: "https://zurich.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/groups/{{group_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: group_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh
method: POST
Evaluates loss type and adjuster workload, assigns optimal adjuster in Salesforce, and notifies via Microsoft Teams.
naftiko: "0.5"
info:
label: "Claims Adjuster Assignment Router"
description: "Evaluates loss type and adjuster workload, assigns optimal adjuster in Salesforce, and notifies via Microsoft Teams."
tags:
- insurance
- claims
- salesforce
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: claims-route
port: 8080
tools:
- name: route-claim
description: "Route claim to best adjuster. Checks capacity, assigns, notifies."
inputParameters:
- name: claim_id
in: body
type: string
description: "Claim ID."
- name: loss_type
in: body
type: string
description: "Loss type."
steps:
- name: get-capacity
type: call
call: "workday.get-capacity"
with:
department: "claims-{{loss_type}}"
- name: assign
type: call
call: "salesforce.assign"
with:
claim_id: "{{claim_id}}"
adjuster: "{{get-capacity.id}}"
- name: notify
type: call
call: "msteams.post"
with:
channel_id: "$secrets.claims_channel"
text: "Claim {{claim_id}} ({{loss_type}}) assigned."
consumes:
- type: http
namespace: workday
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/zurich"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: capacity
path: "/staffing/teamCapacity"
operations:
- name: get-capacity
method: GET
- type: http
namespace: salesforce
baseUri: "https://zurich.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: claims
path: "/sobjects/Claim__c/{{claim_id}}"
inputParameters:
- name: claim_id
in: path
operations:
- name: assign
method: PATCH
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
Places litigation hold on documents, creates legal case, and notifies legal team.
naftiko: "0.5"
info:
label: "Claims Litigation Hold Workflow"
description: "Places litigation hold on documents, creates legal case, and notifies legal team."
tags:
- insurance
- claims
- compliance
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: lit-ops
port: 8080
tools:
- name: initiate-hold
description: "Place litigation hold."
inputParameters:
- name: claim_id
in: body
type: string
description: "Claim."
- name: attorney
in: body
type: string
description: "Opposing counsel."
steps:
- name: hold
type: call
call: "document-api.create-hold"
with:
claim_id: "{{claim_id}}"
type: "litigation"
- name: case
type: call
call: "servicenow.create-case"
with:
short_description: "Litigation: {{claim_id}}"
- name: notify
type: call
call: "msteams.post"
with:
channel_id: "$secrets.legal_channel"
text: "Hold: {{claim_id}}. Case: {{case.number}}"
consumes:
- type: http
namespace: document-api
baseUri: "https://api.zurichinsurance.com/documents/v1"
authentication:
type: bearer
token: "$secrets.document_api_token"
resources:
- name: holds
path: "/holds"
operations:
- name: create-hold
method: POST
- type: http
namespace: servicenow
baseUri: "https://zurich.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cases
path: "/table/sn_legal_case"
operations:
- name: create-case
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
Generates medical record request, creates tracking, and sets Jira follow-up.
naftiko: "0.5"
info:
label: "Claims Medical Record Request Workflow"
description: "Generates medical record request, creates tracking, and sets Jira follow-up."
tags:
- insurance
- claims
- servicenow
- jira
capability:
exposes:
- type: mcp
namespace: medrecord-ops
port: 8080
tools:
- name: request-records
description: "Request medical records."
inputParameters:
- name: claim_id
in: body
type: string
description: "Claim."
- name: provider
in: body
type: string
description: "Provider."
- name: claimant
in: body
type: string
description: "Claimant."
steps:
- name: gen
type: call
call: "document-api.generate"
with:
claim_id: "{{claim_id}}"
provider: "{{provider}}"
- name: track
type: call
call: "servicenow.create-record"
with:
table: "u_med_request"
claim_id: "{{claim_id}}"
- name: followup
type: call
call: "jira.create-issue"
with:
project_key: "CLAIMS"
issuetype: "Task"
summary: "Med records: {{claim_id}}"
consumes:
- type: http
namespace: document-api
baseUri: "https://api.zurichinsurance.com/documents/v1"
authentication:
type: bearer
token: "$secrets.document_api_token"
resources:
- name: medical
path: "/generate/medical-request"
operations:
- name: generate
method: POST
- type: http
namespace: servicenow
baseUri: "https://zurich.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/u_med_request"
operations:
- name: create-record
method: POST
- type: http
namespace: jira
baseUri: "https://zurichinsurance.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Validates payment against limits, processes disbursement, and updates claim in ServiceNow.
naftiko: "0.5"
info:
label: "Claims Payment Processing Workflow"
description: "Validates payment against limits, processes disbursement, and updates claim in ServiceNow."
tags:
- insurance
- claims
- payments
- servicenow
capability:
exposes:
- type: mcp
namespace: payment-ops
port: 8080
tools:
- name: process-payment
description: "Process claims payment."
inputParameters:
- name: claim_id
in: body
type: string
description: "Claim ID."
- name: amount
in: body
type: number
description: "Amount."
- name: payee
in: body
type: string
description: "Recipient."
steps:
- name: validate
type: call
call: "claims-api.validate"
with:
claim_id: "{{claim_id}}"
amount: "{{amount}}"
- name: disburse
type: call
call: "payment-api.disburse"
with:
claim_id: "{{claim_id}}"
amount: "{{amount}}"
- name: update
type: call
call: "servicenow.update"
with:
claim_id: "{{claim_id}}"
status: "disbursed"
consumes:
- type: http
namespace: claims-api
baseUri: "https://api.zurichinsurance.com/claims/v2"
authentication:
type: bearer
token: "$secrets.claims_api_token"
resources:
- name: validation
path: "/payments/validate"
operations:
- name: validate
method: POST
- type: http
namespace: payment-api
baseUri: "https://api.zurichinsurance.com/payments/v1"
authentication:
type: bearer
token: "$secrets.payment_api_token"
resources:
- name: disbursements
path: "/disbursements"
operations:
- name: disburse
method: POST
- type: http
namespace: servicenow
baseUri: "https://zurich.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cases
path: "/table/sn_customerservice_case/{{claim_id}}"
inputParameters:
- name: claim_id
in: path
operations:
- name: update
method: PATCH
Validates adjuster authority, updates reserve in ServiceNow, and notifies claims manager.
naftiko: "0.5"
info:
label: "Claims Reserve Adjustment Workflow"
description: "Validates adjuster authority, updates reserve in ServiceNow, and notifies claims manager."
tags:
- insurance
- claims
- actuarial
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: reserve-adj
port: 8080
tools:
- name: adjust-reserve
description: "Adjust claim reserve."
inputParameters:
- name: claim_id
in: body
type: string
description: "Claim."
- name: amount
in: body
type: number
description: "New reserve."
- name: adjuster
in: body
type: string
description: "Adjuster."
steps:
- name: check
type: call
call: "claims-api.check-auth"
with:
adjuster: "{{adjuster}}"
amount: "{{amount}}"
- name: update
type: call
call: "servicenow.update-reserve"
with:
claim_id: "{{claim_id}}"
reserve: "{{amount}}"
- name: notify
type: call
call: "msteams.post"
with:
channel_id: "$secrets.claims_mgr"
text: "Reserve: {{claim_id}} = ${{amount}}"
consumes:
- type: http
namespace: claims-api
baseUri: "https://api.zurichinsurance.com/claims/v2"
authentication:
type: bearer
token: "$secrets.claims_api_token"
resources:
- name: authority
path: "/authority/check"
operations:
- name: check-auth
method: POST
- type: http
namespace: servicenow
baseUri: "https://zurich.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: reserves
path: "/table/sn_claim_reserve/{{claim_id}}"
inputParameters:
- name: claim_id
in: path
operations:
- name: update-reserve
method: PATCH
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
Retrieves current claim status from ServiceNow including state, adjuster, and last update.
naftiko: "0.5"
info:
label: "Claims Status Inquiry"
description: "Retrieves current claim status from ServiceNow including state, adjuster, and last update."
tags:
- insurance
- claims
- servicenow
capability:
exposes:
- type: mcp
namespace: claims-ops
port: 8080
tools:
- name: get-claim-status
description: "Look up claim status by number. Returns state, adjuster, last activity. Use for claim inquiries."
inputParameters:
- name: claim_number
in: body
type: string
description: "Zurich Insurance claim number."
call: "servicenow.get-case"
with:
claim_number: "{{claim_number}}"
outputParameters:
- name: state
type: string
mapping: "$.state"
- name: adjuster
type: string
mapping: "$.assigned_to.display_value"
- name: last_activity
type: string
mapping: "$.sys_updated_on"
consumes:
- type: http
namespace: servicenow
baseUri: "https://zurich.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cases
path: "/table/sn_customerservice_case/{{claim_number}}"
inputParameters:
- name: claim_number
in: path
operations:
- name: get-case
method: GET
Retrieves a complex claim document set from SharePoint, sends the content to an AI model for structured triage summarization, and posts the summary to the claims adjuster in Microsoft Teams.
naftiko: "0.5"
info:
label: "Claims Triage AI Summarization"
description: "Retrieves a complex claim document set from SharePoint, sends the content to an AI model for structured triage summarization, and posts the summary to the claims adjuster in Microsoft Teams."
tags:
- ai
- claims
- insurance
- microsoft-teams
- triage
capability:
exposes:
- type: mcp
namespace: claims-ai
port: 8080
tools:
- name: summarize-claim-documents
description: "Given a claim ID and SharePoint document library path, retrieve claim documents, submit them to an AI model for structured triage summarization, and deliver the summary to the adjuster in Microsoft Teams. Use to accelerate complex commercial claims triage."
inputParameters:
- name: claim_id
in: body
type: string
description: "Zurich claim ID to triage (e.g. ZIC-2025-00012345)."
- name: sharepoint_site_id
in: body
type: string
description: "SharePoint site ID where claim documents are stored."
- name: adjuster_upn
in: body
type: string
description: "Microsoft UPN of the claims adjuster to notify."
steps:
- name: get-claim-documents
type: call
call: sharepoint.list-documents
with:
site_id: "{{sharepoint_site_id}}"
folder_path: "Claims/{{claim_id}}"
- name: generate-ai-summary
type: call
call: openai.create-chat-completion
with:
model: gpt-4o
messages: "Summarize the following insurance claim documents and provide a structured triage assessment including loss type, estimated severity, and recommended next steps:\n\n{{get-claim-documents.content}}"
- name: deliver-summary
type: call
call: msteams-adjuster.send-message
with:
recipient_upn: "{{adjuster_upn}}"
text: "AI triage summary for claim {{claim_id}}:\n\n{{generate-ai-summary.choices[0].message.content}}"
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: documents
path: "/sites/{{site_id}}/drive/root:{{folder_path}}:/children"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
operations:
- name: list-documents
method: GET
- type: http
namespace: openai
baseUri: "https://api.openai.com/v1"
authentication:
type: bearer
token: "$secrets.openai_api_key"
resources:
- name: chat-completions
path: "/chat/completions"
operations:
- name: create-chat-completion
method: POST
- type: http
namespace: msteams-adjuster
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chats
path: "/users/{{upn}}/chats"
inputParameters:
- name: upn
in: path
operations:
- name: send-message
method: POST
Aggregates commercial lines risk exposure from Snowflake by industry sector and geography, then refreshes the risk management Power BI dashboard for underwriting leadership.
naftiko: "0.5"
info:
label: "Commercial Lines Risk Aggregation"
description: "Aggregates commercial lines risk exposure from Snowflake by industry sector and geography, then refreshes the risk management Power BI dashboard for underwriting leadership."
tags:
- insurance
- underwriting
- actuarial
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: risk-agg
port: 8080
tools:
- name: aggregate-commercial-risk
description: "Aggregate commercial lines risk exposure by sector and geography. Refreshes dashboard. Use for quarterly risk reviews."
inputParameters:
- name: sector
in: body
type: string
description: "Industry sector: manufacturing, technology, healthcare, financial."
- name: period
in: body
type: string
description: "Reporting period YYYY-Q."
steps:
- name: query-exposure
type: call
call: "snowflake.query"
with:
query: "SELECT geography, SUM(tiv), COUNT(*) FROM COMMERCIAL_POLICIES WHERE sector='{{sector}}' GROUP BY geography"
- name: refresh-dashboard
type: call
call: "powerbi.refresh"
with:
group_id: "$secrets.pbi_risk_group"
dataset_id: "$secrets.pbi_commercial_risk"
consumes:
- type: http
namespace: snowflake
baseUri: "https://zurich.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/groups/{{group_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: group_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh
method: POST
Screens applicants against AML watchlists, logs results, and escalates matches.
naftiko: "0.5"
info:
label: "Compliance AML Screening Workflow"
description: "Screens applicants against AML watchlists, logs results, and escalates matches."
tags:
- insurance
- compliance
- fraud
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: aml-ops
port: 8080
tools:
- name: screen-aml
description: "Screen for AML."
inputParameters:
- name: name
in: body
type: string
description: "Applicant name."
- name: app_id
in: body
type: string
description: "Application ID."
steps:
- name: screen
type: call
call: "aml-api.screen"
with:
name: "{{name}}"
ref: "{{app_id}}"
- name: log
type: call
call: "servicenow.create-record"
with:
table: "u_aml"
result: "{{screen.status}}"
- name: alert
type: call
call: "msteams.post"
with:
channel_id: "$secrets.compliance_channel"
text: "AML: {{name}} - {{screen.status}}"
consumes:
- type: http
namespace: aml-api
baseUri: "https://api.zurichinsurance.com/compliance/aml/v1"
authentication:
type: bearer
token: "$secrets.aml_api_token"
resources:
- name: screening
path: "/screen"
operations:
- name: screen
method: POST
- type: http
namespace: servicenow
baseUri: "https://zurich.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/u_aml"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
Monitors regulatory filing deadlines, generates Confluence summary, and alerts compliance via Microsoft Teams.
naftiko: "0.5"
info:
label: "Compliance Regulatory Filing Tracker"
description: "Monitors regulatory filing deadlines, generates Confluence summary, and alerts compliance via Microsoft Teams."
tags:
- insurance
- compliance
- confluence
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: compliance-ops
port: 8080
tools:
- name: check-filings
description: "Check filing deadlines and notify."
inputParameters:
- name: days_ahead
in: body
type: integer
description: "Days ahead."
- name: state
in: body
type: string
description: "State or ALL."
steps:
- name: get-filings
type: call
call: "compliance-api.get-filings"
with:
days: "{{days_ahead}}"
state: "{{state}}"
- name: create-page
type: call
call: "confluence.create-page"
with:
space_key: "COMPLIANCE"
title: "Filings Next {{days_ahead}} Days"
- name: notify
type: call
call: "msteams.post"
with:
channel_id: "$secrets.compliance_channel"
text: "{{get-filings.count}} filings due."
consumes:
- type: http
namespace: compliance-api
baseUri: "https://api.zurichinsurance.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://zurichinsurance.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
Retrieves Confluence page content by ID returning title, body, and last modified.
naftiko: "0.5"
info:
label: "Confluence Page Content Lookup"
description: "Retrieves Confluence page content by ID returning title, body, and last modified."
tags:
- knowledge-management
- confluence
capability:
exposes:
- type: mcp
namespace: content-ops
port: 8080
tools:
- name: get-page
description: "Look up Confluence page."
inputParameters:
- name: page_id
in: body
type: string
description: "Page ID."
call: "confluence.get-page"
with:
page_id: "{{page_id}}"
outputParameters:
- name: title
type: string
mapping: "$.title"
- name: body
type: string
mapping: "$.body.storage.value"
- name: modified
type: string
mapping: "$.version.when"
consumes:
- type: http
namespace: confluence
baseUri: "https://zurichinsurance.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content/{{page_id}}"
inputParameters:
- name: page_id
in: path
operations:
- name: get-page
method: GET
Analyzes coverage in Salesforce, identifies gaps, and creates cross-sell opportunities.
naftiko: "0.5"
info:
label: "Cross-Sell Opportunity Workflow"
description: "Analyzes coverage in Salesforce, identifies gaps, and creates cross-sell opportunities."
tags:
- insurance
- policy
- salesforce
- sales
capability:
exposes:
- type: mcp
namespace: cross-sell
port: 8080
tools:
- name: cross-sell
description: "Create cross-sell opportunities."
inputParameters:
- name: customer_id
in: body
type: string
description: "Customer ID."
steps:
- name: policies
type: call
call: "salesforce.get-policies"
with:
customer_id: "{{customer_id}}"
- name: gaps
type: call
call: "analytics.identify-gaps"
with:
customer_id: "{{customer_id}}"
- name: opp
type: call
call: "salesforce.create-opp"
with:
customer_id: "{{customer_id}}"
product: "{{gaps.recommended}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://zurich.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: policies
path: "/query"
operations:
- name: get-policies
method: GET
- type: http
namespace: analytics
baseUri: "https://api.zurichinsurance.com/analytics/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: gaps
path: "/coverage-gaps"
operations:
- name: identify-gaps
method: POST
- type: http
namespace: salesforce
baseUri: "https://zurich.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity"
operations:
- name: create-opp
method: POST
Creates ServiceNow case, links to Salesforce policy, and notifies CX team.
naftiko: "0.5"
info:
label: "Customer Complaint Tracking Workflow"
description: "Creates ServiceNow case, links to Salesforce policy, and notifies CX team."
tags:
- insurance
- compliance
- servicenow
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: complaint-ops
port: 8080
tools:
- name: log-complaint
description: "Log complaint."
inputParameters:
- name: policy
in: body
type: string
description: "Policy."
- name: category
in: body
type: string
description: "Category."
- name: desc
in: body
type: string
description: "Description."
steps:
- name: case
type: call
call: "servicenow.create-case"
with:
short_description: "Complaint: {{category}} - {{policy}}"
description: "{{desc}}"
- name: link
type: call
call: "salesforce.create-note"
with:
policy: "{{policy}}"
note: "Complaint: {{case.number}}"
- name: notify
type: call
call: "msteams.post"
with:
channel_id: "$secrets.cx_channel"
text: "Complaint: {{policy}}. Case: {{case.number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://zurich.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cases
path: "/table/sn_customerservice_case"
operations:
- name: create-case
method: POST
- type: http
namespace: salesforce
baseUri: "https://zurich.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: notes
path: "/sobjects/CaseNote__c"
operations:
- name: create-note
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
Processes GDPR/CCPA requests by querying systems and logging in ServiceNow.
naftiko: "0.5"
info:
label: "Data Subject Request Workflow"
description: "Processes GDPR/CCPA requests by querying systems and logging in ServiceNow."
tags:
- insurance
- compliance
- privacy
- servicenow
capability:
exposes:
- type: mcp
namespace: dsar-ops
port: 8080
tools:
- name: process-dsar
description: "Process DSAR."
inputParameters:
- name: email
in: body
type: string
description: "Subject email."
- name: type
in: body
type: string
description: "Request type."
steps:
- name: sf
type: call
call: "salesforce.search"
with:
email: "{{email}}"
- name: claims
type: call
call: "claims-api.search"
with:
email: "{{email}}"
- name: log
type: call
call: "servicenow.create-record"
with:
table: "u_dsar"
email: "{{email}}"
type: "{{type}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://zurich.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: search
path: "/search"
operations:
- name: search
method: GET
- type: http
namespace: claims-api
baseUri: "https://api.zurichinsurance.com/claims/v2"
authentication:
type: bearer
token: "$secrets.claims_api_token"
resources:
- name: search
path: "/claims/search"
operations:
- name: search
method: GET
- type: http
namespace: servicenow
baseUri: "https://zurich.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/u_dsar"
operations:
- name: create-record
method: POST
Retrieves health metrics from Datadog including error rate, latency, and throughput.
naftiko: "0.5"
info:
label: "Datadog Service Health Lookup"
description: "Retrieves health metrics from Datadog including error rate, latency, and throughput."
tags:
- engineering
- datadog
- monitoring
capability:
exposes:
- type: mcp
namespace: health-ops
port: 8080
tools:
- name: get-health
description: "Look up service health."
inputParameters:
- name: service
in: body
type: string
description: "Service name."
call: "datadog.get-metrics"
with:
service: "{{service}}"
outputParameters:
- name: error_rate
type: number
mapping: "$.errorRate"
- name: latency
type: number
mapping: "$.p99Latency"
- name: throughput
type: number
mapping: "$.throughput"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
resources:
- name: metrics
path: "/query"
operations:
- name: get-metrics
method: GET
Checks Snowflake for duplicate claims and flags matches in ServiceNow.
naftiko: "0.5"
info:
label: "Duplicate Claims Detection Workflow"
description: "Checks Snowflake for duplicate claims and flags matches in ServiceNow."
tags:
- insurance
- fraud
- claims
- snowflake
- servicenow
capability:
exposes:
- type: mcp
namespace: dup-detect
port: 8080
tools:
- name: detect-dupes
description: "Detect duplicates."
inputParameters:
- name: claimant
in: body
type: string
description: "Claimant."
- name: loss_date
in: body
type: string
description: "Loss date."
- name: loss_type
in: body
type: string
description: "Loss type."
steps:
- name: search
type: call
call: "snowflake.query"
with:
query: "SELECT * FROM CLAIMS WHERE claimant='{{claimant}}' AND loss_date NEAR '{{loss_date}}'"
- name: flag
type: call
call: "servicenow.create-record"
with:
table: "u_fraud_alert"
type: "duplicate"
consumes:
- type: http
namespace: snowflake
baseUri: "https://zurich.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: servicenow
baseUri: "https://zurich.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/u_fraud_alert"
operations:
- name: create-record
method: POST
Generates Jira backlog digest and posts to Microsoft Teams.
naftiko: "0.5"
info:
label: "Engineering Backlog Digest Workflow"
description: "Generates Jira backlog digest and posts to Microsoft Teams."
tags:
- engineering
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: backlog-ops
port: 8080
tools:
- name: gen-digest
description: "Generate digest."
inputParameters:
- name: board_id
in: body
type: string
description: "Board ID."
steps:
- name: sprint
type: call
call: "jira.get-sprint"
with:
board_id: "{{board_id}}"
- name: blockers
type: call
call: "jira.search"
with:
jql: "status=Blocked"
- name: post
type: call
call: "msteams.post"
with:
channel_id: "$secrets.eng_channel"
text: "Sprint: {{sprint.name}}. Blockers: {{blockers.total}}"
consumes:
- type: http
namespace: jira
baseUri: "https://zurichinsurance.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: sprints
path: "/board/{{board_id}}/sprint"
inputParameters:
- name: board_id
in: path
operations:
- name: get-sprint
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
Creates SIU case in ServiceNow and alerts team via PagerDuty when fraud scoring flags a claim.
naftiko: "0.5"
info:
label: "Fraud Detection Alert to SIU"
description: "Creates SIU case in ServiceNow and alerts team via PagerDuty when fraud scoring flags a claim."
tags:
- insurance
- fraud
- servicenow
- pagerduty
capability:
exposes:
- type: mcp
namespace: fraud-ops
port: 8080
tools:
- name: escalate-fraud
description: "Escalate fraud alert. Creates case and PagerDuty alert."
inputParameters:
- name: claim_id
in: body
type: string
description: "Flagged claim."
- name: fraud_score
in: body
type: number
description: "Score 0-100."
- name: indicators
in: body
type: string
description: "Indicators."
steps:
- name: create-case
type: call
call: "servicenow.create-case"
with:
short_description: "Fraud: {{claim_id}} ({{fraud_score}})"
category: "fraud"
- name: alert
type: call
call: "pagerduty.create-incident"
with:
service_id: "$secrets.siu_service"
title: "Fraud: {{claim_id}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://zurich.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cases
path: "/table/sn_si_incident"
operations:
- name: create-case
method: POST
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
Runs graph analytics in Snowflake to detect fraud rings, creates cases, and alerts SIU.
naftiko: "0.5"
info:
label: "Fraud Ring Detection Investigation"
description: "Runs graph analytics in Snowflake to detect fraud rings, creates cases, and alerts SIU."
tags:
- insurance
- fraud
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: fraud-ring
port: 8080
tools:
- name: detect-rings
description: "Detect fraud rings."
inputParameters:
- name: start
in: body
type: string
description: "Start date."
- name: end
in: body
type: string
description: "End date."
steps:
- name: detect
type: call
call: "snowflake.query"
with:
query: "CALL DETECT_FRAUD_RINGS('{{start}}','{{end}}')"
- name: case
type: call
call: "servicenow.create-case"
with:
short_description: "Fraud rings: {{start}} to {{end}}"
- name: alert
type: call
call: "msteams.post"
with:
channel_id: "$secrets.siu_channel"
text: "Rings detected. Case: {{case.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://zurich.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: servicenow
baseUri: "https://zurich.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cases
path: "/table/sn_si_incident"
operations:
- name: create-case
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
When a GitHub Actions workflow fails on a protected branch, creates a Jira bug and alerts the platform engineering team via Microsoft Teams.
naftiko: "0.5"
info:
label: "GitHub CI/CD Pipeline Failure to Jira"
description: "When a GitHub Actions workflow fails on a protected branch, creates a Jira bug and alerts the platform engineering team via Microsoft Teams."
tags:
- devops
- cicd
- github
- jira
- microsoft-teams
- incident-response
capability:
exposes:
- type: mcp
namespace: cicd-failure-ops
port: 8080
tools:
- name: handle-pipeline-failure
description: "Given a failed GitHub Actions run, create a Jira bug and alert the platform engineering Teams channel. Invoke on protected-branch pipeline failures for insurance platform application repositories."
inputParameters:
- name: repo
in: body
type: string
description: "GitHub repository in owner/repo format (e.g. zurich-insurance/claims-platform)."
- name: workflow_run_id
in: body
type: string
description: "GitHub Actions workflow run ID that failed."
- name: branch
in: body
type: string
description: "Branch name where the failure occurred."
- name: commit_sha
in: body
type: string
description: "Commit SHA of the failed run."
steps:
- name: get-run-details
type: call
call: github.get-workflow-run
with:
repo: "{{repo}}"
run_id: "{{workflow_run_id}}"
- name: create-jira-bug
type: call
call: jira.create-issue
with:
project_key: PLAT
issuetype: Bug
summary: "[CI Failure] {{repo}} / {{branch}} — {{get-run-details.name}}"
description: "Workflow: {{get-run-details.name}}\nBranch: {{branch}}\nCommit: {{commit_sha}}\nURL: {{get-run-details.html_url}}"
- name: alert-platform-eng
type: call
call: msteams-plat.send-message
with:
channel_id: "$secrets.teams_platform_channel_id"
text: "CI/CD failure: {{repo}} | Branch: {{branch}} | Jira: {{create-jira-bug.key}} | Run: {{get-run-details.html_url}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: workflow-runs
path: "/repos/{{repo}}/actions/runs/{{run_id}}"
inputParameters:
- name: repo
in: path
- name: run_id
in: path
operations:
- name: get-workflow-run
method: GET
- type: http
namespace: jira
baseUri: "https://zurich.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams-plat
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Scans GitHub repositories for open Dependabot alerts, aggregates by severity, and posts a weekly digest to the AppSec Microsoft Teams channel.
naftiko: "0.5"
info:
label: "GitHub Security Advisory Digest for Insurance Apps"
description: "Scans GitHub repositories for open Dependabot alerts, aggregates by severity, and posts a weekly digest to the AppSec Microsoft Teams channel."
tags:
- devops
- security
- github
- microsoft-teams
- devsecops
- appsec
capability:
exposes:
- type: mcp
namespace: appsec-digest
port: 8080
tools:
- name: digest-security-advisories
description: "Given a GitHub organization and severity filter, retrieve open Dependabot alerts and post a weekly digest to the AppSec Teams channel. Use for weekly security hygiene reviews on insurance platform repositories."
inputParameters:
- name: github_org
in: body
type: string
description: "GitHub organization to scan (e.g. zurich-insurance)."
- name: severity_filter
in: body
type: string
description: "Minimum severity to include: critical, high, medium."
steps:
- name: get-alerts
type: call
call: github.list-org-alerts
with:
org: "{{github_org}}"
severity: "{{severity_filter}}"
- name: post-advisory-digest
type: call
call: msteams-appsec.send-message
with:
channel_id: "$secrets.teams_appsec_channel_id"
text: "Weekly security advisory digest for {{github_org}}: {{get-alerts.total_count}} open alerts (Critical: {{get-alerts.critical_count}}, High: {{get-alerts.high_count}}). Review in GitHub Security."
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: org-alerts
path: "/orgs/{{org}}/dependabot/alerts"
inputParameters:
- name: org
in: path
- name: severity
in: query
operations:
- name: list-org-alerts
method: GET
- type: http
namespace: msteams-appsec
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Creates Jira ticket and alerts engineering via Teams for critical vulnerabilities.
naftiko: "0.5"
info:
label: "GitHub Security Advisory Workflow"
description: "Creates Jira ticket and alerts engineering via Teams for critical vulnerabilities."
tags:
- security
- github
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: sec-ops
port: 8080
tools:
- name: handle-advisory
description: "Handle security advisory."
inputParameters:
- name: repo
in: body
type: string
description: "Repository."
- name: advisory
in: body
type: string
description: "Advisory ID."
- name: severity
in: body
type: string
description: "Severity."
steps:
- name: get
type: call
call: "github.get-advisory"
with:
repo: "{{repo}}"
id: "{{advisory}}"
- name: ticket
type: call
call: "jira.create-issue"
with:
project_key: "SEC"
issuetype: "Bug"
summary: "{{severity}} in {{repo}}"
- name: notify
type: call
call: "msteams.post"
with:
channel_id: "$secrets.sec_channel"
text: "{{severity}} in {{repo}}. Jira: {{ticket.key}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: advisories
path: "/repos/{{repo}}/dependabot/alerts/{{advisory}}"
inputParameters:
- name: repo
in: path
- name: advisory
in: path
operations:
- name: get-advisory
method: GET
- type: http
namespace: jira
baseUri: "https://zurichinsurance.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
Verifies glass coverage, schedules vendor repair, and confirms to policyholder.
naftiko: "0.5"
info:
label: "Glass Repair Fast Track Workflow"
description: "Verifies glass coverage, schedules vendor repair, and confirms to policyholder."
tags:
- insurance
- claims
- auto
capability:
exposes:
- type: mcp
namespace: glass-ops
port: 8080
tools:
- name: fast-track
description: "Fast-track glass claim."
inputParameters:
- name: policy
in: body
type: string
description: "Policy."
- name: damage
in: body
type: string
description: "Damage type."
- name: zip
in: body
type: string
description: "ZIP."
steps:
- name: verify
type: call
call: "claims-api.verify"
with:
policy: "{{policy}}"
- name: schedule
type: call
call: "glass-vendor.schedule"
with:
policy: "{{policy}}"
damage: "{{damage}}"
- name: confirm
type: call
call: "notification-api.send"
with:
policy: "{{policy}}"
template: "glass-scheduled"
consumes:
- type: http
namespace: claims-api
baseUri: "https://api.zurichinsurance.com/claims/v2"
authentication:
type: bearer
token: "$secrets.claims_api_token"
resources:
- name: glass
path: "/policies/{{policy}}/glass"
inputParameters:
- name: policy
in: path
operations:
- name: verify
method: GET
- type: http
namespace: glass-vendor
baseUri: "https://api.zurichinsurance.com/vendors/glass/v1"
authentication:
type: bearer
token: "$secrets.glass_token"
resources:
- name: repairs
path: "/schedule"
operations:
- name: schedule
method: POST
- type: http
namespace: notification-api
baseUri: "https://api.zurichinsurance.com/notifications/v1"
authentication:
type: bearer
token: "$secrets.notification_token"
resources:
- name: notifications
path: "/send"
operations:
- name: send
method: POST
Finds physician, books IME, and creates tracking in ServiceNow.
naftiko: "0.5"
info:
label: "Independent Medical Exam Scheduling Workflow"
description: "Finds physician, books IME, and creates tracking in ServiceNow."
tags:
- insurance
- claims
- servicenow
capability:
exposes:
- type: mcp
namespace: ime-ops
port: 8080
tools:
- name: schedule-ime
description: "Schedule IME."
inputParameters:
- name: claim_id
in: body
type: string
description: "Claim."
- name: specialty
in: body
type: string
description: "Specialty."
- name: zip
in: body
type: string
description: "ZIP."
steps:
- name: find
type: call
call: "medical-api.find"
with:
specialty: "{{specialty}}"
zip: "{{zip}}"
- name: book
type: call
call: "scheduling-api.book"
with:
provider: "{{find.id}}"
claim: "{{claim_id}}"
- name: track
type: call
call: "servicenow.create-record"
with:
table: "u_ime"
claim_id: "{{claim_id}}"
consumes:
- type: http
namespace: medical-api
baseUri: "https://api.zurichinsurance.com/medical-network/v1"
authentication:
type: bearer
token: "$secrets.medical_token"
resources:
- name: providers
path: "/ime-providers/search"
operations:
- name: find
method: GET
- type: http
namespace: scheduling-api
baseUri: "https://api.zurichinsurance.com/scheduling/v1"
authentication:
type: bearer
token: "$secrets.scheduling_token"
resources:
- name: appointments
path: "/appointments"
operations:
- name: book
method: POST
- type: http
namespace: servicenow
baseUri: "https://zurich.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/u_ime"
operations:
- name: create-record
method: POST
When a new property or casualty claim is submitted in Salesforce, creates a linked ServiceNow claims management task and notifies the assigned adjuster via Microsoft Teams.
naftiko: "0.5"
info:
label: "Insurance Claim Intake and ServiceNow Ticket Creation"
description: "When a new property or casualty claim is submitted in Salesforce, creates a linked ServiceNow claims management task and notifies the assigned adjuster via Microsoft Teams."
tags:
- insurance
- claims
- salesforce
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: claims-intake
port: 8080
tools:
- name: create-claim-task
description: "Given a Salesforce claim case ID and adjuster UPN, retrieve claim details, create a ServiceNow claims task, and notify the adjuster in Microsoft Teams. Invoke when a new P&C claim is submitted and requires assignment."
inputParameters:
- name: claim_case_id
in: body
type: string
description: "Salesforce claim case record ID (18-character)."
- name: adjuster_upn
in: body
type: string
description: "Microsoft UPN of the assigned claims adjuster."
steps:
- name: get-claim
type: call
call: salesforce.get-case
with:
case_id: "{{claim_case_id}}"
- name: create-servicenow-task
type: call
call: servicenow-claims.create-task
with:
category: claims_management
short_description: "New claim: {{get-claim.subject}} — Policy {{get-claim.policy_number}}"
description: "Claim type: {{get-claim.claim_type}}\nPolicy: {{get-claim.policy_number}}\nClaimant: {{get-claim.contact_name}}\nIncident date: {{get-claim.incident_date}}"
- name: notify-adjuster
type: call
call: msteams-claims.send-message
with:
recipient_upn: "{{adjuster_upn}}"
text: "New claim assigned: {{get-claim.subject}} | Policy: {{get-claim.policy_number}} | Claimant: {{get-claim.contact_name}} | ServiceNow task: {{create-servicenow-task.number}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://zurich.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/sobjects/Case/{{case_id}}"
inputParameters:
- name: case_id
in: path
operations:
- name: get-case
method: GET
- type: http
namespace: servicenow-claims
baseUri: "https://zurich.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/sc_task"
operations:
- name: create-task
method: POST
- type: http
namespace: msteams-claims
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chats
path: "/users/{{upn}}/chats"
inputParameters:
- name: upn
in: path
operations:
- name: send-message
method: POST
Retrieves completed sprint data from Jira and posts a velocity and delivery summary to the technology leadership Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Jira Sprint Velocity and Delivery Report"
description: "Retrieves completed sprint data from Jira and posts a velocity and delivery summary to the technology leadership Microsoft Teams channel."
tags:
- devops
- jira
- microsoft-teams
- reporting
- agile
capability:
exposes:
- type: mcp
namespace: agile-delivery
port: 8080
tools:
- name: publish-sprint-delivery-report
description: "Given a Jira board ID and sprint ID, retrieve completed issues, calculate velocity, and post the delivery report to the technology leadership Teams channel. Use after each sprint close."
inputParameters:
- name: board_id
in: body
type: string
description: "Jira board ID (numeric string)."
- name: sprint_id
in: body
type: string
description: "Jira sprint ID for the completed sprint."
steps:
- name: get-sprint-details
type: call
call: jira.get-sprint
with:
sprint_id: "{{sprint_id}}"
- name: get-completed-issues
type: call
call: jira.search-issues
with:
jql: "sprint = {{sprint_id}} AND status = Done"
- name: post-delivery-report
type: call
call: msteams-tech.send-message
with:
channel_id: "$secrets.teams_tech_channel_id"
text: "Sprint {{get-sprint-details.name}} delivery: {{get-completed-issues.total}} issues completed. Goal: {{get-sprint-details.goal}}."
consumes:
- type: http
namespace: jira
baseUri: "https://zurich.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: sprints
path: "/sprint/{{sprint_id}}"
inputParameters:
- name: sprint_id
in: path
operations:
- name: get-sprint
method: GET
- name: issues
path: "/search"
inputParameters:
- name: jql
in: query
operations:
- name: search-issues
method: GET
- type: http
namespace: msteams-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: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves Jira issue status including assignee and priority.
naftiko: "0.5"
info:
label: "Jira Ticket Status Lookup"
description: "Retrieves Jira issue status including assignee and priority."
tags:
- engineering
- jira
capability:
exposes:
- type: mcp
namespace: jira-ops
port: 8080
tools:
- name: get-ticket
description: "Look up Jira ticket."
inputParameters:
- name: key
in: body
type: string
description: "Issue key."
call: "jira.get-issue"
with:
key: "{{key}}"
outputParameters:
- name: status
type: string
mapping: "$.fields.status.name"
- name: assignee
type: string
mapping: "$.fields.assignee.displayName"
- name: priority
type: string
mapping: "$.fields.priority.name"
consumes:
- type: http
namespace: jira
baseUri: "https://zurichinsurance.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue/{{key}}"
inputParameters:
- name: key
in: path
operations:
- name: get-issue
method: GET
Retrieves an approved Workday job requisition for an insurance role and publishes it to LinkedIn Jobs for external advertising.
naftiko: "0.5"
info:
label: "LinkedIn Job Requisition Publishing"
description: "Retrieves an approved Workday job requisition for an insurance role and publishes it to LinkedIn Jobs for external advertising."
tags:
- hr
- recruiting
- workday
- linkedin
capability:
exposes:
- type: mcp
namespace: talent-acquisition
port: 8080
tools:
- name: post-job-to-linkedin
description: "Given a Workday job requisition ID, retrieve job details and publish the opening to LinkedIn Jobs. Use when an approved requisition for an underwriter, actuary, claims, or operations role is ready to advertise."
inputParameters:
- name: requisition_id
in: body
type: string
description: "Workday job requisition ID (e.g. JR-00011234)."
- name: linkedin_organization_id
in: body
type: string
description: "LinkedIn organization ID for the Zurich Insurance company page."
steps:
- name: get-requisition
type: call
call: workday.get-job-requisition
with:
requisition_id: "{{requisition_id}}"
- name: create-job-posting
type: call
call: linkedin.create-job-posting
with:
organization_id: "{{linkedin_organization_id}}"
title: "{{get-requisition.job_title}}"
description: "{{get-requisition.job_description}}"
location: "{{get-requisition.location}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: job-requisitions
path: "/zurich/jobRequisitions/{{requisition_id}}"
inputParameters:
- name: requisition_id
in: path
operations:
- name: get-job-requisition
method: GET
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: job-postings
path: "/jobPostings"
operations:
- name: create-job-posting
method: POST
When a new employee is created in Workday, opens a ServiceNow onboarding ticket, provisions Microsoft 365 access, and sends a Microsoft Teams welcome message with first-day instructions.
naftiko: "0.5"
info:
label: "New Employee Onboarding Orchestrator"
description: "When a new employee is created in Workday, opens a ServiceNow onboarding ticket, provisions Microsoft 365 access, and sends a Microsoft Teams welcome message with first-day instructions."
tags:
- hr
- onboarding
- workday
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-onboarding
port: 8080
tools:
- name: trigger-employee-onboarding
description: "Given a Workday employee ID and start date, orchestrate the full onboarding sequence across ServiceNow and Microsoft Teams. Invoke when a new underwriter, claims adjuster, actuary, or operations employee begins at Zurich Insurance."
inputParameters:
- name: workday_employee_id
in: body
type: string
description: "Workday worker ID for the new employee."
- name: start_date
in: body
type: string
description: "Employment start date in ISO 8601 format (YYYY-MM-DD)."
- name: business_unit
in: body
type: string
description: "Zurich business unit (e.g. Property Casualty, Life, Commercial Insurance)."
steps:
- name: get-worker
type: call
call: workday.get-worker
with:
worker_id: "{{workday_employee_id}}"
- name: open-onboarding-ticket
type: call
call: servicenow.create-incident
with:
category: hr_onboarding
short_description: "New employee onboarding: {{get-worker.full_name}} — {{business_unit}}"
assigned_group: IT_Onboarding
- name: send-welcome
type: call
call: msteams.send-message
with:
recipient_upn: "{{get-worker.work_email}}"
text: "Welcome to Zurich Insurance, {{get-worker.first_name}}! Your onboarding ticket is {{open-onboarding-ticket.number}}. Your start date is {{start_date}}."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/zurich/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://zurich.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: chats
path: "/users/{{upn}}/chats"
inputParameters:
- name: upn
in: path
operations:
- name: send-message
method: POST
Creates policy in Salesforce, generates documents, and sets up billing after underwriting approval.
naftiko: "0.5"
info:
label: "New Policy Issuance Workflow"
description: "Creates policy in Salesforce, generates documents, and sets up billing after underwriting approval."
tags:
- insurance
- policy
- underwriting
- salesforce
capability:
exposes:
- type: mcp
namespace: issuance-ops
port: 8080
tools:
- name: issue-policy
description: "Issue new policy."
inputParameters:
- name: app_id
in: body
type: string
description: "Application ID."
- name: product
in: body
type: string
description: "Product type."
- name: premium
in: body
type: number
description: "Premium."
steps:
- name: create
type: call
call: "salesforce.create-policy"
with:
app_id: "{{app_id}}"
product: "{{product}}"
premium: "{{premium}}"
- name: docs
type: call
call: "document-api.generate"
with:
policy: "{{create.policy_number}}"
- name: billing
type: call
call: "billing-api.create-schedule"
with:
policy: "{{create.policy_number}}"
premium: "{{premium}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://zurich.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.zurichinsurance.com/documents/v1"
authentication:
type: bearer
token: "$secrets.document_api_token"
resources:
- name: generation
path: "/generate"
operations:
- name: generate
method: POST
- type: http
namespace: billing-api
baseUri: "https://api.zurichinsurance.com/billing/v1"
authentication:
type: bearer
token: "$secrets.billing_api_token"
resources:
- name: schedules
path: "/billing-schedules"
operations:
- name: create-schedule
method: POST
Compares Okta access against Workday roles and creates Jira tickets for discrepancies.
naftiko: "0.5"
info:
label: "Okta System Access Review Workflow"
description: "Compares Okta access against Workday roles and creates Jira tickets for discrepancies."
tags:
- insurance
- okta
- workday
- jira
- compliance
capability:
exposes:
- type: mcp
namespace: access-rev
port: 8080
tools:
- name: review-access
description: "Review system access."
inputParameters:
- name: app
in: body
type: string
description: "Application."
steps:
- name: okta
type: call
call: "okta.list-users"
with:
app: "{{app}}"
- name: roles
type: call
call: "workday.get-roster"
with:
dept: "all"
- name: ticket
type: call
call: "jira.create-issue"
with:
project_key: "SEC"
issuetype: "Task"
summary: "Access review: {{app}}"
consumes:
- type: http
namespace: okta
baseUri: "https://zurichinsurance.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_api_token"
resources:
- name: app-users
path: "/apps/{{app}}/users"
inputParameters:
- name: app
in: path
operations:
- name: list-users
method: GET
- type: http
namespace: workday
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/zurich"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: roster
path: "/staffing/departmentRoster"
operations:
- name: get-roster
method: GET
- type: http
namespace: jira
baseUri: "https://zurichinsurance.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 Okta group memberships for a user returning groups and access.
naftiko: "0.5"
info:
label: "Okta User Group Membership Lookup"
description: "Retrieves Okta group memberships for a user returning groups and access."
tags:
- security
- okta
- compliance
capability:
exposes:
- type: mcp
namespace: identity-ops
port: 8080
tools:
- name: get-groups
description: "Look up Okta groups. Returns memberships."
inputParameters:
- name: email
in: body
type: string
description: "User email."
call: "okta.get-groups"
with:
email: "{{email}}"
outputParameters:
- name: groups
type: array
mapping: "$.groups"
- name: count
type: integer
mapping: "$.totalGroups"
consumes:
- type: http
namespace: okta
baseUri: "https://zurichinsurance.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_api_token"
resources:
- name: user-groups
path: "/users/{{email}}/groups"
inputParameters:
- name: email
in: path
operations:
- name: get-groups
method: GET
Retrieves current on-call engineer from PagerDuty returning primary and secondary contacts.
naftiko: "0.5"
info:
label: "PagerDuty On-Call Lookup"
description: "Retrieves current on-call engineer from PagerDuty returning primary and secondary contacts."
tags:
- engineering
- pagerduty
capability:
exposes:
- type: mcp
namespace: oncall-ops
port: 8080
tools:
- name: get-oncall
description: "Look up on-call schedule. Returns contacts."
inputParameters:
- name: schedule_id
in: body
type: string
description: "PagerDuty schedule ID."
call: "pagerduty.get-oncall"
with:
schedule_id: "{{schedule_id}}"
outputParameters:
- name: primary
type: string
mapping: "$.oncalls[0].user.name"
- name: email
type: string
mapping: "$.oncalls[0].user.email"
consumes:
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: oncalls
path: "/oncalls"
operations:
- name: get-oncall
method: GET
Updates payment method in billing and sends confirmation.
naftiko: "0.5"
info:
label: "Payment Method Update Workflow"
description: "Updates payment method in billing and sends confirmation."
tags:
- insurance
- policy
- billing
capability:
exposes:
- type: mcp
namespace: pay-ops
port: 8080
tools:
- name: update-method
description: "Update payment method."
inputParameters:
- name: policy
in: body
type: string
description: "Policy."
- name: method
in: body
type: string
description: "Method."
steps:
- name: update
type: call
call: "billing-api.update"
with:
policy: "{{policy}}"
method: "{{method}}"
- name: confirm
type: call
call: "notification-api.send"
with:
policy: "{{policy}}"
template: "payment-updated"
consumes:
- type: http
namespace: billing-api
baseUri: "https://api.zurichinsurance.com/billing/v1"
authentication:
type: bearer
token: "$secrets.billing_api_token"
resources:
- name: methods
path: "/policies/{{policy}}/payment-method"
inputParameters:
- name: policy
in: path
operations:
- name: update
method: PUT
- type: http
namespace: notification-api
baseUri: "https://api.zurichinsurance.com/notifications/v1"
authentication:
type: bearer
token: "$secrets.notification_token"
resources:
- name: notifications
path: "/send"
operations:
- name: send
method: POST
Retrieves current billing status including balance, next due date, and payment method.
naftiko: "0.5"
info:
label: "Policy Billing Status Lookup"
description: "Retrieves current billing status including balance, next due date, and payment method."
tags:
- insurance
- policy
- billing
capability:
exposes:
- type: mcp
namespace: billing-ops
port: 8080
tools:
- name: get-billing
description: "Look up billing status. Returns balance, due date, method."
inputParameters:
- name: policy_number
in: body
type: string
description: "Zurich Insurance policy number."
call: "billing-api.get-status"
with:
policy_number: "{{policy_number}}"
outputParameters:
- name: balance
type: number
mapping: "$.outstandingBalance"
- name: next_due
type: string
mapping: "$.nextDueDate"
- name: method
type: string
mapping: "$.paymentMethod"
consumes:
- type: http
namespace: billing-api
baseUri: "https://api.zurichinsurance.com/billing/v1"
authentication:
type: bearer
token: "$secrets.billing_api_token"
resources:
- name: status
path: "/policies/{{policy_number}}/billing-status"
inputParameters:
- name: policy_number
in: path
operations:
- name: get-status
method: GET
Calculates pro-rata refund, updates status in Salesforce, and logs cancellation in ServiceNow.
naftiko: "0.5"
info:
label: "Policy Cancellation Workflow"
description: "Calculates pro-rata refund, updates status in Salesforce, and logs cancellation in ServiceNow."
tags:
- insurance
- policy
- salesforce
- servicenow
capability:
exposes:
- type: mcp
namespace: cancel-ops
port: 8080
tools:
- name: process-cancel
description: "Process cancellation."
inputParameters:
- name: policy
in: body
type: string
description: "Policy number."
- name: reason
in: body
type: string
description: "Reason."
- name: date
in: body
type: string
description: "Effective date."
steps:
- name: refund
type: call
call: "billing-api.calc-refund"
with:
policy: "{{policy}}"
date: "{{date}}"
- name: update
type: call
call: "salesforce.cancel"
with:
policy: "{{policy}}"
reason: "{{reason}}"
- name: log
type: call
call: "servicenow.create-case"
with:
short_description: "Cancel: {{policy}}"
consumes:
- type: http
namespace: billing-api
baseUri: "https://api.zurichinsurance.com/billing/v1"
authentication:
type: bearer
token: "$secrets.billing_api_token"
resources:
- name: refunds
path: "/refunds/calculate"
operations:
- name: calc-refund
method: POST
- type: http
namespace: salesforce
baseUri: "https://zurich.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: policies
path: "/sobjects/Policy__c"
operations:
- name: cancel
method: PATCH
- type: http
namespace: servicenow
baseUri: "https://zurich.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cases
path: "/table/sn_customerservice_case"
operations:
- name: create-case
method: POST
Retrieves policy coverage details from Salesforce including limits, deductibles, and endorsements.
naftiko: "0.5"
info:
label: "Policy Coverage Details Lookup"
description: "Retrieves policy coverage details from Salesforce including limits, deductibles, and endorsements."
tags:
- insurance
- policy
- salesforce
capability:
exposes:
- type: mcp
namespace: policy-ops
port: 8080
tools:
- name: get-coverage
description: "Look up coverage for a policy. Returns limits, deductibles, endorsements."
inputParameters:
- name: policy_number
in: body
type: string
description: "Zurich Insurance policy number."
call: "salesforce.get-policy"
with:
policy_number: "{{policy_number}}"
outputParameters:
- name: limits
type: object
mapping: "$.coverageLimits"
- name: deductible
type: number
mapping: "$.deductible"
- name: endorsements
type: array
mapping: "$.endorsements"
consumes:
- type: http
namespace: salesforce
baseUri: "https://zurich.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: policies
path: "/sobjects/Policy__c/{{policy_number}}"
inputParameters:
- name: policy_number
in: path
operations:
- name: get-policy
method: GET
Retrieves a policy document by number and type returning URL and metadata.
naftiko: "0.5"
info:
label: "Policy Document Retrieval"
description: "Retrieves a policy document by number and type returning URL and metadata."
tags:
- insurance
- policy
- document-management
capability:
exposes:
- type: mcp
namespace: doc-ops
port: 8080
tools:
- name: get-document
description: "Retrieve policy document. Returns URL and metadata."
inputParameters:
- name: policy_number
in: body
type: string
description: "Zurich Insurance policy number."
- name: doc_type
in: body
type: string
description: "Type: declaration, endorsement, certificate."
call: "document-api.get-doc"
with:
policy_number: "{{policy_number}}"
doc_type: "{{doc_type}}"
outputParameters:
- name: url
type: string
mapping: "$.documentUrl"
- name: modified
type: string
mapping: "$.lastModified"
consumes:
- type: http
namespace: document-api
baseUri: "https://api.zurichinsurance.com/documents/v1"
authentication:
type: bearer
token: "$secrets.document_api_token"
resources:
- name: documents
path: "/policies/{{policy_number}}/documents"
inputParameters:
- name: policy_number
in: path
operations:
- name: get-doc
method: GET
Validates endorsement, updates policy in Salesforce, and recalculates premium.
naftiko: "0.5"
info:
label: "Policy Endorsement Processing Workflow"
description: "Validates endorsement, updates policy in Salesforce, and recalculates premium."
tags:
- insurance
- policy
- salesforce
- underwriting
capability:
exposes:
- type: mcp
namespace: endorse-ops
port: 8080
tools:
- name: process-endorsement
description: "Process endorsement."
inputParameters:
- name: policy
in: body
type: string
description: "Policy."
- name: type
in: body
type: string
description: "Endorsement type."
- name: date
in: body
type: string
description: "Effective date."
steps:
- name: validate
type: call
call: "underwriting.validate"
with:
policy: "{{policy}}"
type: "{{type}}"
- name: update
type: call
call: "salesforce.update"
with:
policy: "{{policy}}"
type: "{{type}}"
- name: recalc
type: call
call: "rating.recalc"
with:
policy: "{{policy}}"
consumes:
- type: http
namespace: underwriting
baseUri: "https://api.zurichinsurance.com/underwriting/v2"
authentication:
type: bearer
token: "$secrets.underwriting_api_token"
resources:
- name: endorsements
path: "/endorsements/validate"
operations:
- name: validate
method: POST
- type: http
namespace: salesforce
baseUri: "https://zurich.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: policies
path: "/sobjects/Policy__c"
operations:
- name: update
method: PATCH
- type: http
namespace: rating
baseUri: "https://api.zurichinsurance.com/rating/v2"
authentication:
type: bearer
token: "$secrets.rating_token"
resources:
- name: recalc
path: "/recalculate"
operations:
- name: recalc
method: POST
Identifies at-risk policies, triggers Marketo campaigns, and creates agent tasks in Jira.
naftiko: "0.5"
info:
label: "Policy Lapse Prevention Workflow"
description: "Identifies at-risk policies, triggers Marketo campaigns, and creates agent tasks in Jira."
tags:
- insurance
- policy
- salesforce
- marketo
- jira
capability:
exposes:
- type: mcp
namespace: lapse-ops
port: 8080
tools:
- name: prevent-lapse
description: "Prevent policy lapse."
inputParameters:
- name: days
in: body
type: integer
description: "Days until lapse."
steps:
- name: at-risk
type: call
call: "salesforce.query-lapsing"
with:
days: "{{days}}"
- name: campaign
type: call
call: "marketo.trigger"
with:
campaign_id: "$secrets.lapse_campaign"
- name: tasks
type: call
call: "jira.create-issue"
with:
project_key: "RETENTION"
issuetype: "Task"
summary: "Lapse prevention"
consumes:
- type: http
namespace: salesforce
baseUri: "https://zurich.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: queries
path: "/query"
operations:
- name: query-lapsing
method: GET
- type: http
namespace: marketo
baseUri: "https://zurichinsurance.mktorest.com/rest/v1"
authentication:
type: bearer
token: "$secrets.marketo_token"
resources:
- name: campaigns
path: "/campaigns/trigger.json"
operations:
- name: trigger
method: POST
- type: http
namespace: jira
baseUri: "https://zurichinsurance.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Retrieves premium breakdown returning base rate, risk factors, and final premium.
naftiko: "0.5"
info:
label: "Policy Premium Breakdown Lookup"
description: "Retrieves premium breakdown returning base rate, risk factors, and final premium."
tags:
- insurance
- policy
- actuarial
capability:
exposes:
- type: mcp
namespace: premium-ops
port: 8080
tools:
- name: get-premium
description: "Look up premium breakdown. Returns base rate, factors, final premium."
inputParameters:
- name: policy_number
in: body
type: string
description: "Zurich Insurance policy number."
call: "rating-engine.get-premium"
with:
policy_number: "{{policy_number}}"
outputParameters:
- name: base_rate
type: number
mapping: "$.baseRate"
- name: risk_factors
type: array
mapping: "$.riskFactors"
- name: final_premium
type: number
mapping: "$.finalAnnualPremium"
consumes:
- type: http
namespace: rating-engine
baseUri: "https://api.zurichinsurance.com/rating/v2"
authentication:
type: bearer
token: "$secrets.rating_engine_token"
resources:
- name: premiums
path: "/policies/{{policy_number}}/premium"
inputParameters:
- name: policy_number
in: path
operations:
- name: get-premium
method: GET
Runs rating engine and creates quote record in Salesforce.
naftiko: "0.5"
info:
label: "Policy Quote Generation Workflow"
description: "Runs rating engine and creates quote record in Salesforce."
tags:
- insurance
- underwriting
- policy
- salesforce
capability:
exposes:
- type: mcp
namespace: quote-ops
port: 8080
tools:
- name: generate-quote
description: "Generate quote."
inputParameters:
- name: product
in: body
type: string
description: "Product."
- name: data
in: body
type: string
description: "Applicant data."
steps:
- name: rate
type: call
call: "rating.quote"
with:
product: "{{product}}"
data: "{{data}}"
- name: create
type: call
call: "salesforce.create-quote"
with:
product: "{{product}}"
premium: "{{rate.premium}}"
consumes:
- type: http
namespace: rating
baseUri: "https://api.zurichinsurance.com/rating/v2"
authentication:
type: bearer
token: "$secrets.rating_token"
resources:
- name: quotes
path: "/quote"
operations:
- name: quote
method: POST
- type: http
namespace: salesforce
baseUri: "https://zurich.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: quotes
path: "/sobjects/Quote__c"
operations:
- name: create-quote
method: POST
Verifies eligibility, calculates back premium, and reinstates in Salesforce.
naftiko: "0.5"
info:
label: "Policy Reinstatement Workflow"
description: "Verifies eligibility, calculates back premium, and reinstates in Salesforce."
tags:
- insurance
- policy
- salesforce
- billing
capability:
exposes:
- type: mcp
namespace: reinstate-ops
port: 8080
tools:
- name: reinstate
description: "Reinstate policy."
inputParameters:
- name: policy
in: body
type: string
description: "Lapsed policy."
steps:
- name: check
type: call
call: "underwriting.check"
with:
policy: "{{policy}}"
- name: calc
type: call
call: "billing-api.calc"
with:
policy: "{{policy}}"
- name: reinstate
type: call
call: "salesforce.reinstate"
with:
policy: "{{policy}}"
premium: "{{calc.amount}}"
consumes:
- type: http
namespace: underwriting
baseUri: "https://api.zurichinsurance.com/underwriting/v2"
authentication:
type: bearer
token: "$secrets.underwriting_api_token"
resources:
- name: reinstatement
path: "/reinstatement/eligibility"
operations:
- name: check
method: POST
- type: http
namespace: billing-api
baseUri: "https://api.zurichinsurance.com/billing/v1"
authentication:
type: bearer
token: "$secrets.billing_api_token"
resources:
- name: back-premium
path: "/back-premium/calculate"
operations:
- name: calc
method: POST
- type: http
namespace: salesforce
baseUri: "https://zurich.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: policies
path: "/sobjects/Policy__c"
operations:
- name: reinstate
method: PATCH
Pulls claims history from Snowflake, recalculates risk, updates renewal offer in Salesforce, and notifies agent.
naftiko: "0.5"
info:
label: "Policy Renewal Underwriting Review"
description: "Pulls claims history from Snowflake, recalculates risk, updates renewal offer in Salesforce, and notifies agent."
tags:
- insurance
- underwriting
- policy
- snowflake
- salesforce
capability:
exposes:
- type: mcp
namespace: renewal-ops
port: 8080
tools:
- name: process-renewal
description: "Process renewal review. Pulls history, recalcs, updates."
inputParameters:
- name: policy_number
in: body
type: string
description: "Policy number."
steps:
- name: history
type: call
call: "snowflake.query"
with:
query: "SELECT * FROM CLAIMS WHERE policy='{{policy_number}}'"
- name: recalc
type: call
call: "underwriting.calculate"
with:
policy_number: "{{policy_number}}"
- name: update
type: call
call: "salesforce.update-renewal"
with:
policy_number: "{{policy_number}}"
premium: "{{recalc.premium}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://zurich.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: salesforce
baseUri: "https://zurich.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: renewals
path: "/sobjects/Renewal__c"
operations:
- name: update-renewal
method: PATCH
Retrieves complete claims history from Snowflake including dates, types, and outcomes.
naftiko: "0.5"
info:
label: "Policyholder Claims History Lookup"
description: "Retrieves complete claims history from Snowflake including dates, types, and outcomes."
tags:
- insurance
- claims
- snowflake
capability:
exposes:
- type: mcp
namespace: claims-hist
port: 8080
tools:
- name: get-history
description: "Look up claims history. Returns all claims."
inputParameters:
- name: customer_id
in: body
type: string
description: "Zurich Insurance customer ID."
call: "snowflake.query-claims"
with:
customer_id: "{{customer_id}}"
outputParameters:
- name: total
type: integer
mapping: "$.totalClaims"
- name: claims
type: array
mapping: "$.claims"
- name: paid
type: number
mapping: "$.totalPaid"
consumes:
- type: http
namespace: snowflake
baseUri: "https://zurich.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: queries
path: "/statements"
operations:
- name: query-claims
method: POST
Triggers a Power BI dataset refresh for actuarial reserve dashboards after Snowflake data loads and notifies the actuarial team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Power BI Actuarial Reserve Dashboard Refresh"
description: "Triggers a Power BI dataset refresh for actuarial reserve dashboards after Snowflake data loads and notifies the actuarial team via Microsoft Teams."
tags:
- data
- analytics
- power-bi
- microsoft-teams
- actuarial
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 refresh of the actuarial reserve dashboard and notify the actuarial team in Microsoft Teams. Use after nightly Snowflake reserve calculations complete."
inputParameters:
- name: workspace_id
in: body
type: string
description: "Power BI workspace (group) ID containing the actuarial dataset."
- name: dataset_id
in: body
type: string
description: "Power BI dataset ID for the actuarial reserve dashboard."
- name: dashboard_name
in: body
type: string
description: "Human-readable name of the actuarial dashboard (e.g. Loss Reserve Monitor)."
steps:
- name: trigger-refresh
type: call
call: powerbi.trigger-dataset-refresh
with:
group_id: "{{workspace_id}}"
dataset_id: "{{dataset_id}}"
- name: notify-actuarial
type: call
call: msteams-actuarial.send-message
with:
channel_id: "$secrets.teams_actuarial_channel_id"
text: "Actuarial dashboard refresh triggered: {{dashboard_name}} (dataset {{dataset_id}}). Status: {{trigger-refresh.status}}."
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: dataset-refreshes
path: "/groups/{{group_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: group_id
in: path
- name: dataset_id
in: path
operations:
- name: trigger-dataset-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: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Detects Confluence updates and broadcasts to staff via Microsoft Teams.
naftiko: "0.5"
info:
label: "Procedure Update Notifier Workflow"
description: "Detects Confluence updates and broadcasts to staff via Microsoft Teams."
tags:
- insurance
- confluence
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: proc-notify
port: 8080
tools:
- name: notify-update
description: "Notify procedure updates."
inputParameters:
- name: page_id
in: body
type: string
description: "Page ID."
steps:
- name: history
type: call
call: "confluence.get-history"
with:
page_id: "{{page_id}}"
- name: notify
type: call
call: "msteams.post"
with:
channel_id: "$secrets.all_staff"
text: "Updated: {{history.title}}"
consumes:
- type: http
namespace: confluence
baseUri: "https://zurichinsurance.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: history
path: "/content/{{page_id}}/history"
inputParameters:
- name: page_id
in: path
operations:
- name: get-history
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
Checks flood and wildfire risk for a property and logs in underwriting.
naftiko: "0.5"
info:
label: "Property Hazard Check Workflow"
description: "Checks flood and wildfire risk for a property and logs in underwriting."
tags:
- insurance
- underwriting
- homeowner
capability:
exposes:
- type: mcp
namespace: hazard-ops
port: 8080
tools:
- name: check-hazards
description: "Check property hazards."
inputParameters:
- name: app_id
in: body
type: string
description: "Application."
- name: address
in: body
type: string
description: "Address."
- name: zip
in: body
type: string
description: "ZIP."
steps:
- name: flood
type: call
call: "hazard-api.check-flood"
with:
address: "{{address}}"
zip: "{{zip}}"
- name: wildfire
type: call
call: "hazard-api.check-wildfire"
with:
zip: "{{zip}}"
- name: log
type: call
call: "underwriting.log"
with:
app_id: "{{app_id}}"
flood: "{{flood.zone}}"
consumes:
- type: http
namespace: hazard-api
baseUri: "https://api.zurichinsurance.com/hazards/v1"
authentication:
type: bearer
token: "$secrets.hazard_token"
resources:
- name: flood
path: "/flood-zones"
operations:
- name: check-flood
method: GET
- type: http
namespace: underwriting
baseUri: "https://api.zurichinsurance.com/underwriting/v2"
authentication:
type: bearer
token: "$secrets.underwriting_api_token"
resources:
- name: hazards
path: "/hazard-assessments"
operations:
- name: log
method: POST
Enriches Salesforce prospect with firmographic data from ZoomInfo.
naftiko: "0.5"
info:
label: "Prospect Enrichment Workflow"
description: "Enriches Salesforce prospect with firmographic data from ZoomInfo."
tags:
- insurance
- sales
- zoominfo
- salesforce
capability:
exposes:
- type: mcp
namespace: enrichment
port: 8080
tools:
- name: enrich
description: "Enrich prospect."
inputParameters:
- name: lead_id
in: body
type: string
description: "Lead ID."
- name: company
in: body
type: string
description: "Company."
steps:
- name: search
type: call
call: "zoominfo.search"
with:
company: "{{company}}"
- name: update
type: call
call: "salesforce.update-lead"
with:
lead_id: "{{lead_id}}"
industry: "{{search.industry}}"
consumes:
- type: http
namespace: zoominfo
baseUri: "https://api.zoominfo.com"
authentication:
type: bearer
token: "$secrets.zoominfo_token"
resources:
- name: companies
path: "/search/company"
operations:
- name: search
method: POST
- type: http
namespace: salesforce
baseUri: "https://zurich.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: leads
path: "/sobjects/Lead/{{lead_id}}"
inputParameters:
- name: lead_id
in: path
operations:
- name: update-lead
method: PATCH
Compiles actuarial data from Snowflake, generates filing documents, and logs submission.
naftiko: "0.5"
info:
label: "Regulatory Rate Filing Workflow"
description: "Compiles actuarial data from Snowflake, generates filing documents, and logs submission."
tags:
- insurance
- compliance
- actuarial
- snowflake
capability:
exposes:
- type: mcp
namespace: rate-filing
port: 8080
tools:
- name: submit-filing
description: "Submit rate filing."
inputParameters:
- name: product
in: body
type: string
description: "Product."
- name: state
in: body
type: string
description: "State."
- name: change
in: body
type: number
description: "Rate change %"
steps:
- name: compile
type: call
call: "snowflake.query"
with:
query: "CALL COMPILE_RATE_FILING('{{product}}','{{state}}')"
- name: gen
type: call
call: "document-api.generate"
with:
product: "{{product}}"
state: "{{state}}"
- name: log
type: call
call: "compliance-api.log"
with:
product: "{{product}}"
state: "{{state}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://zurich.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: document-api
baseUri: "https://api.zurichinsurance.com/documents/v1"
authentication:
type: bearer
token: "$secrets.document_api_token"
resources:
- name: filings
path: "/generate/rate-filing"
operations:
- name: generate
method: POST
- type: http
namespace: compliance-api
baseUri: "https://api.zurichinsurance.com/compliance/v1"
authentication:
type: bearer
token: "$secrets.compliance_api_token"
resources:
- name: filings
path: "/filings"
operations:
- name: log
method: POST
Queries Snowflake for treaty data, validates terms, and publishes to Confluence.
naftiko: "0.5"
info:
label: "Reinsurance Treaty Compliance Report"
description: "Queries Snowflake for treaty data, validates terms, and publishes to Confluence."
tags:
- insurance
- actuarial
- compliance
- snowflake
- confluence
capability:
exposes:
- type: mcp
namespace: reinsurance-ops
port: 8080
tools:
- name: treaty-report
description: "Generate treaty report."
inputParameters:
- name: treaty
in: body
type: string
description: "Treaty ID."
- name: period
in: body
type: string
description: "YYYY-Q."
steps:
- name: query
type: call
call: "snowflake.query"
with:
query: "SELECT * FROM TREATY WHERE treaty='{{treaty}}'"
- name: validate
type: call
call: "reinsurance-api.validate"
with:
treaty: "{{treaty}}"
- name: publish
type: call
call: "confluence.create-page"
with:
space_key: "REINSURANCE"
title: "Treaty {{treaty}} - {{period}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://zurich.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: reinsurance-api
baseUri: "https://api.zurichinsurance.com/reinsurance/v1"
authentication:
type: bearer
token: "$secrets.reinsurance_token"
resources:
- name: validation
path: "/treaties/validate"
operations:
- name: validate
method: POST
- type: http
namespace: confluence
baseUri: "https://zurichinsurance.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
Checks coverage, creates vendor auth, and updates claim in ServiceNow.
naftiko: "0.5"
info:
label: "Rental Car Authorization Workflow"
description: "Checks coverage, creates vendor auth, and updates claim in ServiceNow."
tags:
- insurance
- claims
- servicenow
capability:
exposes:
- type: mcp
namespace: rental-ops
port: 8080
tools:
- name: auth-rental
description: "Authorize rental."
inputParameters:
- name: claim_id
in: body
type: string
description: "Claim."
- name: days
in: body
type: integer
description: "Days."
steps:
- name: check
type: call
call: "claims-api.check-rental"
with:
claim_id: "{{claim_id}}"
- name: auth
type: call
call: "rental-api.create-auth"
with:
claim_id: "{{claim_id}}"
days: "{{days}}"
- name: update
type: call
call: "servicenow.update"
with:
claim_id: "{{claim_id}}"
rental: "{{auth.id}}"
consumes:
- type: http
namespace: claims-api
baseUri: "https://api.zurichinsurance.com/claims/v2"
authentication:
type: bearer
token: "$secrets.claims_api_token"
resources:
- name: rental
path: "/claims/{{claim_id}}/rental"
inputParameters:
- name: claim_id
in: path
operations:
- name: check-rental
method: GET
- type: http
namespace: rental-api
baseUri: "https://api.zurichinsurance.com/rental/v1"
authentication:
type: bearer
token: "$secrets.rental_token"
resources:
- name: auths
path: "/authorizations"
operations:
- name: create-auth
method: POST
- type: http
namespace: servicenow
baseUri: "https://zurich.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cases
path: "/table/sn_customerservice_case/{{claim_id}}"
inputParameters:
- name: claim_id
in: path
operations:
- name: update
method: PATCH
Triggers Marketo retention campaigns and logs in Salesforce.
naftiko: "0.5"
info:
label: "Retention Campaign Launcher"
description: "Triggers Marketo retention campaigns and logs in Salesforce."
tags:
- insurance
- policy
- marketo
- salesforce
capability:
exposes:
- type: mcp
namespace: retention-ops
port: 8080
tools:
- name: launch-retention
description: "Launch retention campaign."
inputParameters:
- name: segment
in: body
type: string
description: "Segment."
- name: campaign
in: body
type: string
description: "Campaign ID."
steps:
- name: trigger
type: call
call: "marketo.trigger"
with:
campaign_id: "{{campaign}}"
segment: "{{segment}}"
- name: log
type: call
call: "salesforce.create-log"
with:
campaign: "Retention: {{segment}}"
consumes:
- type: http
namespace: marketo
baseUri: "https://zurichinsurance.mktorest.com/rest/v1"
authentication:
type: bearer
token: "$secrets.marketo_token"
resources:
- name: campaigns
path: "/campaigns/{{campaign}}/trigger.json"
inputParameters:
- name: campaign
in: path
operations:
- name: trigger
method: POST
- type: http
namespace: salesforce
baseUri: "https://zurich.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: logs
path: "/sobjects/CampaignLog__c"
operations:
- name: create-log
method: POST
Retrieves customer account from Salesforce including contact details and policy count.
naftiko: "0.5"
info:
label: "Salesforce Account Lookup"
description: "Retrieves customer account from Salesforce including contact details and policy count."
tags:
- insurance
- salesforce
- crm
capability:
exposes:
- type: mcp
namespace: account-ops
port: 8080
tools:
- name: get-account
description: "Look up Salesforce account."
inputParameters:
- name: account_id
in: body
type: string
description: "Account ID."
call: "salesforce.get-account"
with:
account_id: "{{account_id}}"
outputParameters:
- name: name
type: string
mapping: "$.Name"
- name: policies
type: integer
mapping: "$.Policy_Count__c"
- name: tier
type: string
mapping: "$.Account_Tier__c"
consumes:
- type: http
namespace: salesforce
baseUri: "https://zurich.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
When a Salesforce claims case is escalated to critical priority, creates a ServiceNow P1 incident, notifies the claims manager via Microsoft Teams, and logs the escalation in Snowflake.
naftiko: "0.5"
info:
label: "Salesforce Claims Case Escalation"
description: "When a Salesforce claims case is escalated to critical priority, creates a ServiceNow P1 incident, notifies the claims manager via Microsoft Teams, and logs the escalation in Snowflake."
tags:
- claims
- insurance
- salesforce
- servicenow
- microsoft-teams
- snowflake
- escalation
capability:
exposes:
- type: mcp
namespace: claims-escalation
port: 8080
tools:
- name: escalate-claims-case
description: "Given a Salesforce claims case ID, retrieve case details, create a ServiceNow P1 incident, notify the claims manager in Microsoft Teams, and log the escalation to Snowflake. Invoke when a claims case is marked critical priority."
inputParameters:
- name: case_id
in: body
type: string
description: "Salesforce claims case ID (18-character)."
- name: manager_upn
in: body
type: string
description: "Microsoft UPN of the claims manager to notify."
steps:
- name: get-case
type: call
call: salesforce-esc.get-case
with:
case_id: "{{case_id}}"
- name: create-p1-incident
type: call
call: servicenow-esc.create-incident
with:
category: claims_management
impact: 1
urgency: 1
short_description: "Critical claim escalation: {{get-case.subject}}"
description: "Salesforce case {{case_id}}: {{get-case.description}}\nPolicy: {{get-case.policy_number}}\nClaimant: {{get-case.contact_name}}"
- name: notify-manager
type: call
call: msteams-esc.send-message
with:
recipient_upn: "{{manager_upn}}"
text: "Critical claim escalated: {{get-case.subject}} | Policy: {{get-case.policy_number}} | Claimant: {{get-case.contact_name}} | ServiceNow: {{create-p1-incident.number}}"
consumes:
- type: http
namespace: salesforce-esc
baseUri: "https://zurich.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/sobjects/Case/{{case_id}}"
inputParameters:
- name: case_id
in: path
operations:
- name: get-case
method: GET
- type: http
namespace: servicenow-esc
baseUri: "https://zurich.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-esc
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chats
path: "/users/{{upn}}/chats"
inputParameters:
- name: upn
in: path
operations:
- name: send-message
method: POST
When a Salesforce NPS survey response is marked as a detractor, creates a recovery case and notifies the account manager via Microsoft Teams with recovery instructions.
naftiko: "0.5"
info:
label: "Salesforce Customer NPS Detractor Recovery"
description: "When a Salesforce NPS survey response is marked as a detractor, creates a recovery case and notifies the account manager via Microsoft Teams with recovery instructions."
tags:
- customer-experience
- salesforce
- microsoft-teams
- nps
- insurance
capability:
exposes:
- type: mcp
namespace: nps-recovery
port: 8080
tools:
- name: handle-nps-detractor
description: "Given a Salesforce survey response ID and NPS score, retrieve the policyholder account details, create a recovery case, and notify the account manager in Microsoft Teams. Invoke when an NPS score of 0-6 is submitted by a policyholder."
inputParameters:
- name: survey_response_id
in: body
type: string
description: "Salesforce survey response record ID."
- name: nps_score
in: body
type: integer
description: "NPS score submitted (0-10)."
steps:
- name: get-survey-response
type: call
call: salesforce-nps.get-survey-response
with:
response_id: "{{survey_response_id}}"
- name: create-recovery-case
type: call
call: salesforce-recovery.create-case
with:
account_id: "{{get-survey-response.account_id}}"
subject: "NPS Detractor Recovery: {{get-survey-response.account_name}} — score {{nps_score}}"
type: NPS_Recovery
- name: notify-account-manager
type: call
call: msteams-am.send-message
with:
recipient_upn: "{{get-survey-response.account_manager_upn}}"
text: "NPS detractor alert: {{get-survey-response.account_name}} scored {{nps_score}}. Recovery case: {{create-recovery-case.case_number}}. Please contact within 24 hours."
consumes:
- type: http
namespace: salesforce-nps
baseUri: "https://zurich.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: survey-responses
path: "/sobjects/SurveyQuestionResponse/{{response_id}}"
inputParameters:
- name: response_id
in: path
operations:
- name: get-survey-response
method: GET
- type: http
namespace: salesforce-recovery
baseUri: "https://zurich.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/sobjects/Case"
operations:
- name: create-case
method: POST
- type: http
namespace: msteams-am
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chats
path: "/users/{{upn}}/chats"
inputParameters:
- name: upn
in: path
operations:
- name: send-message
method: POST
Converts a qualified Salesforce insurance quote into an opportunity, notifies the assigned underwriter via Microsoft Teams, and logs the conversion in Snowflake for pipeline tracking.
naftiko: "0.5"
info:
label: "Salesforce Policy Quote to Opportunity Conversion"
description: "Converts a qualified Salesforce insurance quote into an opportunity, notifies the assigned underwriter via Microsoft Teams, and logs the conversion in Snowflake for pipeline tracking."
tags:
- sales
- insurance
- salesforce
- snowflake
- microsoft-teams
- underwriting
capability:
exposes:
- type: mcp
namespace: quote-to-opportunity
port: 8080
tools:
- name: convert-quote-to-opportunity
description: "Given a Salesforce quote ID and underwriter UPN, retrieve quote details, create a linked opportunity, notify the underwriter in Microsoft Teams, and log the conversion to Snowflake. Invoke when a commercial insurance quote is approved and ready for underwriting."
inputParameters:
- name: quote_id
in: body
type: string
description: "Salesforce quote record ID (18-character)."
- name: underwriter_upn
in: body
type: string
description: "Microsoft UPN of the assigned underwriter."
steps:
- name: get-quote
type: call
call: salesforce-quote.get-quote
with:
quote_id: "{{quote_id}}"
- name: create-opportunity
type: call
call: salesforce-opp.create-opportunity
with:
name: "{{get-quote.account_name}} — {{get-quote.product_line}}"
account_id: "{{get-quote.account_id}}"
amount: "{{get-quote.total_premium}}"
stage: Underwriting
- name: notify-underwriter
type: call
call: msteams-uw-notify.send-message
with:
recipient_upn: "{{underwriter_upn}}"
text: "New opportunity for underwriting: {{get-quote.account_name}} — {{get-quote.product_line}} — Premium {{get-quote.total_premium}}. Salesforce opportunity: {{create-opportunity.id}}."
consumes:
- type: http
namespace: salesforce-quote
baseUri: "https://zurich.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: quotes
path: "/sobjects/Quote/{{quote_id}}"
inputParameters:
- name: quote_id
in: path
operations:
- name: get-quote
method: GET
- type: http
namespace: salesforce-opp
baseUri: "https://zurich.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity"
operations:
- name: create-opportunity
method: POST
- type: http
namespace: msteams-uw-notify
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chats
path: "/users/{{upn}}/chats"
inputParameters:
- name: upn
in: path
operations:
- name: send-message
method: POST
Retrieves upcoming policy renewals from Salesforce, writes a renewal forecast snapshot to Snowflake, and posts a digest to the underwriting Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Salesforce Policy Renewal Pipeline Digest"
description: "Retrieves upcoming policy renewals from Salesforce, writes a renewal forecast snapshot to Snowflake, and posts a digest to the underwriting Microsoft Teams channel."
tags:
- insurance
- underwriting
- salesforce
- snowflake
- microsoft-teams
- reporting
capability:
exposes:
- type: mcp
namespace: underwriting-reporting
port: 8080
tools:
- name: digest-policy-renewals
description: "Given a renewal window in days, retrieve upcoming policy renewals from Salesforce, persist the forecast to Snowflake, and post a summary to the underwriting Teams channel. Use for weekly renewal pipeline management."
inputParameters:
- name: renewal_window_days
in: body
type: integer
description: "Number of days ahead to check for upcoming renewals (e.g. 30)."
- name: product_line
in: body
type: string
description: "Insurance product line to filter (e.g. Property, Casualty, Liability)."
steps:
- name: get-renewals
type: call
call: salesforce-renewals.search-renewals
with:
renewal_window_days: "{{renewal_window_days}}"
product_line: "{{product_line}}"
- name: write-forecast
type: call
call: snowflake.insert-row
with:
table: "UNDERWRITING.RENEWAL_FORECASTS"
product_line: "{{product_line}}"
renewal_count: "{{get-renewals.totalSize}}"
total_premium: "{{get-renewals.total_premium}}"
- name: post-digest
type: call
call: msteams-uw.send-message
with:
channel_id: "$secrets.teams_uw_channel_id"
text: "Policy renewal digest (next {{renewal_window_days}} days, {{product_line}}): {{get-renewals.totalSize}} renewals, total premium {{get-renewals.total_premium}}."
consumes:
- type: http
namespace: salesforce-renewals
baseUri: "https://zurich.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: renewals
path: "/query"
inputParameters:
- name: q
in: query
operations:
- name: search-renewals
method: GET
- type: http
namespace: snowflake
baseUri: "https://zurich.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: insert-row
method: POST
- type: http
namespace: msteams-uw
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves a pending SAP Concur expense report and routes an approval notification to the manager via Microsoft Teams with expense details for review.
naftiko: "0.5"
info:
label: "SAP Concur Expense Report Approval Routing"
description: "Retrieves a pending SAP Concur expense report and routes an approval notification to the manager via Microsoft Teams with expense details for review."
tags:
- finance
- sap
- microsoft-teams
- expense-management
- approval
capability:
exposes:
- type: mcp
namespace: expense-approval
port: 8080
tools:
- name: route-expense-for-approval
description: "Given a Concur expense report ID and manager UPN, retrieve expense report details and send an approval card in Microsoft Teams. Use when expense reports enter the pending approval queue."
inputParameters:
- name: expense_report_id
in: body
type: string
description: "SAP Concur expense report ID."
- name: manager_upn
in: body
type: string
description: "Microsoft UPN of the approving manager."
steps:
- name: get-expense-report
type: call
call: concur.get-expense-report
with:
report_id: "{{expense_report_id}}"
- name: notify-manager
type: call
call: msteams-exp.send-message
with:
recipient_upn: "{{manager_upn}}"
text: "Expense report pending approval: {{get-expense-report.name}} submitted by {{get-expense-report.employee_name}}, total {{get-expense-report.total_amount}} {{get-expense-report.currency}}. Review and approve in Concur."
consumes:
- type: http
namespace: concur
baseUri: "https://www.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_token"
resources:
- name: expense-reports
path: "/expense/reports/{{report_id}}"
inputParameters:
- name: report_id
in: path
operations:
- name: get-expense-report
method: GET
- type: http
namespace: msteams-exp
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chats
path: "/users/{{upn}}/chats"
inputParameters:
- name: upn
in: path
operations:
- name: send-message
method: POST
Queries SAP for open items that would block period close, posts a readiness summary to the finance Microsoft Teams channel, and creates a ServiceNow task for each blocking item.
naftiko: "0.5"
info:
label: "SAP General Ledger Period Close Readiness"
description: "Queries SAP for open items that would block period close, posts a readiness summary to the finance Microsoft Teams channel, and creates a ServiceNow task for each blocking item."
tags:
- finance
- sap
- servicenow
- microsoft-teams
- period-close
capability:
exposes:
- type: mcp
namespace: finance-period-close
port: 8080
tools:
- name: check-period-close-readiness
description: "Given a SAP company code and fiscal period, identify GL open items blocking period close, create ServiceNow tasks for blockers, and post a readiness summary to the finance Teams channel. Use at month-end for group reporting close."
inputParameters:
- name: company_code
in: body
type: string
description: "SAP company code (e.g. ZIC1 for Zurich Insurance US)."
- name: fiscal_period
in: body
type: string
description: "Fiscal period in YYYYMM format (e.g. 202503)."
steps:
- name: get-open-items
type: call
call: sap.get-gl-open-items
with:
company_code: "{{company_code}}"
fiscal_period: "{{fiscal_period}}"
- name: create-close-task
type: call
call: servicenow-finance.create-task
with:
category: finance_period_close
short_description: "Period close blocker: {{company_code}} — {{fiscal_period}}"
description: "Open GL items: {{get-open-items.open_count}}, total {{get-open-items.total_amount}} {{get-open-items.currency}}"
- name: notify-finance
type: call
call: msteams-finance.send-message
with:
channel_id: "$secrets.teams_finance_channel_id"
text: "Period close readiness {{company_code}}/{{fiscal_period}}: {{get-open-items.open_count}} blocking items. ServiceNow: {{create-close-task.number}}."
consumes:
- type: http
namespace: sap
baseUri: "https://zic-s4.sap.com/sap/opu/odata/sap/ZFI_GL_CLOSE_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: gl-open-items
path: "/GLOpenItemSet"
inputParameters:
- name: company_code
in: query
- name: fiscal_period
in: query
operations:
- name: get-gl-open-items
method: GET
- type: http
namespace: servicenow-finance
baseUri: "https://zurich.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/sc_task"
operations:
- name: create-task
method: POST
- type: http
namespace: msteams-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: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Reconciles invoices against POs in SAP and creates ServiceNow tickets.
naftiko: "0.5"
info:
label: "SAP Invoice Reconciliation Workflow"
description: "Reconciles invoices against POs in SAP and creates ServiceNow tickets."
tags:
- finance
- sap
- servicenow
capability:
exposes:
- type: mcp
namespace: invoice-ops
port: 8080
tools:
- name: reconcile
description: "Reconcile invoices."
inputParameters:
- name: vendor
in: body
type: string
description: "Vendor."
- name: period
in: body
type: string
description: "YYYY-MM."
steps:
- name: invoices
type: call
call: "sap.get-invoices"
with:
vendor: "{{vendor}}"
period: "{{period}}"
- name: pos
type: call
call: "sap.get-pos"
with:
vendor: "{{vendor}}"
period: "{{period}}"
- name: ticket
type: call
call: "servicenow.create-case"
with:
short_description: "Recon: {{vendor}} - {{period}}"
consumes:
- type: http
namespace: sap
baseUri: "https://zurichinsurance-sap.s4hana.cloud.sap/api/v1"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: invoices
path: "/invoices"
operations:
- name: get-invoices
method: GET
- type: http
namespace: servicenow
baseUri: "https://zurich.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cases
path: "/table/sn_customerservice_case"
operations:
- name: create-case
method: POST
Looks up a SAP purchase order by PO number and returns header status, supplier name, and total value for procurement and accounts payable review.
naftiko: "0.5"
info:
label: "SAP Purchase Order Lookup for Procurement"
description: "Looks up a SAP purchase order by PO number and returns header status, supplier name, and total value for procurement and accounts payable review."
tags:
- procurement
- finance
- sap
- purchase-order
capability:
exposes:
- type: mcp
namespace: procurement-ops
port: 8080
tools:
- name: get-purchase-order
description: "Given a SAP PO number, return header status, supplier details, total value, and currency. Use for procurement tracking and accounts payable reconciliation."
inputParameters:
- name: po_number
in: body
type: string
description: "SAP purchase order number (e.g. 4500056789)."
call: sap-po.get-po
with:
po_number: "{{po_number}}"
outputParameters:
- name: status
type: string
mapping: "$.d.OverallStatus"
- name: supplier
type: string
mapping: "$.d.Supplier.CompanyName"
- name: total_value
type: string
mapping: "$.d.TotalAmount"
- name: currency
type: string
mapping: "$.d.TransactionCurrency"
consumes:
- type: http
namespace: sap-po
baseUri: "https://zic-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: purchase-orders
path: "/A_PurchaseOrder('{{po_number}}')"
inputParameters:
- name: po_number
in: path
operations:
- name: get-po
method: GET
Looks up purchase order in SAP returning status, supplier, and value.
naftiko: "0.5"
info:
label: "SAP Purchase Order Lookup"
description: "Looks up purchase order in SAP returning status, supplier, and value."
tags:
- procurement
- finance
- sap
capability:
exposes:
- type: mcp
namespace: po-ops
port: 8080
tools:
- name: get-po
description: "Look up PO. Returns status, supplier, value."
inputParameters:
- name: po_number
in: body
type: string
description: "SAP PO number."
call: "sap.get-po"
with:
po_number: "{{po_number}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: supplier
type: string
mapping: "$.supplier.name"
- name: value
type: number
mapping: "$.totalCost.amount"
consumes:
- type: http
namespace: sap
baseUri: "https://zurichinsurance-sap.s4hana.cloud.sap/api/v1"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: purchase-orders
path: "/purchase-orders/{{po_number}}"
inputParameters:
- name: po_number
in: path
operations:
- name: get-po
method: GET
Submits a ServiceNow change request for a planned insurance platform change and notifies the change approver in Microsoft Teams.
naftiko: "0.5"
info:
label: "ServiceNow Change Request for Insurance Platform Changes"
description: "Submits a ServiceNow change request for a planned insurance platform change and notifies the change approver in Microsoft Teams."
tags:
- itsm
- servicenow
- microsoft-teams
- change-management
- approval
capability:
exposes:
- type: mcp
namespace: change-request-ops
port: 8080
tools:
- name: submit-platform-change-request
description: "Given change details and an approver UPN, submit a ServiceNow change request and notify the approver in Microsoft Teams. Use for planned changes to claims, policy, underwriting, or actuarial platforms."
inputParameters:
- name: short_description
in: body
type: string
description: "Brief description of the planned change."
- name: description
in: body
type: string
description: "Detailed change description with impact assessment and rollback plan."
- name: scheduled_start
in: body
type: string
description: "Scheduled start time in ISO 8601 format."
- name: approver_upn
in: body
type: string
description: "Microsoft UPN of the change approver."
steps:
- name: create-change
type: call
call: servicenow-cr.create-change
with:
short_description: "{{short_description}}"
description: "{{description}}"
start_date: "{{scheduled_start}}"
type: normal
- name: notify-approver
type: call
call: msteams-cr.send-message
with:
recipient_upn: "{{approver_upn}}"
text: "Change request submitted for your approval: {{short_description}}. Change: {{create-change.number}}. Scheduled: {{scheduled_start}}. Review in ServiceNow."
consumes:
- type: http
namespace: servicenow-cr
baseUri: "https://zurich.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: changes
path: "/table/change_request"
operations:
- name: create-change
method: POST
- type: http
namespace: msteams-cr
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chats
path: "/users/{{upn}}/chats"
inputParameters:
- name: upn
in: path
operations:
- name: send-message
method: POST
Searches ServiceNow knowledge base for articles matching a query.
naftiko: "0.5"
info:
label: "ServiceNow Knowledge Article Search"
description: "Searches ServiceNow knowledge base for articles matching a query."
tags:
- insurance
- servicenow
- knowledge-management
capability:
exposes:
- type: mcp
namespace: kb-ops
port: 8080
tools:
- name: search-kb
description: "Search knowledge base. Returns articles."
inputParameters:
- name: query
in: body
type: string
description: "Search query."
- name: category
in: body
type: string
description: "Category."
call: "servicenow.search"
with:
query: "{{query}}"
category: "{{category}}"
outputParameters:
- name: articles
type: array
mapping: "$.result"
- name: total
type: integer
mapping: "$.totalResults"
consumes:
- type: http
namespace: servicenow
baseUri: "https://zurich.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: knowledge
path: "/table/kb_knowledge"
operations:
- name: search
method: GET
When a ServiceNow P1 incident is created for a core insurance platform system, creates a linked Jira engineering issue and notifies the on-call team via Microsoft Teams.
naftiko: "0.5"
info:
label: "ServiceNow P1 Incident to Jira Sync"
description: "When a ServiceNow P1 incident is created for a core insurance platform system, creates a linked Jira engineering issue and notifies the on-call team via Microsoft Teams."
tags:
- itsm
- servicenow
- jira
- microsoft-teams
- incident-response
capability:
exposes:
- type: mcp
namespace: itsm-bridge
port: 8080
tools:
- name: sync-incident-to-jira
description: "Given a ServiceNow incident number and priority, create a linked Jira issue and notify the on-call team in Microsoft Teams. Use for P1/P2 incidents affecting core claims, policy, or underwriting systems."
inputParameters:
- name: incident_number
in: body
type: string
description: "ServiceNow incident number (e.g. INC0001234)."
- name: priority
in: body
type: string
description: "Incident priority: P1 or P2."
- name: affected_system
in: body
type: string
description: "Name of the affected insurance platform or application."
steps:
- name: get-incident
type: call
call: servicenow.get-incident
with:
number: "{{incident_number}}"
- name: create-jira-issue
type: call
call: jira-ops.create-issue
with:
project_key: OPS
issuetype: Incident
summary: "[{{priority}}] {{get-incident.short_description}}"
description: "ServiceNow: {{incident_number}}\nSystem: {{affected_system}}\nDetails: {{get-incident.description}}"
- name: notify-oncall
type: call
call: msteams-oncall.send-message
with:
channel_id: "$secrets.teams_oncall_channel_id"
text: "{{priority}} Incident: {{get-incident.short_description}} | System: {{affected_system}} | ServiceNow: {{incident_number}} | Jira: {{create-jira-issue.key}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://zurich.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: jira-ops
baseUri: "https://zurich.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams-oncall
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Queries Snowflake for daily claims volume and loss ratio by product line and posts a summary to the claims analytics Microsoft Teams channel for leadership review.
naftiko: "0.5"
info:
label: "Snowflake Claims Analytics Snapshot"
description: "Queries Snowflake for daily claims volume and loss ratio by product line and posts a summary to the claims analytics Microsoft Teams channel for leadership review."
tags:
- data
- analytics
- snowflake
- microsoft-teams
- claims
- reporting
capability:
exposes:
- type: mcp
namespace: claims-analytics
port: 8080
tools:
- name: publish-claims-snapshot
description: "Given a reporting date and product line, query Snowflake for claims volume, average severity, and loss ratio, and post the snapshot to the claims analytics Teams channel. Use for daily claims management stand-ups."
inputParameters:
- name: report_date
in: body
type: string
description: "Claims date to report on in YYYY-MM-DD format."
- name: product_line
in: body
type: string
description: "Insurance product line (e.g. Property, Casualty, Liability, Life)."
steps:
- name: query-claims-data
type: call
call: snowflake.execute-statement
with:
statement: "SELECT product_line, COUNT(*) as claim_count, AVG(reserve_amount) as avg_severity, SUM(loss_amount)/SUM(earned_premium) as loss_ratio FROM CLAIMS.DAILY_CLAIMS WHERE claim_date = '{{report_date}}' AND product_line = '{{product_line}}' GROUP BY product_line"
- name: post-claims-snapshot
type: call
call: msteams-claims-ops.send-message
with:
channel_id: "$secrets.teams_claims_channel_id"
text: "Claims snapshot for {{product_line}} on {{report_date}}: Count={{query-claims-data.claim_count}}, Avg severity={{query-claims-data.avg_severity}}, Loss ratio={{query-claims-data.loss_ratio}}."
consumes:
- type: http
namespace: snowflake
baseUri: "https://zurich.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: msteams-claims-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: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Runs data quality checks in Snowflake and creates Jira tickets for breached thresholds.
naftiko: "0.5"
info:
label: "Snowflake Claims Data Quality Check"
description: "Runs data quality checks in Snowflake and creates Jira tickets for breached thresholds."
tags:
- insurance
- claims
- data
- snowflake
- jira
capability:
exposes:
- type: mcp
namespace: dq-ops
port: 8080
tools:
- name: check-quality
description: "Check data quality."
inputParameters:
- name: date
in: body
type: string
description: "Check date."
steps:
- name: check
type: call
call: "snowflake.query"
with:
query: "CALL RUN_DQ_CHECKS('{{date}}')"
- name: ticket
type: call
call: "jira.create-issue"
with:
project_key: "DATA"
issuetype: "Bug"
summary: "DQ issues {{date}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://zurich.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: jira
baseUri: "https://zurichinsurance.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Retrieves CLV score from Snowflake including retention probability and revenue projection.
naftiko: "0.5"
info:
label: "Snowflake Customer Lifetime Value Lookup"
description: "Retrieves CLV score from Snowflake including retention probability and revenue projection."
tags:
- insurance
- analytics
- snowflake
capability:
exposes:
- type: mcp
namespace: clv-ops
port: 8080
tools:
- name: get-clv
description: "Look up CLV. Returns score, retention, revenue."
inputParameters:
- name: customer_id
in: body
type: string
description: "Zurich Insurance customer ID."
call: "snowflake.query-clv"
with:
customer_id: "{{customer_id}}"
outputParameters:
- name: ltv
type: number
mapping: "$.ltvScore"
- name: retention
type: number
mapping: "$.retentionProbability"
- name: revenue
type: number
mapping: "$.projectedAnnualRevenue"
consumes:
- type: http
namespace: snowflake
baseUri: "https://zurich.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: queries
path: "/statements"
operations:
- name: query-clv
method: POST
Checks Snowflake task history for failed ETL jobs supporting claims, policy, and regulatory data feeds, creates ServiceNow tasks for failures, and notifies the data engineering team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Snowflake ETL Pipeline Health Monitor"
description: "Checks Snowflake task history for failed ETL jobs supporting claims, policy, and regulatory data feeds, creates ServiceNow tasks for failures, and notifies the data engineering team via Microsoft Teams."
tags:
- data
- snowflake
- servicenow
- microsoft-teams
- monitoring
- etl
capability:
exposes:
- type: mcp
namespace: etl-health-ops
port: 8080
tools:
- name: monitor-insurance-etl-health
description: "Given a Snowflake schema and lookback window, check for failed ETL task runs, create ServiceNow tasks for each failure, and post a health summary to the data-engineering Teams channel. Use for daily monitoring of claims, policy, and regulatory data pipelines."
inputParameters:
- name: schema_name
in: body
type: string
description: "Snowflake schema to check (e.g. CLAIMS.ETL, POLICY.ETL, REGULATORY.ETL)."
- name: lookback_hours
in: body
type: integer
description: "Hours of task history to inspect (e.g. 24)."
steps:
- name: check-task-failures
type: call
call: snowflake-etl.execute-statement
with:
statement: "SELECT name, state, error_message FROM TABLE(INFORMATION_SCHEMA.TASK_HISTORY(SCHEDULED_TIME_RANGE_START=>DATEADD('hour', -{{lookback_hours}}, CURRENT_TIMESTAMP()))) WHERE STATE = 'FAILED'"
- name: create-failure-ticket
type: call
call: servicenow-etl.create-task
with:
category: data_pipeline
short_description: "ETL failures: {{schema_name}} — last {{lookback_hours}}h"
description: "Failed Snowflake tasks in {{schema_name}}: {{check-task-failures.row_count}} failures"
- name: notify-data-eng
type: call
call: msteams-data.send-message
with:
channel_id: "$secrets.teams_dataeng_channel_id"
text: "ETL health check {{schema_name}}: {{check-task-failures.row_count}} failures in last {{lookback_hours}}h. ServiceNow: {{create-failure-ticket.number}}."
consumes:
- type: http
namespace: snowflake-etl
baseUri: "https://zurich.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: servicenow-etl
baseUri: "https://zurich.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/sc_task"
operations:
- name: create-task
method: POST
- type: http
namespace: msteams-data
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Executes Solvency II data quality checks on Snowflake regulatory tables, logs results, and alerts the risk and compliance team via Microsoft Teams if any check fails.
naftiko: "0.5"
info:
label: "Snowflake Solvency II Data Quality Validation"
description: "Executes Solvency II data quality checks on Snowflake regulatory tables, logs results, and alerts the risk and compliance team via Microsoft Teams if any check fails."
tags:
- compliance
- regulatory
- snowflake
- microsoft-teams
- solvency-ii
- data-quality
capability:
exposes:
- type: mcp
namespace: solvency-ii-ops
port: 8080
tools:
- name: validate-solvency-data
description: "Given a Snowflake Solvency II table and valuation date, run row count and null-check validations, and alert the risk and compliance Teams channel if any check fails. Use before quarterly Solvency II reporting submissions."
inputParameters:
- name: solvency_table
in: body
type: string
description: "Snowflake Solvency II data table (e.g. REGULATORY.SCR_CALCULATIONS)."
- name: valuation_date
in: body
type: string
description: "Solvency II valuation date in YYYY-MM-DD format."
- name: min_row_count
in: body
type: integer
description: "Minimum expected row count for the valuation date partition."
steps:
- name: run-validation
type: call
call: snowflake-sii.execute-statement
with:
statement: "SELECT COUNT(*) as row_count, SUM(CASE WHEN entity_id IS NULL THEN 1 ELSE 0 END) as null_entities, SUM(CASE WHEN scr_amount IS NULL THEN 1 ELSE 0 END) as null_scr FROM {{solvency_table}} WHERE valuation_date = '{{valuation_date}}'"
- name: notify-risk-compliance
type: call
call: msteams-risk.send-message
with:
channel_id: "$secrets.teams_risk_channel_id"
text: "Solvency II data validation for {{solvency_table}} on {{valuation_date}}: Rows={{run-validation.row_count}} (min {{min_row_count}}), Null entities={{run-validation.null_entities}}, Null SCR={{run-validation.null_scr}}."
consumes:
- type: http
namespace: snowflake-sii
baseUri: "https://zurich.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: msteams-risk
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Queries Snowflake for underwriting profitability metrics by product line and region, and posts a quarterly summary to the underwriting leadership Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Snowflake Underwriting Profitability Report"
description: "Queries Snowflake for underwriting profitability metrics by product line and region, and posts a quarterly summary to the underwriting leadership Microsoft Teams channel."
tags:
- underwriting
- data
- snowflake
- microsoft-teams
- reporting
- profitability
capability:
exposes:
- type: mcp
namespace: uw-profitability
port: 8080
tools:
- name: publish-uw-profitability-report
description: "Given a fiscal quarter and product line, query Snowflake for combined ratio, earned premium, and incurred losses, and post a profitability report to the underwriting leadership Teams channel. Use for quarterly business review preparation."
inputParameters:
- name: fiscal_quarter
in: body
type: string
description: "Fiscal quarter in YYYY-QN format (e.g. 2025-Q1)."
- name: product_line
in: body
type: string
description: "Insurance product line (e.g. Property, Casualty, Specialty, Life)."
steps:
- name: query-profitability
type: call
call: snowflake-uw.execute-statement
with:
statement: "SELECT product_line, SUM(earned_premium) as total_premium, SUM(incurred_losses) as total_losses, (SUM(incurred_losses) + SUM(expenses)) / SUM(earned_premium) as combined_ratio FROM UNDERWRITING.QUARTERLY_RESULTS WHERE fiscal_quarter = '{{fiscal_quarter}}' AND product_line = '{{product_line}}' GROUP BY product_line"
- name: post-uw-report
type: call
call: msteams-uw-lead.send-message
with:
channel_id: "$secrets.teams_uw_leadership_channel_id"
text: "Underwriting profitability {{product_line}} Q{{fiscal_quarter}}: Premium={{query-profitability.total_premium}}, Losses={{query-profitability.total_losses}}, Combined ratio={{query-profitability.combined_ratio}}."
consumes:
- type: http
namespace: snowflake-uw
baseUri: "https://zurich.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: msteams-uw-lead
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Generates Solvency II regulatory reports by querying capital and risk data from Snowflake, validating against thresholds, and publishing to Confluence for board review.
naftiko: "0.5"
info:
label: "Solvency II Reporting Workflow"
description: "Generates Solvency II regulatory reports by querying capital and risk data from Snowflake, validating against thresholds, and publishing to Confluence for board review."
tags:
- insurance
- compliance
- actuarial
- snowflake
- confluence
capability:
exposes:
- type: mcp
namespace: solvency-ops
port: 8080
tools:
- name: generate-solvency-report
description: "Generate Solvency II report. Queries capital data, validates, and publishes. Use for quarterly regulatory reporting."
inputParameters:
- name: reporting_period
in: body
type: string
description: "Reporting period in YYYY-Q format."
steps:
- name: query-capital
type: call
call: "snowflake.query"
with:
query: "CALL SOLVENCY_DB.PROCEDURES.GENERATE_SCR_REPORT('{{reporting_period}}')"
- name: validate
type: call
call: "compliance-api.validate-solvency"
with:
period: "{{reporting_period}}"
- name: publish
type: call
call: "confluence.create-page"
with:
space_key: "REGULATORY"
title: "Solvency II Report - {{reporting_period}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://zurich.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: compliance-api
baseUri: "https://api.zurichinsurance.com/compliance/v1"
authentication:
type: bearer
token: "$secrets.compliance_api_token"
resources:
- name: solvency
path: "/solvency/validate"
operations:
- name: validate-solvency
method: POST
- type: http
namespace: confluence
baseUri: "https://zurichinsurance.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
Monitors recovery, updates Snowflake, and generates Confluence reports.
naftiko: "0.5"
info:
label: "Subrogation Recovery Tracker Workflow"
description: "Monitors recovery, updates Snowflake, and generates Confluence reports."
tags:
- insurance
- claims
- subrogation
- snowflake
- confluence
capability:
exposes:
- type: mcp
namespace: subro-ops
port: 8080
tools:
- name: track-recovery
description: "Track subrogation."
inputParameters:
- name: start
in: body
type: string
description: "Start."
- name: end
in: body
type: string
description: "End."
steps:
- name: data
type: call
call: "claims-api.get-subro"
with:
start: "{{start}}"
end: "{{end}}"
- name: update
type: call
call: "snowflake.query"
with:
query: "CALL UPDATE_SUBROGATION('{{start}}','{{end}}')"
- name: publish
type: call
call: "confluence.create-page"
with:
space_key: "CLAIMS"
title: "Subrogation {{start}} to {{end}}"
consumes:
- type: http
namespace: claims-api
baseUri: "https://api.zurichinsurance.com/claims/v2"
authentication:
type: bearer
token: "$secrets.claims_api_token"
resources:
- name: subrogation
path: "/subrogation/summary"
operations:
- name: get-subro
method: GET
- type: http
namespace: snowflake
baseUri: "https://zurich.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: confluence
baseUri: "https://zurichinsurance.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
Provisions infrastructure via Terraform Cloud and notifies platform team.
naftiko: "0.5"
info:
label: "Terraform Infrastructure Provisioning Workflow"
description: "Provisions infrastructure via Terraform Cloud and notifies platform team."
tags:
- engineering
- terraform
- microsoft-azure
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: infra-ops
port: 8080
tools:
- name: provision
description: "Provision infrastructure."
inputParameters:
- name: workspace
in: body
type: string
description: "Workspace."
- name: env
in: body
type: string
description: "Environment."
steps:
- name: run
type: call
call: "terraform.create-run"
with:
workspace: "{{workspace}}"
message: "Provisioning {{env}}"
- name: notify
type: call
call: "msteams.post"
with:
channel_id: "$secrets.platform_channel"
text: "Terraform: {{workspace}} ({{env}})"
consumes:
- type: http
namespace: terraform
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: runs
path: "/runs"
operations:
- name: create-run
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
Checks current underwriting appetite for product, state, and risk class.
naftiko: "0.5"
info:
label: "Underwriting Appetite Check"
description: "Checks current underwriting appetite for product, state, and risk class."
tags:
- insurance
- underwriting
- compliance
capability:
exposes:
- type: mcp
namespace: appetite-ops
port: 8080
tools:
- name: check-appetite
description: "Check appetite. Returns status and restrictions."
inputParameters:
- name: product
in: body
type: string
description: "Product type."
- name: state
in: body
type: string
description: "State code."
- name: risk_class
in: body
type: string
description: "Risk class."
call: "uw-api.check"
with:
product: "{{product}}"
state: "{{state}}"
risk_class: "{{risk_class}}"
outputParameters:
- name: accepting
type: boolean
mapping: "$.isAccepting"
- name: restrictions
type: array
mapping: "$.restrictions"
consumes:
- type: http
namespace: uw-api
baseUri: "https://api.zurichinsurance.com/underwriting/v2"
authentication:
type: bearer
token: "$secrets.underwriting_api_token"
resources:
- name: appetite
path: "/appetite"
operations:
- name: check
method: GET
Generates profitability report from Snowflake and publishes to Power BI.
naftiko: "0.5"
info:
label: "Underwriting Profitability Report"
description: "Generates profitability report from Snowflake and publishes to Power BI."
tags:
- insurance
- underwriting
- actuarial
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: uw-profit
port: 8080
tools:
- name: gen-profitability
description: "Generate UW profitability."
inputParameters:
- name: product
in: body
type: string
description: "Product."
- name: period
in: body
type: string
description: "YYYY-Q."
steps:
- name: query
type: call
call: "snowflake.query"
with:
query: "SELECT state,combined_ratio FROM PROFITABILITY WHERE product='{{product}}'"
- name: refresh
type: call
call: "powerbi.refresh"
with:
group_id: "$secrets.pbi_uw"
dataset_id: "$secrets.pbi_profit"
consumes:
- type: http
namespace: snowflake
baseUri: "https://zurich.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/groups/{{group_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: group_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh
method: POST
Retrieves underwriting risk score for a policy application returning grade, score, and action.
naftiko: "0.5"
info:
label: "Underwriting Risk Score Lookup"
description: "Retrieves underwriting risk score for a policy application returning grade, score, and action."
tags:
- insurance
- underwriting
- risk
capability:
exposes:
- type: mcp
namespace: uw-ops
port: 8080
tools:
- name: get-risk-score
description: "Look up risk score for application. Returns grade and action."
inputParameters:
- name: application_id
in: body
type: string
description: "Application ID."
call: "risk-engine.get-score"
with:
application_id: "{{application_id}}"
outputParameters:
- name: risk_grade
type: string
mapping: "$.riskGrade"
- name: score
type: number
mapping: "$.overallScore"
- name: action
type: string
mapping: "$.recommendedAction"
consumes:
- type: http
namespace: risk-engine
baseUri: "https://api.zurichinsurance.com/underwriting/v2"
authentication:
type: bearer
token: "$secrets.underwriting_api_token"
resources:
- name: scores
path: "/applications/{{application_id}}/risk-score"
inputParameters:
- name: application_id
in: path
operations:
- name: get-score
method: GET
Reconciles vendor payments against authorizations and flags discrepancies.
naftiko: "0.5"
info:
label: "Vendor Payment Reconciliation Workflow"
description: "Reconciles vendor payments against authorizations and flags discrepancies."
tags:
- insurance
- claims
- finance
- servicenow
capability:
exposes:
- type: mcp
namespace: vendor-recon
port: 8080
tools:
- name: reconcile-vendor
description: "Reconcile vendor payments."
inputParameters:
- name: vendor
in: body
type: string
description: "Vendor."
- name: period
in: body
type: string
description: "YYYY-MM."
steps:
- name: invoices
type: call
call: "claims-api.get-invoices"
with:
vendor: "{{vendor}}"
period: "{{period}}"
- name: auths
type: call
call: "claims-api.get-auths"
with:
vendor: "{{vendor}}"
period: "{{period}}"
- name: flag
type: call
call: "servicenow.create-case"
with:
short_description: "Vendor recon: {{vendor}} - {{period}}"
consumes:
- type: http
namespace: claims-api
baseUri: "https://api.zurichinsurance.com/claims/v2"
authentication:
type: bearer
token: "$secrets.claims_api_token"
resources:
- name: vendor-data
path: "/vendors/{{vendor}}/invoices"
inputParameters:
- name: vendor
in: path
operations:
- name: get-invoices
method: GET
- type: http
namespace: servicenow
baseUri: "https://zurich.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cases
path: "/table/sn_customerservice_case"
operations:
- name: create-case
method: POST
Pulls vendor data from SAP, scores risk, and creates assessment in ServiceNow.
naftiko: "0.5"
info:
label: "Vendor Risk Assessment Workflow"
description: "Pulls vendor data from SAP, scores risk, and creates assessment in ServiceNow."
tags:
- insurance
- compliance
- sap
- servicenow
capability:
exposes:
- type: mcp
namespace: vendor-risk
port: 8080
tools:
- name: assess-vendor
description: "Assess vendor risk."
inputParameters:
- name: vendor_id
in: body
type: string
description: "Vendor ID."
- name: type
in: body
type: string
description: "Assessment type."
steps:
- name: get
type: call
call: "sap.get-vendor"
with:
vendor_id: "{{vendor_id}}"
- name: score
type: call
call: "risk-api.score"
with:
name: "{{get.name}}"
type: "{{type}}"
- name: log
type: call
call: "servicenow.create-record"
with:
table: "u_vendor_risk"
vendor: "{{vendor_id}}"
level: "{{score.level}}"
consumes:
- type: http
namespace: sap
baseUri: "https://zurichinsurance-sap.s4hana.cloud.sap/api/v1"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: vendors
path: "/suppliers/{{vendor_id}}"
inputParameters:
- name: vendor_id
in: path
operations:
- name: get-vendor
method: GET
- type: http
namespace: risk-api
baseUri: "https://api.zurichinsurance.com/risk/v1"
authentication:
type: bearer
token: "$secrets.risk_token"
resources:
- name: scoring
path: "/vendors/score"
operations:
- name: score
method: POST
- type: http
namespace: servicenow
baseUri: "https://zurich.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/u_vendor_risk"
operations:
- name: create-record
method: POST
Queries Snowflake for policy exposure in severe weather regions and refreshes Power BI.
naftiko: "0.5"
info:
label: "Weather Exposure Analysis Workflow"
description: "Queries Snowflake for policy exposure in severe weather regions and refreshes Power BI."
tags:
- insurance
- actuarial
- catastrophe
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: exposure-ops
port: 8080
tools:
- name: analyze-exposure
description: "Analyze weather exposure."
inputParameters:
- name: type
in: body
type: string
description: "Weather type."
- name: zips
in: body
type: string
description: "Affected ZIPs."
steps:
- name: query
type: call
call: "snowflake.query"
with:
query: "SELECT lob,COUNT(*),SUM(tiv) FROM POLICIES WHERE zip IN ('{{zips}}') GROUP BY lob"
- name: refresh
type: call
call: "powerbi.refresh"
with:
group_id: "$secrets.pbi_cat"
dataset_id: "$secrets.pbi_exposure"
consumes:
- type: http
namespace: snowflake
baseUri: "https://zurich.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/groups/{{group_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: group_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh
method: POST
Retrieves employee benefits eligibility from Workday including enrolled and eligible plans.
naftiko: "0.5"
info:
label: "Workday Benefits Eligibility Lookup"
description: "Retrieves employee benefits eligibility from Workday including enrolled and eligible plans."
tags:
- hr
- workday
- benefits
capability:
exposes:
- type: mcp
namespace: benefits-ops
port: 8080
tools:
- name: get-benefits
description: "Look up benefits eligibility."
inputParameters:
- name: employee_id
in: body
type: string
description: "Workday employee ID."
call: "workday.get-benefits"
with:
employee_id: "{{employee_id}}"
outputParameters:
- name: enrolled
type: array
mapping: "$.enrolledPlans"
- name: eligible
type: array
mapping: "$.eligiblePlans"
- name: status
type: string
mapping: "$.enrollmentStatus"
consumes:
- type: http
namespace: workday
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/zurich"
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
Retrieves compensation review proposals from Workday and notifies HR business partners via Microsoft Teams with merit increase summary and approval instructions.
naftiko: "0.5"
info:
label: "Workday Compensation Review Notification"
description: "Retrieves compensation review proposals from Workday and notifies HR business partners via Microsoft Teams with merit increase summary and approval instructions."
tags:
- hr
- workday
- microsoft-teams
- compensation
- approval
capability:
exposes:
- type: mcp
namespace: compensation-review
port: 8080
tools:
- name: notify-compensation-review-open
description: "Given a Workday compensation review cycle ID and period label, retrieve summary data and notify the HRBP team in Microsoft Teams. Use to launch annual merit increase review cycles."
inputParameters:
- name: review_cycle_id
in: body
type: string
description: "Workday compensation review cycle ID."
- name: review_period_label
in: body
type: string
description: "Human-readable review period (e.g. 2025 Annual Merit Review)."
steps:
- name: get-review-summary
type: call
call: workday-cr.get-comp-review
with:
cycle_id: "{{review_cycle_id}}"
- name: notify-hrbp-team
type: call
call: msteams-hrbp.send-message
with:
channel_id: "$secrets.teams_hrbp_channel_id"
text: "Compensation review {{review_period_label}} is now open: {{get-review-summary.total_proposals}} proposals, total increase budget {{get-review-summary.total_amount}}. Complete approvals in Workday by {{get-review-summary.deadline}}."
consumes:
- type: http
namespace: workday-cr
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: comp-reviews
path: "/zurich/compensationReviewCycles/{{cycle_id}}"
inputParameters:
- name: cycle_id
in: path
operations:
- name: get-comp-review
method: GET
- type: http
namespace: msteams-hrbp
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When an employee separation is recorded in Workday, creates a ServiceNow access revocation task and notifies HR Operations via Microsoft Teams.
naftiko: "0.5"
info:
label: "Workday Employee Offboarding Workflow"
description: "When an employee separation is recorded in Workday, creates a ServiceNow access revocation task and notifies HR Operations via Microsoft Teams."
tags:
- hr
- offboarding
- workday
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-offboarding
port: 8080
tools:
- name: trigger-employee-offboarding
description: "Given a Workday employee ID and separation date, create a ServiceNow access revocation task and notify HR Operations in Microsoft Teams. Invoke on voluntary or involuntary separations at Zurich Insurance."
inputParameters:
- name: workday_employee_id
in: body
type: string
description: "Workday worker ID of the departing employee."
- name: separation_date
in: body
type: string
description: "Last working day in ISO 8601 format (YYYY-MM-DD)."
- name: separation_reason
in: body
type: string
description: "Reason for separation: voluntary, involuntary, retirement, transfer."
steps:
- name: get-worker
type: call
call: workday-off.get-worker
with:
worker_id: "{{workday_employee_id}}"
- name: create-offboarding-task
type: call
call: servicenow-off.create-task
with:
category: hr_offboarding
short_description: "Offboarding: {{get-worker.full_name}} — effective {{separation_date}}"
assigned_group: IT_Access_Management
description: "Employee {{workday_employee_id}} separating on {{separation_date}}. Reason: {{separation_reason}}. Revoke all system access."
- name: notify-hr-ops
type: call
call: msteams-hrops.send-message
with:
channel_id: "$secrets.teams_hrops_channel_id"
text: "Offboarding initiated: {{get-worker.full_name}} ({{workday_employee_id}}). Last day: {{separation_date}}. Reason: {{separation_reason}}. ServiceNow: {{create-offboarding-task.number}}."
consumes:
- type: http
namespace: workday-off
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/zurich/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow-off
baseUri: "https://zurich.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/sc_task"
operations:
- name: create-task
method: POST
- type: http
namespace: msteams-hrops
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Initiates a performance review cycle in Workday for a manager's direct reports and sends each employee a review kickoff notification via Microsoft Teams.
naftiko: "0.5"
info:
label: "Workday Performance Review Cycle Launch"
description: "Initiates a performance review cycle in Workday for a manager's direct reports and sends each employee a review kickoff notification via Microsoft Teams."
tags:
- hr
- performance
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-performance
port: 8080
tools:
- name: launch-performance-review-cycle
description: "Given a manager Workday ID and review cycle name, retrieve direct reports and send each a Microsoft Teams notification with performance review instructions and due date. Use to launch annual or mid-year reviews."
inputParameters:
- name: manager_workday_id
in: body
type: string
description: "Workday ID of the manager whose team should receive review notifications."
- name: review_cycle_name
in: body
type: string
description: "Name of the performance review cycle (e.g. 2025 Annual Performance Review)."
- name: due_date
in: body
type: string
description: "Review submission due date in ISO 8601 format."
steps:
- name: get-direct-reports
type: call
call: workday-perf.get-direct-reports
with:
manager_id: "{{manager_workday_id}}"
- name: notify-employees
type: call
call: msteams-perf.send-message
with:
recipient_upn: "{{get-direct-reports.work_email}}"
text: "Your {{review_cycle_name}} self-assessment is now open. Please complete your review in Workday by {{due_date}}."
consumes:
- type: http
namespace: workday-perf
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: direct-reports
path: "/zurich/workers/{{manager_id}}/directReports"
inputParameters:
- name: manager_id
in: path
operations:
- name: get-direct-reports
method: GET
- type: http
namespace: msteams-perf
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chats
path: "/users/{{upn}}/chats"
inputParameters:
- name: upn
in: path
operations:
- name: send-message
method: POST
Retrieves employee time off balances from Workday including vacation, sick, and personal hours.
naftiko: "0.5"
info:
label: "Workday Time Off Balance Lookup"
description: "Retrieves employee time off balances from Workday including vacation, sick, and personal hours."
tags:
- hr
- workday
capability:
exposes:
- type: mcp
namespace: timeoff-ops
port: 8080
tools:
- name: get-balance
description: "Look up time off balances."
inputParameters:
- name: employee_id
in: body
type: string
description: "Workday employee ID."
call: "workday.get-balance"
with:
employee_id: "{{employee_id}}"
outputParameters:
- name: vacation
type: number
mapping: "$.vacationBalance"
- name: sick
type: number
mapping: "$.sickBalance"
- name: personal
type: number
mapping: "$.personalBalance"
consumes:
- type: http
namespace: workday
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/zurich"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: time-off
path: "/timeOff/balances/{{employee_id}}"
inputParameters:
- name: employee_id
in: path
operations:
- name: get-balance
method: GET