AXA Capabilities
Naftiko 0.5 capability definitions for AXA - 100 capabilities showing integration workflows and service orchestrations.
Runs IBNR model in Snowflake and publishes results to Power BI.
naftiko: "0.5"
info:
label: "Actuarial IBNR Reserve Estimation"
description: "Runs IBNR model in Snowflake and publishes results to Power BI."
tags:
- insurance
- actuarial
- claims
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: ibnr-ops
port: 8080
tools:
- name: estimate-ibnr
description: "Estimate IBNR reserves."
inputParameters:
- name: lob
in: body
type: string
description: "LOB."
- name: year
in: body
type: integer
description: "Accident year."
steps:
- name: model
type: call
call: "snowflake.query"
with:
query: "CALL ESTIMATE_IBNR('{{lob}}',{{year}})"
- name: refresh
type: call
call: "powerbi.refresh"
with:
group_id: "$secrets.pbi_actuarial"
dataset_id: "$secrets.pbi_ibnr"
consumes:
- type: http
namespace: snowflake
baseUri: "https://axa.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/groups/{{group_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: group_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh
method: POST
Queries Snowflake for loss and premium data and refreshes Power BI dashboard.
naftiko: "0.5"
info:
label: "Actuarial Loss Ratio Dashboard Sync"
description: "Queries Snowflake for loss and premium data and refreshes Power BI dashboard."
tags:
- insurance
- actuarial
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: lossratio-ops
port: 8080
tools:
- name: sync-ratios
description: "Sync loss ratios."
inputParameters:
- name: lob
in: body
type: string
description: "LOB."
- name: period
in: body
type: string
description: "YYYY-MM."
steps:
- name: query
type: call
call: "snowflake.query"
with:
query: "SELECT SUM(loss),SUM(premium) FROM LOSS_TRIANGLE WHERE lob='{{lob}}'"
- name: refresh
type: call
call: "powerbi.refresh"
with:
group_id: "$secrets.pbi_actuarial"
dataset_id: "$secrets.pbi_lossratio"
consumes:
- type: http
namespace: snowflake
baseUri: "https://axa.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/groups/{{group_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: group_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh
method: POST
Retrieves mortality rate data for age, gender, and table version for life insurance pricing.
naftiko: "0.5"
info:
label: "Actuarial Mortality Table Lookup"
description: "Retrieves mortality rate data for age, gender, and table version for life insurance pricing."
tags:
- insurance
- actuarial
- life
capability:
exposes:
- type: mcp
namespace: mortality-ops
port: 8080
tools:
- name: get-rate
description: "Look up mortality rate. Returns rate and expectancy."
inputParameters:
- name: age
in: body
type: integer
description: "Insured age."
- name: gender
in: body
type: string
description: "Gender."
- name: table
in: body
type: string
description: "Table version."
call: "actuarial-api.get-rate"
with:
age: "{{age}}"
gender: "{{gender}}"
table: "{{table}}"
outputParameters:
- name: rate
type: number
mapping: "$.annualMortalityRate"
- name: expectancy
type: number
mapping: "$.lifeExpectancy"
consumes:
- type: http
namespace: actuarial-api
baseUri: "https://api.axa.com/actuarial/v1"
authentication:
type: bearer
token: "$secrets.actuarial_api_token"
resources:
- name: mortality
path: "/mortality-tables/{{table}}/rates"
inputParameters:
- name: table
in: path
operations:
- name: get-rate
method: GET
Triggers quarterly reserve calculations in Snowflake, validates results, and publishes to Power BI.
naftiko: "0.5"
info:
label: "Actuarial Reserve Calculation Trigger"
description: "Triggers quarterly reserve calculations in Snowflake, validates results, and publishes to Power BI."
tags:
- insurance
- actuarial
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: reserve-ops
port: 8080
tools:
- name: run-reserves
description: "Run quarterly reserves. Executes and refreshes dashboard."
inputParameters:
- name: lob
in: body
type: string
description: "LOB."
- name: quarter
in: body
type: string
description: "YYYY-Q."
steps:
- name: calc
type: call
call: "snowflake.query"
with:
query: "CALL CALCULATE_RESERVES('{{lob}}','{{quarter}}')"
- name: validate
type: call
call: "snowflake.query"
with:
query: "SELECT * FROM RESERVE_VALIDATION WHERE lob='{{lob}}'"
- name: refresh
type: call
call: "powerbi.refresh"
with:
group_id: "$secrets.pbi_group"
dataset_id: "$secrets.pbi_reserves"
consumes:
- type: http
namespace: snowflake
baseUri: "https://axa.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/groups/{{group_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: group_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh
method: POST
Retrieves active insurance licenses for an agent including states, authority, and expirations.
naftiko: "0.5"
info:
label: "Agent License Status Lookup"
description: "Retrieves active insurance licenses for an agent including states, authority, and expirations."
tags:
- insurance
- compliance
- agent
capability:
exposes:
- type: mcp
namespace: license-ops
port: 8080
tools:
- name: get-licenses
description: "Look up agent licenses. Returns states, authority, expirations."
inputParameters:
- name: agent_id
in: body
type: string
description: "Agent identifier."
call: "compliance-api.get-licenses"
with:
agent_id: "{{agent_id}}"
outputParameters:
- name: licenses
type: array
mapping: "$.licenses"
- name: next_expiry
type: string
mapping: "$.nearestExpiration"
- name: count
type: integer
mapping: "$.activeCount"
consumes:
- type: http
namespace: compliance-api
baseUri: "https://api.axa.com/compliance/v1"
authentication:
type: bearer
token: "$secrets.compliance_api_token"
resources:
- name: licenses
path: "/agents/{{agent_id}}/licenses"
inputParameters:
- name: agent_id
in: path
operations:
- name: get-licenses
method: GET
Given a SharePoint document URL containing an insurance policy or claim document, retrieves the content and generates a concise executive summary using OpenAI, returning it for agent or advisor consumption.
naftiko: "0.5"
info:
label: "AI-Assisted Insurance Document Summarization"
description: "Given a SharePoint document URL containing an insurance policy or claim document, retrieves the content and generates a concise executive summary using OpenAI, returning it for agent or advisor consumption."
tags:
- ai
- openai
- sharepoint
- document-processing
- insurance
- automation
capability:
exposes:
- type: mcp
namespace: doc-ai
port: 8080
tools:
- name: summarize-insurance-document
description: "Given a SharePoint document site ID and item ID, retrieve the document content and generate a structured summary using OpenAI GPT-4o. Returns a 5-point executive summary suitable for advisors."
inputParameters:
- name: site_id
in: body
type: string
description: "The SharePoint site ID where the document is stored."
- name: item_id
in: body
type: string
description: "The SharePoint drive item ID for the document to summarize."
- name: document_type
in: body
type: string
description: "The type of document: 'policy', 'claim', 'endorsement', or 'report'."
steps:
- name: get-document
type: call
call: "sharepoint.get-document-content"
with:
site_id: "{{site_id}}"
item_id: "{{item_id}}"
- name: generate-summary
type: call
call: "openai.create-chat-completion"
with:
model: "gpt-4o"
system_prompt: "You are an expert insurance document analyst. Summarize the following {{document_type}} document in 5 bullet points, highlighting key terms, coverage limits, exclusions, and dates."
user_message: "{{get-document.content}}"
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: document-content
path: "/sites/{{site_id}}/drive/items/{{item_id}}/content"
inputParameters:
- name: site_id
in: path
- name: item_id
in: path
operations:
- name: get-document-content
method: GET
- type: http
namespace: openai
baseUri: "https://api.openai.com/v1"
authentication:
type: bearer
token: "$secrets.openai_api_key"
resources:
- name: chat-completions
path: "/chat/completions"
operations:
- name: create-chat-completion
method: POST
Initiates the annual performance review cycle in Workday for a given department, notifies managers via Microsoft Teams, and creates tracking tasks in ServiceNow.
naftiko: "0.5"
info:
label: "Annual Performance Review Cycle Trigger"
description: "Initiates the annual performance review cycle in Workday for a given department, notifies managers via Microsoft Teams, and creates tracking tasks in ServiceNow."
tags:
- hr
- performance
- workday
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-performance
port: 8080
tools:
- name: trigger-performance-review-cycle
description: "Given a department ID and review cycle year, initiate the Workday performance review process, create ServiceNow tracking tasks for each manager, and notify managers via Teams."
inputParameters:
- name: department_id
in: body
type: string
description: "The Workday department ID for the review cycle."
- name: review_year
in: body
type: string
description: "The performance review year, e.g. '2026'."
steps:
- name: initiate-review
type: call
call: "workday.initiate-performance-review"
with:
department_id: "{{department_id}}"
review_period: "{{review_year}}"
- name: create-tracking-task
type: call
call: "servicenow.create-task"
with:
short_description: "Performance review cycle {{review_year}} — {{department_id}}"
assignment_group: "HR_Operations"
due_date: "{{initiate-review.deadline}}"
- name: notify-managers
type: call
call: "msteams.post-channel-message"
with:
channel: "hr-announcements"
message: "Performance review cycle {{review_year}} started for department {{department_id}}. Deadline: {{initiate-review.deadline}}."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: performance-reviews
path: "/axa/performanceReviews"
operations:
- name: initiate-performance-review
method: POST
- type: http
namespace: servicenow
baseUri: "https://axa.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/sc_task"
operations:
- name: create-task
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Monitors Datadog latency, creates PagerDuty incident, and alerts engineering.
naftiko: "0.5"
info:
label: "API Latency Alert Workflow"
description: "Monitors Datadog latency, creates PagerDuty incident, and alerts engineering."
tags:
- engineering
- datadog
- pagerduty
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: latency-ops
port: 8080
tools:
- name: check-latency
description: "Check API latency."
inputParameters:
- name: service
in: body
type: string
description: "Service."
- name: threshold
in: body
type: integer
description: "Threshold ms."
steps:
- name: get
type: call
call: "datadog.query"
with:
query: "p99:trace.http.request{service:{{service}}}"
- name: incident
type: call
call: "pagerduty.create-incident"
with:
service_id: "$secrets.eng_pd"
title: "Latency: {{service}}"
- name: notify
type: call
call: "msteams.post"
with:
channel_id: "$secrets.eng_channel"
text: "Latency: {{service}} > {{threshold}}ms"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
resources:
- name: metrics
path: "/query"
operations:
- name: query
method: GET
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
Gathers data from Snowflake, compiles Confluence package, and notifies compliance.
naftiko: "0.5"
info:
label: "Compliance Audit Preparation Workflow"
description: "Gathers data from Snowflake, compiles Confluence package, and notifies compliance."
tags:
- insurance
- compliance
- snowflake
- confluence
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: audit-ops
port: 8080
tools:
- name: prepare-audit
description: "Prepare audit."
inputParameters:
- name: state
in: body
type: string
description: "State."
- name: start
in: body
type: string
description: "Start."
- name: end
in: body
type: string
description: "End."
steps:
- name: gather
type: call
call: "snowflake.query"
with:
query: "CALL PREPARE_AUDIT('{{state}}','{{start}}','{{end}}')"
- name: package
type: call
call: "confluence.create-page"
with:
space_key: "COMPLIANCE"
title: "Audit: {{state}}"
- name: notify
type: call
call: "msteams.post"
with:
channel_id: "$secrets.compliance_channel"
text: "Audit ready: {{state}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://axa.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: confluence
baseUri: "https://axa.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
Queries Azure costs and publishes allocation to Confluence.
naftiko: "0.5"
info:
label: "Azure Cost Allocation Report Workflow"
description: "Queries Azure costs and publishes allocation to Confluence."
tags:
- cloud
- finance
- microsoft-azure
- confluence
capability:
exposes:
- type: mcp
namespace: cost-ops
port: 8080
tools:
- name: gen-report
description: "Generate cost report."
inputParameters:
- name: period
in: body
type: string
description: "YYYY-MM."
steps:
- name: costs
type: call
call: "azure-cost.get-usage"
with:
period: "{{period}}"
- name: publish
type: call
call: "confluence.create-page"
with:
space_key: "FINOPS"
title: "Azure Costs {{period}}"
consumes:
- type: http
namespace: azure-cost
baseUri: "https://management.azure.com"
authentication:
type: bearer
token: "$secrets.azure_token"
resources:
- name: usage
path: "/subscriptions/$secrets.azure_sub/providers/Microsoft.CostManagement/query"
operations:
- name: get-usage
method: POST
- type: http
namespace: confluence
baseUri: "https://axa.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
Calculates BI reserve, updates claim, and notifies manager.
naftiko: "0.5"
info:
label: "Bodily Injury Reserve Calculator"
description: "Calculates BI reserve, updates claim, and notifies manager."
tags:
- insurance
- claims
- actuarial
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: bi-reserve
port: 8080
tools:
- name: calc-bi
description: "Calculate BI reserve."
inputParameters:
- name: claim_id
in: body
type: string
description: "Claim."
- name: injury
in: body
type: string
description: "Injury."
- name: jurisdiction
in: body
type: string
description: "State."
steps:
- name: calc
type: call
call: "reserve-engine.calc"
with:
injury: "{{injury}}"
jurisdiction: "{{jurisdiction}}"
- name: update
type: call
call: "servicenow.update"
with:
claim_id: "{{claim_id}}"
reserve: "{{calc.amount}}"
- name: notify
type: call
call: "msteams.post"
with:
channel_id: "$secrets.claims_mgr"
text: "BI: {{claim_id}} = ${{calc.amount}}"
consumes:
- type: http
namespace: reserve-engine
baseUri: "https://api.axa.com/actuarial/v1"
authentication:
type: bearer
token: "$secrets.actuarial_api_token"
resources:
- name: bi-reserves
path: "/reserves/bodily-injury"
operations:
- name: calc
method: POST
- type: http
namespace: servicenow
baseUri: "https://axa.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: reserves
path: "/table/sn_claim_reserve/{{claim_id}}"
inputParameters:
- name: claim_id
in: path
operations:
- name: update
method: PATCH
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
Queries affected policies in Snowflake, creates ServiceNow incident, and broadcasts alerts via Microsoft Teams.
naftiko: "0.5"
info:
label: "Catastrophe Event Response Handler"
description: "Queries affected policies in Snowflake, creates ServiceNow incident, and broadcasts alerts via Microsoft Teams."
tags:
- insurance
- claims
- catastrophe
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: cat-ops
port: 8080
tools:
- name: activate-cat
description: "Activate CAT response."
inputParameters:
- name: event
in: body
type: string
description: "Event name."
- name: zips
in: body
type: string
description: "Affected ZIPs."
- name: type
in: body
type: string
description: "Event type."
steps:
- name: count
type: call
call: "snowflake.query"
with:
query: "SELECT COUNT(*) FROM POLICIES WHERE zip IN ('{{zips}}')"
- name: incident
type: call
call: "servicenow.create-incident"
with:
short_description: "CAT: {{event}}"
priority: "1"
- name: broadcast
type: call
call: "msteams.post"
with:
channel_id: "$secrets.cat_channel"
text: "CAT: {{event}}. Incident: {{incident.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://axa.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: servicenow
baseUri: "https://axa.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
Executes CAT model in Snowflake and publishes PML to Power BI.
naftiko: "0.5"
info:
label: "Catastrophe Model Run Workflow"
description: "Executes CAT model in Snowflake and publishes PML to Power BI."
tags:
- insurance
- actuarial
- catastrophe
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: cat-model
port: 8080
tools:
- name: run-cat
description: "Run CAT model."
inputParameters:
- name: peril
in: body
type: string
description: "Peril."
- name: region
in: body
type: string
description: "Region."
steps:
- name: execute
type: call
call: "snowflake.query"
with:
query: "CALL RUN_CAT_MODEL('{{peril}}','{{region}}')"
- name: refresh
type: call
call: "powerbi.refresh"
with:
group_id: "$secrets.pbi_cat"
dataset_id: "$secrets.pbi_cat_model"
consumes:
- type: http
namespace: snowflake
baseUri: "https://axa.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/groups/{{group_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: group_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh
method: POST
Evaluates loss type and adjuster workload, assigns optimal adjuster in Salesforce, and notifies via Microsoft Teams.
naftiko: "0.5"
info:
label: "Claims Adjuster Assignment Router"
description: "Evaluates loss type and adjuster workload, assigns optimal adjuster in Salesforce, and notifies via Microsoft Teams."
tags:
- insurance
- claims
- salesforce
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: claims-route
port: 8080
tools:
- name: route-claim
description: "Route claim to best adjuster. Checks capacity, assigns, notifies."
inputParameters:
- name: claim_id
in: body
type: string
description: "Claim ID."
- name: loss_type
in: body
type: string
description: "Loss type."
steps:
- name: get-capacity
type: call
call: "workday.get-capacity"
with:
department: "claims-{{loss_type}}"
- name: assign
type: call
call: "salesforce.assign"
with:
claim_id: "{{claim_id}}"
adjuster: "{{get-capacity.id}}"
- name: notify
type: call
call: "msteams.post"
with:
channel_id: "$secrets.claims_channel"
text: "Claim {{claim_id}} ({{loss_type}}) assigned."
consumes:
- type: http
namespace: workday
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/axa"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: capacity
path: "/staffing/teamCapacity"
operations:
- name: get-capacity
method: GET
- type: http
namespace: salesforce
baseUri: "https://axa.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: claims
path: "/sobjects/Claim__c/{{claim_id}}"
inputParameters:
- name: claim_id
in: path
operations:
- name: assign
method: PATCH
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
Places litigation hold on documents, creates legal case, and notifies legal team.
naftiko: "0.5"
info:
label: "Claims Litigation Hold Workflow"
description: "Places litigation hold on documents, creates legal case, and notifies legal team."
tags:
- insurance
- claims
- compliance
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: lit-ops
port: 8080
tools:
- name: initiate-hold
description: "Place litigation hold."
inputParameters:
- name: claim_id
in: body
type: string
description: "Claim."
- name: attorney
in: body
type: string
description: "Opposing counsel."
steps:
- name: hold
type: call
call: "document-api.create-hold"
with:
claim_id: "{{claim_id}}"
type: "litigation"
- name: case
type: call
call: "servicenow.create-case"
with:
short_description: "Litigation: {{claim_id}}"
- name: notify
type: call
call: "msteams.post"
with:
channel_id: "$secrets.legal_channel"
text: "Hold: {{claim_id}}. Case: {{case.number}}"
consumes:
- type: http
namespace: document-api
baseUri: "https://api.axa.com/documents/v1"
authentication:
type: bearer
token: "$secrets.document_api_token"
resources:
- name: holds
path: "/holds"
operations:
- name: create-hold
method: POST
- type: http
namespace: servicenow
baseUri: "https://axa.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cases
path: "/table/sn_legal_case"
operations:
- name: create-case
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
Generates medical record request, creates tracking, and sets Jira follow-up.
naftiko: "0.5"
info:
label: "Claims Medical Record Request Workflow"
description: "Generates medical record request, creates tracking, and sets Jira follow-up."
tags:
- insurance
- claims
- servicenow
- jira
capability:
exposes:
- type: mcp
namespace: medrecord-ops
port: 8080
tools:
- name: request-records
description: "Request medical records."
inputParameters:
- name: claim_id
in: body
type: string
description: "Claim."
- name: provider
in: body
type: string
description: "Provider."
- name: claimant
in: body
type: string
description: "Claimant."
steps:
- name: gen
type: call
call: "document-api.generate"
with:
claim_id: "{{claim_id}}"
provider: "{{provider}}"
- name: track
type: call
call: "servicenow.create-record"
with:
table: "u_med_request"
claim_id: "{{claim_id}}"
- name: followup
type: call
call: "jira.create-issue"
with:
project_key: "CLAIMS"
issuetype: "Task"
summary: "Med records: {{claim_id}}"
consumes:
- type: http
namespace: document-api
baseUri: "https://api.axa.com/documents/v1"
authentication:
type: bearer
token: "$secrets.document_api_token"
resources:
- name: medical
path: "/generate/medical-request"
operations:
- name: generate
method: POST
- type: http
namespace: servicenow
baseUri: "https://axa.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/u_med_request"
operations:
- name: create-record
method: POST
- type: http
namespace: jira
baseUri: "https://axa.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Validates payment against limits, processes disbursement, and updates claim in ServiceNow.
naftiko: "0.5"
info:
label: "Claims Payment Processing Workflow"
description: "Validates payment against limits, processes disbursement, and updates claim in ServiceNow."
tags:
- insurance
- claims
- payments
- servicenow
capability:
exposes:
- type: mcp
namespace: payment-ops
port: 8080
tools:
- name: process-payment
description: "Process claims payment."
inputParameters:
- name: claim_id
in: body
type: string
description: "Claim ID."
- name: amount
in: body
type: number
description: "Amount."
- name: payee
in: body
type: string
description: "Recipient."
steps:
- name: validate
type: call
call: "claims-api.validate"
with:
claim_id: "{{claim_id}}"
amount: "{{amount}}"
- name: disburse
type: call
call: "payment-api.disburse"
with:
claim_id: "{{claim_id}}"
amount: "{{amount}}"
- name: update
type: call
call: "servicenow.update"
with:
claim_id: "{{claim_id}}"
status: "disbursed"
consumes:
- type: http
namespace: claims-api
baseUri: "https://api.axa.com/claims/v2"
authentication:
type: bearer
token: "$secrets.claims_api_token"
resources:
- name: validation
path: "/payments/validate"
operations:
- name: validate
method: POST
- type: http
namespace: payment-api
baseUri: "https://api.axa.com/payments/v1"
authentication:
type: bearer
token: "$secrets.payment_api_token"
resources:
- name: disbursements
path: "/disbursements"
operations:
- name: disburse
method: POST
- type: http
namespace: servicenow
baseUri: "https://axa.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cases
path: "/table/sn_customerservice_case/{{claim_id}}"
inputParameters:
- name: claim_id
in: path
operations:
- name: update
method: PATCH
Validates adjuster authority, updates reserve in ServiceNow, and notifies claims manager.
naftiko: "0.5"
info:
label: "Claims Reserve Adjustment Workflow"
description: "Validates adjuster authority, updates reserve in ServiceNow, and notifies claims manager."
tags:
- insurance
- claims
- actuarial
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: reserve-adj
port: 8080
tools:
- name: adjust-reserve
description: "Adjust claim reserve."
inputParameters:
- name: claim_id
in: body
type: string
description: "Claim."
- name: amount
in: body
type: number
description: "New reserve."
- name: adjuster
in: body
type: string
description: "Adjuster."
steps:
- name: check
type: call
call: "claims-api.check-auth"
with:
adjuster: "{{adjuster}}"
amount: "{{amount}}"
- name: update
type: call
call: "servicenow.update-reserve"
with:
claim_id: "{{claim_id}}"
reserve: "{{amount}}"
- name: notify
type: call
call: "msteams.post"
with:
channel_id: "$secrets.claims_mgr"
text: "Reserve: {{claim_id}} = ${{amount}}"
consumes:
- type: http
namespace: claims-api
baseUri: "https://api.axa.com/claims/v2"
authentication:
type: bearer
token: "$secrets.claims_api_token"
resources:
- name: authority
path: "/authority/check"
operations:
- name: check-auth
method: POST
- type: http
namespace: servicenow
baseUri: "https://axa.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: reserves
path: "/table/sn_claim_reserve/{{claim_id}}"
inputParameters:
- name: claim_id
in: path
operations:
- name: update-reserve
method: PATCH
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
Retrieves current claim status from ServiceNow including state, adjuster, and last update.
naftiko: "0.5"
info:
label: "Claims Status Inquiry"
description: "Retrieves current claim status from ServiceNow including state, adjuster, and last update."
tags:
- insurance
- claims
- servicenow
capability:
exposes:
- type: mcp
namespace: claims-ops
port: 8080
tools:
- name: get-claim-status
description: "Look up claim status by number. Returns state, adjuster, last activity. Use for claim inquiries."
inputParameters:
- name: claim_number
in: body
type: string
description: "AXA claim number."
call: "servicenow.get-case"
with:
claim_number: "{{claim_number}}"
outputParameters:
- name: state
type: string
mapping: "$.state"
- name: adjuster
type: string
mapping: "$.assigned_to.display_value"
- name: last_activity
type: string
mapping: "$.sys_updated_on"
consumes:
- type: http
namespace: servicenow
baseUri: "https://axa.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cases
path: "/table/sn_customerservice_case/{{claim_number}}"
inputParameters:
- name: claim_number
in: path
operations:
- name: get-case
method: GET
When an Azure cost anomaly is detected, annotates the event in Datadog, opens a ServiceNow change request for cost review, and notifies the FinOps team in Microsoft Teams.
naftiko: "0.5"
info:
label: "Cloud Cost Anomaly Response"
description: "When an Azure cost anomaly is detected, annotates the event in Datadog, opens a ServiceNow change request for cost review, and notifies the FinOps team in Microsoft Teams."
tags:
- finops
- cloud
- azure
- datadog
- servicenow
- cost-management
capability:
exposes:
- type: mcp
namespace: finops
port: 8080
tools:
- name: handle-cost-anomaly
description: "Given an Azure cost anomaly alert with service name and overage amount, create a Datadog event annotation, open a ServiceNow change request, and alert the FinOps Teams channel."
inputParameters:
- name: azure_service
in: body
type: string
description: "The Azure service reporting the cost anomaly, e.g. 'Azure Kubernetes Service'."
- name: overage_eur
in: body
type: number
description: "Estimated cost overage in EUR."
- name: subscription_id
in: body
type: string
description: "The Azure subscription ID where the anomaly occurred."
steps:
- name: annotate-datadog
type: call
call: "datadog.create-event"
with:
title: "Azure Cost Anomaly: {{azure_service}}"
text: "Subscription {{subscription_id}} — overage: €{{overage_eur}}"
alert_type: "warning"
- name: open-change-request
type: call
call: "servicenow.create-change"
with:
short_description: "Cost review: {{azure_service}} overage €{{overage_eur}}"
category: "finops"
justification: "Azure anomaly detected on subscription {{subscription_id}}"
- name: notify-finops
type: call
call: "msteams.post-channel-message"
with:
channel: "finops-alerts"
message: "Cost anomaly on {{azure_service}} | Overage: €{{overage_eur}} | SNOW: {{open-change-request.number}} | Datadog: {{annotate-datadog.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: servicenow
baseUri: "https://axa.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: changes
path: "/table/change_request"
operations:
- name: create-change
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Screens applicants against AML watchlists, logs results, and escalates matches.
naftiko: "0.5"
info:
label: "Compliance AML Screening Workflow"
description: "Screens applicants against AML watchlists, logs results, and escalates matches."
tags:
- insurance
- compliance
- fraud
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: aml-ops
port: 8080
tools:
- name: screen-aml
description: "Screen for AML."
inputParameters:
- name: name
in: body
type: string
description: "Applicant name."
- name: app_id
in: body
type: string
description: "Application ID."
steps:
- name: screen
type: call
call: "aml-api.screen"
with:
name: "{{name}}"
ref: "{{app_id}}"
- name: log
type: call
call: "servicenow.create-record"
with:
table: "u_aml"
result: "{{screen.status}}"
- name: alert
type: call
call: "msteams.post"
with:
channel_id: "$secrets.compliance_channel"
text: "AML: {{name}} - {{screen.status}}"
consumes:
- type: http
namespace: aml-api
baseUri: "https://api.axa.com/compliance/aml/v1"
authentication:
type: bearer
token: "$secrets.aml_api_token"
resources:
- name: screening
path: "/screen"
operations:
- name: screen
method: POST
- type: http
namespace: servicenow
baseUri: "https://axa.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/u_aml"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
Monitors regulatory filing deadlines, generates Confluence summary, and alerts compliance via Microsoft Teams.
naftiko: "0.5"
info:
label: "Compliance Regulatory Filing Tracker"
description: "Monitors regulatory filing deadlines, generates Confluence summary, and alerts compliance via Microsoft Teams."
tags:
- insurance
- compliance
- confluence
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: compliance-ops
port: 8080
tools:
- name: check-filings
description: "Check filing deadlines and notify."
inputParameters:
- name: days_ahead
in: body
type: integer
description: "Days ahead."
- name: state
in: body
type: string
description: "State or ALL."
steps:
- name: get-filings
type: call
call: "compliance-api.get-filings"
with:
days: "{{days_ahead}}"
state: "{{state}}"
- name: create-page
type: call
call: "confluence.create-page"
with:
space_key: "COMPLIANCE"
title: "Filings Next {{days_ahead}} Days"
- name: notify
type: call
call: "msteams.post"
with:
channel_id: "$secrets.compliance_channel"
text: "{{get-filings.count}} filings due."
consumes:
- type: http
namespace: compliance-api
baseUri: "https://api.axa.com/compliance/v1"
authentication:
type: bearer
token: "$secrets.compliance_api_token"
resources:
- name: filings
path: "/filings/upcoming"
operations:
- name: get-filings
method: GET
- type: http
namespace: confluence
baseUri: "https://axa.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
Queries SAP Concur for expense reports pending manager approval beyond 5 days, and sends reminder notifications to approvers via Microsoft Teams.
naftiko: "0.5"
info:
label: "Concur Expense Report Approval Reminder"
description: "Queries SAP Concur for expense reports pending manager approval beyond 5 days, and sends reminder notifications to approvers via Microsoft Teams."
tags:
- finance
- expense-management
- sap-concur
- microsoft-teams
- approval
capability:
exposes:
- type: mcp
namespace: expense-management
port: 8080
tools:
- name: send-expense-approval-reminders
description: "Query SAP Concur for expense reports in Pending Manager Approval status older than 5 days, and send Teams reminders to each approver."
inputParameters:
- name: days_pending
in: body
type: integer
description: "Number of days an expense report must be pending before sending a reminder. Default: 5."
steps:
- name: get-pending-reports
type: call
call: "concur.list-pending-reports"
with:
approvalStatus: "A_PEND"
daysOld: "{{days_pending}}"
- name: notify-approvers
type: call
call: "msteams.post-channel-message"
with:
channel: "finance-approvals"
message: "{{get-pending-reports.count}} expense reports pending approval for more than {{days_pending}} days. Please review in SAP Concur."
consumes:
- type: http
namespace: concur
baseUri: "https://www.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_token"
resources:
- name: expense-reports
path: "/expense/reports"
operations:
- name: list-pending-reports
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Analyzes coverage in Salesforce, identifies gaps, and creates cross-sell opportunities.
naftiko: "0.5"
info:
label: "Cross-Sell Opportunity Workflow"
description: "Analyzes coverage in Salesforce, identifies gaps, and creates cross-sell opportunities."
tags:
- insurance
- policy
- salesforce
- sales
capability:
exposes:
- type: mcp
namespace: cross-sell
port: 8080
tools:
- name: cross-sell
description: "Create cross-sell opportunities."
inputParameters:
- name: customer_id
in: body
type: string
description: "Customer ID."
steps:
- name: policies
type: call
call: "salesforce.get-policies"
with:
customer_id: "{{customer_id}}"
- name: gaps
type: call
call: "analytics.identify-gaps"
with:
customer_id: "{{customer_id}}"
- name: opp
type: call
call: "salesforce.create-opp"
with:
customer_id: "{{customer_id}}"
product: "{{gaps.recommended}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://axa.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: policies
path: "/query"
operations:
- name: get-policies
method: GET
- type: http
namespace: analytics
baseUri: "https://api.axa.com/analytics/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: gaps
path: "/coverage-gaps"
operations:
- name: identify-gaps
method: POST
- type: http
namespace: salesforce
baseUri: "https://axa.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity"
operations:
- name: create-opp
method: POST
Creates ServiceNow case, links to Salesforce policy, and notifies CX team.
naftiko: "0.5"
info:
label: "Customer Complaint Tracking Workflow"
description: "Creates ServiceNow case, links to Salesforce policy, and notifies CX team."
tags:
- insurance
- compliance
- servicenow
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: complaint-ops
port: 8080
tools:
- name: log-complaint
description: "Log complaint."
inputParameters:
- name: policy
in: body
type: string
description: "Policy."
- name: category
in: body
type: string
description: "Category."
- name: desc
in: body
type: string
description: "Description."
steps:
- name: case
type: call
call: "servicenow.create-case"
with:
short_description: "Complaint: {{category}} - {{policy}}"
description: "{{desc}}"
- name: link
type: call
call: "salesforce.create-note"
with:
policy: "{{policy}}"
note: "Complaint: {{case.number}}"
- name: notify
type: call
call: "msteams.post"
with:
channel_id: "$secrets.cx_channel"
text: "Complaint: {{policy}}. Case: {{case.number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://axa.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cases
path: "/table/sn_customerservice_case"
operations:
- name: create-case
method: POST
- type: http
namespace: salesforce
baseUri: "https://axa.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: notes
path: "/sobjects/CaseNote__c"
operations:
- name: create-note
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
When a low NPS score is submitted through Salesforce Service Cloud, creates a HubSpot contact task for follow-up, and notifies the account manager via Microsoft Teams.
naftiko: "0.5"
info:
label: "Customer NPS Survey Follow-up Workflow"
description: "When a low NPS score is submitted through Salesforce Service Cloud, creates a HubSpot contact task for follow-up, and notifies the account manager via Microsoft Teams."
tags:
- customer-service
- nps
- salesforce
- hubspot
- microsoft-teams
- cx
capability:
exposes:
- type: mcp
namespace: cx-nps
port: 8080
tools:
- name: handle-low-nps-response
description: "Given a Salesforce case ID with a low NPS score (0-6), retrieve customer contact details, create a HubSpot follow-up task, and notify the responsible account manager in Teams."
inputParameters:
- name: case_id
in: body
type: string
description: "The Salesforce Service Cloud case ID linked to the NPS survey."
- name: nps_score
in: body
type: integer
description: "The NPS score submitted by the customer (0-10). Triggers follow-up if 0-6."
- name: customer_email
in: body
type: string
description: "The customer's email address from the survey submission."
steps:
- name: get-case
type: call
call: "salesforce.get-case"
with:
case_id: "{{case_id}}"
- name: create-followup-task
type: call
call: "hubspot.create-task"
with:
subject: "NPS Follow-up (score {{nps_score}}): {{customer_email}}"
contact_email: "{{customer_email}}"
due_date: "2d"
priority: "HIGH"
- name: notify-account-manager
type: call
call: "msteams.post-channel-message"
with:
channel: "cx-alerts"
message: "Low NPS ({{nps_score}}/10) from {{customer_email}} | Case: {{get-case.case_number}} | HubSpot task created."
consumes:
- type: http
namespace: salesforce
baseUri: "https://axa.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/sobjects/Case/{{case_id}}"
inputParameters:
- name: case_id
in: path
operations:
- name: get-case
method: GET
- type: http
namespace: hubspot
baseUri: "https://api.hubapi.com/crm/v3"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: tasks
path: "/objects/tasks"
operations:
- name: create-task
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Processes GDPR/CCPA requests by querying systems and logging in ServiceNow.
naftiko: "0.5"
info:
label: "Data Subject Request Workflow"
description: "Processes GDPR/CCPA requests by querying systems and logging in ServiceNow."
tags:
- insurance
- compliance
- privacy
- servicenow
capability:
exposes:
- type: mcp
namespace: dsar-ops
port: 8080
tools:
- name: process-dsar
description: "Process DSAR."
inputParameters:
- name: email
in: body
type: string
description: "Subject email."
- name: type
in: body
type: string
description: "Request type."
steps:
- name: sf
type: call
call: "salesforce.search"
with:
email: "{{email}}"
- name: claims
type: call
call: "claims-api.search"
with:
email: "{{email}}"
- name: log
type: call
call: "servicenow.create-record"
with:
table: "u_dsar"
email: "{{email}}"
type: "{{type}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://axa.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: search
path: "/search"
operations:
- name: search
method: GET
- type: http
namespace: claims-api
baseUri: "https://api.axa.com/claims/v2"
authentication:
type: bearer
token: "$secrets.claims_api_token"
resources:
- name: search
path: "/claims/search"
operations:
- name: search
method: GET
- type: http
namespace: servicenow
baseUri: "https://axa.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/u_dsar"
operations:
- name: create-record
method: POST
Queries the Datadog API for current SLI/SLO metrics across AXA's critical insurance platforms and posts a daily digest to the engineering Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Datadog Observability Dashboard Refresh"
description: "Queries the Datadog API for current SLI/SLO metrics across AXA's critical insurance platforms and posts a daily digest to the engineering Microsoft Teams channel."
tags:
- observability
- monitoring
- datadog
- microsoft-teams
- slo
- reporting
capability:
exposes:
- type: mcp
namespace: observability-reporting
port: 8080
tools:
- name: digest-platform-slos
description: "Query Datadog for SLO compliance metrics for a given time window and post a structured daily digest to the engineering Teams channel."
inputParameters:
- name: time_window_hours
in: body
type: integer
description: "The look-back window in hours for SLO metrics. Typically 24."
- name: environment
in: body
type: string
description: "The target environment: 'production', 'staging', or 'dr'."
steps:
- name: get-slo-metrics
type: call
call: "datadog.list-slos"
with:
tags: "env:{{environment}}"
limit: "50"
- name: post-digest
type: call
call: "msteams.post-channel-message"
with:
channel: "engineering-ops"
message: "Daily SLO Report ({{environment}}, last {{time_window_hours}}h): {{get-slo-metrics.summary}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: slos
path: "/slo"
operations:
- name: list-slos
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves health metrics from Datadog including error rate, latency, and throughput.
naftiko: "0.5"
info:
label: "Datadog Service Health Lookup"
description: "Retrieves health metrics from Datadog including error rate, latency, and throughput."
tags:
- engineering
- datadog
- monitoring
capability:
exposes:
- type: mcp
namespace: health-ops
port: 8080
tools:
- name: get-health
description: "Look up service health."
inputParameters:
- name: service
in: body
type: string
description: "Service name."
call: "datadog.get-metrics"
with:
service: "{{service}}"
outputParameters:
- name: error_rate
type: number
mapping: "$.errorRate"
- name: latency
type: number
mapping: "$.p99Latency"
- name: throughput
type: number
mapping: "$.throughput"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
resources:
- name: metrics
path: "/query"
operations:
- name: get-metrics
method: GET
Checks Snowflake for duplicate claims and flags matches in ServiceNow.
naftiko: "0.5"
info:
label: "Duplicate Claims Detection Workflow"
description: "Checks Snowflake for duplicate claims and flags matches in ServiceNow."
tags:
- insurance
- fraud
- claims
- snowflake
- servicenow
capability:
exposes:
- type: mcp
namespace: dup-detect
port: 8080
tools:
- name: detect-dupes
description: "Detect duplicates."
inputParameters:
- name: claimant
in: body
type: string
description: "Claimant."
- name: loss_date
in: body
type: string
description: "Loss date."
- name: loss_type
in: body
type: string
description: "Loss type."
steps:
- name: search
type: call
call: "snowflake.query"
with:
query: "SELECT * FROM CLAIMS WHERE claimant='{{claimant}}' AND loss_date NEAR '{{loss_date}}'"
- name: flag
type: call
call: "servicenow.create-record"
with:
table: "u_fraud_alert"
type: "duplicate"
consumes:
- type: http
namespace: snowflake
baseUri: "https://axa.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: servicenow
baseUri: "https://axa.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/u_fraud_alert"
operations:
- name: create-record
method: POST
When an employee termination is processed in Workday, disables their Microsoft Graph account, revokes Okta sessions, and creates a ServiceNow offboarding ticket to track asset return.
naftiko: "0.5"
info:
label: "Employee Offboarding Workflow"
description: "When an employee termination is processed in Workday, disables their Microsoft Graph account, revokes Okta sessions, and creates a ServiceNow offboarding ticket to track asset return."
tags:
- hr
- offboarding
- workday
- okta
- servicenow
- microsoft-graph
capability:
exposes:
- type: mcp
namespace: hr-offboarding
port: 8080
tools:
- name: trigger-employee-offboarding
description: "Given a Workday employee ID and termination date, disable the Microsoft Graph account, revoke all Okta sessions, and open a ServiceNow offboarding checklist ticket."
inputParameters:
- name: workday_employee_id
in: body
type: string
description: "The Workday worker ID for the departing employee."
- name: termination_date
in: body
type: string
description: "The employee's last day in ISO 8601 format (YYYY-MM-DD)."
steps:
- name: get-worker
type: call
call: "workday.get-worker"
with:
worker_id: "{{workday_employee_id}}"
- name: disable-ad-account
type: call
call: "msgraph.disable-user"
with:
user_id: "{{get-worker.work_email}}"
- name: revoke-okta-sessions
type: call
call: "okta.revoke-user-sessions"
with:
user_login: "{{get-worker.work_email}}"
- name: create-offboarding-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "Offboarding: {{get-worker.full_name}} — last day {{termination_date}}"
category: "hr_offboarding"
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: "/axa/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: msgraph
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: users
path: "/users/{{user_id}}"
inputParameters:
- name: user_id
in: path
operations:
- name: disable-user
method: PATCH
- type: http
namespace: okta
baseUri: "https://axa.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: user-sessions
path: "/users/{{user_login}}/sessions"
inputParameters:
- name: user_login
in: path
operations:
- name: revoke-user-sessions
method: DELETE
- type: http
namespace: servicenow
baseUri: "https://axa.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
Generates Jira backlog digest and posts to Microsoft Teams.
naftiko: "0.5"
info:
label: "Engineering Backlog Digest Workflow"
description: "Generates Jira backlog digest and posts to Microsoft Teams."
tags:
- engineering
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: backlog-ops
port: 8080
tools:
- name: gen-digest
description: "Generate digest."
inputParameters:
- name: board_id
in: body
type: string
description: "Board ID."
steps:
- name: sprint
type: call
call: "jira.get-sprint"
with:
board_id: "{{board_id}}"
- name: blockers
type: call
call: "jira.search"
with:
jql: "status=Blocked"
- name: post
type: call
call: "msteams.post"
with:
channel_id: "$secrets.eng_channel"
text: "Sprint: {{sprint.name}}. Blockers: {{blockers.total}}"
consumes:
- type: http
namespace: jira
baseUri: "https://axa.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: sprints
path: "/board/{{board_id}}/sprint"
inputParameters:
- name: board_id
in: path
operations:
- name: get-sprint
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
Creates SIU case in ServiceNow and alerts team via PagerDuty when fraud scoring flags a claim.
naftiko: "0.5"
info:
label: "Fraud Detection Alert to SIU"
description: "Creates SIU case in ServiceNow and alerts team via PagerDuty when fraud scoring flags a claim."
tags:
- insurance
- fraud
- servicenow
- pagerduty
capability:
exposes:
- type: mcp
namespace: fraud-ops
port: 8080
tools:
- name: escalate-fraud
description: "Escalate fraud alert. Creates case and PagerDuty alert."
inputParameters:
- name: claim_id
in: body
type: string
description: "Flagged claim."
- name: fraud_score
in: body
type: number
description: "Score 0-100."
- name: indicators
in: body
type: string
description: "Indicators."
steps:
- name: create-case
type: call
call: "servicenow.create-case"
with:
short_description: "Fraud: {{claim_id}} ({{fraud_score}})"
category: "fraud"
- name: alert
type: call
call: "pagerduty.create-incident"
with:
service_id: "$secrets.siu_service"
title: "Fraud: {{claim_id}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://axa.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cases
path: "/table/sn_si_incident"
operations:
- name: create-case
method: POST
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
Runs graph analytics in Snowflake to detect fraud rings, creates cases, and alerts SIU.
naftiko: "0.5"
info:
label: "Fraud Ring Detection Investigation"
description: "Runs graph analytics in Snowflake to detect fraud rings, creates cases, and alerts SIU."
tags:
- insurance
- fraud
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: fraud-ring
port: 8080
tools:
- name: detect-rings
description: "Detect fraud rings."
inputParameters:
- name: start
in: body
type: string
description: "Start date."
- name: end
in: body
type: string
description: "End date."
steps:
- name: detect
type: call
call: "snowflake.query"
with:
query: "CALL DETECT_FRAUD_RINGS('{{start}}','{{end}}')"
- name: case
type: call
call: "servicenow.create-case"
with:
short_description: "Fraud rings: {{start}} to {{end}}"
- name: alert
type: call
call: "msteams.post"
with:
channel_id: "$secrets.siu_channel"
text: "Rings detected. Case: {{case.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://axa.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: servicenow
baseUri: "https://axa.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cases
path: "/table/sn_si_incident"
operations:
- name: create-case
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
When a GitHub Actions deployment workflow fails on main branch, creates a Jira incident ticket and posts a failure alert with context to the DevOps Microsoft Teams channel.
naftiko: "0.5"
info:
label: "GitHub Deployment Pipeline Failure Handler"
description: "When a GitHub Actions deployment workflow fails on main branch, creates a Jira incident ticket and posts a failure alert with context to the DevOps Microsoft Teams channel."
tags:
- devops
- ci-cd
- github
- jira
- microsoft-teams
- deployment
capability:
exposes:
- type: mcp
namespace: devops-cicd
port: 8080
tools:
- name: handle-deployment-failure
description: "Given a GitHub Actions workflow run ID and repository, retrieve failure details, create a Jira incident, and alert the DevOps Teams channel with full context."
inputParameters:
- name: repo_full_name
in: body
type: string
description: "The GitHub repository full name, e.g. 'axa-group/policy-service'."
- name: run_id
in: body
type: integer
description: "The GitHub Actions workflow run ID that failed."
- name: branch
in: body
type: string
description: "The branch the deployment was targeting, typically 'main'."
steps:
- name: get-run-details
type: call
call: "github.get-workflow-run"
with:
repo: "{{repo_full_name}}"
run_id: "{{run_id}}"
- name: create-jira-incident
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Incident"
summary: "Deployment failure: {{repo_full_name}} on {{branch}}"
description: "Run ID: {{run_id}} | Status: {{get-run-details.conclusion}} | URL: {{get-run-details.html_url}}"
- name: alert-devops-channel
type: call
call: "msteams.post-channel-message"
with:
channel: "devops-alerts"
message: "Deployment FAILED: {{repo_full_name}} | Branch: {{branch}} | Jira: {{create-jira-incident.key}} | Run: {{get-run-details.html_url}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: workflow-runs
path: "/repos/{{repo}}/actions/runs/{{run_id}}"
inputParameters:
- name: repo
in: path
- name: run_id
in: path
operations:
- name: get-workflow-run
method: GET
- type: http
namespace: jira
baseUri: "https://axa.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
On a GitHub pull request opened against a protected branch, triggers a security scan via Datadog SAST, reports findings back as a PR comment, and opens a Jira ticket for any critical issues.
naftiko: "0.5"
info:
label: "GitHub Pull Request Security Scan Gating"
description: "On a GitHub pull request opened against a protected branch, triggers a security scan via Datadog SAST, reports findings back as a PR comment, and opens a Jira ticket for any critical issues."
tags:
- devops
- security
- github
- datadog
- jira
- ci-cd
- code-quality
capability:
exposes:
- type: mcp
namespace: pr-security
port: 8080
tools:
- name: handle-pr-security-gate
description: "Given a GitHub pull request number and repository, run a security analysis, post findings as a PR review comment on GitHub, and open a Jira bug for any critical vulnerabilities found."
inputParameters:
- name: repo_full_name
in: body
type: string
description: "The GitHub repository full name, e.g. 'axa-group/claims-api'."
- name: pr_number
in: body
type: integer
description: "The pull request number to analyse."
- name: commit_sha
in: body
type: string
description: "The head commit SHA for the pull request."
steps:
- name: get-pr-details
type: call
call: "github.get-pull-request"
with:
repo: "{{repo_full_name}}"
pull_number: "{{pr_number}}"
- name: post-pr-comment
type: call
call: "github.create-pr-comment"
with:
repo: "{{repo_full_name}}"
pull_number: "{{pr_number}}"
body: "Security scan initiated for commit {{commit_sha}}."
- name: create-jira-issue
type: call
call: "jira.create-issue"
with:
project_key: "SEC"
issuetype: "Bug"
summary: "Security finding: {{repo_full_name}} PR #{{pr_number}}"
description: "Commit: {{commit_sha}} | PR: {{get-pr-details.html_url}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: pull-requests
path: "/repos/{{repo}}/pulls/{{pull_number}}"
inputParameters:
- name: repo
in: path
- name: pull_number
in: path
operations:
- name: get-pull-request
method: GET
- name: pr-comments
path: "/repos/{{repo}}/issues/{{pull_number}}/comments"
inputParameters:
- name: repo
in: path
- name: pull_number
in: path
operations:
- name: create-pr-comment
method: POST
- type: http
namespace: jira
baseUri: "https://axa.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Creates Jira ticket and alerts engineering via Teams for critical vulnerabilities.
naftiko: "0.5"
info:
label: "GitHub Security Advisory Workflow"
description: "Creates Jira ticket and alerts engineering via Teams for critical vulnerabilities."
tags:
- security
- github
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: sec-ops
port: 8080
tools:
- name: handle-advisory
description: "Handle security advisory."
inputParameters:
- name: repo
in: body
type: string
description: "Repository."
- name: advisory
in: body
type: string
description: "Advisory ID."
- name: severity
in: body
type: string
description: "Severity."
steps:
- name: get
type: call
call: "github.get-advisory"
with:
repo: "{{repo}}"
id: "{{advisory}}"
- name: ticket
type: call
call: "jira.create-issue"
with:
project_key: "SEC"
issuetype: "Bug"
summary: "{{severity}} in {{repo}}"
- name: notify
type: call
call: "msteams.post"
with:
channel_id: "$secrets.sec_channel"
text: "{{severity}} in {{repo}}. Jira: {{ticket.key}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: advisories
path: "/repos/{{repo}}/dependabot/alerts/{{advisory}}"
inputParameters:
- name: repo
in: path
- name: advisory
in: path
operations:
- name: get-advisory
method: GET
- type: http
namespace: jira
baseUri: "https://axa.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
Verifies glass coverage, schedules vendor repair, and confirms to policyholder.
naftiko: "0.5"
info:
label: "Glass Repair Fast Track Workflow"
description: "Verifies glass coverage, schedules vendor repair, and confirms to policyholder."
tags:
- insurance
- claims
- auto
capability:
exposes:
- type: mcp
namespace: glass-ops
port: 8080
tools:
- name: fast-track
description: "Fast-track glass claim."
inputParameters:
- name: policy
in: body
type: string
description: "Policy."
- name: damage
in: body
type: string
description: "Damage type."
- name: zip
in: body
type: string
description: "ZIP."
steps:
- name: verify
type: call
call: "claims-api.verify"
with:
policy: "{{policy}}"
- name: schedule
type: call
call: "glass-vendor.schedule"
with:
policy: "{{policy}}"
damage: "{{damage}}"
- name: confirm
type: call
call: "notification-api.send"
with:
policy: "{{policy}}"
template: "glass-scheduled"
consumes:
- type: http
namespace: claims-api
baseUri: "https://api.axa.com/claims/v2"
authentication:
type: bearer
token: "$secrets.claims_api_token"
resources:
- name: glass
path: "/policies/{{policy}}/glass"
inputParameters:
- name: policy
in: path
operations:
- name: verify
method: GET
- type: http
namespace: glass-vendor
baseUri: "https://api.axa.com/vendors/glass/v1"
authentication:
type: bearer
token: "$secrets.glass_token"
resources:
- name: repairs
path: "/schedule"
operations:
- name: schedule
method: POST
- type: http
namespace: notification-api
baseUri: "https://api.axa.com/notifications/v1"
authentication:
type: bearer
token: "$secrets.notification_token"
resources:
- name: notifications
path: "/send"
operations:
- name: send
method: POST
Synchronizes HubSpot contact lifecycle stages with Salesforce opportunity stages for AXA's commercial insurance pipeline, ensuring CRM data consistency.
naftiko: "0.5"
info:
label: "HubSpot Contact Lifecycle Stage Sync"
description: "Synchronizes HubSpot contact lifecycle stages with Salesforce opportunity stages for AXA's commercial insurance pipeline, ensuring CRM data consistency."
tags:
- crm
- salesforce
- hubspot
- data-sync
- sales
capability:
exposes:
- type: mcp
namespace: crm-sync
port: 8080
tools:
- name: sync-contact-lifecycle-stage
description: "Given a HubSpot contact email and new lifecycle stage, update the contact in HubSpot and sync the corresponding Salesforce contact record with the same stage."
inputParameters:
- name: contact_email
in: body
type: string
description: "The email address of the contact to update."
- name: lifecycle_stage
in: body
type: string
description: "The new lifecycle stage: 'subscriber', 'lead', 'marketingqualifiedlead', 'salesqualifiedlead', 'opportunity', 'customer'."
steps:
- name: update-hubspot-contact
type: call
call: "hubspot.update-contact"
with:
email: "{{contact_email}}"
lifecyclestage: "{{lifecycle_stage}}"
- name: update-salesforce-contact
type: call
call: "salesforce.update-contact"
with:
email: "{{contact_email}}"
lifecycle_stage: "{{lifecycle_stage}}"
consumes:
- type: http
namespace: hubspot
baseUri: "https://api.hubapi.com/crm/v3"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: contacts
path: "/objects/contacts"
operations:
- name: update-contact
method: PATCH
- type: http
namespace: salesforce
baseUri: "https://axa.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: contacts
path: "/sobjects/Contact"
operations:
- name: update-contact
method: PATCH
Finds physician, books IME, and creates tracking in ServiceNow.
naftiko: "0.5"
info:
label: "Independent Medical Exam Scheduling Workflow"
description: "Finds physician, books IME, and creates tracking in ServiceNow."
tags:
- insurance
- claims
- servicenow
capability:
exposes:
- type: mcp
namespace: ime-ops
port: 8080
tools:
- name: schedule-ime
description: "Schedule IME."
inputParameters:
- name: claim_id
in: body
type: string
description: "Claim."
- name: specialty
in: body
type: string
description: "Specialty."
- name: zip
in: body
type: string
description: "ZIP."
steps:
- name: find
type: call
call: "medical-api.find"
with:
specialty: "{{specialty}}"
zip: "{{zip}}"
- name: book
type: call
call: "scheduling-api.book"
with:
provider: "{{find.id}}"
claim: "{{claim_id}}"
- name: track
type: call
call: "servicenow.create-record"
with:
table: "u_ime"
claim_id: "{{claim_id}}"
consumes:
- type: http
namespace: medical-api
baseUri: "https://api.axa.com/medical-network/v1"
authentication:
type: bearer
token: "$secrets.medical_token"
resources:
- name: providers
path: "/ime-providers/search"
operations:
- name: find
method: GET
- type: http
namespace: scheduling-api
baseUri: "https://api.axa.com/scheduling/v1"
authentication:
type: bearer
token: "$secrets.scheduling_token"
resources:
- name: appointments
path: "/appointments"
operations:
- name: book
method: POST
- type: http
namespace: servicenow
baseUri: "https://axa.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/u_ime"
operations:
- name: create-record
method: POST
When a new insurance claim is submitted via the customer portal, creates a Salesforce case, categorizes it using an AI triage call to OpenAI, and assigns it to the correct claims team in ServiceNow.
naftiko: "0.5"
info:
label: "Insurance Claim Intake and Triage"
description: "When a new insurance claim is submitted via the customer portal, creates a Salesforce case, categorizes it using an AI triage call to OpenAI, and assigns it to the correct claims team in ServiceNow."
tags:
- claims
- insurance
- salesforce
- servicenow
- openai
- ai
- customer-service
capability:
exposes:
- type: mcp
namespace: claims-intake
port: 8080
tools:
- name: handle-claim-intake
description: "Given a new claim submission with policy number, claimant name, and incident description, create a Salesforce case, triage the claim type via OpenAI, and route to the correct ServiceNow assignment group."
inputParameters:
- name: policy_number
in: body
type: string
description: "The AXA policy number associated with the claim."
- name: claimant_name
in: body
type: string
description: "Full name of the claimant submitting the claim."
- name: incident_description
in: body
type: string
description: "Free-text description of the incident triggering the claim."
- name: claim_type
in: body
type: string
description: "Preliminary claim type: 'auto', 'property', 'health', or 'liability'."
steps:
- name: create-sf-case
type: call
call: "salesforce.create-case"
with:
subject: "Claim: {{policy_number}} — {{claimant_name}}"
description: "{{incident_description}}"
type: "{{claim_type}}"
origin: "Portal"
- name: triage-claim
type: call
call: "openai.create-chat-completion"
with:
model: "gpt-4o"
system_prompt: "You are an insurance claims triage assistant. Classify urgency and recommended team."
user_message: "{{incident_description}}"
- name: assign-servicenow-task
type: call
call: "servicenow.create-task"
with:
short_description: "Claims triage: {{policy_number}}"
assignment_group: "{{triage-claim.recommended_team}}"
priority: "{{triage-claim.urgency}}"
correlation_id: "{{create-sf-case.id}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://axa.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: openai
baseUri: "https://api.openai.com/v1"
authentication:
type: bearer
token: "$secrets.openai_api_key"
resources:
- name: chat-completions
path: "/chat/completions"
operations:
- name: create-chat-completion
method: POST
- type: http
namespace: servicenow
baseUri: "https://axa.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 a critical Datadog alert fires, creates a ServiceNow incident, pages the on-call engineer via PagerDuty, and posts context to the Microsoft Teams ops channel.
naftiko: "0.5"
info:
label: "IT Incident Response and Escalation"
description: "When a critical Datadog alert fires, creates a ServiceNow incident, pages the on-call engineer via PagerDuty, and posts context to the Microsoft Teams ops channel."
tags:
- itsm
- incident-response
- datadog
- servicenow
- pagerduty
- microsoft-teams
- operations
capability:
exposes:
- type: mcp
namespace: incident-ops
port: 8080
tools:
- name: handle-critical-alert
description: "Given a Datadog alert payload with monitor ID, severity, and affected service, create a ServiceNow incident, trigger a PagerDuty page, and post an alert to the Teams ops channel."
inputParameters:
- name: monitor_id
in: body
type: string
description: "The Datadog monitor ID that triggered the alert."
- name: severity
in: body
type: string
description: "Alert severity: 'critical', 'warning', or 'info'."
- name: affected_service
in: body
type: string
description: "Name of the affected service or application."
- name: alert_message
in: body
type: string
description: "The Datadog alert message or condition description."
steps:
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "{{severity}} alert on {{affected_service}} — {{alert_message}}"
urgency: "1"
impact: "1"
category: "infrastructure"
- name: page-oncall
type: call
call: "pagerduty.create-incident"
with:
title: "{{severity}}: {{affected_service}} — {{alert_message}}"
service_id: "$secrets.pagerduty_service_id"
severity: "{{severity}}"
body: "Monitor: {{monitor_id}} | SNOW: {{create-incident.number}}"
- name: post-ops-alert
type: call
call: "msteams.post-channel-message"
with:
channel: "ops-alerts"
message: "INCIDENT: {{affected_service}} | Severity: {{severity}} | SNOW: {{create-incident.number}} | PD: {{page-oncall.id}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://axa.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.pagerduty_api_key"
placement: header
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves completed sprint data from Jira, calculates velocity metrics, and publishes a sprint summary report to the Engineering Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Jira Sprint Velocity Report"
description: "Retrieves completed sprint data from Jira, calculates velocity metrics, and publishes a sprint summary report to the Engineering Microsoft Teams channel."
tags:
- devops
- jira
- microsoft-teams
- agile
- reporting
- engineering
capability:
exposes:
- type: mcp
namespace: agile-reporting
port: 8080
tools:
- name: publish-sprint-velocity-report
description: "Given a Jira board ID and sprint ID, retrieve sprint metrics, calculate velocity, and post a formatted summary to the Engineering Teams channel."
inputParameters:
- name: board_id
in: body
type: integer
description: "The Jira board ID to pull sprint data from."
- name: sprint_id
in: body
type: integer
description: "The completed Jira sprint ID to report on."
steps:
- name: get-sprint
type: call
call: "jira.get-sprint"
with:
board_id: "{{board_id}}"
sprint_id: "{{sprint_id}}"
- name: get-sprint-issues
type: call
call: "jira.list-sprint-issues"
with:
sprint_id: "{{sprint_id}}"
- name: post-velocity-report
type: call
call: "msteams.post-channel-message"
with:
channel: "engineering-metrics"
message: "Sprint {{get-sprint.name}} complete: {{get-sprint-issues.completed_points}} story points | Velocity: {{get-sprint-issues.velocity}} | Issues closed: {{get-sprint-issues.count}}"
consumes:
- type: http
namespace: jira
baseUri: "https://axa.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: sprints
path: "/board/{{board_id}}/sprint/{{sprint_id}}"
inputParameters:
- name: board_id
in: path
- name: sprint_id
in: path
operations:
- name: get-sprint
method: GET
- name: sprint-issues
path: "/sprint/{{sprint_id}}/issue"
inputParameters:
- name: sprint_id
in: path
operations:
- name: list-sprint-issues
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves Jira issue status including assignee and priority.
naftiko: "0.5"
info:
label: "Jira Ticket Status Lookup"
description: "Retrieves Jira issue status including assignee and priority."
tags:
- engineering
- jira
capability:
exposes:
- type: mcp
namespace: jira-ops
port: 8080
tools:
- name: get-ticket
description: "Look up Jira ticket."
inputParameters:
- name: key
in: body
type: string
description: "Issue key."
call: "jira.get-issue"
with:
key: "{{key}}"
outputParameters:
- name: status
type: string
mapping: "$.fields.status.name"
- name: assignee
type: string
mapping: "$.fields.assignee.displayName"
- name: priority
type: string
mapping: "$.fields.priority.name"
consumes:
- type: http
namespace: jira
baseUri: "https://axa.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue/{{key}}"
inputParameters:
- name: key
in: path
operations:
- name: get-issue
method: GET
Pulls AXA brand campaign performance metrics from LinkedIn Marketing, combines with HubSpot lead attribution data, and posts a weekly report to the Brand Marketing Teams channel.
naftiko: "0.5"
info:
label: "LinkedIn Brand Campaign Performance Report"
description: "Pulls AXA brand campaign performance metrics from LinkedIn Marketing, combines with HubSpot lead attribution data, and posts a weekly report to the Brand Marketing Teams channel."
tags:
- marketing
- social
- linkedin
- hubspot
- microsoft-teams
- brand
- reporting
capability:
exposes:
- type: mcp
namespace: brand-marketing
port: 8080
tools:
- name: publish-linkedin-brand-report
description: "Given a LinkedIn organization URN and date range, fetch campaign analytics and merge with HubSpot lead data attributed to LinkedIn, then post a weekly brand performance report to Teams."
inputParameters:
- name: org_urn
in: body
type: string
description: "The LinkedIn organization URN for AXA, e.g. 'urn:li:organization:1234'."
- name: start_date
in: body
type: string
description: "Report start date in YYYY-MM-DD format."
- name: end_date
in: body
type: string
description: "Report end date in YYYY-MM-DD format."
steps:
- name: get-linkedin-metrics
type: call
call: "linkedin.get-organization-follower-statistics"
with:
organizationalEntity: "{{org_urn}}"
- name: get-hubspot-attribution
type: call
call: "hubspot.list-leads"
with:
source: "LinkedIn"
start: "{{start_date}}"
end: "{{end_date}}"
- name: post-report
type: call
call: "msteams.post-channel-message"
with:
channel: "brand-marketing"
message: "LinkedIn Brand Report ({{start_date}} to {{end_date}}): Followers {{get-linkedin-metrics.followerCount}}, New HubSpot leads from LinkedIn: {{get-hubspot-attribution.count}}"
consumes:
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: organization-follower-statistics
path: "/organizationalEntityFollowerStatistics"
operations:
- name: get-organization-follower-statistics
method: GET
- type: http
namespace: hubspot
baseUri: "https://api.hubapi.com/crm/v3"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: contacts
path: "/objects/contacts/search"
operations:
- name: list-leads
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves campaign performance metrics from HubSpot Marketing, enriches with LinkedIn Ads data, and publishes a weekly performance digest to the Marketing Teams channel.
naftiko: "0.5"
info:
label: "Marketing Campaign Performance Digest"
description: "Retrieves campaign performance metrics from HubSpot Marketing, enriches with LinkedIn Ads data, and publishes a weekly performance digest to the Marketing Teams channel."
tags:
- marketing
- hubspot
- linkedin
- microsoft-teams
- reporting
- campaign
capability:
exposes:
- type: mcp
namespace: marketing-reporting
port: 8080
tools:
- name: digest-campaign-performance
description: "Given a campaign ID and date range, fetch HubSpot campaign metrics, pull LinkedIn Ads impressions for the same period, and post a consolidated weekly digest to the Marketing Teams channel."
inputParameters:
- name: campaign_id
in: body
type: string
description: "The HubSpot campaign ID to report on."
- name: start_date
in: body
type: string
description: "Report start date in ISO 8601 format (YYYY-MM-DD)."
- name: end_date
in: body
type: string
description: "Report end date in ISO 8601 format (YYYY-MM-DD)."
steps:
- name: get-hubspot-metrics
type: call
call: "hubspot.get-campaign-stats"
with:
campaign_id: "{{campaign_id}}"
start: "{{start_date}}"
end: "{{end_date}}"
- name: get-linkedin-ads
type: call
call: "linkedin.get-ad-analytics"
with:
dateRange_start: "{{start_date}}"
dateRange_end: "{{end_date}}"
- name: post-digest
type: call
call: "msteams.post-channel-message"
with:
channel: "marketing-performance"
message: "Campaign {{campaign_id}} ({{start_date}} to {{end_date}}): Opens {{get-hubspot-metrics.opens}}, Clicks {{get-hubspot-metrics.clicks}}, LinkedIn Impressions {{get-linkedin-ads.impressions}}"
consumes:
- type: http
namespace: hubspot
baseUri: "https://api.hubapi.com/marketing/v3"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: campaigns
path: "/campaigns/{{campaign_id}}/statistics"
inputParameters:
- name: campaign_id
in: path
operations:
- name: get-campaign-stats
method: GET
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: ad-analytics
path: "/adAnalytics"
operations:
- name: get-ad-analytics
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
When a new hire record is created in Workday, provisions an Active Directory account via Microsoft Graph, opens a ServiceNow IT onboarding ticket, and sends a Microsoft Teams welcome message to the new hire.
naftiko: "0.5"
info:
label: "New Employee Onboarding Orchestrator"
description: "When a new hire record is created in Workday, provisions an Active Directory account via Microsoft Graph, opens a ServiceNow IT onboarding ticket, and sends a Microsoft Teams welcome message to the new hire."
tags:
- hr
- onboarding
- workday
- servicenow
- microsoft-graph
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-onboarding
port: 8080
tools:
- name: trigger-employee-onboarding
description: "Given a Workday employee ID and start date, orchestrate the full onboarding sequence: provision Active Directory account via Microsoft Graph, create ServiceNow IT ticket, and send Teams welcome message."
inputParameters:
- name: workday_employee_id
in: body
type: string
description: "The Workday worker ID for the new hire. Format: WID-XXXXXXXX."
- name: start_date
in: body
type: string
description: "The employee's start date in ISO 8601 format (YYYY-MM-DD)."
- name: department
in: body
type: string
description: "The department the new hire is joining, e.g. 'Claims Operations'."
steps:
- name: get-worker
type: call
call: "workday.get-worker"
with:
worker_id: "{{workday_employee_id}}"
- name: provision-ad-account
type: call
call: "msgraph.create-user"
with:
displayName: "{{get-worker.full_name}}"
userPrincipalName: "{{get-worker.work_email}}"
department: "{{department}}"
- name: open-it-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "IT Onboarding: {{get-worker.full_name}} starting {{start_date}}"
category: "hr_onboarding"
assigned_to: "IT_Onboarding_Group"
- name: send-welcome
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{get-worker.work_email}}"
message: "Welcome to AXA, {{get-worker.first_name}}! Your IT setup is in progress. Ticket: {{open-it-ticket.number}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/axa/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: msgraph
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: users
path: "/users"
operations:
- name: create-user
method: POST
- type: http
namespace: servicenow
baseUri: "https://axa.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chats
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Creates policy in Salesforce, generates documents, and sets up billing after underwriting approval.
naftiko: "0.5"
info:
label: "New Policy Issuance Workflow"
description: "Creates policy in Salesforce, generates documents, and sets up billing after underwriting approval."
tags:
- insurance
- policy
- underwriting
- salesforce
capability:
exposes:
- type: mcp
namespace: issuance-ops
port: 8080
tools:
- name: issue-policy
description: "Issue new policy."
inputParameters:
- name: app_id
in: body
type: string
description: "Application ID."
- name: product
in: body
type: string
description: "Product type."
- name: premium
in: body
type: number
description: "Premium."
steps:
- name: create
type: call
call: "salesforce.create-policy"
with:
app_id: "{{app_id}}"
product: "{{product}}"
premium: "{{premium}}"
- name: docs
type: call
call: "document-api.generate"
with:
policy: "{{create.policy_number}}"
- name: billing
type: call
call: "billing-api.create-schedule"
with:
policy: "{{create.policy_number}}"
premium: "{{premium}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://axa.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: policies
path: "/sobjects/Policy__c"
operations:
- name: create-policy
method: POST
- type: http
namespace: document-api
baseUri: "https://api.axa.com/documents/v1"
authentication:
type: bearer
token: "$secrets.document_api_token"
resources:
- name: generation
path: "/generate"
operations:
- name: generate
method: POST
- type: http
namespace: billing-api
baseUri: "https://api.axa.com/billing/v1"
authentication:
type: bearer
token: "$secrets.billing_api_token"
resources:
- name: schedules
path: "/billing-schedules"
operations:
- name: create-schedule
method: POST
Compares Okta access against Workday roles and creates Jira tickets for discrepancies.
naftiko: "0.5"
info:
label: "Okta System Access Review Workflow"
description: "Compares Okta access against Workday roles and creates Jira tickets for discrepancies."
tags:
- insurance
- okta
- workday
- jira
- compliance
capability:
exposes:
- type: mcp
namespace: access-rev
port: 8080
tools:
- name: review-access
description: "Review system access."
inputParameters:
- name: app
in: body
type: string
description: "Application."
steps:
- name: okta
type: call
call: "okta.list-users"
with:
app: "{{app}}"
- name: roles
type: call
call: "workday.get-roster"
with:
dept: "all"
- name: ticket
type: call
call: "jira.create-issue"
with:
project_key: "SEC"
issuetype: "Task"
summary: "Access review: {{app}}"
consumes:
- type: http
namespace: okta
baseUri: "https://axa.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_api_token"
resources:
- name: app-users
path: "/apps/{{app}}/users"
inputParameters:
- name: app
in: path
operations:
- name: list-users
method: GET
- type: http
namespace: workday
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/axa"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: roster
path: "/staffing/departmentRoster"
operations:
- name: get-roster
method: GET
- type: http
namespace: jira
baseUri: "https://axa.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Retrieves all Okta application assignments for a user, produces an access summary, and posts it to the Security Teams channel for review. Used for quarterly access certification.
naftiko: "0.5"
info:
label: "Okta User Access Review"
description: "Retrieves all Okta application assignments for a user, produces an access summary, and posts it to the Security Teams channel for review. Used for quarterly access certification."
tags:
- identity
- security
- okta
- microsoft-teams
- access-review
- compliance
capability:
exposes:
- type: mcp
namespace: identity-security
port: 8080
tools:
- name: get-user-access-summary
description: "Given an Okta user login, retrieve all application assignments and group memberships, then post a formatted access summary to the Security Teams channel for quarterly certification."
inputParameters:
- name: user_login
in: body
type: string
description: "The Okta user login (email format) to review."
steps:
- name: get-user-apps
type: call
call: "okta.list-user-apps"
with:
user_login: "{{user_login}}"
- name: get-user-groups
type: call
call: "okta.list-user-groups"
with:
user_login: "{{user_login}}"
- name: post-access-summary
type: call
call: "msteams.post-channel-message"
with:
channel: "security-access-reviews"
message: "Access review for {{user_login}}: {{get-user-apps.count}} apps, {{get-user-groups.count}} groups. Apps: {{get-user-apps.names}}"
consumes:
- type: http
namespace: okta
baseUri: "https://axa.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: user-apps
path: "/users/{{user_login}}/appLinks"
inputParameters:
- name: user_login
in: path
operations:
- name: list-user-apps
method: GET
- name: user-groups
path: "/users/{{user_login}}/groups"
inputParameters:
- name: user_login
in: path
operations:
- name: list-user-groups
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves Okta group memberships for a user returning groups and access.
naftiko: "0.5"
info:
label: "Okta User Group Membership Lookup"
description: "Retrieves Okta group memberships for a user returning groups and access."
tags:
- security
- okta
- compliance
capability:
exposes:
- type: mcp
namespace: identity-ops
port: 8080
tools:
- name: get-groups
description: "Look up Okta groups. Returns memberships."
inputParameters:
- name: email
in: body
type: string
description: "User email."
call: "okta.get-groups"
with:
email: "{{email}}"
outputParameters:
- name: groups
type: array
mapping: "$.groups"
- name: count
type: integer
mapping: "$.totalGroups"
consumes:
- type: http
namespace: okta
baseUri: "https://axa.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_api_token"
resources:
- name: user-groups
path: "/users/{{email}}/groups"
inputParameters:
- name: email
in: path
operations:
- name: get-groups
method: GET
Retrieves current on-call engineer from PagerDuty returning primary and secondary contacts.
naftiko: "0.5"
info:
label: "PagerDuty On-Call Lookup"
description: "Retrieves current on-call engineer from PagerDuty returning primary and secondary contacts."
tags:
- engineering
- pagerduty
capability:
exposes:
- type: mcp
namespace: oncall-ops
port: 8080
tools:
- name: get-oncall
description: "Look up on-call schedule. Returns contacts."
inputParameters:
- name: schedule_id
in: body
type: string
description: "PagerDuty schedule ID."
call: "pagerduty.get-oncall"
with:
schedule_id: "{{schedule_id}}"
outputParameters:
- name: primary
type: string
mapping: "$.oncalls[0].user.name"
- name: email
type: string
mapping: "$.oncalls[0].user.email"
consumes:
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: oncalls
path: "/oncalls"
operations:
- name: get-oncall
method: GET
Retrieves the current on-call engineer for a given PagerDuty escalation policy and returns their name and contact details for use in incident routing.
naftiko: "0.5"
info:
label: "PagerDuty On-Call Schedule Lookup"
description: "Retrieves the current on-call engineer for a given PagerDuty escalation policy and returns their name and contact details for use in incident routing."
tags:
- itsm
- pagerduty
- on-call
- incident-response
- lookup
capability:
exposes:
- type: mcp
namespace: oncall-lookup
port: 8080
tools:
- name: get-current-oncall
description: "Given a PagerDuty escalation policy ID, return the name and email of the currently on-call engineer. Use when routing incidents to the correct responder."
inputParameters:
- name: escalation_policy_id
in: body
type: string
description: "The PagerDuty escalation policy ID to look up the on-call engineer for."
call: "pagerduty.get-oncall"
with:
escalation_policy_id: "{{escalation_policy_id}}"
outputParameters:
- name: oncall_name
type: string
mapping: "$.oncalls[0].user.summary"
- name: oncall_email
type: string
mapping: "$.oncalls[0].user.email"
- name: schedule_name
type: string
mapping: "$.oncalls[0].schedule.summary"
consumes:
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.pagerduty_api_key"
placement: header
resources:
- name: oncalls
path: "/oncalls"
operations:
- name: get-oncall
method: GET
Updates payment method in billing and sends confirmation.
naftiko: "0.5"
info:
label: "Payment Method Update Workflow"
description: "Updates payment method in billing and sends confirmation."
tags:
- insurance
- policy
- billing
capability:
exposes:
- type: mcp
namespace: pay-ops
port: 8080
tools:
- name: update-method
description: "Update payment method."
inputParameters:
- name: policy
in: body
type: string
description: "Policy."
- name: method
in: body
type: string
description: "Method."
steps:
- name: update
type: call
call: "billing-api.update"
with:
policy: "{{policy}}"
method: "{{method}}"
- name: confirm
type: call
call: "notification-api.send"
with:
policy: "{{policy}}"
template: "payment-updated"
consumes:
- type: http
namespace: billing-api
baseUri: "https://api.axa.com/billing/v1"
authentication:
type: bearer
token: "$secrets.billing_api_token"
resources:
- name: methods
path: "/policies/{{policy}}/payment-method"
inputParameters:
- name: policy
in: path
operations:
- name: update
method: PUT
- type: http
namespace: notification-api
baseUri: "https://api.axa.com/notifications/v1"
authentication:
type: bearer
token: "$secrets.notification_token"
resources:
- name: notifications
path: "/send"
operations:
- name: send
method: POST
Exports current headcount by department and cost center from ADP, uploads the snapshot to SharePoint, and posts a digest to the Finance Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Payroll Headcount Snapshot"
description: "Exports current headcount by department and cost center from ADP, uploads the snapshot to SharePoint, and posts a digest to the Finance Microsoft Teams channel."
tags:
- hr
- finance
- payroll
- headcount
- adp
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-finance
port: 8080
tools:
- name: get-payroll-headcount-snapshot
description: "Export current headcount and cost center data from ADP, upload the report to SharePoint, and post a summary to the Finance Teams channel. Use for monthly headcount reconciliation."
inputParameters:
- name: report_month
in: body
type: string
description: "The report month in YYYY-MM format, e.g. '2026-03'."
- name: cost_center_filter
in: body
type: string
description: "Optional cost center code to filter results. Leave blank for all."
steps:
- name: export-headcount
type: call
call: "adp.export-workers"
with:
asOfDate: "{{report_month}}"
costCenter: "{{cost_center_filter}}"
- name: upload-to-sharepoint
type: call
call: "sharepoint.upload-file"
with:
site_id: "finance-reports"
folder: "Payroll/Headcount"
filename: "headcount-{{report_month}}.csv"
content: "{{export-headcount.csv_data}}"
- name: post-digest
type: call
call: "msteams.post-channel-message"
with:
channel: "finance-reporting"
message: "Headcount snapshot for {{report_month}} uploaded to SharePoint. Total employees: {{export-headcount.total_count}}."
consumes:
- type: http
namespace: adp
baseUri: "https://api.adp.com"
authentication:
type: bearer
token: "$secrets.adp_token"
resources:
- name: workers-export
path: "/hr/v2/workers/export"
operations:
- name: export-workers
method: GET
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: drive-items
path: "/sites/{{site_id}}/drive/root:/{{folder}}/{{filename}}:/content"
inputParameters:
- name: site_id
in: path
- name: folder
in: path
- name: filename
in: path
operations:
- name: upload-file
method: PUT
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves current billing status including balance, next due date, and payment method.
naftiko: "0.5"
info:
label: "Policy Billing Status Lookup"
description: "Retrieves current billing status including balance, next due date, and payment method."
tags:
- insurance
- policy
- billing
capability:
exposes:
- type: mcp
namespace: billing-ops
port: 8080
tools:
- name: get-billing
description: "Look up billing status. Returns balance, due date, method."
inputParameters:
- name: policy_number
in: body
type: string
description: "AXA policy number."
call: "billing-api.get-status"
with:
policy_number: "{{policy_number}}"
outputParameters:
- name: balance
type: number
mapping: "$.outstandingBalance"
- name: next_due
type: string
mapping: "$.nextDueDate"
- name: method
type: string
mapping: "$.paymentMethod"
consumes:
- type: http
namespace: billing-api
baseUri: "https://api.axa.com/billing/v1"
authentication:
type: bearer
token: "$secrets.billing_api_token"
resources:
- name: status
path: "/policies/{{policy_number}}/billing-status"
inputParameters:
- name: policy_number
in: path
operations:
- name: get-status
method: GET
Calculates pro-rata refund, updates status in Salesforce, and logs cancellation in ServiceNow.
naftiko: "0.5"
info:
label: "Policy Cancellation Workflow"
description: "Calculates pro-rata refund, updates status in Salesforce, and logs cancellation in ServiceNow."
tags:
- insurance
- policy
- salesforce
- servicenow
capability:
exposes:
- type: mcp
namespace: cancel-ops
port: 8080
tools:
- name: process-cancel
description: "Process cancellation."
inputParameters:
- name: policy
in: body
type: string
description: "Policy number."
- name: reason
in: body
type: string
description: "Reason."
- name: date
in: body
type: string
description: "Effective date."
steps:
- name: refund
type: call
call: "billing-api.calc-refund"
with:
policy: "{{policy}}"
date: "{{date}}"
- name: update
type: call
call: "salesforce.cancel"
with:
policy: "{{policy}}"
reason: "{{reason}}"
- name: log
type: call
call: "servicenow.create-case"
with:
short_description: "Cancel: {{policy}}"
consumes:
- type: http
namespace: billing-api
baseUri: "https://api.axa.com/billing/v1"
authentication:
type: bearer
token: "$secrets.billing_api_token"
resources:
- name: refunds
path: "/refunds/calculate"
operations:
- name: calc-refund
method: POST
- type: http
namespace: salesforce
baseUri: "https://axa.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: policies
path: "/sobjects/Policy__c"
operations:
- name: cancel
method: PATCH
- type: http
namespace: servicenow
baseUri: "https://axa.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cases
path: "/table/sn_customerservice_case"
operations:
- name: create-case
method: POST
Retrieves policy coverage details from Salesforce including limits, deductibles, and endorsements.
naftiko: "0.5"
info:
label: "Policy Coverage Details Lookup"
description: "Retrieves policy coverage details from Salesforce including limits, deductibles, and endorsements."
tags:
- insurance
- policy
- salesforce
capability:
exposes:
- type: mcp
namespace: policy-ops
port: 8080
tools:
- name: get-coverage
description: "Look up coverage for a policy. Returns limits, deductibles, endorsements."
inputParameters:
- name: policy_number
in: body
type: string
description: "AXA policy number."
call: "salesforce.get-policy"
with:
policy_number: "{{policy_number}}"
outputParameters:
- name: limits
type: object
mapping: "$.coverageLimits"
- name: deductible
type: number
mapping: "$.deductible"
- name: endorsements
type: array
mapping: "$.endorsements"
consumes:
- type: http
namespace: salesforce
baseUri: "https://axa.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: policies
path: "/sobjects/Policy__c/{{policy_number}}"
inputParameters:
- name: policy_number
in: path
operations:
- name: get-policy
method: GET
Retrieves a policy document by number and type returning URL and metadata.
naftiko: "0.5"
info:
label: "Policy Document Retrieval"
description: "Retrieves a policy document by number and type returning URL and metadata."
tags:
- insurance
- policy
- document-management
capability:
exposes:
- type: mcp
namespace: doc-ops
port: 8080
tools:
- name: get-document
description: "Retrieve policy document. Returns URL and metadata."
inputParameters:
- name: policy_number
in: body
type: string
description: "AXA policy number."
- name: doc_type
in: body
type: string
description: "Type: declaration, endorsement, certificate."
call: "document-api.get-doc"
with:
policy_number: "{{policy_number}}"
doc_type: "{{doc_type}}"
outputParameters:
- name: url
type: string
mapping: "$.documentUrl"
- name: modified
type: string
mapping: "$.lastModified"
consumes:
- type: http
namespace: document-api
baseUri: "https://api.axa.com/documents/v1"
authentication:
type: bearer
token: "$secrets.document_api_token"
resources:
- name: documents
path: "/policies/{{policy_number}}/documents"
inputParameters:
- name: policy_number
in: path
operations:
- name: get-doc
method: GET
Validates endorsement, updates policy in Salesforce, and recalculates premium.
naftiko: "0.5"
info:
label: "Policy Endorsement Processing Workflow"
description: "Validates endorsement, updates policy in Salesforce, and recalculates premium."
tags:
- insurance
- policy
- salesforce
- underwriting
capability:
exposes:
- type: mcp
namespace: endorse-ops
port: 8080
tools:
- name: process-endorsement
description: "Process endorsement."
inputParameters:
- name: policy
in: body
type: string
description: "Policy."
- name: type
in: body
type: string
description: "Endorsement type."
- name: date
in: body
type: string
description: "Effective date."
steps:
- name: validate
type: call
call: "underwriting.validate"
with:
policy: "{{policy}}"
type: "{{type}}"
- name: update
type: call
call: "salesforce.update"
with:
policy: "{{policy}}"
type: "{{type}}"
- name: recalc
type: call
call: "rating.recalc"
with:
policy: "{{policy}}"
consumes:
- type: http
namespace: underwriting
baseUri: "https://api.axa.com/underwriting/v2"
authentication:
type: bearer
token: "$secrets.underwriting_api_token"
resources:
- name: endorsements
path: "/endorsements/validate"
operations:
- name: validate
method: POST
- type: http
namespace: salesforce
baseUri: "https://axa.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: policies
path: "/sobjects/Policy__c"
operations:
- name: update
method: PATCH
- type: http
namespace: rating
baseUri: "https://api.axa.com/rating/v2"
authentication:
type: bearer
token: "$secrets.rating_token"
resources:
- name: recalc
path: "/recalculate"
operations:
- name: recalc
method: POST
Identifies at-risk policies, triggers Marketo campaigns, and creates agent tasks in Jira.
naftiko: "0.5"
info:
label: "Policy Lapse Prevention Workflow"
description: "Identifies at-risk policies, triggers Marketo campaigns, and creates agent tasks in Jira."
tags:
- insurance
- policy
- salesforce
- marketo
- jira
capability:
exposes:
- type: mcp
namespace: lapse-ops
port: 8080
tools:
- name: prevent-lapse
description: "Prevent policy lapse."
inputParameters:
- name: days
in: body
type: integer
description: "Days until lapse."
steps:
- name: at-risk
type: call
call: "salesforce.query-lapsing"
with:
days: "{{days}}"
- name: campaign
type: call
call: "marketo.trigger"
with:
campaign_id: "$secrets.lapse_campaign"
- name: tasks
type: call
call: "jira.create-issue"
with:
project_key: "RETENTION"
issuetype: "Task"
summary: "Lapse prevention"
consumes:
- type: http
namespace: salesforce
baseUri: "https://axa.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: queries
path: "/query"
operations:
- name: query-lapsing
method: GET
- type: http
namespace: marketo
baseUri: "https://axa.mktorest.com/rest/v1"
authentication:
type: bearer
token: "$secrets.marketo_token"
resources:
- name: campaigns
path: "/campaigns/trigger.json"
operations:
- name: trigger
method: POST
- type: http
namespace: jira
baseUri: "https://axa.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Retrieves premium breakdown returning base rate, risk factors, and final premium.
naftiko: "0.5"
info:
label: "Policy Premium Breakdown Lookup"
description: "Retrieves premium breakdown returning base rate, risk factors, and final premium."
tags:
- insurance
- policy
- actuarial
capability:
exposes:
- type: mcp
namespace: premium-ops
port: 8080
tools:
- name: get-premium
description: "Look up premium breakdown. Returns base rate, factors, final premium."
inputParameters:
- name: policy_number
in: body
type: string
description: "AXA policy number."
call: "rating-engine.get-premium"
with:
policy_number: "{{policy_number}}"
outputParameters:
- name: base_rate
type: number
mapping: "$.baseRate"
- name: risk_factors
type: array
mapping: "$.riskFactors"
- name: final_premium
type: number
mapping: "$.finalAnnualPremium"
consumes:
- type: http
namespace: rating-engine
baseUri: "https://api.axa.com/rating/v2"
authentication:
type: bearer
token: "$secrets.rating_engine_token"
resources:
- name: premiums
path: "/policies/{{policy_number}}/premium"
inputParameters:
- name: policy_number
in: path
operations:
- name: get-premium
method: GET
Runs rating engine and creates quote record in Salesforce.
naftiko: "0.5"
info:
label: "Policy Quote Generation Workflow"
description: "Runs rating engine and creates quote record in Salesforce."
tags:
- insurance
- underwriting
- policy
- salesforce
capability:
exposes:
- type: mcp
namespace: quote-ops
port: 8080
tools:
- name: generate-quote
description: "Generate quote."
inputParameters:
- name: product
in: body
type: string
description: "Product."
- name: data
in: body
type: string
description: "Applicant data."
steps:
- name: rate
type: call
call: "rating.quote"
with:
product: "{{product}}"
data: "{{data}}"
- name: create
type: call
call: "salesforce.create-quote"
with:
product: "{{product}}"
premium: "{{rate.premium}}"
consumes:
- type: http
namespace: rating
baseUri: "https://api.axa.com/rating/v2"
authentication:
type: bearer
token: "$secrets.rating_token"
resources:
- name: quotes
path: "/quote"
operations:
- name: quote
method: POST
- type: http
namespace: salesforce
baseUri: "https://axa.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: quotes
path: "/sobjects/Quote__c"
operations:
- name: create-quote
method: POST
Verifies eligibility, calculates back premium, and reinstates in Salesforce.
naftiko: "0.5"
info:
label: "Policy Reinstatement Workflow"
description: "Verifies eligibility, calculates back premium, and reinstates in Salesforce."
tags:
- insurance
- policy
- salesforce
- billing
capability:
exposes:
- type: mcp
namespace: reinstate-ops
port: 8080
tools:
- name: reinstate
description: "Reinstate policy."
inputParameters:
- name: policy
in: body
type: string
description: "Lapsed policy."
steps:
- name: check
type: call
call: "underwriting.check"
with:
policy: "{{policy}}"
- name: calc
type: call
call: "billing-api.calc"
with:
policy: "{{policy}}"
- name: reinstate
type: call
call: "salesforce.reinstate"
with:
policy: "{{policy}}"
premium: "{{calc.amount}}"
consumes:
- type: http
namespace: underwriting
baseUri: "https://api.axa.com/underwriting/v2"
authentication:
type: bearer
token: "$secrets.underwriting_api_token"
resources:
- name: reinstatement
path: "/reinstatement/eligibility"
operations:
- name: check
method: POST
- type: http
namespace: billing-api
baseUri: "https://api.axa.com/billing/v1"
authentication:
type: bearer
token: "$secrets.billing_api_token"
resources:
- name: back-premium
path: "/back-premium/calculate"
operations:
- name: calc
method: POST
- type: http
namespace: salesforce
baseUri: "https://axa.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: policies
path: "/sobjects/Policy__c"
operations:
- name: reinstate
method: PATCH
Queries Salesforce for insurance policies expiring within 60 days, enriches each account in HubSpot with renewal opportunity data, and alerts account managers via Microsoft Teams.
naftiko: "0.5"
info:
label: "Policy Renewal Opportunity Sync"
description: "Queries Salesforce for insurance policies expiring within 60 days, enriches each account in HubSpot with renewal opportunity data, and alerts account managers via Microsoft Teams."
tags:
- sales
- crm
- renewal
- salesforce
- hubspot
- microsoft-teams
- insurance
capability:
exposes:
- type: mcp
namespace: policy-renewals
port: 8080
tools:
- name: sync-renewal-opportunities
description: "Given a look-ahead window in days, query Salesforce for expiring policies, update HubSpot renewal opportunity records, and alert account managers in Teams."
inputParameters:
- name: days_ahead
in: body
type: integer
description: "Number of days ahead to look for expiring policies. Typically 60."
- name: product_line
in: body
type: string
description: "Insurance product line filter, e.g. 'Life', 'Property', 'Health'."
steps:
- name: get-expiring-policies
type: call
call: "salesforce.query-expiring-policies"
with:
days_ahead: "{{days_ahead}}"
product_line: "{{product_line}}"
- name: update-hubspot-deals
type: call
call: "hubspot.upsert-deal"
with:
policy_ids: "{{get-expiring-policies.policy_ids}}"
stage: "Renewal Pending"
- name: notify-account-managers
type: call
call: "msteams.post-channel-message"
with:
channel: "policy-renewals"
message: "{{get-expiring-policies.count}} policies expiring in {{days_ahead}} days in {{product_line}}. HubSpot updated."
consumes:
- type: http
namespace: salesforce
baseUri: "https://axa.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: policy-query
path: "/query"
inputParameters:
- name: q
in: query
operations:
- name: query-expiring-policies
method: GET
- type: http
namespace: hubspot
baseUri: "https://api.hubapi.com/crm/v3"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: deals
path: "/objects/deals"
operations:
- name: upsert-deal
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Pulls claims history from Snowflake, recalculates risk, updates renewal offer in Salesforce, and notifies agent.
naftiko: "0.5"
info:
label: "Policy Renewal Underwriting Review"
description: "Pulls claims history from Snowflake, recalculates risk, updates renewal offer in Salesforce, and notifies agent."
tags:
- insurance
- underwriting
- policy
- snowflake
- salesforce
capability:
exposes:
- type: mcp
namespace: renewal-ops
port: 8080
tools:
- name: process-renewal
description: "Process renewal review. Pulls history, recalcs, updates."
inputParameters:
- name: policy_number
in: body
type: string
description: "Policy number."
steps:
- name: history
type: call
call: "snowflake.query"
with:
query: "SELECT * FROM CLAIMS WHERE policy='{{policy_number}}'"
- name: recalc
type: call
call: "underwriting.calculate"
with:
policy_number: "{{policy_number}}"
- name: update
type: call
call: "salesforce.update-renewal"
with:
policy_number: "{{policy_number}}"
premium: "{{recalc.premium}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://axa.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: salesforce
baseUri: "https://axa.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: renewals
path: "/sobjects/Renewal__c"
operations:
- name: update-renewal
method: PATCH
Retrieves complete claims history from Snowflake including dates, types, and outcomes.
naftiko: "0.5"
info:
label: "Policyholder Claims History Lookup"
description: "Retrieves complete claims history from Snowflake including dates, types, and outcomes."
tags:
- insurance
- claims
- snowflake
capability:
exposes:
- type: mcp
namespace: claims-hist
port: 8080
tools:
- name: get-history
description: "Look up claims history. Returns all claims."
inputParameters:
- name: customer_id
in: body
type: string
description: "AXA customer ID."
call: "snowflake.query-claims"
with:
customer_id: "{{customer_id}}"
outputParameters:
- name: total
type: integer
mapping: "$.totalClaims"
- name: claims
type: array
mapping: "$.claims"
- name: paid
type: number
mapping: "$.totalPaid"
consumes:
- type: http
namespace: snowflake
baseUri: "https://axa.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: queries
path: "/statements"
operations:
- name: query-claims
method: POST
Triggers a Power BI dataset refresh for the AXA executive dashboard and notifies the Finance team via Microsoft Teams when the refresh completes or fails.
naftiko: "0.5"
info:
label: "Power BI Report Refresh Trigger"
description: "Triggers a Power BI dataset refresh for the AXA executive dashboard and notifies the Finance team via Microsoft Teams when the refresh completes or fails."
tags:
- data
- analytics
- power-bi
- microsoft-teams
- reporting
- finance
capability:
exposes:
- type: mcp
namespace: bi-reporting
port: 8080
tools:
- name: trigger-powerbi-refresh
description: "Given a Power BI workspace ID and dataset ID, trigger a dataset refresh and post the refresh status to the Finance Teams channel when complete."
inputParameters:
- name: workspace_id
in: body
type: string
description: "The Power BI workspace (group) ID containing the dataset."
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID to refresh."
steps:
- name: trigger-refresh
type: call
call: "powerbi.trigger-refresh"
with:
workspace_id: "{{workspace_id}}"
dataset_id: "{{dataset_id}}"
- name: notify-finance
type: call
call: "msteams.post-channel-message"
with:
channel: "finance-reporting"
message: "Power BI dataset {{dataset_id}} refresh triggered. Status: {{trigger-refresh.status}}"
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: dataset-refreshes
path: "/groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: workspace_id
in: path
- name: dataset_id
in: path
operations:
- name: trigger-refresh
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Detects Confluence updates and broadcasts to staff via Microsoft Teams.
naftiko: "0.5"
info:
label: "Procedure Update Notifier Workflow"
description: "Detects Confluence updates and broadcasts to staff via Microsoft Teams."
tags:
- insurance
- confluence
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: proc-notify
port: 8080
tools:
- name: notify-update
description: "Notify procedure updates."
inputParameters:
- name: page_id
in: body
type: string
description: "Page ID."
steps:
- name: history
type: call
call: "confluence.get-history"
with:
page_id: "{{page_id}}"
- name: notify
type: call
call: "msteams.post"
with:
channel_id: "$secrets.all_staff"
text: "Updated: {{history.title}}"
consumes:
- type: http
namespace: confluence
baseUri: "https://axa.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: history
path: "/content/{{page_id}}/history"
inputParameters:
- name: page_id
in: path
operations:
- name: get-history
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
Looks up an SAP Ariba purchase order by number and returns header status, supplier name, and total value for use in finance reconciliation workflows.
naftiko: "0.5"
info:
label: "Procurement Purchase Order Lookup"
description: "Looks up an SAP Ariba purchase order by number and returns header status, supplier name, and total value for use in finance reconciliation workflows."
tags:
- procurement
- finance
- sap-ariba
- purchase-order
capability:
exposes:
- type: mcp
namespace: procurement
port: 8080
tools:
- name: get-purchase-order
description: "Given a purchase order number, retrieve PO header details from SAP Ariba including status, supplier, and total value. Use for procurement status checks and finance reconciliation."
inputParameters:
- name: po_number
in: body
type: string
description: "The SAP Ariba purchase order number to look up."
call: "sap-ariba.get-po"
with:
po_number: "{{po_number}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: supplier_name
type: string
mapping: "$.supplier.name"
- name: total_value
type: number
mapping: "$.totalCost.amount"
- name: currency
type: string
mapping: "$.totalCost.currencyCode"
consumes:
- type: http
namespace: sap-ariba
baseUri: "https://openapi.ariba.com/api/purchase-orders/v1"
authentication:
type: bearer
token: "$secrets.sap_ariba_token"
resources:
- name: purchase-orders
path: "/{{po_number}}"
inputParameters:
- name: po_number
in: path
operations:
- name: get-po
method: GET
Checks flood and wildfire risk for a property and logs in underwriting.
naftiko: "0.5"
info:
label: "Property Hazard Check Workflow"
description: "Checks flood and wildfire risk for a property and logs in underwriting."
tags:
- insurance
- underwriting
- homeowner
capability:
exposes:
- type: mcp
namespace: hazard-ops
port: 8080
tools:
- name: check-hazards
description: "Check property hazards."
inputParameters:
- name: app_id
in: body
type: string
description: "Application."
- name: address
in: body
type: string
description: "Address."
- name: zip
in: body
type: string
description: "ZIP."
steps:
- name: flood
type: call
call: "hazard-api.check-flood"
with:
address: "{{address}}"
zip: "{{zip}}"
- name: wildfire
type: call
call: "hazard-api.check-wildfire"
with:
zip: "{{zip}}"
- name: log
type: call
call: "underwriting.log"
with:
app_id: "{{app_id}}"
flood: "{{flood.zone}}"
consumes:
- type: http
namespace: hazard-api
baseUri: "https://api.axa.com/hazards/v1"
authentication:
type: bearer
token: "$secrets.hazard_token"
resources:
- name: flood
path: "/flood-zones"
operations:
- name: check-flood
method: GET
- type: http
namespace: underwriting
baseUri: "https://api.axa.com/underwriting/v2"
authentication:
type: bearer
token: "$secrets.underwriting_api_token"
resources:
- name: hazards
path: "/hazard-assessments"
operations:
- name: log
method: POST
Enriches Salesforce prospect with firmographic data from ZoomInfo.
naftiko: "0.5"
info:
label: "Prospect Enrichment Workflow"
description: "Enriches Salesforce prospect with firmographic data from ZoomInfo."
tags:
- insurance
- sales
- zoominfo
- salesforce
capability:
exposes:
- type: mcp
namespace: enrichment
port: 8080
tools:
- name: enrich
description: "Enrich prospect."
inputParameters:
- name: lead_id
in: body
type: string
description: "Lead ID."
- name: company
in: body
type: string
description: "Company."
steps:
- name: search
type: call
call: "zoominfo.search"
with:
company: "{{company}}"
- name: update
type: call
call: "salesforce.update-lead"
with:
lead_id: "{{lead_id}}"
industry: "{{search.industry}}"
consumes:
- type: http
namespace: zoominfo
baseUri: "https://api.zoominfo.com"
authentication:
type: bearer
token: "$secrets.zoominfo_token"
resources:
- name: companies
path: "/search/company"
operations:
- name: search
method: POST
- type: http
namespace: salesforce
baseUri: "https://axa.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: leads
path: "/sobjects/Lead/{{lead_id}}"
inputParameters:
- name: lead_id
in: path
operations:
- name: update-lead
method: PATCH
When a compliance review is due, retrieves policy data from Salesforce, generates a summary document using OpenAI, and uploads it to SharePoint for regulatory filing.
naftiko: "0.5"
info:
label: "Regulatory Compliance Document Generation"
description: "When a compliance review is due, retrieves policy data from Salesforce, generates a summary document using OpenAI, and uploads it to SharePoint for regulatory filing."
tags:
- compliance
- regulatory
- salesforce
- openai
- sharepoint
- insurance
- ai
capability:
exposes:
- type: mcp
namespace: compliance-docs
port: 8080
tools:
- name: generate-compliance-report
description: "Given a policy ID and review period, retrieve policy details from Salesforce, generate a regulatory summary via OpenAI, and upload the document to SharePoint."
inputParameters:
- name: policy_id
in: body
type: string
description: "The Salesforce policy record ID for the compliance review."
- name: review_period
in: body
type: string
description: "The review period in YYYY-QX format, e.g. '2026-Q1'."
- name: regulation_type
in: body
type: string
description: "The applicable regulation framework, e.g. 'Solvency II', 'IFRS 17'."
steps:
- name: get-policy
type: call
call: "salesforce.get-policy"
with:
policy_id: "{{policy_id}}"
- name: generate-summary
type: call
call: "openai.create-chat-completion"
with:
model: "gpt-4o"
system_prompt: "You are a regulatory compliance specialist for insurance. Generate a concise compliance summary for the given regulation."
user_message: "Policy: {{get-policy.name}} | Period: {{review_period}} | Regulation: {{regulation_type}} | Details: {{get-policy.details}}"
- name: upload-report
type: call
call: "sharepoint.upload-file"
with:
site_id: "compliance-portal"
folder: "Regulatory/{{regulation_type}}"
filename: "{{policy_id}}-{{review_period}}-compliance.pdf"
content: "{{generate-summary.content}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://axa.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: policies
path: "/sobjects/Insurance_Policy__c/{{policy_id}}"
inputParameters:
- name: policy_id
in: path
operations:
- name: get-policy
method: GET
- type: http
namespace: openai
baseUri: "https://api.openai.com/v1"
authentication:
type: bearer
token: "$secrets.openai_api_key"
resources:
- name: chat-completions
path: "/chat/completions"
operations:
- name: create-chat-completion
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: drive-items
path: "/sites/{{site_id}}/drive/root:/{{folder}}/{{filename}}:/content"
inputParameters:
- name: site_id
in: path
- name: folder
in: path
- name: filename
in: path
operations:
- name: upload-file
method: PUT
Compiles actuarial data from Snowflake, generates filing documents, and logs submission.
naftiko: "0.5"
info:
label: "Regulatory Rate Filing Workflow"
description: "Compiles actuarial data from Snowflake, generates filing documents, and logs submission."
tags:
- insurance
- compliance
- actuarial
- snowflake
capability:
exposes:
- type: mcp
namespace: rate-filing
port: 8080
tools:
- name: submit-filing
description: "Submit rate filing."
inputParameters:
- name: product
in: body
type: string
description: "Product."
- name: state
in: body
type: string
description: "State."
- name: change
in: body
type: number
description: "Rate change %"
steps:
- name: compile
type: call
call: "snowflake.query"
with:
query: "CALL COMPILE_RATE_FILING('{{product}}','{{state}}')"
- name: gen
type: call
call: "document-api.generate"
with:
product: "{{product}}"
state: "{{state}}"
- name: log
type: call
call: "compliance-api.log"
with:
product: "{{product}}"
state: "{{state}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://axa.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: document-api
baseUri: "https://api.axa.com/documents/v1"
authentication:
type: bearer
token: "$secrets.document_api_token"
resources:
- name: filings
path: "/generate/rate-filing"
operations:
- name: generate
method: POST
- type: http
namespace: compliance-api
baseUri: "https://api.axa.com/compliance/v1"
authentication:
type: bearer
token: "$secrets.compliance_api_token"
resources:
- name: filings
path: "/filings"
operations:
- name: log
method: POST
Queries Snowflake for treaty data, validates terms, and publishes to Confluence.
naftiko: "0.5"
info:
label: "Reinsurance Treaty Compliance Report"
description: "Queries Snowflake for treaty data, validates terms, and publishes to Confluence."
tags:
- insurance
- actuarial
- compliance
- snowflake
- confluence
capability:
exposes:
- type: mcp
namespace: reinsurance-ops
port: 8080
tools:
- name: treaty-report
description: "Generate treaty report."
inputParameters:
- name: treaty
in: body
type: string
description: "Treaty ID."
- name: period
in: body
type: string
description: "YYYY-Q."
steps:
- name: query
type: call
call: "snowflake.query"
with:
query: "SELECT * FROM TREATY WHERE treaty='{{treaty}}'"
- name: validate
type: call
call: "reinsurance-api.validate"
with:
treaty: "{{treaty}}"
- name: publish
type: call
call: "confluence.create-page"
with:
space_key: "REINSURANCE"
title: "Treaty {{treaty}} - {{period}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://axa.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: reinsurance-api
baseUri: "https://api.axa.com/reinsurance/v1"
authentication:
type: bearer
token: "$secrets.reinsurance_token"
resources:
- name: validation
path: "/treaties/validate"
operations:
- name: validate
method: POST
- type: http
namespace: confluence
baseUri: "https://axa.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
Checks coverage, creates vendor auth, and updates claim in ServiceNow.
naftiko: "0.5"
info:
label: "Rental Car Authorization Workflow"
description: "Checks coverage, creates vendor auth, and updates claim in ServiceNow."
tags:
- insurance
- claims
- servicenow
capability:
exposes:
- type: mcp
namespace: rental-ops
port: 8080
tools:
- name: auth-rental
description: "Authorize rental."
inputParameters:
- name: claim_id
in: body
type: string
description: "Claim."
- name: days
in: body
type: integer
description: "Days."
steps:
- name: check
type: call
call: "claims-api.check-rental"
with:
claim_id: "{{claim_id}}"
- name: auth
type: call
call: "rental-api.create-auth"
with:
claim_id: "{{claim_id}}"
days: "{{days}}"
- name: update
type: call
call: "servicenow.update"
with:
claim_id: "{{claim_id}}"
rental: "{{auth.id}}"
consumes:
- type: http
namespace: claims-api
baseUri: "https://api.axa.com/claims/v2"
authentication:
type: bearer
token: "$secrets.claims_api_token"
resources:
- name: rental
path: "/claims/{{claim_id}}/rental"
inputParameters:
- name: claim_id
in: path
operations:
- name: check-rental
method: GET
- type: http
namespace: rental-api
baseUri: "https://api.axa.com/rental/v1"
authentication:
type: bearer
token: "$secrets.rental_token"
resources:
- name: auths
path: "/authorizations"
operations:
- name: create-auth
method: POST
- type: http
namespace: servicenow
baseUri: "https://axa.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cases
path: "/table/sn_customerservice_case/{{claim_id}}"
inputParameters:
- name: claim_id
in: path
operations:
- name: update
method: PATCH
Triggers Marketo retention campaigns and logs in Salesforce.
naftiko: "0.5"
info:
label: "Retention Campaign Launcher"
description: "Triggers Marketo retention campaigns and logs in Salesforce."
tags:
- insurance
- policy
- marketo
- salesforce
capability:
exposes:
- type: mcp
namespace: retention-ops
port: 8080
tools:
- name: launch-retention
description: "Launch retention campaign."
inputParameters:
- name: segment
in: body
type: string
description: "Segment."
- name: campaign
in: body
type: string
description: "Campaign ID."
steps:
- name: trigger
type: call
call: "marketo.trigger"
with:
campaign_id: "{{campaign}}"
segment: "{{segment}}"
- name: log
type: call
call: "salesforce.create-log"
with:
campaign: "Retention: {{segment}}"
consumes:
- type: http
namespace: marketo
baseUri: "https://axa.mktorest.com/rest/v1"
authentication:
type: bearer
token: "$secrets.marketo_token"
resources:
- name: campaigns
path: "/campaigns/{{campaign}}/trigger.json"
inputParameters:
- name: campaign
in: path
operations:
- name: trigger
method: POST
- type: http
namespace: salesforce
baseUri: "https://axa.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: logs
path: "/sobjects/CampaignLog__c"
operations:
- name: create-log
method: POST
Retrieves customer account from Salesforce including contact details and policy count.
naftiko: "0.5"
info:
label: "Salesforce Account Lookup"
description: "Retrieves customer account from Salesforce including contact details and policy count."
tags:
- insurance
- salesforce
- crm
capability:
exposes:
- type: mcp
namespace: account-ops
port: 8080
tools:
- name: get-account
description: "Look up Salesforce account."
inputParameters:
- name: account_id
in: body
type: string
description: "Account ID."
call: "salesforce.get-account"
with:
account_id: "{{account_id}}"
outputParameters:
- name: name
type: string
mapping: "$.Name"
- name: policies
type: integer
mapping: "$.Policy_Count__c"
- name: tier
type: string
mapping: "$.Account_Tier__c"
consumes:
- type: http
namespace: salesforce
baseUri: "https://axa.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account
method: GET
When a qualified insurance lead is flagged in Salesforce, enriches the contact record, converts it to an opportunity, and assigns the account manager via HubSpot.
naftiko: "0.5"
info:
label: "Salesforce Lead to Opportunity Conversion"
description: "When a qualified insurance lead is flagged in Salesforce, enriches the contact record, converts it to an opportunity, and assigns the account manager via HubSpot."
tags:
- sales
- crm
- salesforce
- hubspot
- lead-management
- insurance
capability:
exposes:
- type: mcp
namespace: sales-crm
port: 8080
tools:
- name: convert-lead-to-opportunity
description: "Given a Salesforce lead ID and qualifying score, enrich the lead record, convert it to an opportunity, and create a corresponding HubSpot deal."
inputParameters:
- name: lead_id
in: body
type: string
description: "The Salesforce lead ID to convert."
- name: lead_score
in: body
type: integer
description: "Lead qualification score (0-100). Must be above 70 to convert."
- name: product_interest
in: body
type: string
description: "The AXA product the lead is interested in, e.g. 'Life Insurance', 'Health'."
steps:
- name: get-lead
type: call
call: "salesforce-lookup.get-lead"
with:
lead_id: "{{lead_id}}"
- name: convert-lead
type: call
call: "salesforce-update.convert-lead"
with:
lead_id: "{{lead_id}}"
opportunity_name: "{{get-lead.company}} — {{product_interest}}"
- name: create-hubspot-deal
type: call
call: "hubspot.create-deal"
with:
dealname: "{{get-lead.company}} — {{product_interest}}"
email: "{{get-lead.email}}"
dealstage: "qualified"
amount: "{{get-lead.estimated_premium}}"
consumes:
- type: http
namespace: salesforce-lookup
baseUri: "https://axa.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: leads
path: "/sobjects/Lead/{{lead_id}}"
inputParameters:
- name: lead_id
in: path
operations:
- name: get-lead
method: GET
- type: http
namespace: salesforce-update
baseUri: "https://axa.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: lead-convert
path: "/sobjects/Lead/{{lead_id}}/convert"
inputParameters:
- name: lead_id
in: path
operations:
- name: convert-lead
method: POST
- type: http
namespace: hubspot
baseUri: "https://api.hubapi.com/crm/v3"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: deals
path: "/objects/deals"
operations:
- name: create-deal
method: POST
Queries Salesforce for open opportunities closing in the current quarter, aggregates forecast by product line, and posts a pipeline digest to the Sales Leadership Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Salesforce Opportunity Forecast Digest"
description: "Queries Salesforce for open opportunities closing in the current quarter, aggregates forecast by product line, and posts a pipeline digest to the Sales Leadership Microsoft Teams channel."
tags:
- sales
- salesforce
- forecasting
- microsoft-teams
- reporting
- finance
capability:
exposes:
- type: mcp
namespace: sales-forecasting
port: 8080
tools:
- name: digest-quarterly-forecast
description: "Query Salesforce for open opportunities closing this quarter, grouped by product line, and post a pipeline forecast digest to the Sales Leadership Teams channel."
inputParameters:
- name: fiscal_quarter
in: body
type: string
description: "The fiscal quarter to forecast, e.g. '2026-Q1'."
- name: product_line
in: body
type: string
description: "Insurance product line to filter by, e.g. 'Commercial P&C'. Leave blank for all."
steps:
- name: query-opportunities
type: call
call: "salesforce.query-opportunities"
with:
quarter: "{{fiscal_quarter}}"
product_line: "{{product_line}}"
- name: post-forecast-digest
type: call
call: "msteams.post-channel-message"
with:
channel: "sales-leadership"
message: "Q{{fiscal_quarter}} Forecast ({{product_line}}): {{query-opportunities.count}} open opps | Pipeline value: €{{query-opportunities.total_value}} | Weighted: €{{query-opportunities.weighted_value}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://axa.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunity-query
path: "/query"
inputParameters:
- name: q
in: query
operations:
- name: query-opportunities
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Reconciles invoices against POs in SAP and creates ServiceNow tickets.
naftiko: "0.5"
info:
label: "SAP Invoice Reconciliation Workflow"
description: "Reconciles invoices against POs in SAP and creates ServiceNow tickets."
tags:
- finance
- sap
- servicenow
capability:
exposes:
- type: mcp
namespace: invoice-ops
port: 8080
tools:
- name: reconcile
description: "Reconcile invoices."
inputParameters:
- name: vendor
in: body
type: string
description: "Vendor."
- name: period
in: body
type: string
description: "YYYY-MM."
steps:
- name: invoices
type: call
call: "sap.get-invoices"
with:
vendor: "{{vendor}}"
period: "{{period}}"
- name: pos
type: call
call: "sap.get-pos"
with:
vendor: "{{vendor}}"
period: "{{period}}"
- name: ticket
type: call
call: "servicenow.create-case"
with:
short_description: "Recon: {{vendor}} - {{period}}"
consumes:
- type: http
namespace: sap
baseUri: "https://axa-sap.s4hana.cloud.sap/api/v1"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: invoices
path: "/invoices"
operations:
- name: get-invoices
method: GET
- type: http
namespace: servicenow
baseUri: "https://axa.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cases
path: "/table/sn_customerservice_case"
operations:
- name: create-case
method: POST
Looks up purchase order in SAP returning status, supplier, and value.
naftiko: "0.5"
info:
label: "SAP Purchase Order Lookup"
description: "Looks up purchase order in SAP returning status, supplier, and value."
tags:
- procurement
- finance
- sap
capability:
exposes:
- type: mcp
namespace: po-ops
port: 8080
tools:
- name: get-po
description: "Look up PO. Returns status, supplier, value."
inputParameters:
- name: po_number
in: body
type: string
description: "SAP PO number."
call: "sap.get-po"
with:
po_number: "{{po_number}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: supplier
type: string
mapping: "$.supplier.name"
- name: value
type: number
mapping: "$.totalCost.amount"
consumes:
- type: http
namespace: sap
baseUri: "https://axa-sap.s4hana.cloud.sap/api/v1"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: purchase-orders
path: "/purchase-orders/{{po_number}}"
inputParameters:
- name: po_number
in: path
operations:
- name: get-po
method: GET
Creates a ServiceNow change request for infrastructure changes, routes it through the CAB approval chain, and notifies stakeholders via Microsoft Teams at each stage.
naftiko: "0.5"
info:
label: "ServiceNow Change Request Approval Workflow"
description: "Creates a ServiceNow change request for infrastructure changes, routes it through the CAB approval chain, and notifies stakeholders via Microsoft Teams at each stage."
tags:
- itsm
- change-management
- servicenow
- microsoft-teams
- approval
- operations
capability:
exposes:
- type: mcp
namespace: change-management
port: 8080
tools:
- name: submit-change-request
description: "Given change details, create a ServiceNow change request, assign it to the CAB, and notify the Change Management Teams channel with a link for approval."
inputParameters:
- name: change_title
in: body
type: string
description: "Short description of the proposed change."
- name: change_description
in: body
type: string
description: "Detailed description of what is changing, why, and the rollback plan."
- name: risk_level
in: body
type: string
description: "Risk level: 'low', 'medium', or 'high'."
- name: planned_date
in: body
type: string
description: "Planned implementation date in YYYY-MM-DD format."
steps:
- name: create-change
type: call
call: "servicenow.create-change"
with:
short_description: "{{change_title}}"
description: "{{change_description}}"
risk: "{{risk_level}}"
planned_start_date: "{{planned_date}}"
- name: notify-cab
type: call
call: "msteams.post-channel-message"
with:
channel: "change-advisory-board"
message: "New change request submitted: {{change_title}} | Risk: {{risk_level}} | Planned: {{planned_date}} | SNOW: {{create-change.number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://axa.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: changes
path: "/table/change_request"
operations:
- name: create-change
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Searches ServiceNow knowledge base for articles matching a query.
naftiko: "0.5"
info:
label: "ServiceNow Knowledge Article Search"
description: "Searches ServiceNow knowledge base for articles matching a query."
tags:
- insurance
- servicenow
- knowledge-management
capability:
exposes:
- type: mcp
namespace: kb-ops
port: 8080
tools:
- name: search-kb
description: "Search knowledge base. Returns articles."
inputParameters:
- name: query
in: body
type: string
description: "Search query."
- name: category
in: body
type: string
description: "Category."
call: "servicenow.search"
with:
query: "{{query}}"
category: "{{category}}"
outputParameters:
- name: articles
type: array
mapping: "$.result"
- name: total
type: integer
mapping: "$.totalResults"
consumes:
- type: http
namespace: servicenow
baseUri: "https://axa.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: knowledge
path: "/table/kb_knowledge"
operations:
- name: search
method: GET
Runs data quality validation queries on AXA's Snowflake actuarial data warehouse to detect nulls, outliers, and schema drift, and posts results to the Actuarial Data Teams channel.
naftiko: "0.5"
info:
label: "Snowflake Actuarial Data Quality Check"
description: "Runs data quality validation queries on AXA's Snowflake actuarial data warehouse to detect nulls, outliers, and schema drift, and posts results to the Actuarial Data Teams channel."
tags:
- data
- analytics
- snowflake
- data-quality
- actuarial
- insurance
capability:
exposes:
- type: mcp
namespace: actuarial-data
port: 8080
tools:
- name: run-actuarial-data-quality-check
description: "Given a Snowflake table name and validation rules, execute data quality checks and post a pass/fail report to the Actuarial Data Teams channel."
inputParameters:
- name: table_name
in: body
type: string
description: "The fully qualified Snowflake table name, e.g. 'AXA_DW_PROD.ACTUARIAL.LOSS_TRIANGLES'."
- name: check_date
in: body
type: string
description: "The date to run data quality checks against in YYYY-MM-DD format."
steps:
- name: run-dq-query
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT COUNT(*) as total, COUNT_IF(claim_amount IS NULL) as null_count FROM {{table_name}} WHERE report_date = '{{check_date}}'"
- name: post-dq-results
type: call
call: "msteams.post-channel-message"
with:
channel: "actuarial-data"
message: "DQ check on {{table_name}} for {{check_date}}: Total rows {{run-dq-query.total}}, Null claim amounts: {{run-dq-query.null_count}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://axa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Runs data quality checks in Snowflake and creates Jira tickets for breached thresholds.
naftiko: "0.5"
info:
label: "Snowflake Claims Data Quality Check"
description: "Runs data quality checks in Snowflake and creates Jira tickets for breached thresholds."
tags:
- insurance
- claims
- data
- snowflake
- jira
capability:
exposes:
- type: mcp
namespace: dq-ops
port: 8080
tools:
- name: check-quality
description: "Check data quality."
inputParameters:
- name: date
in: body
type: string
description: "Check date."
steps:
- name: check
type: call
call: "snowflake.query"
with:
query: "CALL RUN_DQ_CHECKS('{{date}}')"
- name: ticket
type: call
call: "jira.create-issue"
with:
project_key: "DATA"
issuetype: "Bug"
summary: "DQ issues {{date}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://axa.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: jira
baseUri: "https://axa.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Retrieves CLV score from Snowflake including retention probability and revenue projection.
naftiko: "0.5"
info:
label: "Snowflake Customer Lifetime Value Lookup"
description: "Retrieves CLV score from Snowflake including retention probability and revenue projection."
tags:
- insurance
- analytics
- snowflake
capability:
exposes:
- type: mcp
namespace: clv-ops
port: 8080
tools:
- name: get-clv
description: "Look up CLV. Returns score, retention, revenue."
inputParameters:
- name: customer_id
in: body
type: string
description: "AXA customer ID."
call: "snowflake.query-clv"
with:
customer_id: "{{customer_id}}"
outputParameters:
- name: ltv
type: number
mapping: "$.ltvScore"
- name: retention
type: number
mapping: "$.retentionProbability"
- name: revenue
type: number
mapping: "$.projectedAnnualRevenue"
consumes:
- type: http
namespace: snowflake
baseUri: "https://axa.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: queries
path: "/statements"
operations:
- name: query-clv
method: POST
Queries Snowflake for failed or delayed data pipeline tasks in the insurance data warehouse, posts a health report to the Data Engineering Teams channel, and creates ServiceNow tickets for failures.
naftiko: "0.5"
info:
label: "Snowflake Data Pipeline Health Check"
description: "Queries Snowflake for failed or delayed data pipeline tasks in the insurance data warehouse, posts a health report to the Data Engineering Teams channel, and creates ServiceNow tickets for failures."
tags:
- data
- analytics
- snowflake
- servicenow
- microsoft-teams
- data-quality
capability:
exposes:
- type: mcp
namespace: data-ops
port: 8080
tools:
- name: check-pipeline-health
description: "Query Snowflake for failed task runs in the last N hours, open ServiceNow incidents for failures, and post a health summary to the Data Engineering Teams channel."
inputParameters:
- name: look_back_hours
in: body
type: integer
description: "Hours to look back for failed pipeline tasks, typically 24."
- name: database_name
in: body
type: string
description: "The Snowflake database to check, e.g. 'AXA_DW_PROD'."
steps:
- name: get-failed-tasks
type: call
call: "snowflake.query-task-history"
with:
database: "{{database_name}}"
hours: "{{look_back_hours}}"
state: "FAILED"
- name: create-snow-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Snowflake pipeline failures in {{database_name}}: {{get-failed-tasks.count}} tasks failed"
category: "data_engineering"
urgency: "2"
- name: post-health-report
type: call
call: "msteams.post-channel-message"
with:
channel: "data-engineering"
message: "Pipeline health (last {{look_back_hours}}h): {{get-failed-tasks.count}} failed tasks in {{database_name}}. SNOW: {{create-snow-incident.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://axa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: task-history
path: "/databases/{{database}}/schemas/information_schema/task_history"
inputParameters:
- name: database
in: path
operations:
- name: query-task-history
method: GET
- type: http
namespace: servicenow
baseUri: "https://axa.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Triggers a Terraform Cloud workspace run to provision or update AXA cloud infrastructure, monitors run status, and alerts the Platform Engineering team via Microsoft Teams on completion.
naftiko: "0.5"
info:
label: "Terraform Cloud Infrastructure Provisioning"
description: "Triggers a Terraform Cloud workspace run to provision or update AXA cloud infrastructure, monitors run status, and alerts the Platform Engineering team via Microsoft Teams on completion."
tags:
- cloud
- infrastructure
- terraform
- microsoft-teams
- devops
- provisioning
capability:
exposes:
- type: mcp
namespace: infra-provisioning
port: 8080
tools:
- name: trigger-terraform-run
description: "Given a Terraform Cloud workspace ID and message, trigger a new plan-and-apply run, then notify the Platform Engineering Teams channel with the run URL and status."
inputParameters:
- name: workspace_id
in: body
type: string
description: "The Terraform Cloud workspace ID to trigger the run against."
- name: run_message
in: body
type: string
description: "Description message for this Terraform run, e.g. 'Provision AKS cluster for claims service'."
steps:
- name: trigger-run
type: call
call: "terraform.create-run"
with:
workspace_id: "{{workspace_id}}"
message: "{{run_message}}"
- name: notify-platform
type: call
call: "msteams.post-channel-message"
with:
channel: "platform-engineering"
message: "Terraform run triggered on {{workspace_id}}: {{run_message}} | Run ID: {{trigger-run.id}} | URL: {{trigger-run.url}}"
consumes:
- type: http
namespace: terraform
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: runs
path: "/runs"
operations:
- name: create-run
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Provisions infrastructure via Terraform Cloud and notifies platform team.
naftiko: "0.5"
info:
label: "Terraform Infrastructure Provisioning Workflow"
description: "Provisions infrastructure via Terraform Cloud and notifies platform team."
tags:
- engineering
- terraform
- microsoft-azure
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: infra-ops
port: 8080
tools:
- name: provision
description: "Provision infrastructure."
inputParameters:
- name: workspace
in: body
type: string
description: "Workspace."
- name: env
in: body
type: string
description: "Environment."
steps:
- name: run
type: call
call: "terraform.create-run"
with:
workspace: "{{workspace}}"
message: "Provisioning {{env}}"
- name: notify
type: call
call: "msteams.post"
with:
channel_id: "$secrets.platform_channel"
text: "Terraform: {{workspace}} ({{env}})"
consumes:
- type: http
namespace: terraform
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: runs
path: "/runs"
operations:
- name: create-run
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post
method: POST
Checks current underwriting appetite for product, state, and risk class.
naftiko: "0.5"
info:
label: "Underwriting Appetite Check"
description: "Checks current underwriting appetite for product, state, and risk class."
tags:
- insurance
- underwriting
- compliance
capability:
exposes:
- type: mcp
namespace: appetite-ops
port: 8080
tools:
- name: check-appetite
description: "Check appetite. Returns status and restrictions."
inputParameters:
- name: product
in: body
type: string
description: "Product type."
- name: state
in: body
type: string
description: "State code."
- name: risk_class
in: body
type: string
description: "Risk class."
call: "uw-api.check"
with:
product: "{{product}}"
state: "{{state}}"
risk_class: "{{risk_class}}"
outputParameters:
- name: accepting
type: boolean
mapping: "$.isAccepting"
- name: restrictions
type: array
mapping: "$.restrictions"
consumes:
- type: http
namespace: uw-api
baseUri: "https://api.axa.com/underwriting/v2"
authentication:
type: bearer
token: "$secrets.underwriting_api_token"
resources:
- name: appetite
path: "/appetite"
operations:
- name: check
method: GET
Generates profitability report from Snowflake and publishes to Power BI.
naftiko: "0.5"
info:
label: "Underwriting Profitability Report"
description: "Generates profitability report from Snowflake and publishes to Power BI."
tags:
- insurance
- underwriting
- actuarial
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: uw-profit
port: 8080
tools:
- name: gen-profitability
description: "Generate UW profitability."
inputParameters:
- name: product
in: body
type: string
description: "Product."
- name: period
in: body
type: string
description: "YYYY-Q."
steps:
- name: query
type: call
call: "snowflake.query"
with:
query: "SELECT state,combined_ratio FROM PROFITABILITY WHERE product='{{product}}'"
- name: refresh
type: call
call: "powerbi.refresh"
with:
group_id: "$secrets.pbi_uw"
dataset_id: "$secrets.pbi_profit"
consumes:
- type: http
namespace: snowflake
baseUri: "https://axa.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/groups/{{group_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: group_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh
method: POST
Retrieves underwriting risk score for a policy application returning grade, score, and action.
naftiko: "0.5"
info:
label: "Underwriting Risk Score Lookup"
description: "Retrieves underwriting risk score for a policy application returning grade, score, and action."
tags:
- insurance
- underwriting
- risk
capability:
exposes:
- type: mcp
namespace: uw-ops
port: 8080
tools:
- name: get-risk-score
description: "Look up risk score for application. Returns grade and action."
inputParameters:
- name: application_id
in: body
type: string
description: "Application ID."
call: "risk-engine.get-score"
with:
application_id: "{{application_id}}"
outputParameters:
- name: risk_grade
type: string
mapping: "$.riskGrade"
- name: score
type: number
mapping: "$.overallScore"
- name: action
type: string
mapping: "$.recommendedAction"
consumes:
- type: http
namespace: risk-engine
baseUri: "https://api.axa.com/underwriting/v2"
authentication:
type: bearer
token: "$secrets.underwriting_api_token"
resources:
- name: scores
path: "/applications/{{application_id}}/risk-score"
inputParameters:
- name: application_id
in: path
operations:
- name: get-score
method: GET
Reconciles vendor payments against authorizations and flags discrepancies.
naftiko: "0.5"
info:
label: "Vendor Payment Reconciliation Workflow"
description: "Reconciles vendor payments against authorizations and flags discrepancies."
tags:
- insurance
- claims
- finance
- servicenow
capability:
exposes:
- type: mcp
namespace: vendor-recon
port: 8080
tools:
- name: reconcile-vendor
description: "Reconcile vendor payments."
inputParameters:
- name: vendor
in: body
type: string
description: "Vendor."
- name: period
in: body
type: string
description: "YYYY-MM."
steps:
- name: invoices
type: call
call: "claims-api.get-invoices"
with:
vendor: "{{vendor}}"
period: "{{period}}"
- name: auths
type: call
call: "claims-api.get-auths"
with:
vendor: "{{vendor}}"
period: "{{period}}"
- name: flag
type: call
call: "servicenow.create-case"
with:
short_description: "Vendor recon: {{vendor}} - {{period}}"
consumes:
- type: http
namespace: claims-api
baseUri: "https://api.axa.com/claims/v2"
authentication:
type: bearer
token: "$secrets.claims_api_token"
resources:
- name: vendor-data
path: "/vendors/{{vendor}}/invoices"
inputParameters:
- name: vendor
in: path
operations:
- name: get-invoices
method: GET
- type: http
namespace: servicenow
baseUri: "https://axa.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cases
path: "/table/sn_customerservice_case"
operations:
- name: create-case
method: POST
Pulls vendor data from SAP, scores risk, and creates assessment in ServiceNow.
naftiko: "0.5"
info:
label: "Vendor Risk Assessment Workflow"
description: "Pulls vendor data from SAP, scores risk, and creates assessment in ServiceNow."
tags:
- insurance
- compliance
- sap
- servicenow
capability:
exposes:
- type: mcp
namespace: vendor-risk
port: 8080
tools:
- name: assess-vendor
description: "Assess vendor risk."
inputParameters:
- name: vendor_id
in: body
type: string
description: "Vendor ID."
- name: type
in: body
type: string
description: "Assessment type."
steps:
- name: get
type: call
call: "sap.get-vendor"
with:
vendor_id: "{{vendor_id}}"
- name: score
type: call
call: "risk-api.score"
with:
name: "{{get.name}}"
type: "{{type}}"
- name: log
type: call
call: "servicenow.create-record"
with:
table: "u_vendor_risk"
vendor: "{{vendor_id}}"
level: "{{score.level}}"
consumes:
- type: http
namespace: sap
baseUri: "https://axa-sap.s4hana.cloud.sap/api/v1"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: vendors
path: "/suppliers/{{vendor_id}}"
inputParameters:
- name: vendor_id
in: path
operations:
- name: get-vendor
method: GET
- type: http
namespace: risk-api
baseUri: "https://api.axa.com/risk/v1"
authentication:
type: bearer
token: "$secrets.risk_token"
resources:
- name: scoring
path: "/vendors/score"
operations:
- name: score
method: POST
- type: http
namespace: servicenow
baseUri: "https://axa.snowflakecomputing.com/api/v2"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/u_vendor_risk"
operations:
- name: create-record
method: POST
Queries Snowflake for policy exposure in severe weather regions and refreshes Power BI.
naftiko: "0.5"
info:
label: "Weather Exposure Analysis Workflow"
description: "Queries Snowflake for policy exposure in severe weather regions and refreshes Power BI."
tags:
- insurance
- actuarial
- catastrophe
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: exposure-ops
port: 8080
tools:
- name: analyze-exposure
description: "Analyze weather exposure."
inputParameters:
- name: type
in: body
type: string
description: "Weather type."
- name: zips
in: body
type: string
description: "Affected ZIPs."
steps:
- name: query
type: call
call: "snowflake.query"
with:
query: "SELECT lob,COUNT(*),SUM(tiv) FROM POLICIES WHERE zip IN ('{{zips}}') GROUP BY lob"
- name: refresh
type: call
call: "powerbi.refresh"
with:
group_id: "$secrets.pbi_cat"
dataset_id: "$secrets.pbi_exposure"
consumes:
- type: http
namespace: snowflake
baseUri: "https://axa.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/groups/{{group_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: group_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh
method: POST
Looks up the current status of an employee absence request in Workday by request ID, returning approval status, dates, and approver information.
naftiko: "0.5"
info:
label: "Workday Absence Request Status Lookup"
description: "Looks up the current status of an employee absence request in Workday by request ID, returning approval status, dates, and approver information."
tags:
- hr
- workday
- absence-management
- lookup
capability:
exposes:
- type: mcp
namespace: hr-absence
port: 8080
tools:
- name: get-absence-request-status
description: "Given a Workday absence request ID, return the current approval status, leave dates, leave type, and approver name. Use for employee self-service or manager review."
inputParameters:
- name: absence_request_id
in: body
type: string
description: "The Workday absence request ID to look up."
call: "workday.get-absence-request"
with:
request_id: "{{absence_request_id}}"
outputParameters:
- name: status
type: string
mapping: "$.data.approvalStatus"
- name: start_date
type: string
mapping: "$.data.startDate"
- name: end_date
type: string
mapping: "$.data.endDate"
- name: leave_type
type: string
mapping: "$.data.leaveType"
- name: approver_name
type: string
mapping: "$.data.approver.name"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: absence-requests
path: "/axa/absenceRequests/{{request_id}}"
inputParameters:
- name: request_id
in: path
operations:
- name: get-absence-request
method: GET
Retrieves employee benefits eligibility from Workday including enrolled and eligible plans.
naftiko: "0.5"
info:
label: "Workday Benefits Eligibility Lookup"
description: "Retrieves employee benefits eligibility from Workday including enrolled and eligible plans."
tags:
- hr
- workday
- benefits
capability:
exposes:
- type: mcp
namespace: benefits-ops
port: 8080
tools:
- name: get-benefits
description: "Look up benefits eligibility."
inputParameters:
- name: employee_id
in: body
type: string
description: "Workday employee ID."
call: "workday.get-benefits"
with:
employee_id: "{{employee_id}}"
outputParameters:
- name: enrolled
type: array
mapping: "$.enrolledPlans"
- name: eligible
type: array
mapping: "$.eligiblePlans"
- name: status
type: string
mapping: "$.enrollmentStatus"
consumes:
- type: http
namespace: workday
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/axa"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: benefits
path: "/benefits/eligibility/{{employee_id}}"
inputParameters:
- name: employee_id
in: path
operations:
- name: get-benefits
method: GET
When an employee role change is processed in Workday, updates their Okta group membership to match the new role's access profile and notifies IT via ServiceNow.
naftiko: "0.5"
info:
label: "Workday Role Change Access Provisioning"
description: "When an employee role change is processed in Workday, updates their Okta group membership to match the new role's access profile and notifies IT via ServiceNow."
tags:
- hr
- identity
- workday
- okta
- servicenow
- role-change
- access-management
capability:
exposes:
- type: mcp
namespace: hr-access
port: 8080
tools:
- name: sync-role-change-access
description: "Given a Workday worker ID and new role, update Okta group memberships to match the new access profile and create a ServiceNow task to confirm provisioning."
inputParameters:
- name: workday_employee_id
in: body
type: string
description: "The Workday worker ID for the employee whose role changed."
- name: new_role
in: body
type: string
description: "The new job role name as defined in the AXA role catalogue."
- name: old_role
in: body
type: string
description: "The previous job role name for de-provisioning reference."
steps:
- name: get-worker
type: call
call: "workday.get-worker"
with:
worker_id: "{{workday_employee_id}}"
- name: update-okta-groups
type: call
call: "okta.update-user-groups"
with:
user_login: "{{get-worker.work_email}}"
add_group: "{{new_role}}"
remove_group: "{{old_role}}"
- name: create-provisioning-task
type: call
call: "servicenow.create-task"
with:
short_description: "Role change access update: {{get-worker.full_name}} from {{old_role}} to {{new_role}}"
assignment_group: "IT_Access_Management"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/axa/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: okta
baseUri: "https://axa.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: user-groups
path: "/users/{{user_login}}/groups"
inputParameters:
- name: user_login
in: path
operations:
- name: update-user-groups
method: PUT
- type: http
namespace: servicenow
baseUri: "https://axa.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/sc_task"
operations:
- name: create-task
method: POST
Retrieves employee time off balances from Workday including vacation, sick, and personal hours.
naftiko: "0.5"
info:
label: "Workday Time Off Balance Lookup"
description: "Retrieves employee time off balances from Workday including vacation, sick, and personal hours."
tags:
- hr
- workday
capability:
exposes:
- type: mcp
namespace: timeoff-ops
port: 8080
tools:
- name: get-balance
description: "Look up time off balances."
inputParameters:
- name: employee_id
in: body
type: string
description: "Workday employee ID."
call: "workday.get-balance"
with:
employee_id: "{{employee_id}}"
outputParameters:
- name: vacation
type: number
mapping: "$.vacationBalance"
- name: sick
type: number
mapping: "$.sickBalance"
- name: personal
type: number
mapping: "$.personalBalance"
consumes:
- type: http
namespace: workday
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/axa"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: time-off
path: "/timeOff/balances/{{employee_id}}"
inputParameters:
- name: employee_id
in: path
operations:
- name: get-balance
method: GET