Metlife Capabilities
Naftiko 0.5 capability definitions for Metlife - 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://metlife.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://metlife.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.metlife.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://metlife.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.metlife.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://metlife.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.metlife.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.metlife.com/compliance/v1"
authentication:
type: bearer
token: "$secrets.compliance_api_token"
resources:
- name: licenses
path: "/agents/{{agent_id}}/licenses"
inputParameters:
- name: agent_id
in: path
operations:
- name: get-licenses
method: GET
Retrieves a complex insurance claim record from Salesforce and uses OpenAI to generate a structured adjudication summary for the claims examiner.
naftiko: "0.5"
info:
label: "AI-Assisted Insurance Claims Summary"
description: "Retrieves a complex insurance claim record from Salesforce and uses OpenAI to generate a structured adjudication summary for the claims examiner."
tags:
- ai
- automation
- openai
- salesforce
- claims
- insurance
capability:
exposes:
- type: mcp
namespace: ai-claims
port: 8080
tools:
- name: summarize-claim-for-adjudication
description: "Given a Salesforce claims case ID, retrieve the full claim record including notes, policy details, and medical documentation references, then use OpenAI to generate a structured adjudication summary for the claims examiner."
inputParameters:
- name: case_id
in: body
type: string
description: "The Salesforce case ID for the insurance claim to summarize."
steps:
- name: get-claim
type: call
call: "salesforce.get-full-claim-case"
with:
case_id: "{{case_id}}"
- name: generate-summary
type: call
call: "openai.create-completion"
with:
model: "gpt-4o"
prompt: "You are a MetLife claims adjudication specialist. Analyze this insurance claim and provide a structured summary covering: Claim Overview, Policy Coverage Analysis, Key Documentation, Risk Assessment, and Recommended Action. Claim data: {{get-claim.case_details}}"
- name: update-case-notes
type: call
call: "salesforce.add-case-note"
with:
case_id: "{{case_id}}"
note: "AI Adjudication Summary:\n{{generate-summary.choices[0].message.content}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://metlife.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: claim-cases
path: "/sobjects/Case/{{case_id}}"
inputParameters:
- name: case_id
in: path
operations:
- name: get-full-claim-case
method: GET
- name: case-notes
path: "/sobjects/CaseComment"
operations:
- name: add-case-note
method: POST
- type: http
namespace: openai
baseUri: "https://api.openai.com/v1"
authentication:
type: bearer
token: "$secrets.openai_api_key"
resources:
- name: completions
path: "/chat/completions"
operations:
- name: create-completion
method: POST
Monitors Datadog latency, creates PagerDuty incident, and alerts engineering.
naftiko: "0.5"
info:
label: "API Latency Alert Workflow"
description: "Monitors Datadog latency, creates PagerDuty incident, and alerts engineering."
tags:
- engineering
- datadog
- pagerduty
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: latency-ops
port: 8080
tools:
- name: check-latency
description: "Check API latency."
inputParameters:
- name: service
in: body
type: string
description: "Service."
- name: threshold
in: body
type: integer
description: "Threshold ms."
steps:
- name: get
type: call
call: "datadog.query"
with:
query: "p99:trace.http.request{service:{{service}}}"
- name: incident
type: call
call: "pagerduty.create-incident"
with:
service_id: "$secrets.eng_pd"
title: "Latency: {{service}}"
- name: notify
type: call
call: "msteams.post"
with:
channel_id: "$secrets.eng_channel"
text: "Latency: {{service}} > {{threshold}}ms"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
resources:
- name: metrics
path: "/query"
operations:
- name: query
method: GET
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
Dispatches appraiser, creates work order, and notifies adjuster.
naftiko: "0.5"
info:
label: "Appraisal Vendor Dispatch Workflow"
description: "Dispatches appraiser, creates work order, and notifies adjuster."
tags:
- insurance
- claims
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: appraisal-ops
port: 8080
tools:
- name: dispatch
description: "Dispatch appraiser."
inputParameters:
- name: claim_id
in: body
type: string
description: "Claim."
- name: address
in: body
type: string
description: "Address."
- name: loss
in: body
type: string
description: "Loss type."
steps:
- name: find
type: call
call: "vendor-api.find"
with:
location: "{{address}}"
specialty: "{{loss}}"
- name: wo
type: call
call: "servicenow.create-wo"
with:
short_description: "Appraisal: {{claim_id}}"
- name: notify
type: call
call: "msteams.post"
with:
channel_id: "$secrets.claims_channel"
text: "Appraiser: {{claim_id}}"
consumes:
- type: http
namespace: vendor-api
baseUri: "https://api.metlife.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://metlife.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://metlife.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://metlife.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
Queries Azure costs and publishes allocation to Confluence.
naftiko: "0.5"
info:
label: "Azure Cost Allocation Report Workflow"
description: "Queries Azure costs and publishes allocation to Confluence."
tags:
- cloud
- finance
- microsoft-azure
- confluence
capability:
exposes:
- type: mcp
namespace: cost-ops
port: 8080
tools:
- name: gen-report
description: "Generate cost report."
inputParameters:
- name: period
in: body
type: string
description: "YYYY-MM."
steps:
- name: costs
type: call
call: "azure-cost.get-usage"
with:
period: "{{period}}"
- name: publish
type: call
call: "confluence.create-page"
with:
space_key: "FINOPS"
title: "Azure Costs {{period}}"
consumes:
- type: http
namespace: azure-cost
baseUri: "https://management.azure.com"
authentication:
type: bearer
token: "$secrets.azure_token"
resources:
- name: usage
path: "/subscriptions/$secrets.azure_sub/providers/Microsoft.CostManagement/query"
operations:
- name: get-usage
method: POST
- type: http
namespace: confluence
baseUri: "https://metlife.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.metlife.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://metlife.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://metlife.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://metlife.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://metlife.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/metlife"
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://metlife.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.metlife.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://metlife.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.metlife.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://metlife.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://metlife.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.metlife.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.metlife.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://metlife.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.metlife.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://metlife.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: "MetLife 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://metlife.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
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.metlife.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://metlife.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.metlife.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://metlife.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://metlife.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://metlife.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.metlife.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://metlife.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://metlife.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://metlife.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://metlife.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.metlife.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://metlife.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
When a Datadog APM alert fires for a critical insurance processing application, creates a ServiceNow incident and pages the on-call engineer via PagerDuty.
naftiko: "0.5"
info:
label: "Datadog Application Performance Alert"
description: "When a Datadog APM alert fires for a critical insurance processing application, creates a ServiceNow incident and pages the on-call engineer via PagerDuty."
tags:
- observability
- apm
- datadog
- servicenow
- pagerduty
- monitoring
capability:
exposes:
- type: mcp
namespace: apm-monitoring
port: 8080
tools:
- name: handle-apm-alert
description: "Given a Datadog APM alert with service name, error rate, and latency metrics, open a high-priority ServiceNow incident and trigger PagerDuty for the on-call engineer."
inputParameters:
- name: service_name
in: body
type: string
description: "The application or microservice that triggered the APM alert."
- name: error_rate
in: body
type: number
description: "The current error rate percentage exceeding the threshold."
- name: p99_latency_ms
in: body
type: number
description: "The P99 request latency in milliseconds."
- name: alert_url
in: body
type: string
description: "URL to the Datadog APM alert dashboard."
steps:
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "APM Alert: {{service_name}} error rate {{error_rate}}%"
urgency: "1"
category: "application_performance"
- name: page-oncall
type: call
call: "pagerduty.create-incident"
with:
title: "APM Alert: {{service_name}} - {{error_rate}}% error rate"
severity: "critical"
body: "P99 latency: {{p99_latency_ms}}ms. Dashboard: {{alert_url}}. SNOW: {{create-incident.number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://metlife.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incident
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.pagerduty_token"
placement: header
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
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
Retrieves Datadog SLO compliance metrics for critical insurance processing services and posts a weekly reliability report to the engineering leadership Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Datadog SLO Compliance Report"
description: "Retrieves Datadog SLO compliance metrics for critical insurance processing services and posts a weekly reliability report to the engineering leadership Microsoft Teams channel."
tags:
- observability
- slo
- datadog
- microsoft-teams
- reporting
- reliability
capability:
exposes:
- type: mcp
namespace: slo-reporting
port: 8080
tools:
- name: publish-slo-report
description: "Retrieve SLO compliance data from Datadog for all services tagged as critical insurance systems and post a weekly formatted report to the engineering leadership Microsoft Teams channel."
inputParameters:
- name: report_period_days
in: body
type: integer
description: "Number of days to include in the SLO compliance report (e.g., 7 for weekly)."
steps:
- name: get-slo-status
type: call
call: "datadog.list-slos"
with:
tags: "team:insurance-critical"
- name: post-report
type: call
call: "msteams.post-channel-message"
with:
channel_id: "engineering-leadership"
message: "Weekly SLO Report ({{report_period_days}} days): {{get-slo-status.compliant_count}} compliant, {{get-slo-status.breached_count}} in breach out of {{get-slo-status.total_count}} total SLOs monitored."
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: slos
path: "/slo"
operations:
- name: list-slos
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
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://metlife.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://metlife.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/u_fraud_alert"
operations:
- name: create-record
method: POST
When an employee departure is confirmed in Workday, deactivates Okta access, disables the Microsoft 365 account, and creates a ServiceNow offboarding compliance checklist.
naftiko: "0.5"
info:
label: "Employee Offboarding and Access Revocation"
description: "When an employee departure is confirmed in Workday, deactivates Okta access, disables the Microsoft 365 account, and creates a ServiceNow offboarding compliance checklist."
tags:
- hr
- offboarding
- workday
- okta
- microsoft-365
- servicenow
- compliance
capability:
exposes:
- type: mcp
namespace: hr-offboarding
port: 8080
tools:
- name: trigger-offboarding
description: "Given a Workday employee ID and termination date, deactivate the Okta user, disable their Microsoft 365 account, and create a ServiceNow SOX compliance offboarding checklist."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday employee ID of the departing employee."
- name: termination_date
in: body
type: string
description: "The employee's last working day in ISO 8601 format (YYYY-MM-DD)."
steps:
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{employee_id}}"
- name: deactivate-okta
type: call
call: "okta.deactivate-user"
with:
user_email: "{{get-employee.work_email}}"
- name: disable-m365
type: call
call: "msgraph.disable-user"
with:
user_id: "{{get-employee.work_email}}"
- name: create-sox-checklist
type: call
call: "servicenow.create-incident"
with:
short_description: "SOX offboarding: {{get-employee.displayName}} - {{termination_date}}"
category: "hr_offboarding"
description: "Okta deactivated | M365 disabled | Requires IT asset return and access revocation audit"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: basic
username: "$secrets.workday_user"
password: "$secrets.workday_password"
resources:
- name: workers
path: "/metlife/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: okta
baseUri: "https://metlife.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: user-lifecycle
path: "/users/{{user_id}}/lifecycle/deactivate"
inputParameters:
- name: user_id
in: path
operations:
- name: deactivate-user
method: POST
- type: http
namespace: msgraph
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: users
path: "/users/{{user_id}}"
inputParameters:
- name: user_id
in: path
operations:
- name: disable-user
method: PATCH
- type: http
namespace: servicenow
baseUri: "https://metlife.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incident
path: "/table/incident"
operations:
- name: create-incident
method: POST
When a new hire is created in Workday, provisions a Microsoft 365 account, opens a ServiceNow onboarding ticket, and sends a Microsoft Teams welcome message.
naftiko: "0.5"
info:
label: "Employee Onboarding Orchestrator"
description: "When a new hire is created in Workday, provisions a Microsoft 365 account, opens a ServiceNow onboarding ticket, and sends a Microsoft Teams welcome message."
tags:
- hr
- onboarding
- workday
- microsoft-365
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-onboarding
port: 8080
tools:
- name: trigger-onboarding
description: "Given a Workday employee ID and start date, orchestrate the full MetLife onboarding sequence: provision Microsoft 365, open a ServiceNow ticket, and send a Teams welcome message."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday employee ID for the new hire."
- name: start_date
in: body
type: string
description: "The new hire's start date in ISO 8601 format (YYYY-MM-DD)."
- name: business_unit
in: body
type: string
description: "The MetLife business unit the hire is joining (e.g., Group Benefits, Retirement Income)."
steps:
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{employee_id}}"
- name: provision-m365
type: call
call: "msgraph.create-user"
with:
displayName: "{{get-employee.displayName}}"
mailNickname: "{{get-employee.userId}}"
department: "{{business_unit}}"
- name: open-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "New hire onboarding: {{get-employee.displayName}}"
category: "hr_onboarding"
- name: send-welcome
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{provision-m365.userPrincipalName}}"
message: "Welcome to MetLife, {{get-employee.firstName}}! Your IT onboarding ticket is {{open-ticket.number}}. Start date: {{start_date}}."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: basic
username: "$secrets.workday_user"
password: "$secrets.workday_password"
resources:
- name: workers
path: "/metlife/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: msgraph
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: users
path: "/users"
operations:
- name: create-user
method: POST
- type: http
namespace: servicenow
baseUri: "https://metlife.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incident
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: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
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://metlife.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://metlife.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://metlife.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://metlife.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
On a GitHub Actions pipeline failure on a protected branch, creates a Jira bug, logs a Datadog event, and alerts the engineering team via Microsoft Teams.
naftiko: "0.5"
info:
label: "GitHub CI/CD Pipeline Failure Response"
description: "On a GitHub Actions pipeline failure on a protected branch, creates a Jira bug, logs a Datadog event, and alerts the engineering team via Microsoft Teams."
tags:
- devops
- cicd
- github
- jira
- datadog
- microsoft-teams
- incident-response
capability:
exposes:
- type: mcp
namespace: devops-ops
port: 8080
tools:
- name: handle-pipeline-failure
description: "Given a GitHub Actions pipeline failure with repository, branch, commit SHA, and run URL, create a Jira bug, log a Datadog deployment event, and alert the engineering Microsoft Teams channel."
inputParameters:
- name: repository
in: body
type: string
description: "The GitHub repository where the failure occurred (e.g., metlife/policy-api)."
- name: workflow_name
in: body
type: string
description: "The GitHub Actions workflow name that failed."
- name: branch
in: body
type: string
description: "The branch on which the failure occurred."
- name: run_url
in: body
type: string
description: "URL to the failed GitHub Actions run."
- name: commit_sha
in: body
type: string
description: "The commit SHA for the failed run."
steps:
- name: create-bug
type: call
call: "jira.create-issue"
with:
project_key: "ENG"
issuetype: "Bug"
summary: "[CI Failure] {{repository}} / {{branch}} - {{workflow_name}}"
description: "Workflow: {{workflow_name}}\nBranch: {{branch}}\nCommit: {{commit_sha}}\nRun: {{run_url}}"
- name: log-event
type: call
call: "datadog.create-event"
with:
title: "CI Failure: {{repository}}/{{branch}}"
text: "Workflow {{workflow_name}} failed at commit {{commit_sha}}"
alert_type: "error"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
channel_id: "engineering-alerts"
message: "Pipeline Failure: {{repository}} | {{branch}} | {{workflow_name}} | Jira: {{create-bug.key}} | Run: {{run_url}}"
consumes:
- type: http
namespace: jira
baseUri: "https://metlife.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: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: events
path: "/events"
operations:
- name: create-event
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
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://metlife.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.metlife.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.metlife.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.metlife.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.metlife.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.metlife.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://metlife.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 insurance claim is submitted, creates a Salesforce case, opens a ServiceNow workflow ticket, and notifies the claims adjuster team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Insurance Claims Intake Orchestrator"
description: "When a new insurance claim is submitted, creates a Salesforce case, opens a ServiceNow workflow ticket, and notifies the claims adjuster team via Microsoft Teams."
tags:
- insurance
- claims
- salesforce
- servicenow
- microsoft-teams
- intake
capability:
exposes:
- type: mcp
namespace: claims-intake
port: 8080
tools:
- name: intake-insurance-claim
description: "Given a policy number, claim type, and incident description, create a Salesforce claims case, open a ServiceNow workflow task for the claims team, and notify the appropriate adjuster team via Microsoft Teams."
inputParameters:
- name: policy_number
in: body
type: string
description: "The MetLife policy number under which the claim is being filed."
- name: claim_type
in: body
type: string
description: "Type of claim: life, disability, dental, vision, or group_benefits."
- name: incident_description
in: body
type: string
description: "Brief description of the claim incident."
- name: claimant_name
in: body
type: string
description: "Full name of the claimant filing the claim."
steps:
- name: create-case
type: call
call: "salesforce.create-case"
with:
subject: "{{claim_type}} claim for policy {{policy_number}}"
description: "{{incident_description}}"
origin: "Claims Intake"
type: "{{claim_type}}"
- name: open-workflow
type: call
call: "servicenow.create-incident"
with:
short_description: "Claims workflow: {{claim_type}} - Policy {{policy_number}}"
category: "insurance_claims"
- name: notify-adjuster
type: call
call: "msteams.post-channel-message"
with:
channel_id: "claims-adjusters"
message: "New Claim: {{claim_type}} for policy {{policy_number}} - {{claimant_name}}. Case: {{create-case.id}} | SNOW: {{open-workflow.number}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://metlife.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: servicenow
baseUri: "https://metlife.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incident
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves an insurance policy record from the core policy system via Salesforce, returning policy status, coverage details, and premium information.
naftiko: "0.5"
info:
label: "Insurance Policy Lookup"
description: "Retrieves an insurance policy record from the core policy system via Salesforce, returning policy status, coverage details, and premium information."
tags:
- insurance
- policy
- salesforce
- crm
capability:
exposes:
- type: mcp
namespace: policy-ops
port: 8080
tools:
- name: get-policy-details
description: "Look up an insurance policy by policy number in Salesforce. Returns policy status, product type, coverage amount, premium, and policyholder name. Use when agents need to retrieve policy details for servicing."
inputParameters:
- name: policy_number
in: body
type: string
description: "The MetLife insurance policy number to look up (e.g., MET-2026-123456)."
call: "salesforce.get-policy"
with:
policy_number: "{{policy_number}}"
outputParameters:
- name: status
type: string
mapping: "$.Status__c"
- name: product_type
type: string
mapping: "$.Product_Type__c"
- name: coverage_amount
type: string
mapping: "$.Coverage_Amount__c"
- name: premium
type: string
mapping: "$.Annual_Premium__c"
- name: policyholder_name
type: string
mapping: "$.PolicyHolder__r.Name"
consumes:
- type: http
namespace: salesforce
baseUri: "https://metlife.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
Generates a sprint retrospective report from Jira for an IT delivery team and posts the digest to the team's Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Jira IT Sprint Retrospective Digest"
description: "Generates a sprint retrospective report from Jira for an IT delivery team and posts the digest to the team's Microsoft Teams channel."
tags:
- devops
- agile
- jira
- microsoft-teams
- reporting
capability:
exposes:
- type: mcp
namespace: it-agile-reporting
port: 8080
tools:
- name: digest-sprint-retrospective
description: "Given a Jira board ID and sprint ID, fetch completed and incomplete issues, summarize sprint velocity, and post a formatted retrospective digest to the team's Microsoft Teams channel."
inputParameters:
- name: board_id
in: body
type: string
description: "The Jira board ID for the IT delivery team sprint."
- name: sprint_id
in: body
type: string
description: "The Jira sprint ID to summarize."
- name: teams_channel_id
in: body
type: string
description: "The Microsoft Teams channel ID to post the digest to."
steps:
- name: get-issues
type: call
call: "jira.list-sprint-issues"
with:
board_id: "{{board_id}}"
sprint_id: "{{sprint_id}}"
- name: post-digest
type: call
call: "msteams.post-channel-message"
with:
channel_id: "{{teams_channel_id}}"
message: "Sprint {{sprint_id}} Retro: {{get-issues.done_count}} completed, {{get-issues.todo_count}} carried over. Velocity: {{get-issues.story_points_completed}} story points."
consumes:
- type: http
namespace: jira
baseUri: "https://metlife.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: sprint-issues
path: "/board/{{board_id}}/sprint/{{sprint_id}}/issue"
inputParameters:
- name: board_id
in: path
- name: sprint_id
in: path
operations:
- name: list-sprint-issues
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves Jira issue status including assignee and priority.
naftiko: "0.5"
info:
label: "Jira Ticket Status Lookup"
description: "Retrieves Jira issue status including assignee and priority."
tags:
- engineering
- jira
capability:
exposes:
- type: mcp
namespace: jira-ops
port: 8080
tools:
- name: get-ticket
description: "Look up Jira ticket."
inputParameters:
- name: key
in: body
type: string
description: "Issue key."
call: "jira.get-issue"
with:
key: "{{key}}"
outputParameters:
- name: status
type: string
mapping: "$.fields.status.name"
- name: assignee
type: string
mapping: "$.fields.assignee.displayName"
- name: priority
type: string
mapping: "$.fields.priority.name"
consumes:
- type: http
namespace: jira
baseUri: "https://metlife.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 LinkedIn Campaign Manager performance data for MetLife employer brand campaigns and posts a weekly summary to the talent acquisition Microsoft Teams channel.
naftiko: "0.5"
info:
label: "LinkedIn Employer Brand Campaign Report"
description: "Retrieves LinkedIn Campaign Manager performance data for MetLife employer brand campaigns and posts a weekly summary to the talent acquisition Microsoft Teams channel."
tags:
- marketing
- linkedin
- employer-brand
- microsoft-teams
- reporting
- recruiting
capability:
exposes:
- type: mcp
namespace: employer-brand
port: 8080
tools:
- name: digest-employer-brand-performance
description: "Given a LinkedIn Campaign Manager account ID and date range, retrieve impressions, clicks, applications, and cost-per-application for employer brand campaigns and post a digest to the talent acquisition Microsoft Teams channel."
inputParameters:
- name: account_id
in: body
type: string
description: "The LinkedIn Campaign Manager account ID for employer brand campaigns."
- name: date_start
in: body
type: string
description: "Start date for the performance period (YYYY-MM-DD)."
- name: date_end
in: body
type: string
description: "End date for the performance period (YYYY-MM-DD)."
steps:
- name: get-analytics
type: call
call: "linkedin.get-campaign-analytics"
with:
account_id: "{{account_id}}"
start_date: "{{date_start}}"
end_date: "{{date_end}}"
- name: post-digest
type: call
call: "msteams.post-channel-message"
with:
channel_id: "talent-acquisition"
message: "Employer Brand Campaign ({{date_start}} to {{date_end}}): Impressions: {{get-analytics.impressions}} | Clicks: {{get-analytics.clicks}} | Applications: {{get-analytics.conversions}} | Cost/App: ${{get-analytics.costPerConversion}}"
consumes:
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: campaign-analytics
path: "/adAnalyticsV2"
operations:
- name: get-campaign-analytics
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
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://metlife.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.metlife.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.metlife.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://metlife.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/metlife"
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://metlife.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
Provisions Okta access for new employees based on business unit role, and logs the provisioning event in ServiceNow for SOX compliance audit trail.
naftiko: "0.5"
info:
label: "Okta Identity Provisioning and Compliance Logging"
description: "Provisions Okta access for new employees based on business unit role, and logs the provisioning event in ServiceNow for SOX compliance audit trail."
tags:
- identity
- security
- okta
- servicenow
- access-management
- compliance
capability:
exposes:
- type: mcp
namespace: identity-compliance
port: 8080
tools:
- name: provision-compliant-access
description: "Given an employee email, business unit, and application list, provision Okta group membership for insurance system access and log the event in ServiceNow for SOX compliance audit trail."
inputParameters:
- name: user_email
in: body
type: string
description: "The employee work email address."
- name: business_unit
in: body
type: string
description: "The MetLife business unit (e.g., Group Benefits, Retirement Income, International)."
- name: application_ids
in: body
type: string
description: "Comma-separated list of application IDs to provision access for."
steps:
- name: get-user
type: call
call: "okta.get-user"
with:
email: "{{user_email}}"
- name: assign-groups
type: call
call: "okta.assign-group"
with:
user_id: "{{get-user.id}}"
business_unit: "{{business_unit}}"
- name: log-compliance
type: call
call: "servicenow.create-incident"
with:
short_description: "SOX access provisioning: {{user_email}} - {{business_unit}}"
category: "access_management"
description: "Applications: {{application_ids}} | Business Unit: {{business_unit}} | Approved via Workday"
consumes:
- type: http
namespace: okta
baseUri: "https://metlife.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: users
path: "/users"
operations:
- name: get-user
method: GET
- name: group-memberships
path: "/groups/{{group_id}}/users/{{user_id}}"
inputParameters:
- name: group_id
in: path
- name: user_id
in: path
operations:
- name: assign-group
method: PUT
- type: http
namespace: servicenow
baseUri: "https://metlife.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incident
path: "/table/incident"
operations:
- name: create-incident
method: POST
When Okta detects a suspicious login event for a MetLife employee, suspends the user account, creates a high-priority ServiceNow security incident, and notifies the security operations team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Okta Suspicious Login Security Incident"
description: "When Okta detects a suspicious login event for a MetLife employee, suspends the user account, creates a high-priority ServiceNow security incident, and notifies the security operations team via Microsoft Teams."
tags:
- security
- identity
- okta
- servicenow
- microsoft-teams
- siem
capability:
exposes:
- type: mcp
namespace: security-ops
port: 8080
tools:
- name: handle-suspicious-login
description: "Given an Okta suspicious login event with user email and source IP address, suspend the user account, create a high-priority ServiceNow security incident, and alert the security operations Microsoft Teams channel."
inputParameters:
- name: user_email
in: body
type: string
description: "The email of the employee whose login was flagged as suspicious."
- name: ip_address
in: body
type: string
description: "The IP address from which the suspicious login originated."
- name: event_id
in: body
type: string
description: "The Okta system log event ID for the suspicious login."
steps:
- name: get-user
type: call
call: "okta.get-user"
with:
email: "{{user_email}}"
- name: suspend-account
type: call
call: "okta.suspend-user"
with:
user_id: "{{get-user.id}}"
- name: create-security-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Suspicious login: {{user_email}} from {{ip_address}}"
urgency: "1"
category: "security_incident"
- name: alert-soc
type: call
call: "msteams.post-channel-message"
with:
channel_id: "security-operations"
message: "SECURITY: Account suspended for {{user_email}} after suspicious login from {{ip_address}}. SNOW: {{create-security-incident.number}}"
consumes:
- type: http
namespace: okta
baseUri: "https://metlife.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: users
path: "/users"
operations:
- name: get-user
method: GET
- name: user-lifecycle-suspend
path: "/users/{{user_id}}/lifecycle/suspend"
inputParameters:
- name: user_id
in: path
operations:
- name: suspend-user
method: POST
- type: http
namespace: servicenow
baseUri: "https://metlife.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incident
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves Okta group memberships for a user returning groups and access.
naftiko: "0.5"
info:
label: "Okta User Group Membership Lookup"
description: "Retrieves Okta group memberships for a user returning groups and access."
tags:
- security
- okta
- compliance
capability:
exposes:
- type: mcp
namespace: identity-ops
port: 8080
tools:
- name: get-groups
description: "Look up Okta groups. Returns memberships."
inputParameters:
- name: email
in: body
type: string
description: "User email."
call: "okta.get-groups"
with:
email: "{{email}}"
outputParameters:
- name: groups
type: array
mapping: "$.groups"
- name: count
type: integer
mapping: "$.totalGroups"
consumes:
- type: http
namespace: okta
baseUri: "https://metlife.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.metlife.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.metlife.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: "MetLife 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.metlife.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.metlife.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://metlife.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://metlife.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: "MetLife 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://metlife.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: "MetLife 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.metlife.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.metlife.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://metlife.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.metlife.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://metlife.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://metlife.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://metlife.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: "MetLife 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.metlife.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.metlife.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://metlife.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.metlife.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.metlife.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://metlife.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
Queries Salesforce for policies expiring within 60 days, creates outreach tasks for agents, and posts a renewal pipeline summary to the sales Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Policy Renewal Reminder Campaign"
description: "Queries Salesforce for policies expiring within 60 days, creates outreach tasks for agents, and posts a renewal pipeline summary to the sales Microsoft Teams channel."
tags:
- sales
- insurance
- salesforce
- microsoft-teams
- renewal
- pipeline
capability:
exposes:
- type: mcp
namespace: policy-renewal
port: 8080
tools:
- name: run-renewal-reminder-campaign
description: "Query Salesforce for insurance policies expiring within a specified number of days, create follow-up tasks for the responsible agents, and post a renewal pipeline summary to the sales Microsoft Teams channel."
inputParameters:
- name: days_until_expiry
in: body
type: integer
description: "Number of days ahead to scan for expiring policies (e.g., 60)."
- name: product_type
in: body
type: string
description: "Insurance product type to filter by (e.g., life, group_benefits, or all)."
steps:
- name: get-expiring-policies
type: call
call: "salesforce.query-expiring-policies"
with:
days_until_expiry: "{{days_until_expiry}}"
product_type: "{{product_type}}"
- name: create-outreach-tasks
type: call
call: "salesforce.create-task-batch"
with:
policy_ids: "{{get-expiring-policies.policy_ids}}"
subject: "Policy renewal outreach - {{product_type}}"
due_date: "+7d"
- name: post-pipeline-summary
type: call
call: "msteams.post-channel-message"
with:
channel_id: "sales-pipeline"
message: "Renewal Campaign: {{get-expiring-policies.policy_count}} {{product_type}} policies expiring within {{days_until_expiry}} days. Outreach tasks created for all agents."
consumes:
- type: http
namespace: salesforce
baseUri: "https://metlife.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: policy-queries
path: "/query"
operations:
- name: query-expiring-policies
method: GET
- name: tasks
path: "/sobjects/Task"
operations:
- name: create-task-batch
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
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://metlife.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://metlife.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: "MetLife 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://metlife.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: queries
path: "/statements"
operations:
- name: query-claims
method: POST
Triggers a Power BI dataset refresh for the actuarial risk and reserve dashboard and notifies the actuarial team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Power BI Actuarial Dashboard Refresh"
description: "Triggers a Power BI dataset refresh for the actuarial risk and reserve dashboard and notifies the actuarial team via Microsoft Teams."
tags:
- analytics
- reporting
- power-bi
- actuarial
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: actuarial-analytics
port: 8080
tools:
- name: refresh-actuarial-dashboard
description: "Given a Power BI workspace and dataset ID, trigger a dataset refresh for the actuarial risk and reserve dashboard and notify the actuarial team via Microsoft Teams."
inputParameters:
- name: workspace_id
in: body
type: string
description: "The Power BI workspace ID containing the actuarial dashboard."
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID for the actuarial dashboard."
steps:
- name: trigger-refresh
type: call
call: "powerbi.refresh-dataset"
with:
workspace_id: "{{workspace_id}}"
dataset_id: "{{dataset_id}}"
- name: notify-actuarial
type: call
call: "msteams.post-channel-message"
with:
channel_id: "actuarial-team"
message: "Actuarial dashboard refresh initiated for dataset {{dataset_id}}. Data will be current within 20 minutes."
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: dataset-refreshes
path: "/groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: workspace_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Detects Confluence updates and broadcasts to staff via Microsoft Teams.
naftiko: "0.5"
info:
label: "Procedure Update Notifier Workflow"
description: "Detects Confluence updates and broadcasts to staff via Microsoft Teams."
tags:
- insurance
- confluence
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: proc-notify
port: 8080
tools:
- name: notify-update
description: "Notify procedure updates."
inputParameters:
- name: page_id
in: body
type: string
description: "Page ID."
steps:
- name: history
type: call
call: "confluence.get-history"
with:
page_id: "{{page_id}}"
- name: notify
type: call
call: "msteams.post"
with:
channel_id: "$secrets.all_staff"
text: "Updated: {{history.title}}"
consumes:
- type: http
namespace: confluence
baseUri: "https://metlife.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.metlife.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.metlife.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://metlife.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://metlife.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.metlife.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.metlife.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://metlife.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.metlife.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://metlife.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.metlife.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.metlife.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://metlife.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://metlife.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://metlife.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://metlife.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
Escalates a high-priority Salesforce customer service case to the senior resolution team, pages the on-call manager via PagerDuty, and notifies the customer success Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Salesforce Customer Service Case Escalation"
description: "Escalates a high-priority Salesforce customer service case to the senior resolution team, pages the on-call manager via PagerDuty, and notifies the customer success Microsoft Teams channel."
tags:
- customer-service
- salesforce
- pagerduty
- microsoft-teams
- escalation
capability:
exposes:
- type: mcp
namespace: customer-service-ops
port: 8080
tools:
- name: escalate-customer-case
description: "Given a Salesforce case ID that requires escalation, retrieve case details, trigger a PagerDuty alert to the on-call customer service manager, and post context to the customer success Microsoft Teams channel."
inputParameters:
- name: case_id
in: body
type: string
description: "The Salesforce case ID to escalate."
- name: escalation_reason
in: body
type: string
description: "Reason for escalation (e.g., regulatory complaint, high-value customer, SLA breach)."
steps:
- name: get-case
type: call
call: "salesforce.get-case"
with:
case_id: "{{case_id}}"
- name: page-manager
type: call
call: "pagerduty.create-incident"
with:
title: "Customer Case Escalated: {{case_id}} - {{get-case.subject}}"
severity: "high"
body: "{{escalation_reason}} | Policy: {{get-case.policy_number}} | Customer: {{get-case.contact_name}}"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
channel_id: "customer-success"
message: "Case Escalated: {{case_id}} | {{get-case.contact_name}} | Reason: {{escalation_reason}} | PagerDuty incident created."
consumes:
- type: http
namespace: salesforce
baseUri: "https://metlife.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: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.pagerduty_token"
placement: header
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
When a Salesforce insurance opportunity is marked Closed Won, creates a corresponding SAP S/4HANA revenue entry and notifies the sales operations team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Salesforce New Business Opportunity Sync to SAP"
description: "When a Salesforce insurance opportunity is marked Closed Won, creates a corresponding SAP S/4HANA revenue entry and notifies the sales operations team via Microsoft Teams."
tags:
- sales
- crm
- salesforce
- sap-s4hana
- microsoft-teams
- revenue
capability:
exposes:
- type: mcp
namespace: new-business-ops
port: 8080
tools:
- name: sync-won-opportunity-to-sap
description: "Given a Salesforce opportunity ID marked Closed Won for a new insurance policy, retrieve deal details, post a SAP S/4HANA revenue entry, and notify the sales ops Microsoft Teams channel."
inputParameters:
- name: opportunity_id
in: body
type: string
description: "The Salesforce Opportunity ID that has been marked Closed Won."
steps:
- name: get-opportunity
type: call
call: "salesforce.get-opportunity"
with:
opportunity_id: "{{opportunity_id}}"
- name: post-revenue
type: call
call: "sap-s4.post-revenue"
with:
customer: "{{get-opportunity.account_name}}"
amount: "{{get-opportunity.amount}}"
product_line: "{{get-opportunity.product_type}}"
- name: notify-sales-ops
type: call
call: "msteams.post-channel-message"
with:
channel_id: "sales-operations"
message: "New Business Won: {{get-opportunity.account_name}} - ${{get-opportunity.amount}} {{get-opportunity.product_type}}. SAP revenue posted."
consumes:
- type: http
namespace: salesforce
baseUri: "https://metlife.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunity
path: "/sobjects/Opportunity/{{opportunity_id}}"
inputParameters:
- name: opportunity_id
in: path
operations:
- name: get-opportunity
method: GET
- type: http
namespace: sap-s4
baseUri: "https://metlife-s4.sap.com/sap/opu/odata/sap/FI_REVENUE_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: revenue-entries
path: "/A_RevenueEntry"
operations:
- name: post-revenue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Queries SAP Ariba for insurance vendor contracts expiring within 90 days, creates Jira procurement renewal tasks, and notifies the vendor management team via Microsoft Teams.
naftiko: "0.5"
info:
label: "SAP Ariba Contract Expiry Alert"
description: "Queries SAP Ariba for insurance vendor contracts expiring within 90 days, creates Jira procurement renewal tasks, and notifies the vendor management team via Microsoft Teams."
tags:
- procurement
- sap-ariba
- jira
- microsoft-teams
- contract-management
capability:
exposes:
- type: mcp
namespace: contract-management
port: 8080
tools:
- name: alert-expiring-vendor-contracts
description: "Query SAP Ariba for vendor contracts expiring within a specified number of days, create Jira renewal tasks for each contract, and notify the vendor management Microsoft Teams channel."
inputParameters:
- name: days_ahead
in: body
type: integer
description: "Number of days ahead to check for expiring contracts (e.g., 90)."
steps:
- name: get-expiring
type: call
call: "sap-ariba.list-expiring-contracts"
with:
expiry_within_days: "{{days_ahead}}"
- name: create-renewal-task
type: call
call: "jira.create-issue"
with:
project_key: "PROC"
issuetype: "Task"
summary: "Vendor contract renewals due in {{days_ahead}} days: {{get-expiring.contract_count}}"
description: "{{get-expiring.contract_list}}"
- name: notify-vendor-mgmt
type: call
call: "msteams.post-channel-message"
with:
channel_id: "vendor-management"
message: "Contract Alert: {{get-expiring.contract_count}} vendor contracts expiring within {{days_ahead}} days. Jira: {{create-renewal-task.key}}"
consumes:
- type: http
namespace: sap-ariba
baseUri: "https://openapi.ariba.com/api/contract/v1"
authentication:
type: apikey
key: "apiKey"
value: "$secrets.ariba_api_key"
placement: header
resources:
- name: contracts
path: "/contracts"
operations:
- name: list-expiring-contracts
method: GET
- type: http
namespace: jira
baseUri: "https://metlife.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Creates and routes a purchase requisition in SAP Ariba for corporate procurement and logs it against the appropriate cost center in SAP S/4HANA.
naftiko: "0.5"
info:
label: "SAP Ariba Procurement Request"
description: "Creates and routes a purchase requisition in SAP Ariba for corporate procurement and logs it against the appropriate cost center in SAP S/4HANA."
tags:
- procurement
- sap-ariba
- sap-s4hana
- finance
- approval
capability:
exposes:
- type: mcp
namespace: procurement-ops
port: 8080
tools:
- name: create-procurement-request
description: "Given a supplier, item description, quantity, unit price, and cost center, create a purchase requisition in SAP Ariba and post the cost center entry to SAP S/4HANA."
inputParameters:
- name: supplier_id
in: body
type: string
description: "The SAP Ariba supplier ID."
- name: item_description
in: body
type: string
description: "Description of the item or service being procured."
- name: quantity
in: body
type: integer
description: "Quantity requested."
- name: unit_price
in: body
type: number
description: "Unit price in USD."
- name: cost_center
in: body
type: string
description: "The cost center code to charge."
steps:
- name: create-requisition
type: call
call: "sap-ariba.create-requisition"
with:
supplier_id: "{{supplier_id}}"
description: "{{item_description}}"
quantity: "{{quantity}}"
unit_price: "{{unit_price}}"
cost_center: "{{cost_center}}"
- name: post-cost-entry
type: call
call: "sap-s4.create-cost-entry"
with:
cost_center: "{{cost_center}}"
amount: "{{unit_price}}"
document_reference: "{{create-requisition.requisition_id}}"
consumes:
- type: http
namespace: sap-ariba
baseUri: "https://openapi.ariba.com/api/purchase-req/v1"
authentication:
type: apikey
key: "apiKey"
value: "$secrets.ariba_api_key"
placement: header
resources:
- name: requisitions
path: "/requisitions"
operations:
- name: create-requisition
method: POST
- type: http
namespace: sap-s4
baseUri: "https://metlife-s4.sap.com/sap/opu/odata/sap/CO_COST_CENTER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: cost-entries
path: "/A_CostEntry"
operations:
- name: create-cost-entry
method: POST
Audits SAP Concur expense reports for MetLife travel policy compliance, flags policy violations, and routes non-compliant reports for manager review.
naftiko: "0.5"
info:
label: "SAP Concur Employee Expense Audit"
description: "Audits SAP Concur expense reports for MetLife travel policy compliance, flags policy violations, and routes non-compliant reports for manager review."
tags:
- finance
- expense-management
- sap-concur
- compliance
- audit
capability:
exposes:
- type: mcp
namespace: expense-compliance
port: 8080
tools:
- name: audit-expense-report
description: "Given a SAP Concur expense report ID, retrieve report line items, validate each against MetLife travel and expense policy, and flag non-compliant items for manager review."
inputParameters:
- name: report_id
in: body
type: string
description: "The SAP Concur expense report ID to audit."
- name: per_diem_limit
in: body
type: number
description: "Maximum allowed per diem amount in USD for this trip destination."
steps:
- name: get-report
type: call
call: "concur.get-report"
with:
report_id: "{{report_id}}"
- name: flag-for-review
type: call
call: "concur.update-report-status"
with:
report_id: "{{report_id}}"
status: "Pending_Manager_Review"
comment: "Policy audit: items exceed per diem limit of ${{per_diem_limit}}"
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-report
method: GET
- name: update-report-status
method: PATCH
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://metlife-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://metlife.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cases
path: "/table/sn_customerservice_case"
operations:
- name: create-case
method: POST
Looks up purchase order in SAP returning status, supplier, and value.
naftiko: "0.5"
info:
label: "SAP Purchase Order Lookup"
description: "Looks up purchase order in SAP returning status, supplier, and value."
tags:
- procurement
- finance
- sap
capability:
exposes:
- type: mcp
namespace: po-ops
port: 8080
tools:
- name: get-po
description: "Look up PO. Returns status, supplier, value."
inputParameters:
- name: po_number
in: body
type: string
description: "SAP PO number."
call: "sap.get-po"
with:
po_number: "{{po_number}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: supplier
type: string
mapping: "$.supplier.name"
- name: value
type: number
mapping: "$.totalCost.amount"
consumes:
- type: http
namespace: sap
baseUri: "https://metlife-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
Initiates the monthly financial period close in SAP S/4HANA, creates a Jira checklist for the finance team, and notifies the controller via Microsoft Teams.
naftiko: "0.5"
info:
label: "SAP S/4HANA Finance Period Close"
description: "Initiates the monthly financial period close in SAP S/4HANA, creates a Jira checklist for the finance team, and notifies the controller via Microsoft Teams."
tags:
- finance
- period-close
- sap-s4hana
- jira
- microsoft-teams
- erp
capability:
exposes:
- type: mcp
namespace: finance-close
port: 8080
tools:
- name: initiate-period-close
description: "Given a fiscal period and year, retrieve SAP S/4HANA period close status, create a Jira epic with close checklist tasks for the MetLife finance team, and notify the controller via Microsoft Teams."
inputParameters:
- name: fiscal_period
in: body
type: string
description: "The fiscal period number to close (01-12)."
- name: fiscal_year
in: body
type: string
description: "The fiscal year to close (e.g., 2026)."
steps:
- name: get-close-status
type: call
call: "sap-s4.get-period-close-status"
with:
fiscal_period: "{{fiscal_period}}"
fiscal_year: "{{fiscal_year}}"
- name: create-epic
type: call
call: "jira.create-issue"
with:
project_key: "FIN"
issuetype: "Epic"
summary: "Period Close {{fiscal_period}}/{{fiscal_year}}"
description: "SAP status: {{get-close-status.status}} | Company code: {{get-close-status.company_code}}"
- name: notify-controller
type: call
call: "msteams.post-channel-message"
with:
channel_id: "global-finance"
message: "Period close initiated: FY{{fiscal_year}} Period {{fiscal_period}}. Jira: {{create-epic.key}}"
consumes:
- type: http
namespace: sap-s4
baseUri: "https://metlife-s4.sap.com/sap/opu/odata/sap/FI_PERIOD_CLOSE_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: period-close-status
path: "/PeriodCloseStatusSet"
operations:
- name: get-period-close-status
method: GET
- type: http
namespace: jira
baseUri: "https://metlife.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves a ServiceNow change request for IT infrastructure, notifies the Change Advisory Board via Microsoft Teams, and updates the approval status.
naftiko: "0.5"
info:
label: "ServiceNow IT Incident Change Advisory Board"
description: "Retrieves a ServiceNow change request for IT infrastructure, notifies the Change Advisory Board via Microsoft Teams, and updates the approval status."
tags:
- itsm
- change-management
- servicenow
- microsoft-teams
- approval
capability:
exposes:
- type: mcp
namespace: cab-process
port: 8080
tools:
- name: process-cab-approval
description: "Given a ServiceNow change request number and approval decision, retrieve the change details, update the record with the approval decision, and notify the IT Change Advisory Board via Microsoft Teams."
inputParameters:
- name: change_number
in: body
type: string
description: "The ServiceNow change request number (e.g., CHG0012345)."
- name: approval_decision
in: body
type: string
description: "The approval decision: approved or rejected."
- name: approver_comments
in: body
type: string
description: "Comments from the approver."
steps:
- name: get-change
type: call
call: "servicenow-lookup.get-change-request"
with:
number: "{{change_number}}"
- name: update-change
type: call
call: "servicenow-update.update-change"
with:
sys_id: "{{get-change.sys_id}}"
state: "{{approval_decision}}"
comments: "{{approver_comments}}"
- name: notify-cab
type: call
call: "msteams.post-channel-message"
with:
channel_id: "change-advisory-board"
message: "Change {{change_number}} - {{get-change.short_description}}: {{approval_decision}}. Approver notes: {{approver_comments}}"
consumes:
- type: http
namespace: servicenow-lookup
baseUri: "https://metlife.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: change-request
path: "/table/change_request"
operations:
- name: get-change-request
method: GET
- type: http
namespace: servicenow-update
baseUri: "https://metlife.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: change-record
path: "/table/change_request/{{sys_id}}"
inputParameters:
- name: sys_id
in: path
operations:
- name: update-change
method: PATCH
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Searches ServiceNow knowledge base for articles matching a query.
naftiko: "0.5"
info:
label: "ServiceNow Knowledge Article Search"
description: "Searches ServiceNow knowledge base for articles matching a query."
tags:
- insurance
- servicenow
- knowledge-management
capability:
exposes:
- type: mcp
namespace: kb-ops
port: 8080
tools:
- name: search-kb
description: "Search knowledge base. Returns articles."
inputParameters:
- name: query
in: body
type: string
description: "Search query."
- name: category
in: body
type: string
description: "Category."
call: "servicenow.search"
with:
query: "{{query}}"
category: "{{category}}"
outputParameters:
- name: articles
type: array
mapping: "$.result"
- name: total
type: integer
mapping: "$.totalResults"
consumes:
- type: http
namespace: servicenow
baseUri: "https://metlife.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
Monitors Snowflake for failed claims analytics pipeline tasks, creates Jira issues for each failure, and alerts the data engineering team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Snowflake Claims Analytics Pipeline Monitor"
description: "Monitors Snowflake for failed claims analytics pipeline tasks, creates Jira issues for each failure, and alerts the data engineering team via Microsoft Teams."
tags:
- data
- analytics
- snowflake
- jira
- microsoft-teams
- monitoring
- claims
capability:
exposes:
- type: mcp
namespace: claims-data-ops
port: 8080
tools:
- name: monitor-claims-pipelines
description: "Query Snowflake for failed claims analytics pipeline tasks in the last 24 hours, create Jira issues for critical failures, and post a summary alert to the data engineering Microsoft Teams channel."
inputParameters:
- name: warehouse
in: body
type: string
description: "The Snowflake warehouse running claims data pipelines."
- name: lookback_hours
in: body
type: integer
description: "Number of hours to look back for failures (default 24)."
steps:
- name: get-failures
type: call
call: "snowflake.query-task-failures"
with:
warehouse: "{{warehouse}}"
lookback_hours: "{{lookback_hours}}"
- name: create-issue
type: call
call: "jira.create-issue"
with:
project_key: "DATA"
issuetype: "Bug"
summary: "Claims pipeline failures in {{warehouse}}: {{get-failures.failure_count}}"
description: "{{get-failures.failure_summary}}"
- name: notify-data-team
type: call
call: "msteams.post-channel-message"
with:
channel_id: "data-engineering"
message: "Claims Pipeline Alert: {{get-failures.failure_count}} failures in {{warehouse}}. Jira: {{create-issue.key}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://metlife.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query-task-failures
method: POST
- type: http
namespace: jira
baseUri: "https://metlife.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
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://metlife.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://metlife.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: "MetLife 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://metlife.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: queries
path: "/statements"
operations:
- name: query-clv
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.metlife.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://metlife.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://metlife.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
Creates a new Terraform Cloud workspace for an insurance application team, links it to GitHub, and notifies the platform engineering team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Terraform Cloud Cloud Workspace Provisioning"
description: "Creates a new Terraform Cloud workspace for an insurance application team, links it to GitHub, and notifies the platform engineering team via Microsoft Teams."
tags:
- cloud
- infrastructure
- terraform
- github
- microsoft-teams
- provisioning
capability:
exposes:
- type: mcp
namespace: cloud-provisioning
port: 8080
tools:
- name: provision-application-workspace
description: "Given an application team name, GitHub repository, and target environment, create a Terraform Cloud workspace for the insurance application, link it to the repository, and notify the platform engineering Microsoft Teams channel."
inputParameters:
- name: team_name
in: body
type: string
description: "The application team name for workspace naming."
- name: repository
in: body
type: string
description: "The GitHub repository to link to the workspace."
- name: environment
in: body
type: string
description: "Target environment: dev, staging, or production."
steps:
- name: create-workspace
type: call
call: "terraform.create-workspace"
with:
name: "{{team_name}}-{{environment}}"
vcs_repo: "{{repository}}"
- name: notify-platform
type: call
call: "msteams.post-channel-message"
with:
channel_id: "platform-engineering"
message: "Workspace created: {{team_name}}-{{environment}} linked to {{repository}}. Workspace ID: {{create-workspace.workspace_id}}"
consumes:
- type: http
namespace: terraform
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: workspaces
path: "/organizations/metlife/workspaces"
operations:
- name: create-workspace
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Provisions infrastructure via Terraform Cloud and notifies platform team.
naftiko: "0.5"
info:
label: "Terraform Infrastructure Provisioning Workflow"
description: "Provisions infrastructure via Terraform Cloud and notifies platform team."
tags:
- engineering
- terraform
- microsoft-azure
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: infra-ops
port: 8080
tools:
- name: provision
description: "Provision infrastructure."
inputParameters:
- name: workspace
in: body
type: string
description: "Workspace."
- name: env
in: body
type: string
description: "Environment."
steps:
- name: run
type: call
call: "terraform.create-run"
with:
workspace: "{{workspace}}"
message: "Provisioning {{env}}"
- name: notify
type: call
call: "msteams.post"
with:
channel_id: "$secrets.platform_channel"
text: "Terraform: {{workspace}} ({{env}})"
consumes:
- type: http
namespace: terraform
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: runs
path: "/runs"
operations:
- name: create-run
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
Checks current underwriting appetite for product, state, and risk class.
naftiko: "0.5"
info:
label: "Underwriting Appetite Check"
description: "Checks current underwriting appetite for product, state, and risk class."
tags:
- insurance
- underwriting
- compliance
capability:
exposes:
- type: mcp
namespace: appetite-ops
port: 8080
tools:
- name: check-appetite
description: "Check appetite. Returns status and restrictions."
inputParameters:
- name: product
in: body
type: string
description: "Product type."
- name: state
in: body
type: string
description: "State code."
- name: risk_class
in: body
type: string
description: "Risk class."
call: "uw-api.check"
with:
product: "{{product}}"
state: "{{state}}"
risk_class: "{{risk_class}}"
outputParameters:
- name: accepting
type: boolean
mapping: "$.isAccepting"
- name: restrictions
type: array
mapping: "$.restrictions"
consumes:
- type: http
namespace: uw-api
baseUri: "https://api.metlife.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://metlife.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.metlife.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.metlife.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://metlife.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://metlife-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.metlife.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://metlife.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://metlife.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
Launches the annual performance review cycle in Workday for a business unit, creates HR coordination Jira tasks, and notifies all employees via Microsoft Teams.
naftiko: "0.5"
info:
label: "Workday Annual Performance Review Launch"
description: "Launches the annual performance review cycle in Workday for a business unit, creates HR coordination Jira tasks, and notifies all employees via Microsoft Teams."
tags:
- hr
- performance-management
- workday
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: performance-review
port: 8080
tools:
- name: launch-annual-review
description: "Given a Workday business unit ID and review cycle parameters, retrieve employee roster, create HR coordination tasks in Jira, and broadcast the review launch to the business unit Microsoft Teams channel."
inputParameters:
- name: business_unit_id
in: body
type: string
description: "The Workday business unit ID for which to launch the annual review."
- name: cycle_name
in: body
type: string
description: "Name of the annual review cycle (e.g., 2026 Annual Performance Review)."
- name: due_date
in: body
type: string
description: "The self-assessment due date in ISO 8601 format (YYYY-MM-DD)."
steps:
- name: get-business-unit
type: call
call: "workday.get-org-unit"
with:
unit_id: "{{business_unit_id}}"
- name: create-hr-tasks
type: call
call: "jira.create-issue"
with:
project_key: "HR"
issuetype: "Task"
summary: "Annual review coordination: {{cycle_name}} - {{get-business-unit.name}}"
description: "Business unit: {{get-business-unit.name}} | Headcount: {{get-business-unit.headcount}} | Due: {{due_date}}"
- name: notify-unit
type: call
call: "msteams.post-channel-message"
with:
channel_id: "{{get-business-unit.teams_channel_id}}"
message: "Annual Performance Review Launched: {{cycle_name}} is now open. Please complete your self-assessment by {{due_date}}."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: basic
username: "$secrets.workday_user"
password: "$secrets.workday_password"
resources:
- name: org-units
path: "/metlife/organizations/{{unit_id}}"
inputParameters:
- name: unit_id
in: path
operations:
- name: get-org-unit
method: GET
- type: http
namespace: jira
baseUri: "https://metlife.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
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/metlife"
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
At the start of benefits open enrollment, retrieves eligible employees from Workday and sends personalized enrollment reminder messages via Microsoft Teams.
naftiko: "0.5"
info:
label: "Workday Benefits Open Enrollment Notification"
description: "At the start of benefits open enrollment, retrieves eligible employees from Workday and sends personalized enrollment reminder messages via Microsoft Teams."
tags:
- hr
- benefits
- workday
- microsoft-teams
- enrollment
capability:
exposes:
- type: mcp
namespace: benefits-enrollment
port: 8080
tools:
- name: launch-open-enrollment
description: "Given a Workday benefits plan year and enrollment deadline, retrieve all eligible employees, and send a personalized enrollment reminder via Microsoft Teams to each employee who has not yet enrolled."
inputParameters:
- name: plan_year
in: body
type: string
description: "The benefits plan year for open enrollment (e.g., 2027)."
- name: enrollment_deadline
in: body
type: string
description: "The open enrollment deadline date in ISO 8601 format (YYYY-MM-DD)."
steps:
- name: get-eligible-employees
type: call
call: "workday.list-benefits-eligible-workers"
with:
plan_year: "{{plan_year}}"
- name: notify-employees
type: call
call: "msteams.post-channel-message"
with:
channel_id: "all-employees"
message: "Benefits Open Enrollment is now open for {{plan_year}}! Please complete your selections by {{enrollment_deadline}}. Eligible employees: {{get-eligible-employees.count}}."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: basic
username: "$secrets.workday_user"
password: "$secrets.workday_password"
resources:
- name: benefits-eligible
path: "/metlife/workers"
operations:
- name: list-benefits-eligible-workers
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves current headcount by department and benefits enrollment status from Workday for actuarial planning and benefits reporting.
naftiko: "0.5"
info:
label: "Workday Headcount and Benefits Snapshot"
description: "Retrieves current headcount by department and benefits enrollment status from Workday for actuarial planning and benefits reporting."
tags:
- hr
- finance
- workday
- headcount
- benefits
- reporting
capability:
exposes:
- type: mcp
namespace: hr-benefits-reporting
port: 8080
tools:
- name: get-headcount-benefits-snapshot
description: "Returns current headcount grouped by department with benefits enrollment counts from Workday. Use for actuarial planning, benefits cost analysis, and regulatory reporting."
call: "workday.list-workers-with-benefits"
outputParameters:
- name: workers
type: array
mapping: "$.Report_Entry"
items:
- name: employee_id
type: string
mapping: "$.Employee_ID"
- name: full_name
type: string
mapping: "$.Employee_Name"
- name: department
type: string
mapping: "$.Department"
- name: benefits_plan
type: string
mapping: "$.Benefits_Plan"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: basic
username: "$secrets.workday_user"
password: "$secrets.workday_password"
resources:
- name: workers-benefits
path: "/metlife/workers"
operations:
- name: list-workers-with-benefits
method: GET
When an employee job change is processed in Workday, updates their Okta group memberships for the new role and notifies the employee and manager via Microsoft Teams.
naftiko: "0.5"
info:
label: "Workday Role Change and Access Update"
description: "When an employee job change is processed in Workday, updates their Okta group memberships for the new role and notifies the employee and manager via Microsoft Teams."
tags:
- hr
- role-change
- workday
- okta
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-role-change
port: 8080
tools:
- name: process-role-change
description: "Given a Workday job change event ID, retrieve the employee's new role and department, update Okta access groups, and notify the employee and new manager via Microsoft Teams."
inputParameters:
- name: event_id
in: body
type: string
description: "The Workday job change business process event ID."
steps:
- name: get-job-change
type: call
call: "workday.get-job-change-event"
with:
event_id: "{{event_id}}"
- name: update-okta
type: call
call: "okta.update-user-groups"
with:
user_email: "{{get-job-change.employee_email}}"
new_department: "{{get-job-change.new_department}}"
- name: notify-employee
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{get-job-change.employee_email}}"
message: "Congratulations! Your role change to {{get-job-change.new_job_title}} in {{get-job-change.new_department}} is effective {{get-job-change.effective_date}}."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: basic
username: "$secrets.workday_user"
password: "$secrets.workday_password"
resources:
- name: job-change-events
path: "/metlife/jobChangeEvents/{{event_id}}"
inputParameters:
- name: event_id
in: path
operations:
- name: get-job-change-event
method: GET
- type: http
namespace: okta
baseUri: "https://metlife.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: user-groups
path: "/users/{{user_id}}/groups"
inputParameters:
- name: user_id
in: path
operations:
- name: update-user-groups
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_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/metlife"
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