AIG Capabilities
Naftiko 0.5 capability definitions for AIG - 100 capabilities showing integration workflows and service orchestrations.
Triggers a reserve calculation by pulling loss triangles from Snowflake, posting to SAP GL, and notifying the chief actuary via Teams.
naftiko: "0.5"
info:
label: "Actuarial Reserve Calculation Workflow"
description: "Triggers a reserve calculation by pulling loss triangles from Snowflake, posting to SAP GL, and notifying the chief actuary via Teams."
tags:
- insurance
- actuarial
- finance
- snowflake
- sap
capability:
exposes:
- type: mcp
namespace: reserve-ops
port: 8080
tools:
- name: trigger-reserve-calc
description: "Given a valuation date and LOB, extract loss data from Snowflake, post the reserve entry to SAP, and notify the actuary."
inputParameters:
- name: valuation_date
in: body
type: string
description: "Valuation date."
- name: line_of_business
in: body
type: string
description: "LOB."
- name: actuary_upn
in: body
type: string
description: "Chief actuary UPN."
steps:
- name: get-data
type: call
call: snowflake.run-query
with:
query: "SELECT * FROM reserve_triangles WHERE lob='{{line_of_business}}'"
- name: post-gl
type: call
call: sap-fi.post-journal
with:
PostingDate: "{{valuation_date}}"
Description: "Reserve: {{line_of_business}}"
- name: notify-actuary
type: call
call: msteams.send-message
with:
recipient_upn: "{{actuary_upn}}"
text: "Reserve calc: {{line_of_business}} as of {{valuation_date}}. GL: {{post-gl.document_number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://aig.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: sap
baseUri: "https://aig-s4.sap.com/sap/opu/odata/sap/API_JOURNAL_ENTRY_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: journal-entries
path: "/A_JournalEntry"
operations:
- name: post-journal
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Retrieves a complex claims document from ServiceNow, sends it to Anthropic Claude for intelligent summarization, and posts the AI summary to the claims adjuster in Teams.
naftiko: "0.5"
info:
label: "AI-Assisted Claims Document Summarization"
description: "Retrieves a complex claims document from ServiceNow, sends it to Anthropic Claude for intelligent summarization, and posts the AI summary to the claims adjuster in Teams."
tags:
- ai
- claims
- servicenow
- anthropic
- insurance
capability:
exposes:
- type: mcp
namespace: ai-claims
port: 8080
tools:
- name: summarize-claims-document
description: "Given a ServiceNow claim record ID, retrieve the claim description and attached documents, send to Anthropic Claude for an intelligent claim summary including coverage assessment and recommended next steps. Post the summary to the adjuster in Teams. Use when adjusters need rapid comprehension of complex or lengthy claims."
inputParameters:
- name: claim_record_id
in: body
type: string
description: "ServiceNow claim record sys_id."
- name: adjuster_upn
in: body
type: string
description: "Claims adjuster Teams UPN."
steps:
- name: get-claim
type: call
call: servicenow-ai.get-record
with:
sys_id: "{{claim_record_id}}"
- name: generate-summary
type: call
call: anthropic.create-message
with:
model: "claude-opus-4-5"
prompt: "Summarize this insurance claim for an AIG claims adjuster. Include: 1) key facts of the loss, 2) likely coverage implications, 3) recommended immediate next steps. Claim: {{get-claim.description}}"
- name: notify-adjuster
type: call
call: msteams-adj.send-message
with:
recipient_upn: "{{adjuster_upn}}"
text: "AI Claim Summary for {{claim_record_id}}: {{generate-summary.content[0].text}}"
consumes:
- type: http
namespace: servicenow-ai
baseUri: "https://aig.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: claim-records
path: "/table/u_claims_investigation/{{sys_id}}"
inputParameters:
- name: sys_id
in: path
operations:
- name: get-record
method: GET
- type: http
namespace: anthropic
baseUri: "https://api.anthropic.com/v1"
authentication:
type: apikey
key: "x-api-key"
value: "$secrets.anthropic_api_key"
placement: header
resources:
- name: messages
path: "/messages"
operations:
- name: create-message
method: POST
- type: http
namespace: msteams-adj
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Retrieves the latest build run for an Azure DevOps pipeline, returning status and result.
naftiko: "0.5"
info:
label: "Azure DevOps Build Status Lookup"
description: "Retrieves the latest build run for an Azure DevOps pipeline, returning status and result."
tags:
- insurance
- devops
- azure-devops
- cicd
- lookup
capability:
exposes:
- type: mcp
namespace: cicd-ops
port: 8080
tools:
- name: get-build-status
description: "Given an Azure DevOps project and pipeline ID, return the latest build status and result."
inputParameters:
- name: project
in: body
type: string
description: "Azure DevOps project name."
- name: pipeline_id
in: body
type: string
description: "Pipeline ID."
call: azdo.get-run
with:
project: "{{project}}"
pipelineId: "{{pipeline_id}}"
outputParameters:
- name: status
type: string
mapping: "$.value[0].state"
- name: result
type: string
mapping: "$.value[0].result"
consumes:
- namespace: azdo
type: http
baseUri: "https://dev.azure.com/aig"
authentication:
type: bearer
token: "$secrets.azdo_token"
resources:
- name: cicd-ops
path: "/{{id}}"
operations:
- name: get-run
method: GET
Responds to AKS scaling alerts by checking Datadog metrics, triggering node pool scaling via Azure, and notifying the platform team in Teams.
naftiko: "0.5"
info:
label: "Azure Kubernetes Cluster Scaling Handler"
description: "Responds to AKS scaling alerts by checking Datadog metrics, triggering node pool scaling via Azure, and notifying the platform team in Teams."
tags:
- insurance
- devops
- kubernetes
- azure
- datadog
capability:
exposes:
- type: mcp
namespace: platform-ops
port: 8080
tools:
- name: handle-aks-scaling
description: "Given an AKS cluster name and CPU utilization, check Datadog metrics, scale Azure node pool, and notify platform team in Teams."
inputParameters:
- name: cluster_name
in: body
type: string
description: "AKS cluster name."
- name: cpu_utilization
in: body
type: number
description: "CPU utilization percentage."
- name: platform_channel_id
in: body
type: string
description: "Teams channel ID."
steps:
- name: check-metrics
type: call
call: datadog.get-cluster-metrics
with:
cluster: "{{cluster_name}}"
- name: scale-nodes
type: call
call: azure.scale-nodepool
with:
cluster: "{{cluster_name}}"
- name: notify-team
type: call
call: msteams.post-channel
with:
channel_id: "{{platform_channel_id}}"
text: "AKS scaling: {{cluster_name}} — CPU: {{cpu_utilization}}%. Trend: {{check-metrics.trend}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: metrics
path: "/query?query=kubernetes.cpu.usage{{cluster}}"
inputParameters:
- name: cluster
in: query
operations:
- name: get-cluster-metrics
method: GET
- type: http
namespace: azure
baseUri: "https://management.azure.com"
authentication:
type: bearer
token: "$secrets.azure_mgmt_token"
resources:
- name: nodepools
path: "/subscriptions/{{subId}}/resourceGroups/aks-rg/providers/Microsoft.ContainerService/managedClusters/{{cluster}}/agentPools/default"
inputParameters:
- name: cluster
in: path
operations:
- name: scale-nodepool
method: PUT
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: channels
path: "/teams/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel
method: POST
Queries Azure Cost Management for the current month spend of a specified resource group.
naftiko: "0.5"
info:
label: "Azure Resource Group Cost Check"
description: "Queries Azure Cost Management for the current month spend of a specified resource group."
tags:
- insurance
- cloud
- azure
- finops
- lookup
capability:
exposes:
- type: mcp
namespace: cloud-finops
port: 8080
tools:
- name: get-rg-cost
description: "Given an Azure resource group name, return the current month total cost and forecast."
inputParameters:
- name: resource_group
in: body
type: string
description: "Azure resource group name."
call: azure-cost.get-cost
with:
resourceGroup: "{{resource_group}}"
outputParameters:
- name: total_cost
type: number
mapping: "$.properties.rows[0][0]"
- name: forecast
type: number
mapping: "$.properties.rows[0][1]"
consumes:
- namespace: azure-cost
type: http
baseUri: "https://management.azure.com"
authentication:
type: bearer
token: "$secrets.azure_mgmt_token"
resources:
- name: cloud-finops
path: "/{{id}}"
operations:
- name: get-cost
method: GET
Reconciles broker commissions by pulling payment data from SAP, comparing against Salesforce policy data, and emailing discrepancy reports.
naftiko: "0.5"
info:
label: "Broker Commission Reconciliation Workflow"
description: "Reconciles broker commissions by pulling payment data from SAP, comparing against Salesforce policy data, and emailing discrepancy reports."
tags:
- insurance
- finance
- commissions
- sap
- salesforce
capability:
exposes:
- type: mcp
namespace: commission-ops
port: 8080
tools:
- name: reconcile-commissions
description: "Given a broker ID and period, pull SAP commission payments, compare with Salesforce, and send a reconciliation report."
inputParameters:
- name: broker_id
in: body
type: string
description: "Broker ID."
- name: period
in: body
type: string
description: "Commission period."
- name: finance_email
in: body
type: string
description: "Finance contact email."
steps:
- name: get-payments
type: call
call: sap-fi.get-commissions
with:
broker_id: "{{broker_id}}"
period: "{{period}}"
- name: get-earned
type: call
call: sf.get-earned
with:
broker_id: "{{broker_id}}"
period: "{{period}}"
- name: send-report
type: call
call: msgraph.send-mail
with:
to: "{{finance_email}}"
subject: "Commission Reconciliation: {{broker_id}} — {{period}}"
body: "Paid: {{get-payments.total}} | Earned: {{get-earned.total}}"
consumes:
- type: http
namespace: sap
baseUri: "https://aig-s4.sap.com/sap/opu/odata/sap/API_JOURNAL_ENTRY_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: commissions
path: "/A_JournalEntry?$filter=BrokerID eq '{{broker_id}}'"
inputParameters:
- name: broker_id
in: query
operations:
- name: get-commissions
method: GET
- type: http
namespace: sf
baseUri: "https://aig.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: policies
path: "/query/?q=SELECT+SUM(Commission__c)+FROM+Policy__c+WHERE+Broker_ID__c='{{broker_id}}'"
inputParameters:
- name: broker_id
in: query
operations:
- name: get-earned
method: GET
- type: http
namespace: msgraph
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/users/noreply@aig.com/sendMail"
operations:
- name: send-mail
method: POST
Coordinates BC drills by pulling participant lists from Workday, creating tasks in ServiceNow, and distributing instructions via Teams.
naftiko: "0.5"
info:
label: "Business Continuity Drill Coordinator"
description: "Coordinates BC drills by pulling participant lists from Workday, creating tasks in ServiceNow, and distributing instructions via Teams."
tags:
- insurance
- operations
- business-continuity
- workday
- servicenow
capability:
exposes:
- type: mcp
namespace: bcp-ops
port: 8080
tools:
- name: coordinate-bc-drill
description: "Given a drill scenario and date, pull department staff from Workday, create drill tasks in ServiceNow, and post instructions to Teams."
inputParameters:
- name: drill_scenario
in: body
type: string
description: "Drill scenario."
- name: drill_date
in: body
type: string
description: "Drill date."
- name: bcp_channel_id
in: body
type: string
description: "Teams channel ID."
steps:
- name: get-participants
type: call
call: workday.get-staff
with:
scenario: "{{drill_scenario}}"
- name: create-task
type: call
call: snow.create-task
with:
short_description: "BC Drill: {{drill_scenario}} — {{drill_date}}"
description: "Participants: {{get-participants.count}}"
- name: notify-channel
type: call
call: msteams.post-channel
with:
channel_id: "{{bcp_channel_id}}"
text: "BC Drill: {{drill_scenario}} on {{drill_date}}. Participants: {{get-participants.count}}. Task: {{create-task.number}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd5-impl-services1.workday.com/ccx/service/aig/Human_Resources/v40.1"
authentication:
type: basic
username: "$secrets.workday_user"
password: "$secrets.workday_password"
resources:
- name: staff
path: "/workers"
operations:
- name: get-staff
method: GET
- type: http
namespace: snow
baseUri: "https://aig.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/u_bc_drill"
operations:
- name: create-task
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: channels
path: "/teams/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel
method: POST
When a CAT event is declared, queries Salesforce for impacted policies, provisions ServiceNow claim queues, and notifies the CAT response team via Teams.
naftiko: "0.5"
info:
label: "Catastrophe Event Claims Surge Coordinator"
description: "When a CAT event is declared, queries Salesforce for impacted policies, provisions ServiceNow claim queues, and notifies the CAT response team via Teams."
tags:
- insurance
- catastrophe
- claims
- salesforce
- servicenow
capability:
exposes:
- type: mcp
namespace: cat-ops
port: 8080
tools:
- name: handle-cat-event
description: "Given a CAT event code and affected ZIP codes, query Salesforce for impacted policies, create a surge queue in ServiceNow, and broadcast to the CAT team."
inputParameters:
- name: cat_event_code
in: body
type: string
description: "CAT event code."
- name: affected_zips
in: body
type: string
description: "Affected ZIP codes."
- name: cat_channel_id
in: body
type: string
description: "Teams channel ID."
steps:
- name: query-policies
type: call
call: sf.query-by-geo
with:
zip_codes: "{{affected_zips}}"
- name: create-queue
type: call
call: snow.create-queue
with:
short_description: "CAT surge: {{cat_event_code}}"
description: "Policies: {{query-policies.totalSize}} | ZIPs: {{affected_zips}}"
- name: notify-team
type: call
call: msteams.post-channel
with:
channel_id: "{{cat_channel_id}}"
text: "CAT {{cat_event_code}}: {{query-policies.totalSize}} policies. Queue: {{create-queue.number}}"
consumes:
- type: http
namespace: sf
baseUri: "https://aig.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: policies
path: "/query/?q=SELECT+Id+FROM+InsurancePolicy__c+WHERE+Zip__c+IN+({{zip_codes}})"
inputParameters:
- name: zip_codes
in: query
operations:
- name: query-by-geo
method: GET
- type: http
namespace: snow
baseUri: "https://aig.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: queues
path: "/table/u_claims_queue"
operations:
- name: create-queue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: channels
path: "/teams/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel
method: POST
Balances adjuster workloads by querying Salesforce for open claims, checking capacity in Snowflake, and notifying the claims manager in Teams.
naftiko: "0.5"
info:
label: "Claims Adjuster Workload Balancing"
description: "Balances adjuster workloads by querying Salesforce for open claims, checking capacity in Snowflake, and notifying the claims manager in Teams."
tags:
- insurance
- claims
- workforce-management
- salesforce
- snowflake
capability:
exposes:
- type: mcp
namespace: workload-ops
port: 8080
tools:
- name: balance-workload
description: "Given a claims region, query Salesforce for open claims per adjuster, check capacity thresholds in Snowflake, and notify the manager."
inputParameters:
- name: region
in: body
type: string
description: "Claims region."
- name: manager_upn
in: body
type: string
description: "Claims manager UPN."
steps:
- name: get-workload
type: call
call: sf.query-workload
with:
region: "{{region}}"
- name: check-capacity
type: call
call: snowflake.check-thresholds
with:
region: "{{region}}"
- name: notify-manager
type: call
call: msteams.send-message
with:
recipient_upn: "{{manager_upn}}"
text: "Workload: {{region}} — {{get-workload.total_open}} open claims, {{get-workload.adjuster_count}} adjusters. Status: {{check-capacity.status}}"
consumes:
- type: http
namespace: sf
baseUri: "https://aig.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: workload
path: "/query/?q=SELECT+COUNT(Id),OwnerId+FROM+Case+WHERE+Region__c='{{region}}'"
operations:
- name: query-workload
method: GET
- type: http
namespace: snowflake
baseUri: "https://aig.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: check-thresholds
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
operations:
- name: send-message
method: POST
When a fraud indicator is detected, enriches the claim from Salesforce, flags in ServiceNow, and alerts the SIU team via Teams.
naftiko: "0.5"
info:
label: "Claims Fraud Detection Alert Workflow"
description: "When a fraud indicator is detected, enriches the claim from Salesforce, flags in ServiceNow, and alerts the SIU team via Teams."
tags:
- insurance
- claims
- fraud-detection
- salesforce
- servicenow
capability:
exposes:
- type: mcp
namespace: fraud-ops
port: 8080
tools:
- name: handle-fraud-indicator
description: "Given a claim number and fraud indicator, look up in Salesforce, create a fraud investigation in ServiceNow, and notify SIU in Teams."
inputParameters:
- name: claim_number
in: body
type: string
description: "Claim number."
- name: fraud_indicator
in: body
type: string
description: "Fraud indicator type."
- name: siu_upn
in: body
type: string
description: "UPN of SIU lead."
steps:
- name: get-claim
type: call
call: sf.get-claim
with:
claim_number: "{{claim_number}}"
- name: create-investigation
type: call
call: snow.create-record
with:
short_description: "Fraud: {{claim_number}} — {{fraud_indicator}}"
category: "fraud_investigation"
- name: notify-siu
type: call
call: msteams.send-message
with:
recipient_upn: "{{siu_upn}}"
text: "Fraud alert: Claim {{claim_number}} — {{fraud_indicator}}. SNOW: {{create-investigation.number}}"
consumes:
- type: http
namespace: sf
baseUri: "https://aig.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: claims
path: "/sobjects/Case/CaseNumber/{{claim_number}}"
inputParameters:
- name: claim_number
in: path
operations:
- name: get-claim
method: GET
- type: http
namespace: snow
baseUri: "https://aig.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: fraud
path: "/table/u_fraud_investigation"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Processes a claims payment by validating the claim in Salesforce, creating a payment in SAP, and notifying the adjuster via Teams.
naftiko: "0.5"
info:
label: "Claims Payment Processing Workflow"
description: "Processes a claims payment by validating the claim in Salesforce, creating a payment in SAP, and notifying the adjuster via Teams."
tags:
- insurance
- claims
- finance
- salesforce
- sap
capability:
exposes:
- type: mcp
namespace: payment-ops
port: 8080
tools:
- name: process-claims-payment
description: "Given a claim number and payment amount, validate in Salesforce, create an SAP payment, and notify the adjuster."
inputParameters:
- name: claim_number
in: body
type: string
description: "Claim number."
- name: payment_amount
in: body
type: number
description: "Payment amount."
- name: adjuster_upn
in: body
type: string
description: "Adjuster UPN."
steps:
- name: validate
type: call
call: sf.get-claim-status
with:
claim_number: "{{claim_number}}"
- name: create-payment
type: call
call: sap-fi.post-payment
with:
claim_number: "{{claim_number}}"
amount: "{{payment_amount}}"
- name: notify-adjuster
type: call
call: msteams.send-message
with:
recipient_upn: "{{adjuster_upn}}"
text: "Payment: Claim {{claim_number}} — ${{payment_amount}}. SAP: {{create-payment.document_number}}"
consumes:
- type: http
namespace: sf
baseUri: "https://aig.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: claims
path: "/sobjects/Case/CaseNumber/{{claim_number}}"
inputParameters:
- name: claim_number
in: path
operations:
- name: get-claim-status
method: GET
- type: http
namespace: sap
baseUri: "https://aig-s4.sap.com/sap/opu/odata/sap/API_JOURNAL_ENTRY_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: payments
path: "/A_JournalEntry"
operations:
- name: post-payment
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Reviews reserve adequacy by pulling reserves from SAP, comparing development in Snowflake, and alerting actuaries in Teams.
naftiko: "0.5"
info:
label: "Claims Reserve Adequacy Review Workflow"
description: "Reviews reserve adequacy by pulling reserves from SAP, comparing development in Snowflake, and alerting actuaries in Teams."
tags:
- insurance
- actuarial
- claims
- sap
- snowflake
capability:
exposes:
- type: mcp
namespace: reserve-review
port: 8080
tools:
- name: review-reserve-adequacy
description: "Given an LOB and date, pull booked reserves from SAP, compare with Snowflake factors, and alert the actuarial team."
inputParameters:
- name: line_of_business
in: body
type: string
description: "LOB."
- name: valuation_date
in: body
type: string
description: "Valuation date."
- name: actuary_channel_id
in: body
type: string
description: "Actuarial Teams channel."
steps:
- name: get-reserves
type: call
call: sap-fi.get-reserves
with:
lob: "{{line_of_business}}"
date: "{{valuation_date}}"
- name: get-development
type: call
call: snowflake.query-development
with:
lob: "{{line_of_business}}"
- name: alert-team
type: call
call: msteams.post-channel
with:
channel_id: "{{actuary_channel_id}}"
text: "Reserve review: {{line_of_business}} — Booked: ${{get-reserves.total}} | Indicated: ${{get-development.indicated}}"
consumes:
- type: http
namespace: sap-fi
baseUri: "https://aig-s4.sap.com/sap/opu/odata/sap/API_JOURNAL_ENTRY_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: reserves
path: "/A_JournalEntry?$filter=LOB eq '{{lob}}'"
operations:
- name: get-reserves
method: GET
- type: http
namespace: snowflake
baseUri: "https://aig.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query-development
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: channels
path: "/teams/channels/{{channel_id}}/messages"
operations:
- name: post-channel
method: POST
When AWS Cost Anomaly Detection raises an alert, creates a Datadog event, opens a Jira FinOps ticket, and posts to the cloud-finops Teams channel.
naftiko: "0.5"
info:
label: "Cloud Cost Anomaly Response"
description: "When AWS Cost Anomaly Detection raises an alert, creates a Datadog event, opens a Jira FinOps ticket, and posts to the cloud-finops Teams channel."
tags:
- finops
- cloud
- aws
- datadog
- jira
capability:
exposes:
- type: mcp
namespace: cloud-finops
port: 8080
tools:
- name: handle-cost-anomaly
description: "Given an AWS cost anomaly ID, service name, and estimated overage, create a Datadog warning event, open a Jira cloud FinOps task, and post to the finops Teams channel. Use when AWS Cost Anomaly Detection triggers above threshold."
inputParameters:
- name: anomaly_id
in: body
type: string
description: "AWS Cost Anomaly Detection anomaly ID."
- name: service_name
in: body
type: string
description: "AWS service generating the anomaly."
- name: estimated_overage_usd
in: body
type: number
description: "Estimated cost overage in USD."
- name: finops_channel_id
in: body
type: string
description: "FinOps Teams channel ID."
steps:
- name: create-dd-event
type: call
call: datadog.create-event
with:
title: "AWS Cost Anomaly: {{service_name}}"
text: "Anomaly {{anomaly_id}} — overage ${{estimated_overage_usd}}"
alert_type: "warning"
- name: open-jira
type: call
call: jira-finops.create-issue
with:
project_key: "FINOPS"
issuetype: "Task"
summary: "Cost anomaly: {{service_name}} +${{estimated_overage_usd}}"
description: "Anomaly {{anomaly_id}}. Datadog: {{create-dd-event.id}}"
- name: alert-finops
type: call
call: msteams-finops.post-channel-message
with:
channel_id: "{{finops_channel_id}}"
text: "AWS Cost Anomaly on {{service_name}}: +${{estimated_overage_usd}} | Jira: {{open-jira.key}} | Datadog: {{create-dd-event.url}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: events
path: "/events"
operations:
- name: create-event
method: POST
- type: http
namespace: jira-finops
baseUri: "https://aig.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams-finops
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Schedules property inspections by pulling policy details from Salesforce, creating a task in ServiceNow, and notifying the inspector via Teams.
naftiko: "0.5"
info:
label: "Commercial Property Inspection Scheduler"
description: "Schedules property inspections by pulling policy details from Salesforce, creating a task in ServiceNow, and notifying the inspector via Teams."
tags:
- insurance
- property
- underwriting
- salesforce
- servicenow
capability:
exposes:
- type: mcp
namespace: inspection-ops
port: 8080
tools:
- name: schedule-inspection
description: "Given a policy number and inspection type, retrieve property details, create a ServiceNow inspection task, and notify the inspector."
inputParameters:
- name: policy_number
in: body
type: string
description: "Policy number."
- name: inspection_type
in: body
type: string
description: "Inspection type."
- name: inspector_upn
in: body
type: string
description: "Inspector UPN."
steps:
- name: get-property
type: call
call: sf.get-property
with:
policy_number: "{{policy_number}}"
- name: create-task
type: call
call: snow.create-task
with:
short_description: "Inspection: {{policy_number}} — {{inspection_type}}"
description: "Address: {{get-property.address}}"
- name: notify-inspector
type: call
call: msteams.send-message
with:
recipient_upn: "{{inspector_upn}}"
text: "Inspection: {{inspection_type}} at {{get-property.address}} — Policy {{policy_number}}. SNOW: {{create-task.number}}"
consumes:
- type: http
namespace: sf
baseUri: "https://aig.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: properties
path: "/sobjects/Property_Risk__c/PolicyNumber__c/{{policy_number}}"
operations:
- name: get-property
method: GET
- type: http
namespace: snow
baseUri: "https://aig.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/u_inspection_task"
operations:
- name: create-task
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
operations:
- name: send-message
method: POST
Tracks compliance training by pulling enrollment data from Workday Learning, checking ServiceNow escalation thresholds, and notifying managers via Teams.
naftiko: "0.5"
info:
label: "Compliance Training Completion Tracker"
description: "Tracks compliance training by pulling enrollment data from Workday Learning, checking ServiceNow escalation thresholds, and notifying managers via Teams."
tags:
- insurance
- compliance
- training
- workday
- servicenow
capability:
exposes:
- type: mcp
namespace: compliance-training
port: 8080
tools:
- name: track-training-completion
description: "Given a program ID and deadline, query Workday for incomplete enrollments, check escalation status in ServiceNow, and notify managers in Teams."
inputParameters:
- name: program_id
in: body
type: string
description: "Training program ID."
- name: deadline
in: body
type: string
description: "Deadline date."
steps:
- name: get-enrollments
type: call
call: workday.get-training-status
with:
program_id: "{{program_id}}"
- name: check-escalation
type: call
call: snow.check-escalation
with:
program_id: "{{program_id}}"
deadline: "{{deadline}}"
- name: notify-managers
type: call
call: msteams.send-notification
with:
subject: "Training overdue: {{program_id}}"
body: "Deadline: {{deadline}}. Incomplete: {{get-enrollments.incomplete_count}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd5-impl-services1.workday.com/ccx/service/aig/Learning/v40.1"
authentication:
type: basic
username: "$secrets.workday_user"
password: "$secrets.workday_password"
resources:
- name: training
path: "/learning-enrollments?program={{program_id}}"
inputParameters:
- name: program_id
in: query
operations:
- name: get-training-status
method: GET
- type: http
namespace: snow
baseUri: "https://aig.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: escalation
path: "/table/u_training_compliance"
operations:
- name: check-escalation
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Books a conference room via Microsoft Graph, creates the calendar event, and notifies attendees in Teams.
naftiko: "0.5"
info:
label: "Conference Room Booking Notification"
description: "Books a conference room via Microsoft Graph, creates the calendar event, and notifies attendees in Teams."
tags:
- insurance
- facilities
- microsoft-graph
- microsoft-teams
- scheduling
capability:
exposes:
- type: mcp
namespace: facilities-ops
port: 8080
tools:
- name: book-conference-room
description: "Given a room email, start/end times, and organizer, check availability, create the booking, and notify in Teams."
inputParameters:
- name: room_email
in: body
type: string
description: "Room resource email."
- name: start_time
in: body
type: string
description: "Start time (ISO 8601)."
- name: end_time
in: body
type: string
description: "End time (ISO 8601)."
- name: organizer_upn
in: body
type: string
description: "Organizer UPN."
steps:
- name: check-availability
type: call
call: msgraph.get-schedule
with:
room: "{{room_email}}"
start: "{{start_time}}"
- name: create-booking
type: call
call: msgraph.create-event
with:
room: "{{room_email}}"
start: "{{start_time}}"
end: "{{end_time}}"
- name: notify-organizer
type: call
call: msteams.send-message
with:
recipient_upn: "{{organizer_upn}}"
text: "Room booked: {{room_email}} from {{start_time}} to {{end_time}}."
consumes:
- type: http
namespace: msgraph
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: schedules
path: "/users/{{room}}/calendar/getSchedule"
inputParameters:
- name: room
in: path
operations:
- name: get-schedule
method: POST
- name: events
path: "/users/{{organizer_upn}}/events"
operations:
- name: create-event
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Searches Confluence for a knowledge article by keyword and returns the page title, space, and URL.
naftiko: "0.5"
info:
label: "Confluence Knowledge Article Search"
description: "Searches Confluence for a knowledge article by keyword and returns the page title, space, and URL."
tags:
- insurance
- knowledge-management
- confluence
- documentation
- lookup
capability:
exposes:
- type: mcp
namespace: km-ops
port: 8080
tools:
- name: search-article
description: "Given a keyword, search Confluence for matching articles and return the top result title, space, and URL."
inputParameters:
- name: keyword
in: body
type: string
description: "Search keyword."
call: confluence.search-content
with:
cql: "type=page AND title~{{keyword}}"
outputParameters:
- name: title
type: string
mapping: "$.results[0].title"
- name: space
type: string
mapping: "$.results[0].space.name"
consumes:
- namespace: confluence
type: http
baseUri: "https://aig.atlassian.net/wiki/rest/api"
authentication:
type: bearer
token: "$secrets.confluence_api_token"
resources:
- name: km-ops
path: "/{{id}}"
operations:
- name: search-content
method: GET
When a complaint is received, creates a Salesforce case, opens a ServiceNow investigation task, and notifies the compliance officer via Teams.
naftiko: "0.5"
info:
label: "Customer Complaint Escalation Handler"
description: "When a complaint is received, creates a Salesforce case, opens a ServiceNow investigation task, and notifies the compliance officer via Teams."
tags:
- insurance
- customer-service
- salesforce
- servicenow
- compliance
capability:
exposes:
- type: mcp
namespace: complaints-ops
port: 8080
tools:
- name: escalate-complaint
description: "Given complaint details, create a Salesforce case, open a ServiceNow task, and alert compliance via Teams."
inputParameters:
- name: customer_name
in: body
type: string
description: "Complainant name."
- name: account_number
in: body
type: string
description: "Account or policy number."
- name: complaint_category
in: body
type: string
description: "Complaint category."
- name: compliance_upn
in: body
type: string
description: "UPN of compliance officer."
steps:
- name: create-case
type: call
call: sf.create-case
with:
Subject: "Complaint — {{account_number}} — {{complaint_category}}"
Description: "Customer: {{customer_name}} | Category: {{complaint_category}}"
- name: create-task
type: call
call: snow.create-task
with:
short_description: "Complaint: {{account_number}}"
description: "SF Case: {{create-case.case_number}} | {{complaint_category}}"
- name: notify-compliance
type: call
call: msteams.send-message
with:
recipient_upn: "{{compliance_upn}}"
text: "Complaint escalation: {{customer_name}} — {{complaint_category}}. SF: {{create-case.case_number}} | SNOW: {{create-task.number}}"
consumes:
- type: http
namespace: sf
baseUri: "https://aig.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: snow
baseUri: "https://aig.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/sn_si_task"
operations:
- name: create-task
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Scores cyber risk by checking security posture, pulling claims history from Snowflake, and updating Salesforce with the score.
naftiko: "0.5"
info:
label: "Cyber Insurance Risk Scoring Workflow"
description: "Scores cyber risk by checking security posture, pulling claims history from Snowflake, and updating Salesforce with the score."
tags:
- insurance
- cyber
- underwriting
- snowflake
- salesforce
capability:
exposes:
- type: mcp
namespace: cyber-uw
port: 8080
tools:
- name: score-cyber-risk
description: "Given an applicant domain, run a security posture check, pull cyber claims data from Snowflake, and update Salesforce."
inputParameters:
- name: applicant_domain
in: body
type: string
description: "Applicant domain."
- name: policy_number
in: body
type: string
description: "Policy number."
- name: underwriter_upn
in: body
type: string
description: "Underwriter UPN."
steps:
- name: scan-posture
type: call
call: security-scan.check-domain
with:
domain: "{{applicant_domain}}"
- name: get-history
type: call
call: snowflake.query-cyber-claims
with:
domain: "{{applicant_domain}}"
- name: update-record
type: call
call: sf.update-risk-score
with:
policy_number: "{{policy_number}}"
score: "{{scan-posture.score}}"
- name: notify-uw
type: call
call: msteams.send-message
with:
recipient_upn: "{{underwriter_upn}}"
text: "Cyber risk: {{applicant_domain}} — Score: {{scan-posture.score}}/100 | Losses: {{get-history.loss_count}}"
consumes:
- type: http
namespace: security-scan
baseUri: "https://api.securityscorecard.io"
authentication:
type: bearer
token: "$secrets.securityscorecard_token"
resources:
- name: domains
path: "/companies/{{domain}}/score"
operations:
- name: check-domain
method: GET
- type: http
namespace: snowflake
baseUri: "https://aig.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query-cyber-claims
method: POST
- type: http
namespace: sf
baseUri: "https://aig.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: policies
path: "/sobjects/InsurancePolicy__c/PolicyNumber__c/{{policy_number}}"
operations:
- name: update-risk-score
method: PATCH
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
operations:
- name: send-message
method: POST
Processes a data subject access request by searching Salesforce and Snowflake for personal data, compiling results, and logging in ServiceNow.
naftiko: "0.5"
info:
label: "Data Privacy Subject Access Request Handler"
description: "Processes a data subject access request by searching Salesforce and Snowflake for personal data, compiling results, and logging in ServiceNow."
tags:
- insurance
- compliance
- data-privacy
- salesforce
- snowflake
- servicenow
capability:
exposes:
- type: mcp
namespace: privacy-ops
port: 8080
tools:
- name: process-dsar
description: "Given a data subject email, search for personal data across Salesforce and Snowflake, log the DSAR in ServiceNow, and notify the privacy officer via Teams."
inputParameters:
- name: subject_email
in: body
type: string
description: "Data subject email."
- name: request_type
in: body
type: string
description: "DSAR type: access, deletion."
- name: privacy_officer_upn
in: body
type: string
description: "UPN of privacy officer."
steps:
- name: search-sf
type: call
call: sf.search-person
with:
email: "{{subject_email}}"
- name: search-snowflake
type: call
call: snowflake.search-pii
with:
email: "{{subject_email}}"
- name: log-dsar
type: call
call: snow.create-dsar
with:
short_description: "DSAR: {{request_type}} — {{subject_email}}"
description: "SF: {{search-sf.record_count}} | Snowflake: {{search-snowflake.record_count}}"
- name: notify-officer
type: call
call: msteams.send-message
with:
recipient_upn: "{{privacy_officer_upn}}"
text: "DSAR: {{request_type}} for {{subject_email}}. SF: {{search-sf.record_count}}, SF: {{search-snowflake.record_count}}. SNOW: {{log-dsar.number}}"
consumes:
- type: http
namespace: sf
baseUri: "https://aig.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: search
path: "/parameterizedSearch/?q={{email}}"
inputParameters:
- name: email
in: query
operations:
- name: search-person
method: GET
- type: http
namespace: snowflake
baseUri: "https://aig.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: search-pii
method: POST
- type: http
namespace: snow
baseUri: "https://aig.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: dsar
path: "/table/u_dsar_request"
operations:
- name: create-dsar
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Queries Datadog for the current health status of a specified service, returning uptime percentage and error rate.
naftiko: "0.5"
info:
label: "Datadog Service Health Check"
description: "Queries Datadog for the current health status of a specified service, returning uptime percentage and error rate."
tags:
- insurance
- it-operations
- datadog
- monitoring
- lookup
capability:
exposes:
- type: mcp
namespace: observability
port: 8080
tools:
- name: get-service-health
description: "Given a Datadog service name, return the current uptime percentage, error rate, and active monitor count."
inputParameters:
- name: service_name
in: body
type: string
description: "Datadog service name."
call: datadog.get-slo
with:
service: "{{service_name}}"
outputParameters:
- name: uptime_pct
type: number
mapping: "$.data[0].overall.sli_value"
- name: error_rate
type: number
mapping: "$.data[0].overall.error_budget_remaining"
consumes:
- namespace: datadog
type: http
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: observability
path: "/{{id}}"
operations:
- name: get-slo
method: GET
When a Datadog SLO breach is detected, creates a ServiceNow incident, pages on-call via PagerDuty, and posts to the reliability channel.
naftiko: "0.5"
info:
label: "Datadog SLO Breach Incident Handler"
description: "When a Datadog SLO breach is detected, creates a ServiceNow incident, pages on-call via PagerDuty, and posts to the reliability channel."
tags:
- insurance
- sre
- datadog
- servicenow
- pagerduty
capability:
exposes:
- type: mcp
namespace: sre-ops
port: 8080
tools:
- name: handle-slo-breach
description: "Given an SLO name and current SLI value, create a ServiceNow incident, trigger a PagerDuty alert, and notify the SRE channel in Teams."
inputParameters:
- name: slo_name
in: body
type: string
description: "SLO name."
- name: sli_value
in: body
type: number
description: "Current SLI value."
- name: service_name
in: body
type: string
description: "Affected service."
- name: sre_channel_id
in: body
type: string
description: "SRE Teams channel."
steps:
- name: create-incident
type: call
call: snow.create-incident
with:
short_description: "SLO breach: {{slo_name}} — {{service_name}}"
description: "SLI: {{sli_value}}%"
priority: "2"
- name: page-oncall
type: call
call: pagerduty.create-incident
with:
service_id: "sre-team"
title: "SLO breach: {{slo_name}} ({{sli_value}}%)"
- name: notify-channel
type: call
call: msteams.post-channel
with:
channel_id: "{{sre_channel_id}}"
text: "SLO Breach: {{slo_name}} — {{service_name}} at {{sli_value}}%. SNOW: {{create-incident.number}}"
consumes:
- type: http
namespace: snow
baseUri: "https://aig.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: 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.msteams_token"
resources:
- name: channels
path: "/teams/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel
method: POST
Retrieves the status of a DocuSign envelope by ID, returning signing status and sent date.
naftiko: "0.5"
info:
label: "DocuSign Envelope Tracking Lookup"
description: "Retrieves the status of a DocuSign envelope by ID, returning signing status and sent date."
tags:
- insurance
- legal
- docusign
- document-management
- lookup
capability:
exposes:
- type: mcp
namespace: doc-ops
port: 8080
tools:
- name: get-envelope-status
description: "Given a DocuSign envelope ID, return the status, sent date, and recipient count."
inputParameters:
- name: envelope_id
in: body
type: string
description: "DocuSign envelope ID."
call: docusign.get-envelope
with:
envelopeId: "{{envelope_id}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: sent_date
type: string
mapping: "$.sentDateTime"
consumes:
- namespace: docusign
type: http
baseUri: "https://na4.docusign.net/restapi/v2.1"
authentication:
type: bearer
token: "$secrets.docusign_token"
resources:
- name: doc-ops
path: "/{{id}}"
operations:
- name: get-envelope
method: GET
Queries Dynatrace for the response time and failure rate of a specified application.
naftiko: "0.5"
info:
label: "Dynatrace Application Metrics Lookup"
description: "Queries Dynatrace for the response time and failure rate of a specified application."
tags:
- insurance
- it-operations
- dynatrace
- monitoring
- lookup
capability:
exposes:
- type: mcp
namespace: apm-ops
port: 8080
tools:
- name: get-app-metrics
description: "Given a Dynatrace entity ID, return the median response time and failure rate."
inputParameters:
- name: entity_id
in: body
type: string
description: "Dynatrace application entity ID."
call: dynatrace.get-metrics
with:
entityId: "{{entity_id}}"
outputParameters:
- name: response_time_ms
type: number
mapping: "$.result[0].data[0].values.median"
- name: failure_rate
type: number
mapping: "$.result[1].data[0].values.avg"
consumes:
- namespace: dynatrace
type: http
baseUri: "https://aig.live.dynatrace.com/api/v2"
authentication:
type: bearer
token: "$secrets.dynatrace_token"
resources:
- name: apm-ops
path: "/{{id}}"
operations:
- name: get-metrics
method: GET
When a Workday role change is approved, updates Okta group memberships, adjusts the Salesforce user profile, and creates an IT ServiceNow follow-up task.
naftiko: "0.5"
info:
label: "Employee Role Change Access Provisioning"
description: "When a Workday role change is approved, updates Okta group memberships, adjusts the Salesforce user profile, and creates an IT ServiceNow follow-up task."
tags:
- hr
- identity
- workday
- okta
- provisioning
capability:
exposes:
- type: mcp
namespace: role-provisioning
port: 8080
tools:
- name: process-role-change
description: "Given a Workday employee ID, new role, and Okta group changes, update Okta group membership, update the Salesforce user profile with the new title, and create a ServiceNow task for IT access follow-up. Use when an AIG employee's role or department changes."
inputParameters:
- name: workday_employee_id
in: body
type: string
description: "Workday worker ID of the employee."
- name: new_role
in: body
type: string
description: "New job title or role."
- name: okta_add_group_id
in: body
type: string
description: "Okta group ID to add the employee to for the new role."
- name: salesforce_user_id
in: body
type: string
description: "Salesforce user ID to update."
steps:
- name: get-worker
type: call
call: workday-rc.get-worker
with:
worker_id: "{{workday_employee_id}}"
- name: add-to-group
type: call
call: okta-rc.add-user-to-group
with:
group_id: "{{okta_add_group_id}}"
- name: update-sf-user
type: call
call: salesforce-rc.update-user
with:
user_id: "{{salesforce_user_id}}"
title: "{{new_role}}"
- name: create-it-task
type: call
call: servicenow-rc.create-task
with:
short_description: "Role change: {{get-worker.full_name}} → {{new_role}}"
category: "access_management"
assigned_group: "IT_Access"
consumes:
- type: http
namespace: workday-rc
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: okta-rc
baseUri: "https://aig.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_token"
placement: header
resources:
- name: group-users
path: "/groups/{{group_id}}/users"
inputParameters:
- name: group_id
in: path
operations:
- name: add-user-to-group
method: PUT
- type: http
namespace: salesforce-rc
baseUri: "https://aig.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: users
path: "/sobjects/User/{{user_id}}"
inputParameters:
- name: user_id
in: path
operations:
- name: update-user
method: PATCH
- type: http
namespace: servicenow-rc
baseUri: "https://aig.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/sc_task"
operations:
- name: create-task
method: POST
When an employee termination is processed in Workday, disables their Okta account, revokes ServiceNow access, and notifies the HR business partner via Teams.
naftiko: "0.5"
info:
label: "Employee Termination Access Revocation"
description: "When an employee termination is processed in Workday, disables their Okta account, revokes ServiceNow access, and notifies the HR business partner via Teams."
tags:
- insurance
- hr
- security
- workday
- okta
- servicenow
capability:
exposes:
- type: mcp
namespace: hr-security
port: 8080
tools:
- name: revoke-terminated-access
description: "Given a Workday employee ID and termination date, disable the Okta account, close open ServiceNow tickets, and notify the HRBP via Teams."
inputParameters:
- name: employee_id
in: body
type: string
description: "Workday employee ID."
- name: termination_date
in: body
type: string
description: "Termination date."
- name: hrbp_upn
in: body
type: string
description: "UPN of the HRBP."
steps:
- name: get-employee
type: call
call: workday.get-worker
with:
employee_id: "{{employee_id}}"
- name: disable-okta
type: call
call: okta.deactivate-user
with:
login: "{{get-employee.email}}"
- name: notify-hrbp
type: call
call: msteams.send-message
with:
recipient_upn: "{{hrbp_upn}}"
text: "Access revoked for {{get-employee.full_name}} ({{employee_id}}) effective {{termination_date}}."
consumes:
- type: http
namespace: workday
baseUri: "https://wd5-impl-services1.workday.com/ccx/service/aig/Human_Resources/v40.1"
authentication:
type: basic
username: "$secrets.workday_user"
password: "$secrets.workday_password"
resources:
- name: workers
path: "/workers/{{employee_id}}"
inputParameters:
- name: employee_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: okta
baseUri: "https://aig.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_api_token"
resources:
- name: users
path: "/users/{{login}}/lifecycle/deactivate"
inputParameters:
- name: login
in: path
operations:
- name: deactivate-user
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Compiles an executive KPI digest by pulling metrics from Snowflake, refreshing Power BI, and emailing the C-suite.
naftiko: "0.5"
info:
label: "Executive KPI Dashboard Digest"
description: "Compiles an executive KPI digest by pulling metrics from Snowflake, refreshing Power BI, and emailing the C-suite."
tags:
- insurance
- reporting
- analytics
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: exec-reporting
port: 8080
tools:
- name: generate-kpi-digest
description: "Given a reporting period, pull KPIs from Snowflake, refresh the Power BI executive dashboard, and email the digest."
inputParameters:
- name: period
in: body
type: string
description: "Reporting period."
- name: exec_dl
in: body
type: string
description: "Executive DL email."
steps:
- name: get-kpis
type: call
call: snowflake.query-kpis
with:
period: "{{period}}"
- name: refresh-pbi
type: call
call: powerbi.trigger-refresh
with:
datasetId: "executive-dashboard"
- name: send-digest
type: call
call: msgraph.send-mail
with:
to: "{{exec_dl}}"
subject: "Executive KPI Digest — {{period}}"
body: "Key metrics refreshed. Dashboard updated."
consumes:
- type: http
namespace: snowflake
baseUri: "https://aig.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query-kpis
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: "/datasets/{{datasetId}}/refreshes"
inputParameters:
- name: datasetId
in: path
operations:
- name: trigger-refresh
method: POST
- type: http
namespace: msgraph
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/users/noreply@aig.com/sendMail"
operations:
- name: send-mail
method: POST
When a GitHub Actions workflow fails on a protected branch, creates a Jira bug, logs a Datadog deployment marker, and alerts the engineering Teams channel.
naftiko: "0.5"
info:
label: "GitHub CI/CD Pipeline Failure Handler"
description: "When a GitHub Actions workflow fails on a protected branch, creates a Jira bug, logs a Datadog deployment marker, and alerts the engineering Teams channel."
tags:
- devops
- cicd
- github
- jira
- datadog
capability:
exposes:
- type: mcp
namespace: devops-ci
port: 8080
tools:
- name: handle-pipeline-failure
description: "Given a GitHub Actions failure event with repo, branch, commit, and workflow details, open a Jira bug, create a Datadog error event, and alert the engineering Teams channel. Use when a protected-branch CI pipeline fails on an AIG platform repo."
inputParameters:
- name: repo
in: body
type: string
description: "GitHub repository full name."
- name: branch
in: body
type: string
description: "Branch where the failure occurred."
- name: commit_sha
in: body
type: string
description: "Failing commit SHA."
- name: workflow_name
in: body
type: string
description: "Name of the failed workflow."
- name: run_url
in: body
type: string
description: "URL to the failed run."
- name: eng_channel_id
in: body
type: string
description: "Engineering Teams channel ID."
steps:
- name: create-bug
type: call
call: jira-eng.create-issue
with:
project_key: "ENG"
issuetype: "Bug"
summary: "[CI Failure] {{repo}} / {{branch}} — {{workflow_name}}"
description: "Commit: {{commit_sha}}\nRun: {{run_url}}"
- name: log-dd-event
type: call
call: datadog-ci.create-event
with:
title: "CI Failure: {{repo}} — {{branch}}"
text: "Commit {{commit_sha}} | Workflow {{workflow_name}}"
alert_type: "error"
- name: alert-eng
type: call
call: msteams-eng.post-channel-message
with:
channel_id: "{{eng_channel_id}}"
text: "CI Failure: {{repo}} | Branch: {{branch}} | Jira: {{create-bug.key}} | Run: {{run_url}}"
consumes:
- type: http
namespace: jira-eng
baseUri: "https://aig.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: datadog-ci
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-eng
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
When Dependabot alerts are raised, creates Jira tickets for remediation, logs in Snowflake, and alerts the AppSec team via Teams.
naftiko: "0.5"
info:
label: "GitHub Dependabot Alert Handler"
description: "When Dependabot alerts are raised, creates Jira tickets for remediation, logs in Snowflake, and alerts the AppSec team via Teams."
tags:
- insurance
- security
- github
- jira
- snowflake
capability:
exposes:
- type: mcp
namespace: appsec-ops
port: 8080
tools:
- name: handle-dependabot-alert
description: "Given a repo and alert severity, create a Jira ticket, log the vulnerability in Snowflake, and notify AppSec in Teams."
inputParameters:
- name: repo_name
in: body
type: string
description: "GitHub repository."
- name: cve_id
in: body
type: string
description: "CVE identifier."
- name: severity
in: body
type: string
description: "Alert severity."
- name: appsec_upn
in: body
type: string
description: "UPN of AppSec lead."
steps:
- name: create-jira
type: call
call: jira.create-issue
with:
project: "APPSEC"
summary: "Dependabot: {{cve_id}} in {{repo_name}}"
description: "Severity: {{severity}} | Repo: {{repo_name}}"
- name: log-vuln
type: call
call: snowflake.insert-vuln
with:
repo: "{{repo_name}}"
cve: "{{cve_id}}"
severity: "{{severity}}"
- name: notify-appsec
type: call
call: msteams.send-message
with:
recipient_upn: "{{appsec_upn}}"
text: "Dependabot: {{cve_id}} ({{severity}}) in {{repo_name}}. Jira: {{create-jira.key}}"
consumes:
- type: http
namespace: jira
baseUri: "https://aig.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: snowflake
baseUri: "https://aig.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: insert-vuln
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Fetches a GitHub repository by name and returns the default branch, open issue count, and last push timestamp.
naftiko: "0.5"
info:
label: "GitHub Repository Status Check"
description: "Fetches a GitHub repository by name and returns the default branch, open issue count, and last push timestamp."
tags:
- insurance
- engineering
- github
- devops
- lookup
capability:
exposes:
- type: mcp
namespace: dev-ops
port: 8080
tools:
- name: get-repo-status
description: "Given a GitHub repository full name, return the default branch and last push timestamp."
inputParameters:
- name: repo_name
in: body
type: string
description: "GitHub repository full name."
call: github.get-repo
with:
repo: "{{repo_name}}"
outputParameters:
- name: default_branch
type: string
mapping: "$.default_branch"
- name: last_push
type: string
mapping: "$.pushed_at"
consumes:
- namespace: github
type: http
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: dev-ops
path: "/{{id}}"
operations:
- name: get-repo
method: GET
When GitHub Advanced Security detects a critical CVE in an AIG platform repo, creates a Jira security ticket, logs a Datadog event, and alerts the cybersecurity team in Teams.
naftiko: "0.5"
info:
label: "GitHub Security Vulnerability Triage"
description: "When GitHub Advanced Security detects a critical CVE in an AIG platform repo, creates a Jira security ticket, logs a Datadog event, and alerts the cybersecurity team in Teams."
tags:
- security
- github
- devops
- jira
- vulnerability
capability:
exposes:
- type: mcp
namespace: sec-triage
port: 8080
tools:
- name: triage-security-alert
description: "Given a GitHub security alert with CVE, severity, and affected package, create a Jira security ticket, log a Datadog error event, and alert the cybersecurity Teams channel. Use when GitHub Advanced Security finds a critical CVE in an AIG insurance platform repo."
inputParameters:
- name: repo
in: body
type: string
description: "GitHub repository full name."
- name: cve_id
in: body
type: string
description: "CVE identifier."
- name: severity
in: body
type: string
description: "Severity: critical, high, medium, or low."
- name: package_name
in: body
type: string
description: "Affected package name."
- name: sec_channel_id
in: body
type: string
description: "Cybersecurity Teams channel ID."
steps:
- name: create-sec-ticket
type: call
call: jira-sec.create-issue
with:
project_key: "SEC"
issuetype: "Bug"
summary: "[{{severity}}] {{cve_id}} in {{repo}} — {{package_name}}"
description: "CVE: {{cve_id}} | Package: {{package_name}} | Severity: {{severity}}"
priority: "Highest"
- name: log-event
type: call
call: datadog-sec.create-event
with:
title: "Security: {{cve_id}} in {{repo}}"
text: "Package {{package_name}} | Severity: {{severity}} | Jira: {{create-sec-ticket.key}}"
alert_type: "error"
- name: alert-sec-team
type: call
call: msteams-sec.post-channel-message
with:
channel_id: "{{sec_channel_id}}"
text: "SECURITY: {{severity}} CVE {{cve_id}} in {{repo}} / {{package_name}} | Jira: {{create-sec-ticket.key}} | Datadog: {{log-event.url}}"
consumes:
- type: http
namespace: jira-sec
baseUri: "https://aig.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: datadog-sec
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-sec
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Processes bordereaux by loading data into Snowflake, reconciling against Salesforce, and sending variance reports.
naftiko: "0.5"
info:
label: "Insurance Bordereaux Processing Workflow"
description: "Processes bordereaux by loading data into Snowflake, reconciling against Salesforce, and sending variance reports."
tags:
- insurance
- delegated-authority
- snowflake
- salesforce
- reporting
capability:
exposes:
- type: mcp
namespace: da-ops
port: 8080
tools:
- name: process-bordereaux
description: "Given a bordereaux file reference and period, load into Snowflake, reconcile with Salesforce, and send a report."
inputParameters:
- name: file_reference
in: body
type: string
description: "File reference ID."
- name: period
in: body
type: string
description: "Reporting period."
- name: da_manager_email
in: body
type: string
description: "DA manager email."
steps:
- name: load-data
type: call
call: snowflake.load-bordereaux
with:
file_ref: "{{file_reference}}"
period: "{{period}}"
- name: reconcile
type: call
call: sf.query-policies
with:
period: "{{period}}"
- name: send-report
type: call
call: msgraph.send-mail
with:
to: "{{da_manager_email}}"
subject: "Bordereaux: {{period}} — {{file_reference}}"
body: "Loaded: {{load-data.row_count}} | Matches: {{reconcile.match_count}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://aig.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: load-bordereaux
method: POST
- type: http
namespace: sf
baseUri: "https://aig.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: policies
path: "/query/?q=SELECT+Id+FROM+InsurancePolicy__c+WHERE+Period__c='{{period}}'"
operations:
- name: query-policies
method: GET
- type: http
namespace: msgraph
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/users/noreply@aig.com/sendMail"
operations:
- name: send-mail
method: POST
When a new insurance claim is submitted, creates a Salesforce case, opens a ServiceNow claim investigation record, and notifies the assigned adjuster in Teams.
naftiko: "0.5"
info:
label: "Insurance Claim Intake and Triage"
description: "When a new insurance claim is submitted, creates a Salesforce case, opens a ServiceNow claim investigation record, and notifies the assigned adjuster in Teams."
tags:
- insurance
- claims
- salesforce
- servicenow
- customer-service
capability:
exposes:
- type: mcp
namespace: claims-ops
port: 8080
tools:
- name: intake-insurance-claim
description: "Given claim details including policy number, claimant name, loss type, and loss date, create a Salesforce case for customer tracking, open a ServiceNow claim investigation record, and notify the assigned adjuster in Teams. Use when a new claim is received."
inputParameters:
- name: policy_number
in: body
type: string
description: "AIG policy number for the claim."
- name: claimant_name
in: body
type: string
description: "Full name of the claimant."
- name: loss_type
in: body
type: string
description: "Type of loss, e.g. 'property-damage', 'liability', 'auto'."
- name: loss_date
in: body
type: string
description: "Date of loss in YYYY-MM-DD format."
- name: adjuster_upn
in: body
type: string
description: "UPN of the assigned claims adjuster."
steps:
- name: create-sf-case
type: call
call: salesforce-claims.create-case
with:
subject: "Claim — Policy {{policy_number}} — {{loss_type}}"
description: "Claimant: {{claimant_name}} | Loss date: {{loss_date}}"
origin: "Phone"
- name: create-snow-record
type: call
call: servicenow-claims.create-record
with:
short_description: "Claim investigation: {{policy_number}} — {{loss_type}}"
description: "Claimant: {{claimant_name}} | Loss date: {{loss_date}} | Salesforce case: {{create-sf-case.case_number}}"
category: "claims_investigation"
- name: notify-adjuster
type: call
call: msteams-claims.send-message
with:
recipient_upn: "{{adjuster_upn}}"
text: "New claim assigned: Policy {{policy_number}} — {{loss_type}} on {{loss_date}}. Claimant: {{claimant_name}}. Salesforce: {{create-sf-case.case_number}} | ServiceNow: {{create-snow-record.number}}"
consumes:
- type: http
namespace: salesforce-claims
baseUri: "https://aig.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-claims
baseUri: "https://aig.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: claim-records
path: "/table/u_claims_investigation"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams-claims
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Manages IT asset retirement by updating the ServiceNow CMDB, revoking Okta access, and logging disposal in SAP fixed assets.
naftiko: "0.5"
info:
label: "IT Asset Lifecycle Retirement Workflow"
description: "Manages IT asset retirement by updating the ServiceNow CMDB, revoking Okta access, and logging disposal in SAP fixed assets."
tags:
- insurance
- it-operations
- asset-management
- servicenow
- okta
- sap
capability:
exposes:
- type: mcp
namespace: asset-ops
port: 8080
tools:
- name: retire-it-asset
description: "Given a CI name and asset tag, mark as retired in ServiceNow CMDB, revoke Okta access, create SAP disposal entry, and notify IT manager in Teams."
inputParameters:
- name: ci_name
in: body
type: string
description: "ServiceNow CI name."
- name: asset_tag
in: body
type: string
description: "Asset tag number."
- name: it_manager_upn
in: body
type: string
description: "UPN of IT asset manager."
steps:
- name: retire-cmdb
type: call
call: snow.update-ci-status
with:
ci_name: "{{ci_name}}"
status: "Retired"
- name: revoke-access
type: call
call: okta.remove-app-assignment
with:
app_label: "{{ci_name}}"
- name: log-disposal
type: call
call: sap.create-disposal
with:
asset_number: "{{asset_tag}}"
- name: notify-manager
type: call
call: msteams.send-message
with:
recipient_upn: "{{it_manager_upn}}"
text: "Asset retired: {{ci_name}} ({{asset_tag}}). CMDB updated, access revoked."
consumes:
- type: http
namespace: snow
baseUri: "https://aig.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cmdb
path: "/table/cmdb_ci?sysparm_query=name={{ci_name}}"
inputParameters:
- name: ci_name
in: query
operations:
- name: update-ci-status
method: PATCH
- type: http
namespace: okta
baseUri: "https://aig.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_api_token"
resources:
- name: apps
path: "/apps?q={{app_label}}"
inputParameters:
- name: app_label
in: query
operations:
- name: remove-app-assignment
method: DELETE
- type: http
namespace: sap
baseUri: "https://aig-s4.sap.com/sap/opu/odata/sap/API_FIXEDASSET_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: disposals
path: "/A_FixedAsset"
operations:
- name: create-disposal
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Creates a ServiceNow change request for planned maintenance on insurance platform systems and notifies the CAB Teams channel for approval.
naftiko: "0.5"
info:
label: "IT Change Management Request"
description: "Creates a ServiceNow change request for planned maintenance on insurance platform systems and notifies the CAB Teams channel for approval."
tags:
- itsm
- change-management
- servicenow
- approval
capability:
exposes:
- type: mcp
namespace: change-mgmt
port: 8080
tools:
- name: submit-change-request
description: "Given maintenance details and a planned window, create a ServiceNow change request and notify the CAB Teams channel. Use when scheduling planned maintenance that affects AIG insurance or corporate systems."
inputParameters:
- name: short_description
in: body
type: string
description: "Brief description of the planned change."
- name: description
in: body
type: string
description: "Full change details including systems affected and rollback plan."
- name: planned_start
in: body
type: string
description: "Planned start time in ISO 8601 format."
- name: planned_end
in: body
type: string
description: "Planned end time in ISO 8601 format."
- name: cab_channel_id
in: body
type: string
description: "CAB Teams channel ID."
steps:
- name: create-change
type: call
call: servicenow-change.create-change-request
with:
short_description: "{{short_description}}"
description: "{{description}}"
start_date: "{{planned_start}}"
end_date: "{{planned_end}}"
- name: notify-cab
type: call
call: msteams-cab.post-channel-message
with:
channel_id: "{{cab_channel_id}}"
text: "Change Request {{create-change.number}}: {{short_description}} | Window: {{planned_start}} to {{planned_end}} | Awaiting CAB approval"
consumes:
- type: http
namespace: servicenow-change
baseUri: "https://aig.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: change-requests
path: "/table/change_request"
operations:
- name: create-change-request
method: POST
- type: http
namespace: msteams-cab
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
When Datadog fires a critical alert on an insurance platform system, opens a P1 ServiceNow incident, pages the on-call engineer via PagerDuty, and posts to the IT war-room Teams channel.
naftiko: "0.5"
info:
label: "IT P1 Incident Triage and Escalation"
description: "When Datadog fires a critical alert on an insurance platform system, opens a P1 ServiceNow incident, pages the on-call engineer via PagerDuty, and posts to the IT war-room Teams channel."
tags:
- itsm
- incident-response
- datadog
- pagerduty
- servicenow
capability:
exposes:
- type: mcp
namespace: it-p1-ops
port: 8080
tools:
- name: handle-critical-alert
description: "Given a Datadog critical alert for an AIG insurance platform system, create a P1 ServiceNow incident, trigger PagerDuty to page the on-call engineer, and post to the IT war-room Teams channel. Use when monitoring detects a critical system failure."
inputParameters:
- name: alert_id
in: body
type: string
description: "Datadog monitor alert ID."
- name: system_name
in: body
type: string
description: "Affected system name."
- name: alert_message
in: body
type: string
description: "Human-readable alert description."
- name: warroom_channel_id
in: body
type: string
description: "IT war-room Teams channel ID."
steps:
- name: create-incident
type: call
call: servicenow-p1.create-incident
with:
short_description: "P1: {{system_name}} — {{alert_message}}"
priority: "1"
category: "critical_system"
- name: page-oncall
type: call
call: pagerduty.trigger-incident
with:
title: "P1 — {{system_name}}"
severity: "critical"
details: "INC: {{create-incident.number}} | Alert: {{alert_id}}"
- name: post-warroom
type: call
call: msteams-p1.post-channel-message
with:
channel_id: "{{warroom_channel_id}}"
text: "P1 INCIDENT: {{system_name}} | INC: {{create-incident.number}} | PagerDuty: {{page-oncall.incident_key}} | {{alert_message}}"
consumes:
- type: http
namespace: servicenow-p1
baseUri: "https://aig.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: pagerduty
baseUri: "https://events.pagerduty.com/v2"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.pagerduty_token"
placement: header
resources:
- name: enqueue
path: "/enqueue"
operations:
- name: trigger-incident
method: POST
- type: http
namespace: msteams-p1
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
When a critical vulnerability is discovered, creates a Jira remediation ticket, updates the CMDB in ServiceNow, and alerts the security team via Teams.
naftiko: "0.5"
info:
label: "IT Security Vulnerability Remediation Workflow"
description: "When a critical vulnerability is discovered, creates a Jira remediation ticket, updates the CMDB in ServiceNow, and alerts the security team via Teams."
tags:
- insurance
- security
- vulnerability-management
- jira
- servicenow
capability:
exposes:
- type: mcp
namespace: secops
port: 8080
tools:
- name: remediate-vulnerability
description: "Given a CVE ID, severity, and affected system, create a Jira ticket, update the ServiceNow CMDB, and notify SecOps in Teams."
inputParameters:
- name: cve_id
in: body
type: string
description: "CVE identifier."
- name: severity
in: body
type: string
description: "Severity level."
- name: affected_system
in: body
type: string
description: "Affected system name."
- name: secops_upn
in: body
type: string
description: "UPN of SecOps lead."
steps:
- name: create-ticket
type: call
call: jira.create-issue
with:
project: "SECOPS"
summary: "Remediate {{cve_id}} — {{affected_system}}"
description: "Severity: {{severity}} | System: {{affected_system}}"
- name: update-cmdb
type: call
call: snow.update-ci
with:
ci_name: "{{affected_system}}"
vulnerability: "{{cve_id}} — {{severity}}"
- name: notify-secops
type: call
call: msteams.send-message
with:
recipient_upn: "{{secops_upn}}"
text: "Vulnerability: {{cve_id}} ({{severity}}) on {{affected_system}}. Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: jira
baseUri: "https://aig.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: snow
baseUri: "https://aig.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cmdb
path: "/table/cmdb_ci?sysparm_query=name={{ci_name}}"
inputParameters:
- name: ci_name
in: query
operations:
- name: update-ci
method: PATCH
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Fetches a Jira issue by key and returns the summary, status, assignee, and priority.
naftiko: "0.5"
info:
label: "Jira Issue Detail Lookup"
description: "Fetches a Jira issue by key and returns the summary, status, assignee, and priority."
tags:
- insurance
- engineering
- jira
- project-management
- lookup
capability:
exposes:
- type: mcp
namespace: eng-ops
port: 8080
tools:
- name: get-jira-issue
description: "Given a Jira issue key, return the issue summary, status, assignee, and priority."
inputParameters:
- name: issue_key
in: body
type: string
description: "Jira issue key."
call: jira.get-issue
with:
issueKey: "{{issue_key}}"
outputParameters:
- name: summary
type: string
mapping: "$.fields.summary"
- name: status
type: string
mapping: "$.fields.status.name"
- name: assignee
type: string
mapping: "$.fields.assignee.displayName"
consumes:
- namespace: jira
type: http
baseUri: "https://aig.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_api_token"
resources:
- name: eng-ops
path: "/{{id}}"
operations:
- name: get-issue
method: GET
At sprint close, retrieves Jira velocity metrics, refreshes the Power BI agile dashboard, and posts a sprint summary to the engineering Teams channel.
naftiko: "0.5"
info:
label: "Jira Sprint Velocity Digest"
description: "At sprint close, retrieves Jira velocity metrics, refreshes the Power BI agile dashboard, and posts a sprint summary to the engineering Teams channel."
tags:
- devops
- jira
- agile
- reporting
- engineering
capability:
exposes:
- type: mcp
namespace: sprint-reporting
port: 8080
tools:
- name: publish-sprint-velocity
description: "Given a Jira board and sprint ID, retrieve completed story points, refresh the Power BI agile dashboard, and post the sprint summary to the engineering Teams channel. Use at each sprint close to communicate velocity."
inputParameters:
- name: board_id
in: body
type: string
description: "Jira software board ID."
- name: sprint_id
in: body
type: string
description: "Completed sprint ID."
- name: pbi_dataset_id
in: body
type: string
description: "Power BI dataset ID for the agile dashboard."
- name: eng_channel_id
in: body
type: string
description: "Engineering Teams channel ID."
steps:
- name: get-sprint-report
type: call
call: jira-agile.get-sprint-report
with:
board_id: "{{board_id}}"
sprint_id: "{{sprint_id}}"
- name: refresh-pbi-sprint
type: call
call: powerbi-sprint.trigger-refresh
with:
dataset_id: "{{pbi_dataset_id}}"
- name: post-sprint-summary
type: call
call: msteams-sprint.post-channel-message
with:
channel_id: "{{eng_channel_id}}"
text: "Sprint {{sprint_id}} closed. Velocity: {{get-sprint-report.completed_points}} pts | Completion: {{get-sprint-report.completion_rate}}% | Dashboard refreshed."
consumes:
- type: http
namespace: jira-agile
baseUri: "https://aig.atlassian.net/rest/agile/1.0"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_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: get-sprint-report
method: GET
- type: http
namespace: powerbi-sprint
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: dataset-refreshes
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: trigger-refresh
method: POST
- type: http
namespace: msteams-sprint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Generates a talent brand performance report by pulling LinkedIn analytics, comparing with Workday hiring data, and posting to Teams.
naftiko: "0.5"
info:
label: "LinkedIn Talent Brand Performance Report"
description: "Generates a talent brand performance report by pulling LinkedIn analytics, comparing with Workday hiring data, and posting to Teams."
tags:
- insurance
- hr
- talent-acquisition
- linkedin
- workday
capability:
exposes:
- type: mcp
namespace: ta-ops
port: 8080
tools:
- name: generate-talent-report
description: "Given a reporting week, pull LinkedIn employer brand metrics, compare against Workday requisitions, and post a digest to Teams."
inputParameters:
- name: week
in: body
type: string
description: "Reporting week."
- name: region
in: body
type: string
description: "Region."
- name: ta_channel_id
in: body
type: string
description: "Teams channel ID."
steps:
- name: get-metrics
type: call
call: linkedin.get-brand-metrics
with:
week: "{{week}}"
region: "{{region}}"
- name: get-reqs
type: call
call: workday.get-open-reqs
with:
region: "{{region}}"
- name: post-digest
type: call
call: msteams.post-channel
with:
channel_id: "{{ta_channel_id}}"
text: "Talent Brand: {{week}} ({{region}}). Impressions: {{get-metrics.impressions}} | Open reqs: {{get-reqs.count}}"
consumes:
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: analytics
path: "/organizationalEntityShareStatistics"
operations:
- name: get-brand-metrics
method: GET
- type: http
namespace: workday
baseUri: "https://wd5-impl-services1.workday.com/ccx/service/aig/Recruiting/v40.1"
authentication:
type: basic
username: "$secrets.workday_user"
password: "$secrets.workday_password"
resources:
- name: requisitions
path: "/job-requisitions"
operations:
- name: get-open-reqs
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: channels
path: "/teams/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel
method: POST
Checks Microsoft 365 license utilization for the organization, returning assigned and consumed license counts.
naftiko: "0.5"
info:
label: "Microsoft 365 License Utilization Check"
description: "Checks Microsoft 365 license utilization for the organization, returning assigned and consumed license counts."
tags:
- it-operations
- microsoft-365
- license-management
- lookup
capability:
exposes:
- type: mcp
namespace: license-ops
port: 8080
tools:
- name: get-license-usage
description: "Return the total assigned and consumed Microsoft 365 license counts for the organization."
inputParameters:
- name: sku_part_number
in: body
type: string
description: "Microsoft 365 SKU part number."
call: msgraph.get-subscribed-skus
with:
sku: "{{sku_part_number}}"
outputParameters:
- name: assigned
type: integer
mapping: "$.consumedUnits"
- name: total
type: integer
mapping: "$.prepaidUnits.enabled"
consumes:
- namespace: msgraph
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: subscribed-skus
path: "/subscribedSkus"
operations:
- name: get-subscribed-skus
method: GET
Triggers SAP S/4HANA period close for the fiscal month, validates journal postings, and notifies the finance team in Teams.
naftiko: "0.5"
info:
label: "Monthly Financial Period Close"
description: "Triggers SAP S/4HANA period close for the fiscal month, validates journal postings, and notifies the finance team in Teams."
tags:
- finance
- erp
- period-close
- sap
- accounting
capability:
exposes:
- type: mcp
namespace: finance-close
port: 8080
tools:
- name: trigger-period-close
description: "Given a fiscal period and company code, initiate the SAP period close sequence, validate journal completeness, and post completion status to the finance Teams channel. Use at month end to automate AIG's financial close workflow."
inputParameters:
- name: fiscal_period
in: body
type: string
description: "Fiscal period in YYYYPP format, e.g. '202603'."
- name: company_code
in: body
type: string
description: "SAP company code, e.g. 'AIGI'."
- name: finance_channel_id
in: body
type: string
description: "Finance Teams channel ID."
steps:
- name: close-period
type: call
call: sap-fi.close-period
with:
fiscal_period: "{{fiscal_period}}"
company_code: "{{company_code}}"
- name: validate-journals
type: call
call: sap-journals.check-completeness
with:
fiscal_period: "{{fiscal_period}}"
company_code: "{{company_code}}"
- name: notify-finance
type: call
call: msteams-finance.post-channel-message
with:
channel_id: "{{finance_channel_id}}"
text: "Period {{fiscal_period}} closed for {{company_code}}. Journal status: {{validate-journals.status}} | Open items: {{validate-journals.open_count}}"
consumes:
- type: http
namespace: sap-fi
baseUri: "https://aig-s4.sap.com/sap/opu/odata/sap/FAR_PERIOD_CLOSE_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: period-close
path: "/PeriodClose"
operations:
- name: close-period
method: POST
- type: http
namespace: sap-journals
baseUri: "https://aig-s4.sap.com/sap/opu/odata/sap/FAR_JOURNAL_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: journal-validation
path: "/JournalEntryCompleteness"
inputParameters:
- name: fiscal_period
in: query
- name: company_code
in: query
operations:
- name: check-completeness
method: GET
- type: http
namespace: msteams-finance
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Processes a new business submission by creating a Salesforce opportunity, generating an underwriting task in ServiceNow, and notifying the underwriter via Teams.
naftiko: "0.5"
info:
label: "New Business Submission Processing"
description: "Processes a new business submission by creating a Salesforce opportunity, generating an underwriting task in ServiceNow, and notifying the underwriter via Teams."
tags:
- insurance
- underwriting
- salesforce
- servicenow
- new-business
capability:
exposes:
- type: mcp
namespace: submission-ops
port: 8080
tools:
- name: process-submission
description: "Given submission details, create a Salesforce opportunity, open an underwriting task in ServiceNow, and notify the underwriter."
inputParameters:
- name: broker_name
in: body
type: string
description: "Broker name."
- name: coverage_type
in: body
type: string
description: "Coverage type."
- name: estimated_premium
in: body
type: number
description: "Estimated premium."
- name: underwriter_upn
in: body
type: string
description: "UPN of underwriter."
steps:
- name: create-opp
type: call
call: sf.create-opportunity
with:
Name: "New — {{broker_name}} — {{coverage_type}}"
Amount: "{{estimated_premium}}"
- name: create-task
type: call
call: snow.create-task
with:
short_description: "UW Review: {{broker_name}} — {{coverage_type}}"
description: "Premium: {{estimated_premium}} | SF: {{create-opp.id}}"
- name: notify-uw
type: call
call: msteams.send-message
with:
recipient_upn: "{{underwriter_upn}}"
text: "New submission: {{broker_name}} — {{coverage_type}}. SF: {{create-opp.id}} | SNOW: {{create-task.number}}"
consumes:
- type: http
namespace: sf
baseUri: "https://aig.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity"
operations:
- name: create-opportunity
method: POST
- type: http
namespace: snow
baseUri: "https://aig.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/u_underwriting_task"
operations:
- name: create-task
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
When a new employee is created in Workday, opens a ServiceNow onboarding ticket, provisions their Okta account, and sends a Microsoft Teams welcome message.
naftiko: "0.5"
info:
label: "New Hire Onboarding Orchestration"
description: "When a new employee is created in Workday, opens a ServiceNow onboarding ticket, provisions their Okta account, and sends a Microsoft Teams welcome message."
tags:
- hr
- onboarding
- workday
- servicenow
- okta
capability:
exposes:
- type: mcp
namespace: hr-onboarding
port: 8080
tools:
- name: trigger-employee-onboarding
description: "Given a Workday employee ID and start date, create a ServiceNow onboarding task, provision Okta access, and send a Teams welcome message. Use when HR confirms a new hire in Workday."
inputParameters:
- name: workday_employee_id
in: body
type: string
description: "Workday worker ID for the new hire."
- name: start_date
in: body
type: string
description: "Employee start date in YYYY-MM-DD format."
steps:
- name: get-employee
type: call
call: workday.get-worker
with:
worker_id: "{{workday_employee_id}}"
- name: create-onboarding-ticket
type: call
call: servicenow.create-incident
with:
short_description: "Onboarding: {{get-employee.first_name}} {{get-employee.last_name}}"
category: "hr_onboarding"
assigned_group: "IT_Onboarding"
- name: provision-okta
type: call
call: okta.create-user
with:
firstName: "{{get-employee.first_name}}"
lastName: "{{get-employee.last_name}}"
email: "{{get-employee.work_email}}"
login: "{{get-employee.work_email}}"
- name: send-welcome
type: call
call: msteams.send-message
with:
recipient_upn: "{{get-employee.work_email}}"
text: "Welcome to AIG, {{get-employee.first_name}}! Your onboarding ticket is {{create-onboarding-ticket.number}}. Start date: {{start_date}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://aig.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: okta
baseUri: "https://aig.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_token"
placement: header
resources:
- name: users
path: "/users"
operations:
- name: create-user
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
When an employee termination is processed in Workday, deactivates their Okta account, closes open ServiceNow access requests, and deactivates their Salesforce user.
naftiko: "0.5"
info:
label: "Okta Employee Access Deprovisioning"
description: "When an employee termination is processed in Workday, deactivates their Okta account, closes open ServiceNow access requests, and deactivates their Salesforce user."
tags:
- hr
- offboarding
- okta
- workday
- identity
capability:
exposes:
- type: mcp
namespace: hr-offboarding
port: 8080
tools:
- name: deprovision-terminated-employee
description: "Given a terminated employee's Workday ID, Okta user ID, and Salesforce user ID, deactivate Okta, close open ServiceNow requests, and deactivate Salesforce. Use immediately upon processing a termination to prevent unauthorized access to AIG systems."
inputParameters:
- name: workday_employee_id
in: body
type: string
description: "Workday worker ID of the terminated employee."
- name: okta_user_id
in: body
type: string
description: "Okta user ID to deactivate."
- name: salesforce_user_id
in: body
type: string
description: "Salesforce user ID to deactivate."
steps:
- name: deactivate-okta
type: call
call: okta-offboard.deactivate-user
with:
user_id: "{{okta_user_id}}"
- name: close-snow-requests
type: call
call: servicenow-offboard.close-requests
with:
employee_id: "{{workday_employee_id}}"
- name: deactivate-sf-user
type: call
call: salesforce-offboard.update-user
with:
user_id: "{{salesforce_user_id}}"
is_active: "false"
consumes:
- type: http
namespace: okta-offboard
baseUri: "https://aig.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_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: servicenow-offboard
baseUri: "https://aig.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: requests
path: "/table/sc_request"
operations:
- name: close-requests
method: PATCH
- type: http
namespace: salesforce-offboard
baseUri: "https://aig.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: users
path: "/sobjects/User/{{user_id}}"
inputParameters:
- name: user_id
in: path
operations:
- name: update-user
method: PATCH
Audits MFA enrollment by querying Okta for unenrolled users, creating compliance tasks in ServiceNow, and notifying IT security via Teams.
naftiko: "0.5"
info:
label: "Okta MFA Enrollment Compliance Audit"
description: "Audits MFA enrollment by querying Okta for unenrolled users, creating compliance tasks in ServiceNow, and notifying IT security via Teams."
tags:
- insurance
- security
- okta
- mfa
- servicenow
- compliance
capability:
exposes:
- type: mcp
namespace: mfa-ops
port: 8080
tools:
- name: audit-mfa-compliance
description: "Query Okta for users without MFA, create a compliance task in ServiceNow, and notify IT security in Teams."
inputParameters:
- name: department
in: body
type: string
description: "Department to audit."
- name: security_lead_upn
in: body
type: string
description: "UPN of security lead."
steps:
- name: get-unenrolled
type: call
call: okta.list-unenrolled
with:
department: "{{department}}"
- name: create-task
type: call
call: snow.create-task
with:
short_description: "MFA non-compliance: {{department}}"
description: "Unenrolled: {{get-unenrolled.count}}"
- name: notify-lead
type: call
call: msteams.send-message
with:
recipient_upn: "{{security_lead_upn}}"
text: "MFA audit: {{department}} — {{get-unenrolled.count}} unenrolled. Task: {{create-task.number}}"
consumes:
- type: http
namespace: okta
baseUri: "https://aig.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_api_token"
resources:
- name: users
path: '/users?filter=profile.department eq "{{department}}"'
inputParameters:
- name: department
in: query
operations:
- name: list-unenrolled
method: GET
- type: http
namespace: snow
baseUri: "https://aig.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/u_compliance_task"
operations:
- name: create-task
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Retrieves Okta privileged group membership, refreshes a Power BI certification report, and emails the security team for access review.
naftiko: "0.5"
info:
label: "Okta Privileged Access Quarterly Certification"
description: "Retrieves Okta privileged group membership, refreshes a Power BI certification report, and emails the security team for access review."
tags:
- identity
- security
- okta
- compliance
- access-review
capability:
exposes:
- type: mcp
namespace: access-cert
port: 8080
tools:
- name: run-privileged-access-certification
description: "Given an Okta privileged group ID, retrieve current membership, trigger a Power BI report refresh, and email the security team the certification report for review. Use quarterly for regulatory compliance access reviews."
inputParameters:
- name: okta_group_id
in: body
type: string
description: "Okta privileged group ID to certify."
- name: pbi_dataset_id
in: body
type: string
description: "Power BI dataset ID for access certification reports."
- name: security_team_email
in: body
type: string
description: "Security team email for the certification."
steps:
- name: get-group-users
type: call
call: okta-cert.get-group-members
with:
group_id: "{{okta_group_id}}"
- name: refresh-pbi-cert
type: call
call: powerbi-cert.trigger-refresh
with:
dataset_id: "{{pbi_dataset_id}}"
- name: send-cert-report
type: call
call: msgraph-cert.send-email
with:
to: "{{security_team_email}}"
subject: "Quarterly Access Certification — Okta Group {{okta_group_id}}"
body: "Group {{okta_group_id}} has {{get-group-users.total_count}} members. Review in Power BI and certify or revoke access."
consumes:
- type: http
namespace: okta-cert
baseUri: "https://aig.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_token"
placement: header
resources:
- name: group-members
path: "/groups/{{group_id}}/users"
inputParameters:
- name: group_id
in: path
operations:
- name: get-group-members
method: GET
- type: http
namespace: powerbi-cert
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: dataset-refreshes
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: trigger-refresh
method: POST
- type: http
namespace: msgraph-cert
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: send-mail
path: "/users/{{sender}}/sendMail"
operations:
- name: send-email
method: POST
Looks up an Okta user by email and returns the account status, last login timestamp, and MFA enrollment state.
naftiko: "0.5"
info:
label: "Okta User Account Status Lookup"
description: "Looks up an Okta user by email and returns the account status, last login timestamp, and MFA enrollment state."
tags:
- insurance
- security
- okta
- identity
- lookup
capability:
exposes:
- type: mcp
namespace: identity-ops
port: 8080
tools:
- name: get-user-status
description: "Given a user email, return the Okta account status, last login, and MFA enrollment status."
inputParameters:
- name: user_email
in: body
type: string
description: "User email address."
call: okta.get-user
with:
login: "{{user_email}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: last_login
type: string
mapping: "$.lastLogin"
consumes:
- namespace: okta
type: http
baseUri: "https://aig.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_api_token"
resources:
- name: identity-ops
path: "/{{id}}"
operations:
- name: get-user
method: GET
Retrieves the current on-call engineer for a PagerDuty schedule.
naftiko: "0.5"
info:
label: "PagerDuty On-Call Schedule Lookup"
description: "Retrieves the current on-call engineer for a PagerDuty schedule."
tags:
- insurance
- it-operations
- pagerduty
- incident-management
- lookup
capability:
exposes:
- type: mcp
namespace: incident-ops
port: 8080
tools:
- name: get-on-call
description: "Given a PagerDuty schedule ID, return the currently on-call user name and email."
inputParameters:
- name: schedule_id
in: body
type: string
description: "PagerDuty schedule ID."
call: pagerduty.get-oncall
with:
schedule_id: "{{schedule_id}}"
outputParameters:
- name: user_name
type: string
mapping: "$.oncalls[0].user.name"
- name: user_email
type: string
mapping: "$.oncalls[0].user.email"
consumes:
- namespace: pagerduty
type: http
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: incident-ops
path: "/{{id}}"
operations:
- name: get-oncall
method: GET
Processes a policy endorsement by updating Salesforce, adjusting premium in SAP, and emailing confirmation to the broker.
naftiko: "0.5"
info:
label: "Policy Endorsement Processing Workflow"
description: "Processes a policy endorsement by updating Salesforce, adjusting premium in SAP, and emailing confirmation to the broker."
tags:
- insurance
- policy-management
- salesforce
- sap
- customer-service
capability:
exposes:
- type: mcp
namespace: endorsement-ops
port: 8080
tools:
- name: process-endorsement
description: "Given a policy number and endorsement type, update Salesforce, post SAP premium adjustment, and send confirmation."
inputParameters:
- name: policy_number
in: body
type: string
description: "Policy number."
- name: endorsement_type
in: body
type: string
description: "Endorsement type."
- name: effective_date
in: body
type: string
description: "Effective date."
- name: broker_email
in: body
type: string
description: "Broker email."
steps:
- name: update-policy
type: call
call: sf.update-policy
with:
policy_number: "{{policy_number}}"
endorsement_type: "{{endorsement_type}}"
- name: adjust-premium
type: call
call: sap-fi.post-adjustment
with:
policy_number: "{{policy_number}}"
effective_date: "{{effective_date}}"
- name: send-confirmation
type: call
call: msgraph.send-mail
with:
to: "{{broker_email}}"
subject: "Endorsement: {{policy_number}} — {{endorsement_type}}"
body: "Effective {{effective_date}}. Adjustment: {{adjust-premium.amount}}"
consumes:
- type: http
namespace: sf
baseUri: "https://aig.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: policies
path: "/sobjects/InsurancePolicy__c/PolicyNumber__c/{{policy_number}}"
inputParameters:
- name: policy_number
in: path
operations:
- name: update-policy
method: PATCH
- type: http
namespace: sap
baseUri: "https://aig-s4.sap.com/sap/opu/odata/sap/API_JOURNAL_ENTRY_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: adjustments
path: "/A_JournalEntry"
operations:
- name: post-adjustment
method: POST
- type: http
namespace: msgraph
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/users/noreply@aig.com/sendMail"
operations:
- name: send-mail
method: POST
When a policy payment is overdue, retrieves policyholder details from Salesforce, sends a retention email, and logs the outreach in ServiceNow.
naftiko: "0.5"
info:
label: "Policy Lapse Prevention Outreach Workflow"
description: "When a policy payment is overdue, retrieves policyholder details from Salesforce, sends a retention email, and logs the outreach in ServiceNow."
tags:
- insurance
- retention
- salesforce
- servicenow
- customer-service
capability:
exposes:
- type: mcp
namespace: retention-ops
port: 8080
tools:
- name: prevent-policy-lapse
description: "Given a policy number and days overdue, look up the policyholder, send a retention email, and log the outreach."
inputParameters:
- name: policy_number
in: body
type: string
description: "Policy number."
- name: days_overdue
in: body
type: integer
description: "Days overdue."
steps:
- name: get-policyholder
type: call
call: sf.get-account
with:
policy_number: "{{policy_number}}"
- name: send-email
type: call
call: msgraph.send-mail
with:
to: "{{get-policyholder.PersonEmail}}"
subject: "Your policy {{policy_number}} — Action Needed"
body: "Payment is {{days_overdue}} days overdue."
- name: log-outreach
type: call
call: snow.create-activity
with:
short_description: "Lapse prevention: {{policy_number}}"
description: "Days overdue: {{days_overdue}}"
consumes:
- type: http
namespace: sf
baseUri: "https://aig.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/PolicyNumber__c/{{policy_number}}"
inputParameters:
- name: policy_number
in: path
operations:
- name: get-account
method: GET
- type: http
namespace: msgraph
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/users/noreply@aig.com/sendMail"
operations:
- name: send-mail
method: POST
- type: http
namespace: snow
baseUri: "https://aig.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: activities
path: "/table/u_retention_activity"
operations:
- name: create-activity
method: POST
When a policy is within 60 days of expiration, enriches the Salesforce account with ZoomInfo data, creates a renewal opportunity, and alerts the account manager in Teams.
naftiko: "0.5"
info:
label: "Policy Renewal Outreach Workflow"
description: "When a policy is within 60 days of expiration, enriches the Salesforce account with ZoomInfo data, creates a renewal opportunity, and alerts the account manager in Teams."
tags:
- sales
- crm
- salesforce
- insurance
- renewal
capability:
exposes:
- type: mcp
namespace: policy-renewal
port: 8080
tools:
- name: trigger-renewal-outreach
description: "Given a Salesforce account ID and policy expiration date, enrich the account from ZoomInfo, create a renewal opportunity in Salesforce, and notify the account manager in Teams. Use when policy records show expiration within 60 days."
inputParameters:
- name: salesforce_account_id
in: body
type: string
description: "Salesforce account ID for the policyholder."
- name: policy_expiry_date
in: body
type: string
description: "Policy expiration date in YYYY-MM-DD format."
- name: account_manager_upn
in: body
type: string
description: "Account manager Teams UPN."
- name: zoominfo_company_id
in: body
type: string
description: "ZoomInfo company ID for enrichment."
steps:
- name: enrich-account
type: call
call: zoominfo.get-company
with:
company_id: "{{zoominfo_company_id}}"
- name: update-sf-account
type: call
call: salesforce-acct.update-account
with:
account_id: "{{salesforce_account_id}}"
employees: "{{enrich-account.employee_count}}"
annual_revenue: "{{enrich-account.revenue}}"
- name: create-renewal-opp
type: call
call: salesforce-opps.create-opportunity
with:
account_id: "{{salesforce_account_id}}"
name: "Policy Renewal — {{enrich-account.company_name}} — {{policy_expiry_date}}"
stage_name: "Renewal Outreach"
close_date: "{{policy_expiry_date}}"
- name: alert-account-manager
type: call
call: msteams-renewal.send-message
with:
recipient_upn: "{{account_manager_upn}}"
text: "Policy renewal due {{policy_expiry_date}} for {{enrich-account.company_name}}. Opportunity created: {{create-renewal-opp.id}}. Employees: {{enrich-account.employee_count}}"
consumes:
- type: http
namespace: zoominfo
baseUri: "https://api.zoominfo.com/search"
authentication:
type: bearer
token: "$secrets.zoominfo_token"
resources:
- name: companies
path: "/company/{{company_id}}"
inputParameters:
- name: company_id
in: path
operations:
- name: get-company
method: GET
- type: http
namespace: salesforce-acct
baseUri: "https://aig.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: update-account
method: PATCH
- type: http
namespace: salesforce-opps
baseUri: "https://aig.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity"
operations:
- name: create-opportunity
method: POST
- type: http
namespace: msteams-renewal
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Generates policyholder documents by pulling policy data from Salesforce, creating a DocuSign envelope, and logging in ServiceNow.
naftiko: "0.5"
info:
label: "Policyholder Document Generation Workflow"
description: "Generates policyholder documents by pulling policy data from Salesforce, creating a DocuSign envelope, and logging in ServiceNow."
tags:
- insurance
- document-management
- salesforce
- docusign
- servicenow
capability:
exposes:
- type: mcp
namespace: doc-gen
port: 8080
tools:
- name: generate-policy-documents
description: "Given a policy number and document type, retrieve policy details, create a DocuSign envelope, and log in ServiceNow."
inputParameters:
- name: policy_number
in: body
type: string
description: "Policy number."
- name: document_type
in: body
type: string
description: "Document type."
- name: recipient_email
in: body
type: string
description: "Recipient email."
steps:
- name: get-policy
type: call
call: sf.get-policy-details
with:
policy_number: "{{policy_number}}"
- name: create-envelope
type: call
call: docusign.create-envelope
with:
recipient_email: "{{recipient_email}}"
subject: "{{document_type}} — {{policy_number}}"
- name: log-task
type: call
call: snow.create-task
with:
short_description: "Doc: {{document_type}} — {{policy_number}}"
description: "DocuSign: {{create-envelope.envelopeId}}"
consumes:
- type: http
namespace: sf
baseUri: "https://aig.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: policies
path: "/sobjects/InsurancePolicy__c/PolicyNumber__c/{{policy_number}}"
operations:
- name: get-policy-details
method: GET
- type: http
namespace: docusign
baseUri: "https://na4.docusign.net/restapi/v2.1"
authentication:
type: bearer
token: "$secrets.docusign_token"
resources:
- name: envelopes
path: "/accounts/{{accountId}}/envelopes"
operations:
- name: create-envelope
method: POST
- type: http
namespace: snow
baseUri: "https://aig.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/u_document_task"
operations:
- name: create-task
method: POST
Triggers a Power BI dataset refresh for the claims performance dashboard and notifies the claims leadership team in Microsoft Teams.
naftiko: "0.5"
info:
label: "Power BI Claims Dashboard Refresh"
description: "Triggers a Power BI dataset refresh for the claims performance dashboard and notifies the claims leadership team in Microsoft Teams."
tags:
- analytics
- power-bi
- claims
- reporting
- insurance
capability:
exposes:
- type: mcp
namespace: claims-reporting
port: 8080
tools:
- name: refresh-claims-dashboard
description: "Given a Power BI dataset ID and claims leadership Teams channel, trigger a dataset refresh and post a notification when complete. Use each morning before claims leadership review meetings."
inputParameters:
- name: dataset_id
in: body
type: string
description: "Power BI dataset ID for the claims dashboard."
- name: claims_channel_id
in: body
type: string
description: "Claims leadership Teams channel ID."
steps:
- name: trigger-refresh
type: call
call: powerbi.trigger-refresh
with:
dataset_id: "{{dataset_id}}"
- name: notify-claims-team
type: call
call: msteams-claims-rpt.post-channel-message
with:
channel_id: "{{claims_channel_id}}"
text: "Claims dashboard refresh triggered (dataset {{dataset_id}}). Refresh ID: {{trigger-refresh.refreshId}}"
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: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: trigger-refresh
method: POST
- type: http
namespace: msteams-claims-rpt
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Checks the refresh status of a Power BI dataset and returns the last refresh time and status.
naftiko: "0.5"
info:
label: "Power BI Dataset Refresh Status Check"
description: "Checks the refresh status of a Power BI dataset and returns the last refresh time and status."
tags:
- insurance
- analytics
- power-bi
- reporting
- lookup
capability:
exposes:
- type: mcp
namespace: bi-ops
port: 8080
tools:
- name: get-dataset-refresh
description: "Given a Power BI dataset ID, return the last refresh timestamp and status."
inputParameters:
- name: dataset_id
in: body
type: string
description: "Power BI dataset GUID."
call: pbi.get-refresh
with:
datasetId: "{{dataset_id}}"
outputParameters:
- name: status
type: string
mapping: "$.value[0].status"
- name: end_time
type: string
mapping: "$.value[0].endTime"
consumes:
- namespace: pbi
type: http
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: bi-ops
path: "/{{id}}"
operations:
- name: get-refresh
method: GET
Collects premium audit data by pulling policy details from Salesforce, payroll data from Workday, and creating an audit task in ServiceNow.
naftiko: "0.5"
info:
label: "Premium Audit Data Collection Workflow"
description: "Collects premium audit data by pulling policy details from Salesforce, payroll data from Workday, and creating an audit task in ServiceNow."
tags:
- insurance
- audit
- salesforce
- workday
- servicenow
capability:
exposes:
- type: mcp
namespace: audit-ops
port: 8080
tools:
- name: collect-audit-data
description: "Given a policy number and audit period, retrieve details from Salesforce, pull payroll from Workday, and create an audit task."
inputParameters:
- name: policy_number
in: body
type: string
description: "Policy number."
- name: audit_period
in: body
type: string
description: "Audit period."
steps:
- name: get-policy
type: call
call: sf.get-policy
with:
policy_number: "{{policy_number}}"
- name: get-payroll
type: call
call: workday.get-payroll
with:
company: "{{get-policy.CompanyName}}"
period: "{{audit_period}}"
- name: create-task
type: call
call: snow.create-task
with:
short_description: "Audit: {{policy_number}} — {{audit_period}}"
description: "Company: {{get-policy.CompanyName}} | Payroll: {{get-payroll.total}}"
consumes:
- type: http
namespace: sf
baseUri: "https://aig.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: policies
path: "/sobjects/InsurancePolicy__c/PolicyNumber__c/{{policy_number}}"
inputParameters:
- name: policy_number
in: path
operations:
- name: get-policy
method: GET
- type: http
namespace: workday
baseUri: "https://wd5-impl-services1.workday.com/ccx/service/aig/Payroll/v40.1"
authentication:
type: basic
username: "$secrets.workday_user"
password: "$secrets.workday_password"
resources:
- name: payroll
path: "/payroll-summaries"
operations:
- name: get-payroll
method: POST
- type: http
namespace: snow
baseUri: "https://aig.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/u_premium_audit"
operations:
- name: create-task
method: POST
Generates a quarterly financial report by querying Snowflake for KPIs, refreshing Power BI dashboards, and distributing via email to the executive team.
naftiko: "0.5"
info:
label: "Quarterly Financial Report Generator"
description: "Generates a quarterly financial report by querying Snowflake for KPIs, refreshing Power BI dashboards, and distributing via email to the executive team."
tags:
- insurance
- finance
- analytics
- snowflake
- power-bi
- reporting
capability:
exposes:
- type: mcp
namespace: finance-reporting
port: 8080
tools:
- name: generate-financial-report
description: "Given a reporting quarter, query Snowflake for financial KPIs, trigger a Power BI refresh, and email the report link to executives."
inputParameters:
- name: quarter
in: body
type: string
description: "Reporting quarter."
- name: exec_dl
in: body
type: string
description: "Executive distribution list email."
steps:
- name: query-kpis
type: call
call: snowflake.run-query
with:
query: "SELECT * FROM financial_kpis WHERE quarter='{{quarter}}'"
- name: refresh-pbi
type: call
call: powerbi.trigger-refresh
with:
datasetId: "financial-dashboard"
- name: send-report
type: call
call: msgraph.send-mail
with:
to: "{{exec_dl}}"
subject: "Financial Report — {{quarter}}"
body: "Revenue: {{query-kpis.revenue}} | Expenses: {{query-kpis.expenses}}. Dashboard refreshed."
consumes:
- type: http
namespace: snowflake
baseUri: "https://aig.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets/{{datasetId}}/refreshes"
inputParameters:
- name: datasetId
in: path
operations:
- name: trigger-refresh
method: POST
- type: http
namespace: msgraph
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/users/noreply@aig.com/sendMail"
operations:
- name: send-mail
method: POST
Generates a quarterly loss ratio report by querying Snowflake, refreshing Power BI, and distributing via Teams.
naftiko: "0.5"
info:
label: "Quarterly Loss Ratio Report Workflow"
description: "Generates a quarterly loss ratio report by querying Snowflake, refreshing Power BI, and distributing via Teams."
tags:
- insurance
- actuarial
- analytics
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: actuarial-ops
port: 8080
tools:
- name: generate-loss-ratio
description: "Given a quarter and LOB, query Snowflake, trigger Power BI refresh, and send to actuarial channel."
inputParameters:
- name: quarter
in: body
type: string
description: "Quarter."
- name: lob
in: body
type: string
description: "Line of business."
- name: channel_id
in: body
type: string
description: "Teams channel."
steps:
- name: query-data
type: call
call: snowflake.run-query
with:
query: "SELECT SUM(claim_amount) as losses FROM claims_fact WHERE quarter='{{quarter}}' AND lob='{{lob}}'"
- name: refresh-pbi
type: call
call: powerbi.trigger-refresh
with:
datasetId: "loss-ratio-{{lob}}"
- name: notify-team
type: call
call: msteams.post-channel
with:
channel_id: "{{channel_id}}"
text: "{{quarter}} Loss Ratio for {{lob}} ready. Losses: {{query-data.losses}}. Dashboard refreshed."
consumes:
- type: http
namespace: snowflake
baseUri: "https://aig.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets/{{datasetId}}/refreshes"
operations:
- name: trigger-refresh
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: channels
path: "/teams/channels/{{channel_id}}/messages"
operations:
- name: post-channel
method: POST
When a regulatory breach or compliance incident is identified, creates a ServiceNow compliance incident, opens a Jira investigation task, and notifies the Chief Compliance Officer in Teams.
naftiko: "0.5"
info:
label: "Regulatory Compliance Incident Reporting"
description: "When a regulatory breach or compliance incident is identified, creates a ServiceNow compliance incident, opens a Jira investigation task, and notifies the Chief Compliance Officer in Teams."
tags:
- compliance
- regulatory
- servicenow
- jira
- insurance
capability:
exposes:
- type: mcp
namespace: compliance-ops
port: 8080
tools:
- name: report-compliance-incident
description: "Given a compliance incident type, jurisdiction, and description, create a ServiceNow compliance record, open a Jira investigation task, and alert the compliance officer in Teams. Use when a regulatory breach or potential violation is identified."
inputParameters:
- name: incident_type
in: body
type: string
description: "Type of compliance incident, e.g. 'data-breach', 'regulatory-violation', 'sanctions-breach'."
- name: jurisdiction
in: body
type: string
description: "Regulatory jurisdiction, e.g. 'US-NY', 'EU-GDPR', 'UK-FCA'."
- name: description
in: body
type: string
description: "Full description of the compliance incident."
- name: cco_upn
in: body
type: string
description: "Chief Compliance Officer Teams UPN."
steps:
- name: create-compliance-record
type: call
call: servicenow-compliance.create-incident
with:
short_description: "Compliance incident: {{incident_type}} — {{jurisdiction}}"
description: "{{description}}"
category: "compliance_breach"
priority: "1"
- name: open-investigation
type: call
call: jira-compliance.create-issue
with:
project_key: "COMP"
issuetype: "Task"
summary: "Compliance investigation: {{incident_type}} — {{jurisdiction}}"
description: "{{description}} | ServiceNow: {{create-compliance-record.number}}"
priority: "Highest"
- name: alert-cco
type: call
call: msteams-compliance.send-message
with:
recipient_upn: "{{cco_upn}}"
text: "COMPLIANCE ALERT: {{incident_type}} in {{jurisdiction}} | INC: {{create-compliance-record.number}} | Jira: {{open-investigation.key}} | {{description}}"
consumes:
- type: http
namespace: servicenow-compliance
baseUri: "https://aig.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: jira-compliance
baseUri: "https://aig.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams-compliance
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Monitors regulatory filing deadlines by querying Snowflake, checking preparation status in ServiceNow, and alerting the compliance team in Teams.
naftiko: "0.5"
info:
label: "Regulatory Filing Deadline Monitor"
description: "Monitors regulatory filing deadlines by querying Snowflake, checking preparation status in ServiceNow, and alerting the compliance team in Teams."
tags:
- insurance
- compliance
- regulatory
- snowflake
- servicenow
capability:
exposes:
- type: mcp
namespace: regulatory-ops
port: 8080
tools:
- name: track-filing-deadlines
description: "Given a jurisdiction and filing type, check the filing calendar in Snowflake, verify status in ServiceNow, and alert the compliance channel in Teams."
inputParameters:
- name: jurisdiction
in: body
type: string
description: "Jurisdiction."
- name: filing_type
in: body
type: string
description: "Filing type."
- name: compliance_channel_id
in: body
type: string
description: "Teams channel ID."
steps:
- name: get-deadlines
type: call
call: snowflake.query-filings
with:
jurisdiction: "{{jurisdiction}}"
- name: check-status
type: call
call: snow.get-filing-status
with:
jurisdiction: "{{jurisdiction}}"
- name: alert-team
type: call
call: msteams.post-channel
with:
channel_id: "{{compliance_channel_id}}"
text: "Filing deadline: {{filing_type}} for {{jurisdiction}} — Due: {{get-deadlines.next_deadline}} | Status: {{check-status.status}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://aig.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query-filings
method: POST
- type: http
namespace: snow
baseUri: "https://aig.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: filings
path: "/table/u_regulatory_filing?sysparm_query=jurisdiction={{jurisdiction}}"
inputParameters:
- name: jurisdiction
in: query
operations:
- name: get-filing-status
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: channels
path: "/teams/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel
method: POST
Validates that a large claim falls within reinsurance treaty limits by checking Snowflake for terms, SAP for exposure, and logging in ServiceNow.
naftiko: "0.5"
info:
label: "Reinsurance Treaty Compliance Validator"
description: "Validates that a large claim falls within reinsurance treaty limits by checking Snowflake for terms, SAP for exposure, and logging in ServiceNow."
tags:
- insurance
- reinsurance
- compliance
- snowflake
- sap
capability:
exposes:
- type: mcp
namespace: reinsurance-ops
port: 8080
tools:
- name: check-treaty-compliance
description: "Given a claim number and amount, look up treaty terms in Snowflake, validate exposure in SAP, and log the compliance check."
inputParameters:
- name: claim_number
in: body
type: string
description: "Claim number."
- name: claim_amount
in: body
type: number
description: "Claim amount."
- name: treaty_id
in: body
type: string
description: "Treaty ID."
steps:
- name: get-treaty
type: call
call: snowflake.query-treaty
with:
treaty_id: "{{treaty_id}}"
- name: check-exposure
type: call
call: sap-fi.get-exposure
with:
treaty_id: "{{treaty_id}}"
- name: log-check
type: call
call: snow.create-record
with:
short_description: "Treaty compliance: {{claim_number}}"
description: "Amount: {{claim_amount}} | Treaty: {{treaty_id}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://aig.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query-treaty
method: POST
- type: http
namespace: sap
baseUri: "https://aig-s4.sap.com/sap/opu/odata/sap/API_JOURNAL_ENTRY_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: exposure
path: "/A_JournalEntry?$filter=TreatyID eq '{{treaty_id}}'"
inputParameters:
- name: treaty_id
in: query
operations:
- name: get-exposure
method: GET
- type: http
namespace: snow
baseUri: "https://aig.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: compliance
path: "/table/u_reinsurance_compliance"
operations:
- name: create-record
method: POST
Looks up a user identity in SailPoint and returns current entitlements and certification status.
naftiko: "0.5"
info:
label: "SailPoint Identity Governance Lookup"
description: "Looks up a user identity in SailPoint and returns current entitlements and certification status."
tags:
- insurance
- security
- sailpoint
- identity-governance
- lookup
capability:
exposes:
- type: mcp
namespace: iam-ops
port: 8080
tools:
- name: get-identity-access
description: "Given a SailPoint identity alias, return the display name, entitlement count, and last certification date."
inputParameters:
- name: identity_alias
in: body
type: string
description: "SailPoint identity alias or email."
call: sailpoint.get-identity
with:
alias: "{{identity_alias}}"
outputParameters:
- name: display_name
type: string
mapping: "$.displayName"
- name: entitlement_count
type: integer
mapping: "$.entitlementCount"
consumes:
- namespace: sailpoint
type: http
baseUri: "https://aig.api.identitynow.com/v3"
authentication:
type: bearer
token: "$secrets.sailpoint_token"
resources:
- name: iam-ops
path: "/{{id}}"
operations:
- name: get-identity
method: GET
Pulls the insurance sales pipeline from Salesforce, refreshes the Power BI executive pipeline dashboard, and emails a weekly summary to sales leadership.
naftiko: "0.5"
info:
label: "Sales Pipeline Executive Digest"
description: "Pulls the insurance sales pipeline from Salesforce, refreshes the Power BI executive pipeline dashboard, and emails a weekly summary to sales leadership."
tags:
- sales
- crm
- salesforce
- power-bi
- reporting
capability:
exposes:
- type: mcp
namespace: sales-exec-reporting
port: 8080
tools:
- name: publish-pipeline-digest
description: "Given a Salesforce opportunity filter and Power BI dataset ID, query open insurance opportunities, trigger a Power BI refresh, and email the pipeline digest to sales leadership. Use weekly for sales forecast reviews."
inputParameters:
- name: product_line
in: body
type: string
description: "Insurance product line filter, e.g. 'Property Casualty' or 'Life'."
- name: pbi_dataset_id
in: body
type: string
description: "Power BI dataset ID for the pipeline dashboard."
- name: leadership_email
in: body
type: string
description: "Sales leadership email distribution list."
steps:
- name: get-pipeline
type: call
call: salesforce-pipeline.query-opportunities
with:
product_line: "{{product_line}}"
- name: refresh-pbi
type: call
call: powerbi-pipeline.trigger-refresh
with:
dataset_id: "{{pbi_dataset_id}}"
- name: send-digest
type: call
call: msgraph-sales.send-email
with:
to: "{{leadership_email}}"
subject: "{{product_line}} Pipeline Digest — {{get-pipeline.record_count}} opportunities | ${{get-pipeline.total_premium}}"
body: "Open pipeline for {{product_line}}: {{get-pipeline.record_count}} opportunities totaling ${{get-pipeline.total_premium}} gross written premium. Power BI refreshed."
consumes:
- type: http
namespace: salesforce-pipeline
baseUri: "https://aig.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/query"
inputParameters:
- name: product_line
in: query
operations:
- name: query-opportunities
method: GET
- type: http
namespace: powerbi-pipeline
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: dataset-refreshes
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: trigger-refresh
method: POST
- type: http
namespace: msgraph-sales
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: send-mail
path: "/users/{{sender}}/sendMail"
operations:
- name: send-email
method: POST
Enriches Salesforce account health scores by pulling data from Snowflake, checking billing in SAP, and updating the Salesforce record.
naftiko: "0.5"
info:
label: "Salesforce Account Health Enrichment"
description: "Enriches Salesforce account health scores by pulling data from Snowflake, checking billing in SAP, and updating the Salesforce record."
tags:
- insurance
- crm
- salesforce
- snowflake
- sap
capability:
exposes:
- type: mcp
namespace: account-ops
port: 8080
tools:
- name: enrich-account-health
description: "Given a Salesforce account ID, pull performance data from Snowflake, check billing in SAP, and update the health score in Salesforce."
inputParameters:
- name: account_id
in: body
type: string
description: "Salesforce account ID."
- name: account_manager_upn
in: body
type: string
description: "UPN of account manager."
steps:
- name: get-data
type: call
call: snowflake.query-account-data
with:
account_id: "{{account_id}}"
- name: get-billing
type: call
call: sap-fi.get-ar-aging
with:
account_id: "{{account_id}}"
- name: update-sf
type: call
call: sf.update-health-score
with:
account_id: "{{account_id}}"
score: "{{get-data.health_score}}"
- name: notify-manager
type: call
call: msteams.send-message
with:
recipient_upn: "{{account_manager_upn}}"
text: "Account health updated: {{account_id}}. Score: {{get-data.health_score}} | AR: {{get-billing.days_outstanding}} days"
consumes:
- type: http
namespace: snowflake
baseUri: "https://aig.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query-account-data
method: POST
- type: http
namespace: sap
baseUri: "https://aig-s4.sap.com/sap/opu/odata/sap/API_JOURNAL_ENTRY_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: ar
path: "/A_JournalEntry?$filter=AccountID eq '{{account_id}}'"
inputParameters:
- name: account_id
in: query
operations:
- name: get-ar-aging
method: GET
- type: http
namespace: sf
baseUri: "https://aig.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: update-health-score
method: PATCH
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Retrieves a summary of open claims from Salesforce by line of business, returning total count and average age.
naftiko: "0.5"
info:
label: "Salesforce Claims Pipeline Summary"
description: "Retrieves a summary of open claims from Salesforce by line of business, returning total count and average age."
tags:
- insurance
- claims
- salesforce
- analytics
- lookup
capability:
exposes:
- type: mcp
namespace: claims-analytics
port: 8080
tools:
- name: get-claims-summary
description: "Given a line of business, return the total open claim count and average claim age in days."
inputParameters:
- name: line_of_business
in: body
type: string
description: "Insurance line of business."
call: sf.query-claims-summary
with:
lob: "{{line_of_business}}"
outputParameters:
- name: total_open
type: integer
mapping: "$.totalSize"
- name: avg_age_days
type: number
mapping: "$.records[0].Avg_Age__c"
consumes:
- namespace: sf
type: http
baseUri: "https://aig.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: claims
path: "/query/?q=SELECT+COUNT(Id)+FROM+Case+WHERE+LOB__c='{{lob}}'"
operations:
- name: query-claims-summary
method: GET
Converts a Salesforce lead to a quote by enriching the lead, creating a quote request in ServiceNow, and notifying the producer via Teams.
naftiko: "0.5"
info:
label: "Salesforce Lead-to-Quote Conversion"
description: "Converts a Salesforce lead to a quote by enriching the lead, creating a quote request in ServiceNow, and notifying the producer via Teams."
tags:
- insurance
- sales
- salesforce
- servicenow
- crm
capability:
exposes:
- type: mcp
namespace: sales-ops
port: 8080
tools:
- name: convert-lead-to-quote
description: "Given a Salesforce lead ID, enrich the lead, create a ServiceNow quote request, and notify the producer."
inputParameters:
- name: lead_id
in: body
type: string
description: "Salesforce lead ID."
- name: producer_upn
in: body
type: string
description: "Producer UPN."
steps:
- name: get-lead
type: call
call: sf.get-lead
with:
lead_id: "{{lead_id}}"
- name: create-quote
type: call
call: snow.create-quote
with:
short_description: "Quote: {{get-lead.Company}}"
description: "Industry: {{get-lead.Industry}} | Revenue: {{get-lead.AnnualRevenue}}"
- name: notify-producer
type: call
call: msteams.send-message
with:
recipient_upn: "{{producer_upn}}"
text: "Lead converted: {{get-lead.Company}}. Quote: {{create-quote.number}}"
consumes:
- type: http
namespace: sf
baseUri: "https://aig.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: leads
path: "/sobjects/Lead/{{lead_id}}"
operations:
- name: get-lead
method: GET
- type: http
namespace: snow
baseUri: "https://aig.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: quotes
path: "/table/u_quote_request"
operations:
- name: create-quote
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
operations:
- name: send-message
method: POST
Retrieves a policyholder record from Salesforce by policy number, returning contact details, coverage tier, and account status.
naftiko: "0.5"
info:
label: "Salesforce Policy Holder Lookup"
description: "Retrieves a policyholder record from Salesforce by policy number, returning contact details, coverage tier, and account status."
tags:
- insurance
- insurance
- salesforce
- customer-service
- lookup
capability:
exposes:
- type: mcp
namespace: policy-ops
port: 8080
tools:
- name: get-policyholder
description: "Given a policy number, return the policyholder contact name, email, phone, coverage tier, and account status from Salesforce."
inputParameters:
- name: policy_number
in: body
type: string
description: "Policy number."
call: sf.get-account
with:
PolicyNumber__c: "{{policy_number}}"
outputParameters:
- name: contact_name
type: string
mapping: "$.Name"
- name: email
type: string
mapping: "$.PersonEmail"
- name: status
type: string
mapping: "$.Status__c"
consumes:
- namespace: sf
type: http
baseUri: "https://aig.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: policy-ops
path: "/{{id}}"
operations:
- name: get-account
method: GET
Validates incoming SAP Ariba invoices against open purchase orders and routes discrepancies to the accounts payable team for resolution.
naftiko: "0.5"
info:
label: "SAP Ariba Invoice Validation"
description: "Validates incoming SAP Ariba invoices against open purchase orders and routes discrepancies to the accounts payable team for resolution."
tags:
- finance
- procurement
- sap-ariba
- accounts-payable
capability:
exposes:
- type: mcp
namespace: ap-validation
port: 8080
tools:
- name: validate-supplier-invoice
description: "Given an SAP Ariba invoice ID and corresponding PO number, fetch both records, compare totals for three-way match, and create a ServiceNow task if a discrepancy is found. Use for incoming supplier invoice processing."
inputParameters:
- name: invoice_id
in: body
type: string
description: "SAP Ariba invoice ID."
- name: po_number
in: body
type: string
description: "SAP purchase order number for three-way match."
steps:
- name: get-invoice
type: call
call: ariba.get-invoice
with:
invoice_id: "{{invoice_id}}"
- name: get-po
type: call
call: sap-po.get-purchase-order
with:
po_number: "{{po_number}}"
- name: create-approval-task
type: call
call: servicenow-ap.create-task
with:
short_description: "Invoice match review: {{invoice_id}} vs PO {{po_number}}"
description: "Invoice: ${{get-invoice.total_amount}} | PO: ${{get-po.total_amount}} | Vendor: {{get-invoice.vendor_name}}"
assigned_group: "AP_Finance"
consumes:
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/invoice/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: invoices
path: "/invoices/{{invoice_id}}"
inputParameters:
- name: invoice_id
in: path
operations:
- name: get-invoice
method: GET
- type: http
namespace: sap-po
baseUri: "https://aig-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: purchase-orders
path: "/A_PurchaseOrder('{{po_number}}')"
inputParameters:
- name: po_number
in: path
operations:
- name: get-purchase-order
method: GET
- type: http
namespace: servicenow-ap
baseUri: "https://aig.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/sc_task"
operations:
- name: create-task
method: POST
Coordinates RFP responses by pulling requirements from Ariba, gathering costs from SAP, and distributing tasks via ServiceNow and Teams.
naftiko: "0.5"
info:
label: "SAP Ariba RFP Response Coordinator"
description: "Coordinates RFP responses by pulling requirements from Ariba, gathering costs from SAP, and distributing tasks via ServiceNow and Teams."
tags:
- procurement
- sap-ariba
- sap
- servicenow
- collaboration
capability:
exposes:
- type: mcp
namespace: rfp-ops
port: 8080
tools:
- name: coordinate-rfp
description: "Given an Ariba RFP event ID, pull requirements, get SAP costs, create a ServiceNow task, and notify procurement."
inputParameters:
- name: rfp_event_id
in: body
type: string
description: "Ariba event ID."
- name: deadline
in: body
type: string
description: "Response deadline."
- name: procurement_channel_id
in: body
type: string
description: "Teams channel."
steps:
- name: get-rfp
type: call
call: ariba.get-event
with:
event_id: "{{rfp_event_id}}"
- name: get-costs
type: call
call: sap.get-cost-estimate
with:
category: "{{get-rfp.category}}"
- name: create-task
type: call
call: snow.create-task
with:
short_description: "RFP: {{rfp_event_id}} — Due {{deadline}}"
description: "Category: {{get-rfp.category}}"
- name: notify-team
type: call
call: msteams.post-channel
with:
channel_id: "{{procurement_channel_id}}"
text: "RFP: {{rfp_event_id}} — {{get-rfp.category}}. Deadline: {{deadline}}. Task: {{create-task.number}}"
consumes:
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/sourcing/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: events
path: "/events/{{event_id}}"
operations:
- name: get-event
method: GET
- type: http
namespace: sap
baseUri: "https://aig-s4.sap.com/sap/opu/odata/sap/API_PRODUCT_COST_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: costs
path: "/A_ProductCostEstimate"
operations:
- name: get-cost-estimate
method: GET
- type: http
namespace: snow
baseUri: "https://aig.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/u_rfp_task"
operations:
- name: create-task
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: channels
path: "/teams/channels/{{channel_id}}/messages"
operations:
- name: post-channel
method: POST
Retrieves the current status of an SAP Ariba sourcing event, returning phase, participant count, and close date.
naftiko: "0.5"
info:
label: "SAP Ariba Sourcing Event Status"
description: "Retrieves the current status of an SAP Ariba sourcing event, returning phase, participant count, and close date."
tags:
- procurement
- sap-ariba
- sourcing
- lookup
capability:
exposes:
- type: mcp
namespace: sourcing-ops
port: 8080
tools:
- name: get-sourcing-status
description: "Given an Ariba sourcing event ID, return the event phase, participant count, and scheduled close date."
inputParameters:
- name: event_id
in: body
type: string
description: "SAP Ariba sourcing event ID."
call: ariba.get-event
with:
eventId: "{{event_id}}"
outputParameters:
- name: phase
type: string
mapping: "$.Phase"
- name: participants
type: integer
mapping: "$.ParticipantCount"
- name: close_date
type: string
mapping: "$.CloseDate"
consumes:
- namespace: ariba
type: http
baseUri: "https://openapi.ariba.com/api/sourcing/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: events
path: "/events/{{eventId}}"
operations:
- name: get-event
method: GET
Scans SAP Ariba for supplier contracts expiring within 90 days, creates Jira procurement tasks, and emails contract owners.
naftiko: "0.5"
info:
label: "SAP Ariba Supplier Contract Renewal Alerts"
description: "Scans SAP Ariba for supplier contracts expiring within 90 days, creates Jira procurement tasks, and emails contract owners."
tags:
- procurement
- contract-management
- sap-ariba
- jira
capability:
exposes:
- type: mcp
namespace: contract-renewal
port: 8080
tools:
- name: alert-expiring-contracts
description: "Given a look-ahead window, fetch supplier contracts expiring from SAP Ariba and create a Jira renewal task for each. Use monthly to proactively manage AIG's vendor and reinsurer contract renewals."
inputParameters:
- name: days_ahead
in: body
type: integer
description: "Number of days ahead to scan for expiring contracts."
- name: jira_project_key
in: body
type: string
description: "Jira project key for procurement renewal tasks."
steps:
- name: get-expiring
type: call
call: ariba-renewal.get-expiring-contracts
with:
days_ahead: "{{days_ahead}}"
- name: create-renewal-task
type: call
call: jira-contracts.create-issue
with:
project_key: "{{jira_project_key}}"
issuetype: "Task"
summary: "Supplier contract renewals due within {{days_ahead}} days"
description: "Expiring contracts: {{get-expiring.contract_ids}}"
consumes:
- type: http
namespace: ariba-renewal
baseUri: "https://openapi.ariba.com/api/contract/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: contracts
path: "/contracts"
inputParameters:
- name: days_ahead
in: query
operations:
- name: get-expiring-contracts
method: GET
- type: http
namespace: jira-contracts
baseUri: "https://aig.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Retrieves an SAP Concur expense report by ID, returning the total amount, approval status, and owner.
naftiko: "0.5"
info:
label: "SAP Concur Expense Report Status Lookup"
description: "Retrieves an SAP Concur expense report by ID, returning the total amount, approval status, and owner."
tags:
- insurance
- finance
- sap-concur
- expense-management
- lookup
capability:
exposes:
- type: mcp
namespace: expense-ops
port: 8080
tools:
- name: get-expense-report
description: "Given a Concur report ID, return the total, currency, approval status, and submitter name."
inputParameters:
- name: report_id
in: body
type: string
description: "SAP Concur expense report ID."
call: concur.get-report
with:
reportId: "{{report_id}}"
outputParameters:
- name: total
type: number
mapping: "$.Total"
- name: status
type: string
mapping: "$.ApprovalStatusName"
- name: owner
type: string
mapping: "$.OwnerName"
consumes:
- namespace: concur
type: http
baseUri: "https://api.aig.com/v1"
authentication:
type: bearer
token: "$secrets.api_token"
resources:
- name: expense-ops
path: "/{{id}}"
operations:
- name: get-report
method: GET
Retrieves the current balance for a specified SAP general ledger account and company code.
naftiko: "0.5"
info:
label: "SAP General Ledger Balance Check"
description: "Retrieves the current balance for a specified SAP general ledger account and company code."
tags:
- insurance
- finance
- sap
- accounting
- lookup
capability:
exposes:
- type: mcp
namespace: gl-ops
port: 8080
tools:
- name: get-gl-balance
description: "Given an SAP company code and GL account, return the current balance and currency."
inputParameters:
- name: company_code
in: body
type: string
description: "SAP company code."
- name: gl_account
in: body
type: string
description: "GL account number."
call: sap-fi.get-balance
with:
CompanyCode: "{{company_code}}"
GLAccount: "{{gl_account}}"
outputParameters:
- name: balance
type: number
mapping: "$.d.EndingBalanceAmtInCoCodeCrcy"
- name: currency
type: string
mapping: "$.d.CompanyCodeCurrency"
consumes:
- namespace: sap-fi
type: http
baseUri: "https://aig-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: gl-ops
path: "/{{id}}"
operations:
- name: get-balance
method: GET
Performs a three-way match on a vendor invoice by verifying the PO in SAP, confirming goods receipt, and routing for approval with Teams notification.
naftiko: "0.5"
info:
label: "SAP Invoice Three-Way Match Workflow"
description: "Performs a three-way match on a vendor invoice by verifying the PO in SAP, confirming goods receipt, and routing for approval with Teams notification."
tags:
- insurance
- finance
- accounts-payable
- sap
- servicenow
capability:
exposes:
- type: mcp
namespace: ap-ops
port: 8080
tools:
- name: three-way-match
description: "Given an invoice and PO number, verify the PO in SAP, confirm goods receipt, create an approval in ServiceNow, and notify AP via Teams."
inputParameters:
- name: invoice_number
in: body
type: string
description: "Vendor invoice number."
- name: po_number
in: body
type: string
description: "SAP purchase order number."
- name: ap_manager_upn
in: body
type: string
description: "UPN of AP manager."
steps:
- name: verify-po
type: call
call: sap.get-po
with:
po_number: "{{po_number}}"
- name: check-gr
type: call
call: sap.get-goods-receipt
with:
po_number: "{{po_number}}"
- name: create-approval
type: call
call: snow.create-approval
with:
short_description: "Invoice approval: {{invoice_number}} — PO {{po_number}}"
description: "PO Amount: {{verify-po.total_amount}} | GR: {{check-gr.status}}"
- name: notify-ap
type: call
call: msteams.send-message
with:
recipient_upn: "{{ap_manager_upn}}"
text: "Three-way match: Invoice {{invoice_number}} — PO {{po_number}}. GR: {{check-gr.status}}. Approval: {{create-approval.number}}"
consumes:
- type: http
namespace: sap
baseUri: "https://aig-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: purchase-orders
path: "/A_PurchaseOrder('{{po_number}}')"
inputParameters:
- name: po_number
in: path
operations:
- name: get-po
method: GET
- name: goods-receipts
path: "/A_PurchaseOrder('{{po_number}}')/to_GoodsReceipt"
inputParameters:
- name: po_number
in: path
operations:
- name: get-goods-receipt
method: GET
- type: http
namespace: snow
baseUri: "https://aig.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: approvals
path: "/table/sysapproval_approver"
operations:
- name: create-approval
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Validates period-end journal entries by pulling entries from SAP, cross-checking balances in Snowflake, and notifying the controller via Teams.
naftiko: "0.5"
info:
label: "SAP Period-End Journal Entry Validation"
description: "Validates period-end journal entries by pulling entries from SAP, cross-checking balances in Snowflake, and notifying the controller via Teams."
tags:
- insurance
- finance
- accounting
- sap
- snowflake
capability:
exposes:
- type: mcp
namespace: gl-ops
port: 8080
tools:
- name: validate-journal-entries
description: "Given a company code and posting period, retrieve journal entries from SAP, validate against Snowflake, and notify the controller of discrepancies."
inputParameters:
- name: company_code
in: body
type: string
description: "SAP company code."
- name: posting_period
in: body
type: string
description: "Posting period."
- name: controller_upn
in: body
type: string
description: "UPN of controller."
steps:
- name: get-entries
type: call
call: sap-fi.get-journal-entries
with:
company_code: "{{company_code}}"
period: "{{posting_period}}"
- name: validate-balances
type: call
call: snowflake.check-recon
with:
company_code: "{{company_code}}"
period: "{{posting_period}}"
- name: notify-controller
type: call
call: msteams.send-message
with:
recipient_upn: "{{controller_upn}}"
text: "Period-end validation: {{company_code}} — {{posting_period}}. Entries: {{get-entries.count}} | Status: {{validate-balances.status}}"
consumes:
- type: http
namespace: sap
baseUri: "https://aig-s4.sap.com/sap/opu/odata/sap/API_JOURNAL_ENTRY_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: entries
path: "/A_JournalEntry?$filter=CompanyCode eq '{{company_code}}'"
inputParameters:
- name: company_code
in: query
operations:
- name: get-journal-entries
method: GET
- type: http
namespace: snowflake
baseUri: "https://aig.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: check-recon
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Looks up an SAP S/4HANA purchase order by number and returns header status, vendor, and total value for the finance or procurement team.
naftiko: "0.5"
info:
label: "SAP Purchase Order Status Lookup"
description: "Looks up an SAP S/4HANA purchase order by number and returns header status, vendor, and total value for the finance or procurement team."
tags:
- finance
- procurement
- erp
- sap
capability:
exposes:
- type: mcp
namespace: erp-finance
port: 8080
tools:
- name: get-purchase-order
description: "Given a SAP purchase order number, return the PO status, vendor name, total amount, and currency. Use when procurement or AP teams need to verify PO status before approving a vendor invoice."
inputParameters:
- name: po_number
in: body
type: string
description: "SAP purchase order number, e.g. '4500012345'."
call: sap-erp.get-po
with:
po_number: "{{po_number}}"
outputParameters:
- name: status
type: string
mapping: "$.d.OverallStatus"
- name: vendor
type: string
mapping: "$.d.Supplier.CompanyName"
- name: total_amount
type: string
mapping: "$.d.TotalAmount"
- name: currency
type: string
mapping: "$.d.TransactionCurrency"
consumes:
- type: http
namespace: sap-erp
baseUri: "https://aig-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: purchase-orders
path: "/A_PurchaseOrder('{{po_number}}')"
inputParameters:
- name: po_number
in: path
operations:
- name: get-po
method: GET
Retrieves vendor master data from SAP by vendor number, returning company name, payment terms, and tax ID.
naftiko: "0.5"
info:
label: "SAP Vendor Master Data Lookup"
description: "Retrieves vendor master data from SAP by vendor number, returning company name, payment terms, and tax ID."
tags:
- insurance
- finance
- sap
- procurement
- lookup
capability:
exposes:
- type: mcp
namespace: vendor-ops
port: 8080
tools:
- name: get-vendor
description: "Given an SAP vendor number, return the vendor name, payment terms, and tax ID."
inputParameters:
- name: vendor_number
in: body
type: string
description: "SAP vendor account number."
call: sap.get-vendor
with:
Supplier: "{{vendor_number}}"
outputParameters:
- name: vendor_name
type: string
mapping: "$.d.SupplierName"
- name: payment_terms
type: string
mapping: "$.d.PaymentTerms"
consumes:
- namespace: sap
type: http
baseUri: "https://aig-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: vendor-ops
path: "/{{id}}"
operations:
- name: get-vendor
method: GET
Verifies that a change request falls within the approved window by checking ServiceNow, validating service health in Datadog, and notifying the CAB via Teams.
naftiko: "0.5"
info:
label: "ServiceNow Change Window Compliance Validator"
description: "Verifies that a change request falls within the approved window by checking ServiceNow, validating service health in Datadog, and notifying the CAB via Teams."
tags:
- insurance
- it-operations
- change-management
- servicenow
- datadog
capability:
exposes:
- type: mcp
namespace: change-ops
port: 8080
tools:
- name: check-change-compliance
description: "Given a change request number and proposed date, verify window compliance in ServiceNow, check Datadog service health, and notify the CAB in Teams."
inputParameters:
- name: change_number
in: body
type: string
description: "Change request number."
- name: proposed_date
in: body
type: string
description: "Proposed date."
- name: cab_channel_id
in: body
type: string
description: "Teams channel ID for CAB."
steps:
- name: check-window
type: call
call: snow.get-change-window
with:
change_number: "{{change_number}}"
- name: check-health
type: call
call: datadog.get-status
with:
date: "{{proposed_date}}"
- name: notify-cab
type: call
call: msteams.post-channel
with:
channel_id: "{{cab_channel_id}}"
text: "Change compliance: {{change_number}} for {{proposed_date}}. Window: {{check-window.status}} | Health: {{check-health.overall}}"
consumes:
- type: http
namespace: snow
baseUri: "https://aig.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: changes
path: "/table/change_request?sysparm_query=number={{change_number}}"
inputParameters:
- name: change_number
in: query
operations:
- name: get-change-window
method: GET
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: monitors
path: "/monitor/groups"
operations:
- name: get-status
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: channels
path: "/teams/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel
method: POST
Looks up a claim investigation record in ServiceNow by claim number and returns status, assigned adjuster, and priority.
naftiko: "0.5"
info:
label: "ServiceNow Claim Record Lookup"
description: "Looks up a claim investigation record in ServiceNow by claim number and returns status, assigned adjuster, and priority."
tags:
- insurance
- insurance
- claims
- servicenow
- lookup
capability:
exposes:
- type: mcp
namespace: claims-ops
port: 8080
tools:
- name: get-claim-record
description: "Given a claim number, return the ServiceNow investigation record status, assigned adjuster, and priority level."
inputParameters:
- name: claim_number
in: body
type: string
description: "Insurance claim number."
call: snow.get-claim
with:
number: "{{claim_number}}"
outputParameters:
- name: status
type: string
mapping: "$.result.state"
- name: adjuster
type: string
mapping: "$.result.assigned_to.display_value"
- name: priority
type: string
mapping: "$.result.priority"
consumes:
- namespace: snow
type: http
baseUri: "https://aig.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: claims-ops
path: "/{{id}}"
operations:
- name: get-claim
method: GET
Looks up a ServiceNow incident by number and returns current state, priority, and assigned group.
naftiko: "0.5"
info:
label: "ServiceNow Incident Status Check"
description: "Looks up a ServiceNow incident by number and returns current state, priority, and assigned group."
tags:
- insurance
- it-operations
- servicenow
- incident-management
- lookup
capability:
exposes:
- type: mcp
namespace: it-ops
port: 8080
tools:
- name: get-incident-status
description: "Given a ServiceNow incident number, return the state, priority, and assignment group."
inputParameters:
- name: incident_number
in: body
type: string
description: "ServiceNow incident number."
call: snow.get-incident
with:
number: "{{incident_number}}"
outputParameters:
- name: state
type: string
mapping: "$.result.state"
- name: priority
type: string
mapping: "$.result.priority"
- name: assigned_to
type: string
mapping: "$.result.assignment_group.display_value"
consumes:
- namespace: snow
type: http
baseUri: "https://aig.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: it-ops
path: "/{{id}}"
operations:
- name: get-incident
method: GET
Monitors Snowflake data pipeline tasks for the claims analytics warehouse, logs failures to Datadog, and creates Jira tickets for the data engineering team.
naftiko: "0.5"
info:
label: "Snowflake Claims Analytics Pipeline Monitoring"
description: "Monitors Snowflake data pipeline tasks for the claims analytics warehouse, logs failures to Datadog, and creates Jira tickets for the data engineering team."
tags:
- data
- snowflake
- datadog
- analytics
- claims
capability:
exposes:
- type: mcp
namespace: claims-analytics-ops
port: 8080
tools:
- name: check-claims-pipeline-health
description: "Query Snowflake task history for pipeline failures in the claims analytics database, log failures to Datadog, and open Jira tickets for data engineering. Use daily to ensure the claims and actuarial data pipelines are running correctly."
inputParameters:
- name: lookback_hours
in: body
type: integer
description: "Hours of pipeline history to scan."
- name: jira_project_key
in: body
type: string
description: "Jira project key for data engineering tickets."
steps:
- name: get-failed-tasks
type: call
call: snowflake.get-task-failures
with:
lookback_hours: "{{lookback_hours}}"
- name: log-to-datadog
type: call
call: datadog-dw.create-event
with:
title: "Snowflake claims pipeline failures"
text: "Failed tasks: {{get-failed-tasks.task_names}}"
alert_type: "error"
- name: create-jira
type: call
call: jira-data.create-issue
with:
project_key: "{{jira_project_key}}"
issuetype: "Bug"
summary: "Claims pipeline failures — {{get-failed-tasks.task_count}} tasks"
description: "Tasks: {{get-failed-tasks.task_names}} | Datadog: {{log-to-datadog.url}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://aig.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: task-history
path: "/databases/CLAIMS_ANALYTICS/schemas/PUBLIC/tasks/history"
inputParameters:
- name: lookback_hours
in: query
operations:
- name: get-task-failures
method: GET
- type: http
namespace: datadog-dw
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: jira-data
baseUri: "https://aig.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
When a Snowflake pipeline fails, creates a Jira incident, pages the on-call engineer via PagerDuty, and notifies the pipeline owner in Teams.
naftiko: "0.5"
info:
label: "Snowflake Data Pipeline Failure Response"
description: "When a Snowflake pipeline fails, creates a Jira incident, pages the on-call engineer via PagerDuty, and notifies the pipeline owner in Teams."
tags:
- insurance
- data-engineering
- snowflake
- jira
- pagerduty
capability:
exposes:
- type: mcp
namespace: data-reliability
port: 8080
tools:
- name: handle-pipeline-failure
description: "Given a Snowflake task name and error, create a Jira incident, trigger a PagerDuty alert, and notify the owner in Teams."
inputParameters:
- name: task_name
in: body
type: string
description: "Snowflake task name."
- name: error_message
in: body
type: string
description: "Error message."
- name: pipeline_owner
in: body
type: string
description: "Pipeline owner email."
steps:
- name: create-incident
type: call
call: jira.create-issue
with:
project: "DATA"
summary: "Pipeline failure: {{task_name}}"
description: "Error: {{error_message}}"
- name: page-oncall
type: call
call: pagerduty.create-incident
with:
service_id: "data-engineering"
title: "Pipeline failure: {{task_name}}"
- name: notify-owner
type: call
call: msteams.send-message
with:
recipient_upn: "{{pipeline_owner}}"
text: "Pipeline failure: {{task_name}}. Jira: {{create-incident.key}}"
consumes:
- type: http
namespace: jira
baseUri: "https://aig.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
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
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Queries Snowflake account query history for a specified warehouse, returning recent query count and average execution time.
naftiko: "0.5"
info:
label: "Snowflake Query History Check"
description: "Queries Snowflake account query history for a specified warehouse, returning recent query count and average execution time."
tags:
- data-engineering
- snowflake
- performance
- lookup
capability:
exposes:
- type: mcp
namespace: data-perf
port: 8080
tools:
- name: get-query-history
description: "Given a Snowflake warehouse name, return the recent query count and average execution time in seconds."
inputParameters:
- name: warehouse_name
in: body
type: string
description: "Snowflake warehouse name."
call: snowflake.query-history
with:
warehouse: "{{warehouse_name}}"
outputParameters:
- name: query_count
type: integer
mapping: "$.data[0].QUERY_COUNT"
- name: avg_exec_time
type: number
mapping: "$.data[0].AVG_EXEC_TIME"
consumes:
- namespace: snowflake
type: http
baseUri: "https://aig.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query-history
method: POST
Queries Snowflake to return the row count and last update timestamp for a specified data table.
naftiko: "0.5"
info:
label: "Snowflake Table Row Count Check"
description: "Queries Snowflake to return the row count and last update timestamp for a specified data table."
tags:
- insurance
- data-engineering
- snowflake
- analytics
- lookup
capability:
exposes:
- type: mcp
namespace: data-ops
port: 8080
tools:
- name: get-table-stats
description: "Given a Snowflake table name, return the row count and last DML timestamp."
inputParameters:
- name: table_name
in: body
type: string
description: "Fully qualified Snowflake table name."
call: snowflake.query-stats
with:
table: "{{table_name}}"
outputParameters:
- name: row_count
type: integer
mapping: "$.data[0].ROW_COUNT"
- name: last_altered
type: string
mapping: "$.data[0].LAST_ALTERED"
consumes:
- namespace: snowflake
type: http
baseUri: "https://aig.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: data-ops
path: "/{{id}}"
operations:
- name: query-stats
method: GET
Runs a Splunk search for security events matching a query and returns the result count.
naftiko: "0.5"
info:
label: "Splunk Security Event Query"
description: "Runs a Splunk search for security events matching a query and returns the result count."
tags:
- insurance
- security
- splunk
- siem
- lookup
capability:
exposes:
- type: mcp
namespace: security-ops
port: 8080
tools:
- name: search-security-events
description: "Given a Splunk search query, execute the search and return the result count and top events."
inputParameters:
- name: search_query
in: body
type: string
description: "Splunk search query string."
call: splunk.run-search
with:
search: "{{search_query}}"
outputParameters:
- name: result_count
type: integer
mapping: "$.resultCount"
consumes:
- namespace: splunk
type: http
baseUri: "https://aig-splunk.splunkcloud.com:8089/services"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: security-ops
path: "/{{id}}"
operations:
- name: run-search
method: GET
Tracks subrogation recovery by pulling data from Salesforce, updating SAP subledger, and notifying the recovery lead via Teams.
naftiko: "0.5"
info:
label: "Subrogation Recovery Tracking Workflow"
description: "Tracks subrogation recovery by pulling data from Salesforce, updating SAP subledger, and notifying the recovery lead via Teams."
tags:
- insurance
- subrogation
- finance
- salesforce
- sap
capability:
exposes:
- type: mcp
namespace: subrogation-ops
port: 8080
tools:
- name: track-subrogation
description: "Given a claim number, pull recovery status from Salesforce, update SAP, and notify the lead."
inputParameters:
- name: claim_number
in: body
type: string
description: "Claim number."
- name: recovery_lead_upn
in: body
type: string
description: "Recovery lead UPN."
steps:
- name: get-recovery
type: call
call: sf.get-subrogation
with:
claim_number: "{{claim_number}}"
- name: update-ledger
type: call
call: sap-fi.post-recovery
with:
claim_number: "{{claim_number}}"
amount: "{{get-recovery.recovered_amount}}"
- name: notify-lead
type: call
call: msteams.send-message
with:
recipient_upn: "{{recovery_lead_upn}}"
text: "Subrogation: {{claim_number}} — Recovered: ${{get-recovery.recovered_amount}}. SAP: {{update-ledger.document_number}}"
consumes:
- type: http
namespace: sf
baseUri: "https://aig.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: subrogation
path: "/sobjects/Subrogation__c/ClaimNumber__c/{{claim_number}}"
operations:
- name: get-subrogation
method: GET
- type: http
namespace: sap-fi
baseUri: "https://aig-s4.sap.com/sap/opu/odata/sap/API_JOURNAL_ENTRY_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: recoveries
path: "/A_JournalEntry"
operations:
- name: post-recovery
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
operations:
- name: send-message
method: POST
Triggers a Terraform Cloud workspace run to provision new insurance platform infrastructure and notifies the DevOps team in Teams.
naftiko: "0.5"
info:
label: "Terraform Cloud Insurance Platform Provisioning"
description: "Triggers a Terraform Cloud workspace run to provision new insurance platform infrastructure and notifies the DevOps team in Teams."
tags:
- devops
- terraform
- cloud
- infrastructure
- insurance
capability:
exposes:
- type: mcp
namespace: infra-ops
port: 8080
tools:
- name: provision-platform-environment
description: "Given a Terraform Cloud workspace ID and environment label, trigger a plan-and-apply run to provision insurance platform infrastructure. Notify the DevOps Teams channel with run status. Use when standing up new environments for insurance system development or testing."
inputParameters:
- name: workspace_id
in: body
type: string
description: "Terraform Cloud workspace ID."
- name: environment_label
in: body
type: string
description: "Human-readable label, e.g. 'claims-api-staging'."
- name: devops_channel_id
in: body
type: string
description: "DevOps Teams channel ID."
steps:
- name: trigger-run
type: call
call: terraform.create-run
with:
workspace_id: "{{workspace_id}}"
message: "Provisioning {{environment_label}}"
auto_apply: "true"
- name: notify-devops
type: call
call: msteams-devops.post-channel-message
with:
channel_id: "{{devops_channel_id}}"
text: "Terraform run triggered for {{environment_label}} (workspace {{workspace_id}}). Run ID: {{trigger-run.data.id}}"
consumes:
- type: http
namespace: terraform
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: runs
path: "/runs"
operations:
- name: create-run
method: POST
- type: http
namespace: msteams-devops
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Detects Terraform state drift, creates a Jira remediation ticket, and alerts the platform team in Teams.
naftiko: "0.5"
info:
label: "Terraform Drift Detection and Remediation"
description: "Detects Terraform state drift, creates a Jira remediation ticket, and alerts the platform team in Teams."
tags:
- insurance
- devops
- terraform
- jira
- infrastructure
capability:
exposes:
- type: mcp
namespace: platform-drift
port: 8080
tools:
- name: handle-terraform-drift
description: "Given a Terraform workspace, check for drift, create a Jira ticket if detected, and notify platform engineering in Teams."
inputParameters:
- name: workspace_name
in: body
type: string
description: "Terraform workspace name."
- name: platform_channel_id
in: body
type: string
description: "Teams channel ID."
steps:
- name: check-drift
type: call
call: tfc.run-plan
with:
workspace: "{{workspace_name}}"
- name: create-ticket
type: call
call: jira.create-issue
with:
project: "PLATFORM"
summary: "Drift detected: {{workspace_name}}"
description: "Changes: {{check-drift.resource_changes}}"
- name: notify-team
type: call
call: msteams.post-channel
with:
channel_id: "{{platform_channel_id}}"
text: "Terraform drift: {{workspace_name}} — {{check-drift.resource_changes}} changes. Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: tfc
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: runs
path: "/workspaces/{{workspace}}/runs"
inputParameters:
- name: workspace
in: path
operations:
- name: run-plan
method: POST
- type: http
namespace: jira
baseUri: "https://aig.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$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.msteams_token"
resources:
- name: channels
path: "/teams/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel
method: POST
Retrieves the current state of a Terraform Cloud workspace, returning last run status and resource count.
naftiko: "0.5"
info:
label: "Terraform Workspace State Check"
description: "Retrieves the current state of a Terraform Cloud workspace, returning last run status and resource count."
tags:
- insurance
- devops
- terraform
- infrastructure
- lookup
capability:
exposes:
- type: mcp
namespace: infra-ops
port: 8080
tools:
- name: get-workspace-state
description: "Given a Terraform Cloud workspace name, return the last run status and managed resource count."
inputParameters:
- name: workspace_name
in: body
type: string
description: "Terraform Cloud workspace name."
call: tfc.get-workspace
with:
workspace: "{{workspace_name}}"
outputParameters:
- name: last_run_status
type: string
mapping: "$.data.attributes.latest-run.status"
- name: resource_count
type: integer
mapping: "$.data.attributes.resource-count"
consumes:
- namespace: tfc
type: http
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: infra-ops
path: "/{{id}}"
operations:
- name: get-workspace
method: GET
Performs a vendor risk assessment by pulling vendor details from SAP Ariba, checking compliance in ServiceNow GRC, and notifying procurement via Teams.
naftiko: "0.5"
info:
label: "Third-Party Vendor Risk Assessment Workflow"
description: "Performs a vendor risk assessment by pulling vendor details from SAP Ariba, checking compliance in ServiceNow GRC, and notifying procurement via Teams."
tags:
- insurance
- procurement
- risk-management
- sap-ariba
- servicenow
capability:
exposes:
- type: mcp
namespace: vendor-risk
port: 8080
tools:
- name: assess-vendor-risk
description: "Given a vendor ID, retrieve the vendor profile from SAP Ariba, check GRC compliance in ServiceNow, and send the risk summary to procurement in Teams."
inputParameters:
- name: vendor_id
in: body
type: string
description: "SAP Ariba supplier ID."
- name: procurement_lead_upn
in: body
type: string
description: "UPN of procurement lead."
steps:
- name: get-vendor
type: call
call: ariba.get-supplier
with:
vendorId: "{{vendor_id}}"
- name: check-grc
type: call
call: snow.get-compliance
with:
vendor_name: "{{get-vendor.SupplierName}}"
- name: notify-lead
type: call
call: msteams.send-message
with:
recipient_upn: "{{procurement_lead_upn}}"
text: "Vendor Risk: {{get-vendor.SupplierName}} — GRC: {{check-grc.compliance_status}} | Score: {{check-grc.risk_score}}"
consumes:
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/supplier-management/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: suppliers
path: "/suppliers/{{vendorId}}"
inputParameters:
- name: vendorId
in: path
operations:
- name: get-supplier
method: GET
- type: http
namespace: snow
baseUri: "https://aig.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: grc
path: "/table/sn_grc_profile?sysparm_query=name={{vendor_name}}"
inputParameters:
- name: vendor_name
in: query
operations:
- name: get-compliance
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Auto-adjudicates travel claims by verifying coverage in Salesforce, processing payment in SAP, and updating the claim status.
naftiko: "0.5"
info:
label: "Travel Insurance Auto-Adjudication Workflow"
description: "Auto-adjudicates travel claims by verifying coverage in Salesforce, processing payment in SAP, and updating the claim status."
tags:
- insurance
- claims
- travel
- salesforce
- sap
capability:
exposes:
- type: mcp
namespace: travel-claims
port: 8080
tools:
- name: auto-adjudicate-travel
description: "Given a travel claim number, type, and amount, verify coverage, process payment, and update status."
inputParameters:
- name: claim_number
in: body
type: string
description: "Claim number."
- name: claim_type
in: body
type: string
description: "Claim type."
- name: claim_amount
in: body
type: number
description: "Claim amount."
steps:
- name: verify-coverage
type: call
call: sf.get-travel-policy
with:
claim_number: "{{claim_number}}"
- name: process-payment
type: call
call: sap-fi.post-payment
with:
claim_number: "{{claim_number}}"
amount: "{{claim_amount}}"
- name: update-case
type: call
call: sf.update-claim
with:
claim_number: "{{claim_number}}"
status: "Paid"
payment_ref: "{{process-payment.document_number}}"
consumes:
- type: http
namespace: sf
baseUri: "https://aig.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: travel-claims
path: "/sobjects/Travel_Claim__c/ClaimNumber__c/{{claim_number}}"
operations:
- name: get-travel-policy
method: GET
- type: http
namespace: sap-fi
baseUri: "https://aig-s4.sap.com/sap/opu/odata/sap/API_JOURNAL_ENTRY_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: payments
path: "/A_JournalEntry"
operations:
- name: post-payment
method: POST
Routes underwriting referrals by checking authority limits in Snowflake, creating a referral task in ServiceNow, and notifying the authorized underwriter via Teams.
naftiko: "0.5"
info:
label: "Underwriting Referral Routing Workflow"
description: "Routes underwriting referrals by checking authority limits in Snowflake, creating a referral task in ServiceNow, and notifying the authorized underwriter via Teams."
tags:
- insurance
- underwriting
- snowflake
- servicenow
- workflow
capability:
exposes:
- type: mcp
namespace: uw-ops
port: 8080
tools:
- name: route-uw-referral
description: "Given a submission ID and coverage amount, check authority limits in Snowflake, create a ServiceNow referral, and notify the underwriter in Teams."
inputParameters:
- name: submission_id
in: body
type: string
description: "Submission ID."
- name: coverage_amount
in: body
type: number
description: "Coverage amount."
- name: line_of_business
in: body
type: string
description: "LOB."
steps:
- name: check-authority
type: call
call: snowflake.query-authority
with:
lob: "{{line_of_business}}"
amount: "{{coverage_amount}}"
- name: create-referral
type: call
call: snow.create-referral
with:
short_description: "UW Referral: {{submission_id}} — ${{coverage_amount}}"
description: "LOB: {{line_of_business}}"
- name: notify-uw
type: call
call: msteams.send-message
with:
recipient_upn: "{{check-authority.authorized_upn}}"
text: "UW Referral: {{submission_id}} — ${{coverage_amount}} ({{line_of_business}}). SNOW: {{create-referral.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://aig.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query-authority
method: POST
- type: http
namespace: snow
baseUri: "https://aig.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: referrals
path: "/table/u_uw_referral"
operations:
- name: create-referral
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Enriches an underwriting prospect account in Salesforce with ZoomInfo firmographic and risk-signal data before the underwriting team conducts a policy review.
naftiko: "0.5"
info:
label: "Underwriting Risk Data Enrichment"
description: "Enriches an underwriting prospect account in Salesforce with ZoomInfo firmographic and risk-signal data before the underwriting team conducts a policy review."
tags:
- underwriting
- crm
- salesforce
- data-enrichment
- insurance
capability:
exposes:
- type: mcp
namespace: underwriting-ops
port: 8080
tools:
- name: enrich-underwriting-prospect
description: "Given a Salesforce account ID and ZoomInfo company ID, fetch current firmographic data including employee count, revenue, and industry, then update the Salesforce account record. Use before underwriting team conducts policy risk review."
inputParameters:
- name: salesforce_account_id
in: body
type: string
description: "Salesforce account ID for the underwriting prospect."
- name: zoominfo_company_id
in: body
type: string
description: "ZoomInfo company ID for firmographic lookup."
- name: underwriter_upn
in: body
type: string
description: "Underwriter Teams UPN for enrichment notification."
steps:
- name: get-firmographics
type: call
call: zoominfo-uw.get-company
with:
company_id: "{{zoominfo_company_id}}"
- name: update-sf-account
type: call
call: salesforce-uw.update-account
with:
account_id: "{{salesforce_account_id}}"
employees: "{{get-firmographics.employee_count}}"
annual_revenue: "{{get-firmographics.revenue}}"
industry: "{{get-firmographics.industry}}"
sic_code: "{{get-firmographics.sic_code}}"
- name: notify-underwriter
type: call
call: msteams-uw.send-message
with:
recipient_upn: "{{underwriter_upn}}"
text: "Account enriched: {{get-firmographics.company_name}} | Employees: {{get-firmographics.employee_count}} | Revenue: ${{get-firmographics.revenue}} | Industry: {{get-firmographics.industry}}"
consumes:
- type: http
namespace: zoominfo-uw
baseUri: "https://api.zoominfo.com/search"
authentication:
type: bearer
token: "$secrets.zoominfo_token"
resources:
- name: companies
path: "/company/{{company_id}}"
inputParameters:
- name: company_id
in: path
operations:
- name: get-company
method: GET
- type: http
namespace: salesforce-uw
baseUri: "https://aig.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: update-account
method: PATCH
- type: http
namespace: msteams-uw
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Sends benefits open enrollment reminders by querying Workday for incomplete enrollments, sending emails via Microsoft Graph, and logging in ServiceNow.
naftiko: "0.5"
info:
label: "Workday Benefits Enrollment Reminder Workflow"
description: "Sends benefits open enrollment reminders by querying Workday for incomplete enrollments, sending emails via Microsoft Graph, and logging in ServiceNow."
tags:
- insurance
- hr
- benefits
- workday
- microsoft-graph
- servicenow
capability:
exposes:
- type: mcp
namespace: benefits-ops
port: 8080
tools:
- name: send-enrollment-reminders
description: "Given an enrollment period and deadline, query Workday for incomplete enrollments, send reminder emails, and log the outreach in ServiceNow."
inputParameters:
- name: enrollment_period
in: body
type: string
description: "Enrollment period."
- name: deadline_date
in: body
type: string
description: "Deadline in YYYY-MM-DD."
steps:
- name: get-incomplete
type: call
call: workday.get-incomplete-enrollment
with:
period: "{{enrollment_period}}"
- name: send-reminders
type: call
call: msgraph.send-bulk-mail
with:
subject: "Benefits Enrollment Deadline {{deadline_date}}"
body: "Please complete enrollment by {{deadline_date}}."
- name: log-outreach
type: call
call: snow.create-task
with:
short_description: "Benefits reminders: {{enrollment_period}}"
description: "Incomplete: {{get-incomplete.count}} | Deadline: {{deadline_date}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd5-impl-services1.workday.com/ccx/service/aig/Benefits/v40.1"
authentication:
type: basic
username: "$secrets.workday_user"
password: "$secrets.workday_password"
resources:
- name: enrollment
path: "/benefit-elections?status=incomplete"
operations:
- name: get-incomplete-enrollment
method: GET
- type: http
namespace: msgraph
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/users/benefits@aig.com/sendMail"
operations:
- name: send-bulk-mail
method: POST
- type: http
namespace: snow
baseUri: "https://aig.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/u_benefits_task"
operations:
- name: create-task
method: POST
Retrieves compensation band details from Workday for a specified job profile, returning min, mid, and max salary.
naftiko: "0.5"
info:
label: "Workday Compensation Band Lookup"
description: "Retrieves compensation band details from Workday for a specified job profile, returning min, mid, and max salary."
tags:
- hr
- workday
- compensation
- lookup
capability:
exposes:
- type: mcp
namespace: comp-ops
port: 8080
tools:
- name: get-comp-band
description: "Given a job profile ID, return the salary band minimum, midpoint, and maximum."
inputParameters:
- name: job_profile_id
in: body
type: string
description: "Workday job profile ID."
call: workday.get-comp-band
with:
profile: "{{job_profile_id}}"
outputParameters:
- name: min_salary
type: number
mapping: "$.Compensation_Band.Min"
- name: mid_salary
type: number
mapping: "$.Compensation_Band.Mid"
- name: max_salary
type: number
mapping: "$.Compensation_Band.Max"
consumes:
- namespace: workday
type: http
baseUri: "https://wd5-impl-services1.workday.com/ccx/service/aig/Compensation/v40.1"
authentication:
type: basic
username: "$secrets.workday_user"
password: "$secrets.workday_password"
resources:
- name: comp-bands
path: "/compensation-bands/{{profile}}"
operations:
- name: get-comp-band
method: GET
Retrieves an employee profile from Workday by employee ID, returning name, department, title, and manager.
naftiko: "0.5"
info:
label: "Workday Employee Profile Lookup"
description: "Retrieves an employee profile from Workday by employee ID, returning name, department, title, and manager."
tags:
- insurance
- hr
- workday
- employee-management
- lookup
capability:
exposes:
- type: mcp
namespace: hr-ops
port: 8080
tools:
- name: get-employee-profile
description: "Given a Workday employee ID, return the employee full name, department, job title, and manager name."
inputParameters:
- name: employee_id
in: body
type: string
description: "Workday employee ID."
call: workday.get-worker
with:
Worker_ID: "{{employee_id}}"
outputParameters:
- name: full_name
type: string
mapping: "$.Worker.Worker_Data.Personal_Data.Name_Data.Legal_Name"
- name: department
type: string
mapping: "$.Worker.Worker_Data.Organization_Data.Organization_Name"
- name: title
type: string
mapping: "$.Worker.Worker_Data.Job_Data.Position_Data.Business_Title"
consumes:
- namespace: workday
type: http
baseUri: "https://wd5-impl-services1.workday.com/ccx/service/aig/Human_Resources/v40.1"
authentication:
type: basic
username: "$secrets.workday_user"
password: "$secrets.workday_password"
resources:
- name: hr-ops
path: "/{{id}}"
operations:
- name: get-worker
method: GET
Retrieves current headcount and payroll cost by department and cost center from Workday for finance and HR reporting.
naftiko: "0.5"
info:
label: "Workday Headcount and Payroll Snapshot"
description: "Retrieves current headcount and payroll cost by department and cost center from Workday for finance and HR reporting."
tags:
- hr
- finance
- payroll
- workday
- headcount
capability:
exposes:
- type: mcp
namespace: hr-finance
port: 8080
tools:
- name: get-headcount-snapshot
description: "Returns headcount and payroll cost data grouped by department and cost center from Workday as of the specified date. Use for monthly finance reviews and workforce planning."
inputParameters:
- name: as_of_date
in: body
type: string
description: "Snapshot date in YYYY-MM-DD format."
call: workday-hcm.get-headcount
with:
effective_date: "{{as_of_date}}"
outputParameters:
- name: total_headcount
type: string
mapping: "$.Report_Entry[0].Total_Headcount"
- name: total_payroll_cost
type: string
mapping: "$.Report_Entry[0].Total_Payroll_Cost"
consumes:
- type: http
namespace: workday-hcm
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: headcount
path: "/reports/headcount_by_department"
inputParameters:
- name: effective_date
in: query
operations:
- name: get-headcount
method: GET
Queries Workday for open positions by department, returning count and average days open.
naftiko: "0.5"
info:
label: "Workday Open Position Count Check"
description: "Queries Workday for open positions by department, returning count and average days open."
tags:
- insurance
- hr
- workday
- talent-acquisition
- lookup
capability:
exposes:
- type: mcp
namespace: ta-ops
port: 8080
tools:
- name: get-open-positions
description: "Given a department name, return the open position count and average days since posting."
inputParameters:
- name: department
in: body
type: string
description: "Department name."
call: workday.get-requisitions
with:
department: "{{department}}"
outputParameters:
- name: open_count
type: integer
mapping: "$.total"
- name: avg_days_open
type: number
mapping: "$.averageDaysOpen"
consumes:
- namespace: workday
type: http
baseUri: "https://wd5-impl-services1.workday.com/ccx/service/aig/Human_Resources/v40.1"
authentication:
type: basic
username: "$secrets.workday_user"
password: "$secrets.workday_password"
resources:
- name: ta-ops
path: "/{{id}}"
operations:
- name: get-requisitions
method: GET
Generates a performance calibration report by pulling ratings from Workday, aggregating in Snowflake, and distributing to HR leadership via Teams.
naftiko: "0.5"
info:
label: "Workday Performance Calibration Report"
description: "Generates a performance calibration report by pulling ratings from Workday, aggregating in Snowflake, and distributing to HR leadership via Teams."
tags:
- insurance
- hr
- performance-management
- workday
- snowflake
capability:
exposes:
- type: mcp
namespace: perf-ops
port: 8080
tools:
- name: generate-calibration-report
description: "Given a review cycle and business unit, pull ratings from Workday, aggregate in Snowflake, and post to HR leadership channel."
inputParameters:
- name: review_cycle
in: body
type: string
description: "Review cycle ID."
- name: business_unit
in: body
type: string
description: "Business unit."
- name: hr_channel_id
in: body
type: string
description: "HR Teams channel ID."
steps:
- name: get-ratings
type: call
call: workday.get-performance-data
with:
cycle: "{{review_cycle}}"
bu: "{{business_unit}}"
- name: aggregate
type: call
call: snowflake.aggregate-ratings
with:
cycle: "{{review_cycle}}"
bu: "{{business_unit}}"
- name: post-report
type: call
call: msteams.post-channel
with:
channel_id: "{{hr_channel_id}}"
text: "Calibration: {{business_unit}} — {{review_cycle}}. Exceeds: {{aggregate.exceeds_pct}}% | Meets: {{aggregate.meets_pct}}%"
consumes:
- type: http
namespace: workday
baseUri: "https://wd5-impl-services1.workday.com/ccx/service/aig/Performance_Management/v40.1"
authentication:
type: basic
username: "$secrets.workday_user"
password: "$secrets.workday_password"
resources:
- name: reviews
path: "/performance-reviews"
operations:
- name: get-performance-data
method: GET
- type: http
namespace: snowflake
baseUri: "https://aig.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: aggregate-ratings
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: channels
path: "/teams/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel
method: POST
Coordinates return-to-work by pulling medical status from Salesforce, updating Workday leave records, and notifying the employer via Teams.
naftiko: "0.5"
info:
label: "Workers Comp Return-to-Work Workflow"
description: "Coordinates return-to-work by pulling medical status from Salesforce, updating Workday leave records, and notifying the employer via Teams."
tags:
- insurance
- workers-compensation
- claims
- workday
- salesforce
capability:
exposes:
- type: mcp
namespace: wc-ops
port: 8080
tools:
- name: coordinate-rtw
description: "Given a WC claim number and employee ID, pull medical clearance from Salesforce, update Workday leave, and notify the employer."
inputParameters:
- name: claim_number
in: body
type: string
description: "WC claim number."
- name: employee_id
in: body
type: string
description: "Employee ID."
- name: employer_upn
in: body
type: string
description: "Employer HR contact UPN."
steps:
- name: get-medical
type: call
call: sf.get-claim-medical
with:
claim_number: "{{claim_number}}"
- name: update-leave
type: call
call: workday.update-leave
with:
employee_id: "{{employee_id}}"
status: "Return Approved"
- name: notify-employer
type: call
call: msteams.send-message
with:
recipient_upn: "{{employer_upn}}"
text: "RTW approved: Claim {{claim_number}} — Employee {{employee_id}}. Clearance: {{get-medical.clearance_date}}"
consumes:
- type: http
namespace: sf
baseUri: "https://aig.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: claims
path: "/sobjects/WC_Claim__c/ClaimNumber__c/{{claim_number}}"
operations:
- name: get-claim-medical
method: GET
- type: http
namespace: workday
baseUri: "https://wd5-impl-services1.workday.com/ccx/service/aig/Absence_Management/v40.1"
authentication:
type: basic
username: "$secrets.workday_user"
password: "$secrets.workday_password"
resources:
- name: leaves
path: "/leave-of-absence/{{employee_id}}"
operations:
- name: update-leave
method: PATCH
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
operations:
- name: send-message
method: POST