Visa Capabilities
Naftiko 0.5 capability definitions for Visa - 100 capabilities showing integration workflows and service orchestrations.
Uses Anthropic to analyze incoming regulatory compliance documents and payments industry guidelines, extracting obligations and action items stored in SharePoint for compliance teams.
naftiko: "0.5"
info:
label: "Anthropic Regulatory Document Analysis"
description: "Uses Anthropic to analyze incoming regulatory compliance documents and payments industry guidelines, extracting obligations and action items stored in SharePoint for compliance teams."
tags:
- ai
- compliance
- anthropic
- sharepoint
- regulation
capability:
exposes:
- type: mcp
namespace: regulatory-analysis
port: 8080
tools:
- name: analyze-regulatory-document
description: "Given a regulatory document text, use Anthropic to extract compliance obligations, deadlines, and required actions, then store the structured analysis in SharePoint."
inputParameters:
- name: document_text
in: body
type: string
description: "The full text of the regulatory document to analyze."
- name: document_title
in: body
type: string
description: "Title of the regulatory document."
- name: sharepoint_site_id
in: body
type: string
description: "SharePoint site ID for the compliance document library."
- name: regulation_type
in: body
type: string
description: "Type of regulation (e.g., PCI-DSS, GDPR, AML, Basel-III)."
steps:
- name: analyze-document
type: call
call: "anthropic.create-message"
with:
model: "claude-opus-4-5"
max_tokens: 2048
prompt: "Analyze this {{regulation_type}} regulatory document. Extract: 1) Key compliance obligations (bulleted list), 2) Applicable deadlines, 3) Required actions for Visa as a payment network. Be specific and concise. Document: {{document_text}}"
- name: store-analysis
type: call
call: "sharepoint-compliance.upload-file"
with:
site_id: "{{sharepoint_site_id}}"
folder_path: "ComplianceAnalysis/{{regulation_type}}"
file_name: "{{document_title}}_analysis.txt"
content: "{{analyze-document.content}}"
consumes:
- type: http
namespace: anthropic
baseUri: "https://api.anthropic.com/v1"
authentication:
type: apikey
key: "x-api-key"
value: "$secrets.anthropic_api_key"
placement: header
resources:
- name: messages
path: "/messages"
operations:
- name: create-message
method: POST
- type: http
namespace: sharepoint-compliance
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
- name: file_name
in: path
operations:
- name: upload-file
method: PUT
Detects AWS cost anomalies across Visa's cloud accounts and creates ServiceNow FinOps tasks for the cloud engineering team to investigate and optimize.
naftiko: "0.5"
info:
label: "AWS Cloud Cost Anomaly Response"
description: "Detects AWS cost anomalies across Visa's cloud accounts and creates ServiceNow FinOps tasks for the cloud engineering team to investigate and optimize."
tags:
- cloud
- finops
- aws
- servicenow
- cost-management
capability:
exposes:
- type: mcp
namespace: cloud-finops
port: 8080
tools:
- name: handle-aws-cost-anomaly
description: "Given an AWS account ID and billing period, detect cost anomalies and create a ServiceNow FinOps task when spend exceeds budget. Use for proactive cloud cost governance."
inputParameters:
- name: account_id
in: body
type: string
description: "The AWS account ID to check."
- name: time_period_start
in: body
type: string
description: "Start date for cost analysis in YYYY-MM-DD format."
- name: time_period_end
in: body
type: string
description: "End date for cost analysis in YYYY-MM-DD format."
steps:
- name: get-cost-data
type: call
call: "aws-cost.get-cost-and-usage"
with:
account_id: "{{account_id}}"
start: "{{time_period_start}}"
end: "{{time_period_end}}"
- name: create-finops-task
type: call
call: "servicenow-cloud.create-task"
with:
short_description: "AWS cost anomaly: account {{account_id}} — {{time_period_start}} to {{time_period_end}}"
description: "Total spend: {{get-cost-data.total_cost}}. Review for budget variances and optimization opportunities."
assignment_group: "Cloud_FinOps"
consumes:
- type: http
namespace: aws-cost
baseUri: "https://ce.us-east-1.amazonaws.com"
authentication:
type: bearer
token: "$secrets.aws_access_token"
resources:
- name: cost-and-usage
path: "/GetCostAndUsage"
operations:
- name: get-cost-and-usage
method: POST
- type: http
namespace: servicenow-cloud
baseUri: "https://visa.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 payment API specification documentation from Confluence.
naftiko: "0.5"
info:
label: "Confluence Payment Spec Lookup"
description: "Retrieves payment API specification documentation from Confluence."
tags:
- documentation
- confluence
- api-specs
capability:
exposes:
- type: mcp
namespace: confluence_payment_s
port: 8080
tools:
- name: query-data
description: "Retrieves payment API specification documentation from Confluence."
inputParameters:
- name: query_param
in: body
type: string
description: "The query parameter."
call: "snowflake-api.run-query"
with:
query_param: "{{query_param}}"
outputParameters:
- name: results
type: object
mapping: "$.data"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
When CrowdStrike detects a critical threat on a Visa endpoint, automatically contains the device, creates a ServiceNow security incident, and pages the SOC via PagerDuty.
naftiko: "0.5"
info:
label: "CrowdStrike Endpoint Threat Response"
description: "When CrowdStrike detects a critical threat on a Visa endpoint, automatically contains the device, creates a ServiceNow security incident, and pages the SOC via PagerDuty."
tags:
- security
- crowdstrike
- servicenow
- pagerduty
- endpoint-security
- incident-response
capability:
exposes:
- type: mcp
namespace: endpoint-threat-response
port: 8080
tools:
- name: respond-to-endpoint-threat
description: "Given a CrowdStrike device ID and detection ID, contain the device, create a P1 ServiceNow security incident, and trigger PagerDuty for SOC response."
inputParameters:
- name: device_id
in: body
type: string
description: "CrowdStrike device ID of the compromised endpoint."
- name: detection_id
in: body
type: string
description: "CrowdStrike detection ID for the threat."
- name: hostname
in: body
type: string
description: "Hostname of the affected endpoint."
- name: threat_name
in: body
type: string
description: "Name or type of the detected threat."
steps:
- name: contain-device
type: call
call: "crowdstrike-contain.contain-host"
with:
device_id: "{{device_id}}"
- name: create-security-incident
type: call
call: "servicenow-cso.create-incident"
with:
short_description: "Endpoint threat: {{threat_name}} on {{hostname}}"
description: "CrowdStrike detection {{detection_id}}: {{threat_name}} on {{hostname}} (device {{device_id}}). Host contained automatically."
category: "security"
urgency: "1"
impact: "1"
- name: page-soc
type: call
call: "pagerduty-soc.create-incident"
with:
title: "Endpoint threat: {{threat_name}} — {{hostname}}"
body: "ServiceNow: {{create-security-incident.number}}. CrowdStrike detection: {{detection_id}}. Host isolated."
service_id: "SOC_SERVICE_ID"
consumes:
- type: http
namespace: crowdstrike-contain
baseUri: "https://api.crowdstrike.com"
authentication:
type: bearer
token: "$secrets.crowdstrike_token"
resources:
- name: device-actions
path: "/devices/entities/devices-actions/v2"
operations:
- name: contain-host
method: POST
- type: http
namespace: servicenow-cso
baseUri: "https://visa.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-soc
baseUri: "https://api.pagerduty.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.pagerduty_token"
placement: header
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
Returns health status and error rates for Visa API gateway from Datadog.
naftiko: "0.5"
info:
label: "Datadog API Gateway Health"
description: "Returns health status and error rates for Visa API gateway from Datadog."
tags:
- observability
- datadog
- api-gateway
capability:
exposes:
- type: mcp
namespace: datadog_api_gateway_
port: 8080
tools:
- name: query-data
description: "Returns health status and error rates for Visa API gateway from Datadog."
inputParameters:
- name: query_param
in: body
type: string
description: "The query parameter."
call: "snowflake-api.run-query"
with:
query_param: "{{query_param}}"
outputParameters:
- name: results
type: object
mapping: "$.data"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
Generates a daily Datadog infrastructure health digest for Visa's payment processing clusters and posts the summary to the platform engineering Teams channel.
naftiko: "0.5"
info:
label: "Datadog Infrastructure Health Digest"
description: "Generates a daily Datadog infrastructure health digest for Visa's payment processing clusters and posts the summary to the platform engineering Teams channel."
tags:
- observability
- datadog
- microsoft-teams
- reporting
- infrastructure
capability:
exposes:
- type: mcp
namespace: infra-health-digest
port: 8080
tools:
- name: digest-infrastructure-health
description: "Fetch Datadog host and monitor summary for payment processing infrastructure and post a daily health digest to the platform Teams channel."
inputParameters:
- name: environment_tag
in: body
type: string
description: "Datadog environment tag to filter (e.g., env:production,service:payment-auth)."
- name: platform_channel_id
in: body
type: string
description: "Microsoft Teams channel ID for platform engineering."
steps:
- name: get-host-status
type: call
call: "datadog-infra.list-hosts"
with:
filter: "{{environment_tag}}"
- name: get-monitor-summary
type: call
call: "datadog-infra.get-monitor-summary"
with:
tags: "{{environment_tag}}"
- name: post-digest
type: call
call: "msteams-platform.post-message"
with:
channel_id: "{{platform_channel_id}}"
text: "Infrastructure Health ({{environment_tag}}): {{get-host-status.total_matching}} hosts. Monitors — OK: {{get-monitor-summary.ok_count}}, Warn: {{get-monitor-summary.warn_count}}, Critical: {{get-monitor-summary.critical_count}}."
consumes:
- type: http
namespace: datadog-infra
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: hosts
path: "/hosts"
operations:
- name: list-hosts
method: GET
- name: monitor-summary
path: "/monitor/summary"
operations:
- name: get-monitor-summary
method: GET
- type: http
namespace: msteams-platform
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-message
method: POST
Returns current payment processing latency metrics from Datadog APM.
naftiko: "0.5"
info:
label: "Datadog Payment Latency Check"
description: "Returns current payment processing latency metrics from Datadog APM."
tags:
- observability
- datadog
- payments
capability:
exposes:
- type: mcp
namespace: datadog_payment_late
port: 8080
tools:
- name: query-data
description: "Returns current payment processing latency metrics from Datadog APM."
inputParameters:
- name: query_param
in: body
type: string
description: "The query parameter."
call: "snowflake-api.run-query"
with:
query_param: "{{query_param}}"
outputParameters:
- name: results
type: object
mapping: "$.data"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
Monitors Datadog SLOs for Visa's payment authorization and settlement services and creates P1 ServiceNow incidents when SLO compliance drops below the defined threshold.
naftiko: "0.5"
info:
label: "Datadog Payment Processing SLO Monitor"
description: "Monitors Datadog SLOs for Visa's payment authorization and settlement services and creates P1 ServiceNow incidents when SLO compliance drops below the defined threshold."
tags:
- observability
- datadog
- servicenow
- slo
- payment-processing
- incident-response
capability:
exposes:
- type: mcp
namespace: payment-slo-monitor
port: 8080
tools:
- name: check-payment-slo-compliance
description: "Fetch SLO compliance data from Datadog for payment processing services and create a P1 ServiceNow incident if compliance drops below the threshold. Use for continuous payment SLO monitoring."
inputParameters:
- name: slo_id
in: body
type: string
description: "The Datadog SLO ID for the payment service to check."
- name: compliance_threshold
in: body
type: number
description: "Minimum acceptable SLO compliance percentage (e.g., 99.9)."
- name: timeframe
in: body
type: string
description: "Compliance check window: 7d, 30d."
steps:
- name: get-slo-status
type: call
call: "datadog.get-slo-history"
with:
slo_id: "{{slo_id}}"
timeframe: "{{timeframe}}"
- name: create-p1-incident
type: call
call: "servicenow-slo.create-incident"
with:
short_description: "Payment SLO breach: {{slo_id}} below {{compliance_threshold}}%"
description: "Datadog SLO {{slo_id}} compliance dropped to {{get-slo-status.overall_compliance}}%, below threshold of {{compliance_threshold}}%. Immediate remediation required."
urgency: "1"
impact: "1"
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: slo-history
path: "/slo/history"
operations:
- name: get-slo-history
method: GET
- type: http
namespace: servicenow-slo
baseUri: "https://visa.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
When an employee departure is recorded in Workday, deactivates the Okta account, disables Azure AD access, and closes open ServiceNow tickets.
naftiko: "0.5"
info:
label: "Employee Offboarding and Access Revocation"
description: "When an employee departure is recorded in Workday, deactivates the Okta account, disables Azure AD access, and closes open ServiceNow tickets."
tags:
- hr
- offboarding
- workday
- okta
- azure-ad
- servicenow
capability:
exposes:
- type: mcp
namespace: hr-offboarding
port: 8080
tools:
- name: trigger-offboarding
description: "Given a Workday employee ID and last day, deactivate Okta and Azure AD accounts, close open ServiceNow tickets, and notify the manager via Teams."
inputParameters:
- name: workday_employee_id
in: body
type: string
description: "The Workday worker ID for the departing employee."
- name: last_day
in: body
type: string
description: "Last working day in YYYY-MM-DD format."
- name: manager_upn
in: body
type: string
description: "UPN of the departing employee's manager."
steps:
- name: get-employee
type: call
call: "workday-off.get-worker"
with:
worker_id: "{{workday_employee_id}}"
- name: deactivate-okta
type: call
call: "okta-off.deactivate-user"
with:
login: "{{get-employee.work_email}}"
- name: disable-azure-ad
type: call
call: "azuread.disable-user"
with:
user_id: "{{get-employee.azure_object_id}}"
- name: notify-manager
type: call
call: "msteams-off.send-message"
with:
recipient_upn: "{{manager_upn}}"
text: "Offboarding complete for {{get-employee.full_name}} (last day: {{last_day}}). Okta and Azure AD accounts disabled."
consumes:
- type: http
namespace: workday-off
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: okta-off
baseUri: "https://visa.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_token"
placement: header
resources:
- name: users
path: "/users/{{login}}/lifecycle/deactivate"
inputParameters:
- name: login
in: path
operations:
- name: deactivate-user
method: POST
- type: http
namespace: azuread
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: msteams-off
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions an Okta account with appropriate security groups, and sends a Microsoft Teams welcome message.
naftiko: "0.5"
info:
label: "Employee Onboarding Orchestrator"
description: "On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions an Okta account with appropriate security groups, and sends a Microsoft Teams welcome message."
tags:
- hr
- onboarding
- workday
- servicenow
- okta
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-onboarding
port: 8080
tools:
- name: trigger-onboarding
description: "Given a Workday employee ID and start date, orchestrate the full onboarding sequence across ServiceNow, Okta, and Microsoft Teams."
inputParameters:
- name: workday_employee_id
in: body
type: string
description: "The Workday worker ID for the new hire."
- name: start_date
in: body
type: string
description: "The employee start date in YYYY-MM-DD format."
- name: job_role
in: body
type: string
description: "The employee job role determining Okta group membership."
steps:
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{workday_employee_id}}"
- name: open-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "New hire onboarding: {{get-employee.full_name}}"
category: "hr_onboarding"
assigned_group: "IT_Onboarding"
- name: provision-okta
type: call
call: "okta.create-user"
with:
email: "{{get-employee.work_email}}"
first_name: "{{get-employee.first_name}}"
last_name: "{{get-employee.last_name}}"
department: "{{get-employee.department}}"
- name: send-welcome
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{get-employee.work_email}}"
text: "Welcome to Visa, {{get-employee.first_name}}! Your IT onboarding ticket is {{open-ticket.number}} and your Okta account is ready."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://visa.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: okta
baseUri: "https://visa.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_token"
placement: header
resources:
- name: users
path: "/users"
operations:
- name: create-user
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
When a Splunk fraud detection alert fires, creates a CrowdStrike investigation, opens a P1 ServiceNow security incident, and pages the fraud operations team via PagerDuty.
naftiko: "0.5"
info:
label: "Fraud Alert Investigation Handler"
description: "When a Splunk fraud detection alert fires, creates a CrowdStrike investigation, opens a P1 ServiceNow security incident, and pages the fraud operations team via PagerDuty."
tags:
- security
- fraud
- splunk
- crowdstrike
- servicenow
- pagerduty
- incident-response
capability:
exposes:
- type: mcp
namespace: fraud-ops
port: 8080
tools:
- name: handle-fraud-alert
description: "Given a Splunk fraud alert ID and affected account or entity, create a CrowdStrike detection, open a P1 ServiceNow security incident, and trigger PagerDuty for the fraud ops team."
inputParameters:
- name: alert_id
in: body
type: string
description: "The Splunk alert ID or correlation search ID."
- name: entity_id
in: body
type: string
description: "The affected account, card, or entity identifier."
- name: fraud_type
in: body
type: string
description: "Type of fraud detected (e.g., account_takeover, card_not_present, identity_theft)."
- name: severity
in: body
type: string
description: "Alert severity: critical, high, or medium."
steps:
- name: get-alert-details
type: call
call: "splunk.get-alert-results"
with:
alert_id: "{{alert_id}}"
- name: create-cs-detection
type: call
call: "crowdstrike.create-detection"
with:
hostname: "fraud-ops-investigation"
description: "Fraud event {{fraud_type}} for entity {{entity_id}}. Splunk alert: {{alert_id}}."
- name: create-p1-incident
type: call
call: "servicenow-fraud.create-incident"
with:
short_description: "[{{severity}}] Fraud alert: {{fraud_type}} — entity {{entity_id}}"
description: "Splunk alert {{alert_id}} detected {{fraud_type}} for {{entity_id}}. CrowdStrike detection: {{create-cs-detection.detection_id}}. Details: {{get-alert-details.results}}"
category: "fraud_investigation"
urgency: "1"
- name: page-fraud-team
type: call
call: "pagerduty.create-incident"
with:
title: "Fraud Alert: {{fraud_type}} — {{entity_id}}"
body: "ServiceNow: {{create-p1-incident.number}}. CrowdStrike: {{create-cs-detection.detection_id}}. Splunk: {{alert_id}}."
service_id: "FRAUD_OPS_SERVICE"
consumes:
- type: http
namespace: splunk
baseUri: "https://splunk.visa.com:8089/services"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: alert-results
path: "/search/jobs/{{alert_id}}/results"
inputParameters:
- name: alert_id
in: path
operations:
- name: get-alert-results
method: GET
- type: http
namespace: crowdstrike
baseUri: "https://api.crowdstrike.com"
authentication:
type: bearer
token: "$secrets.crowdstrike_token"
resources:
- name: detections
path: "/detects/entities/detects/v2"
operations:
- name: create-detection
method: PATCH
- type: http
namespace: servicenow-fraud
baseUri: "https://visa.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_token"
placement: header
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
When a GitHub Actions pipeline fails on a protected branch, creates a Jira bug, posts an alert to the engineering Microsoft Teams channel, and marks a Datadog deployment event.
naftiko: "0.5"
info:
label: "GitHub CI/CD Pipeline Failure Handler"
description: "When a GitHub Actions pipeline fails on a protected branch, creates a Jira bug, posts an alert to the engineering Microsoft Teams channel, and marks a Datadog deployment event."
tags:
- devops
- cicd
- github
- jira
- microsoft-teams
- datadog
capability:
exposes:
- type: mcp
namespace: devops-cicd
port: 8080
tools:
- name: handle-pipeline-failure
description: "Given a GitHub Actions run ID and repository, create a Jira bug, post a Teams alert, and create a Datadog deployment event. Use when a protected-branch pipeline fails."
inputParameters:
- name: run_id
in: body
type: string
description: "The GitHub Actions workflow run ID."
- name: repository
in: body
type: string
description: "GitHub repository in owner/repo format."
- name: branch
in: body
type: string
description: "The branch name where the pipeline failed."
- name: workflow_name
in: body
type: string
description: "The name of the failed workflow."
steps:
- name: get-run
type: call
call: "github.get-workflow-run"
with:
repo: "{{repository}}"
run_id: "{{run_id}}"
- name: create-bug
type: call
call: "jira.create-issue"
with:
project_key: "ENG"
issuetype: "Bug"
summary: "[CI Failure] {{repository}} / {{branch}} — {{workflow_name}}"
description: "Run {{run_id}} failed. URL: {{get-run.html_url}}"
- name: post-teams-alert
type: call
call: "msteams-eng.post-message"
with:
channel_id: "engineering-alerts"
text: "Pipeline Failure: {{repository}} | Branch: {{branch}} | Jira: {{create-bug.key}} | Run: {{get-run.html_url}}"
- name: create-dd-event
type: call
call: "datadog-deploy.create-event"
with:
title: "CI Failure: {{repository}} / {{branch}}"
text: "Pipeline {{run_id}} failed. Jira: {{create-bug.key}}"
alert_type: "error"
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://visa.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams-eng
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-message
method: POST
- type: http
namespace: datadog-deploy
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
Monitors GitHub Dependabot critical vulnerability alerts across Visa's payment platform repositories and creates ServiceNow security incidents for immediate remediation.
naftiko: "0.5"
info:
label: "GitHub Dependabot Critical Vulnerability Triage"
description: "Monitors GitHub Dependabot critical vulnerability alerts across Visa's payment platform repositories and creates ServiceNow security incidents for immediate remediation."
tags:
- security
- github
- servicenow
- vulnerability
- dependency-management
- pci-dss
capability:
exposes:
- type: mcp
namespace: vuln-triage
port: 8080
tools:
- name: triage-critical-vulnerability
description: "Given a GitHub repository and Dependabot alert number, create a ServiceNow security incident for critical vulnerability tracking and assign it to the platform security team."
inputParameters:
- name: repository
in: body
type: string
description: "GitHub repository in owner/repo format."
- name: alert_number
in: body
type: integer
description: "Dependabot alert number."
steps:
- name: get-alert
type: call
call: "github-dep.get-dependabot-alert"
with:
repo: "{{repository}}"
alert_number: "{{alert_number}}"
- name: create-snow-incident
type: call
call: "servicenow-dep.create-incident"
with:
short_description: "Critical vulnerability: {{get-alert.security_advisory.cve_id}} in {{repository}}"
description: "Package: {{get-alert.dependency.package.name}}. CVE: {{get-alert.security_advisory.cve_id}}. CVSS: {{get-alert.security_advisory.cvss_score}}. Requires remediation within SLA."
category: "security"
urgency: "1"
consumes:
- type: http
namespace: github-dep
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: dependabot-alerts
path: "/repos/{{repo}}/dependabot/alerts/{{alert_number}}"
inputParameters:
- name: repo
in: path
- name: alert_number
in: path
operations:
- name: get-dependabot-alert
method: GET
- type: http
namespace: servicenow-dep
baseUri: "https://visa.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
Returns the latest release details for a Visa payment service repository.
naftiko: "0.5"
info:
label: "GitHub Payment Service Release Lookup"
description: "Returns the latest release details for a Visa payment service repository."
tags:
- devops
- github
- releases
capability:
exposes:
- type: mcp
namespace: github_payment_servi
port: 8080
tools:
- name: query-data
description: "Returns the latest release details for a Visa payment service repository."
inputParameters:
- name: query_param
in: body
type: string
description: "The query parameter."
call: "snowflake-api.run-query"
with:
query_param: "{{query_param}}"
outputParameters:
- name: results
type: object
mapping: "$.data"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
On a successful GitHub release, generates structured release notes using Anthropic and publishes them to the Microsoft Teams engineering channel and updates the ServiceNow CMDB.
naftiko: "0.5"
info:
label: "GitHub Release Notes Publisher"
description: "On a successful GitHub release, generates structured release notes using Anthropic and publishes them to the Microsoft Teams engineering channel and updates the ServiceNow CMDB."
tags:
- devops
- release-management
- github
- anthropic
- microsoft-teams
- servicenow
capability:
exposes:
- type: mcp
namespace: release-management
port: 8080
tools:
- name: publish-release-notes
description: "Given a GitHub release tag and repository, generate formatted release notes via Anthropic, post to Teams, and update the ServiceNow CMDB CI record."
inputParameters:
- name: repository
in: body
type: string
description: "GitHub repository in owner/repo format."
- name: release_tag
in: body
type: string
description: "The GitHub release tag (e.g., v3.1.0)."
- name: teams_channel_id
in: body
type: string
description: "Microsoft Teams channel for release notes."
- name: cmdb_ci_id
in: body
type: string
description: "ServiceNow CMDB application CI sys_id to update."
steps:
- name: get-release
type: call
call: "github-release.get-release"
with:
repo: "{{repository}}"
tag: "{{release_tag}}"
- name: format-notes
type: call
call: "anthropic-notes.create-message"
with:
model: "claude-opus-4-5"
max_tokens: 512
prompt: "Format these GitHub release notes for a payments technology audience. Be concise, highlight security fixes prominently, and use bullet points: {{get-release.body}}"
- name: post-to-teams
type: call
call: "msteams-release.post-message"
with:
channel_id: "{{teams_channel_id}}"
text: "Release {{release_tag}} for {{repository}}: {{format-notes.content}}"
- name: update-cmdb
type: call
call: "servicenow-cmdb.update-ci"
with:
sys_id: "{{cmdb_ci_id}}"
version: "{{release_tag}}"
consumes:
- type: http
namespace: github-release
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: releases
path: "/repos/{{repo}}/releases/tags/{{tag}}"
inputParameters:
- name: repo
in: path
- name: tag
in: path
operations:
- name: get-release
method: GET
- type: http
namespace: anthropic-notes
baseUri: "https://api.anthropic.com/v1"
authentication:
type: apikey
key: "x-api-key"
value: "$secrets.anthropic_api_key"
placement: header
resources:
- name: messages
path: "/messages"
operations:
- name: create-message
method: POST
- type: http
namespace: msteams-release
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-message
method: POST
- type: http
namespace: servicenow-cmdb
baseUri: "https://visa.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cmdb-ci
path: "/table/cmdb_ci_appl/{{sys_id}}"
inputParameters:
- name: sys_id
in: path
operations:
- name: update-ci
method: PATCH
Returns status and details of a PCI compliance Jira ticket.
naftiko: "0.5"
info:
label: "Jira Compliance Ticket Lookup"
description: "Returns status and details of a PCI compliance Jira ticket."
tags:
- compliance
- jira
- pci
capability:
exposes:
- type: mcp
namespace: jira_compliance_tick
port: 8080
tools:
- name: query-data
description: "Returns status and details of a PCI compliance Jira ticket."
inputParameters:
- name: query_param
in: body
type: string
description: "The query parameter."
call: "snowflake-api.run-query"
with:
query_param: "{{query_param}}"
outputParameters:
- name: results
type: object
mapping: "$.data"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
Pulls sprint completion metrics from Jira and posts a delivery velocity digest to the product engineering Microsoft Teams channel at the end of each sprint.
naftiko: "0.5"
info:
label: "Jira Sprint Velocity and Delivery Report"
description: "Pulls sprint completion metrics from Jira and posts a delivery velocity digest to the product engineering Microsoft Teams channel at the end of each sprint."
tags:
- devops
- jira
- microsoft-teams
- reporting
- agile
capability:
exposes:
- type: mcp
namespace: agile-reporting
port: 8080
tools:
- name: digest-sprint-delivery
description: "Given a Jira board ID and sprint ID, fetch sprint velocity metrics and post a delivery digest to the product engineering Teams channel."
inputParameters:
- name: board_id
in: body
type: string
description: "Jira board ID."
- name: sprint_id
in: body
type: string
description: "Jira sprint ID to report on."
- name: teams_channel_id
in: body
type: string
description: "Microsoft Teams channel ID for the sprint digest."
steps:
- name: get-sprint-data
type: call
call: "jira.get-sprint"
with:
board_id: "{{board_id}}"
sprint_id: "{{sprint_id}}"
- name: post-digest
type: call
call: "msteams-product.post-message"
with:
channel_id: "{{teams_channel_id}}"
text: "Sprint Digest: {{get-sprint-data.name}}. Done: {{get-sprint-data.issues_done}}, Incomplete: {{get-sprint-data.issues_not_done}}, Velocity: {{get-sprint-data.story_points_completed}} pts."
consumes:
- type: http
namespace: jira
baseUri: "https://visa.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: sprints
path: "/board/{{board_id}}/sprint/{{sprint_id}}"
inputParameters:
- name: board_id
in: path
- name: sprint_id
in: path
operations:
- name: get-sprint
method: GET
- type: http
namespace: msteams-product
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-message
method: POST
Fetches LinkedIn engagement analytics for Visa executive thought leadership posts and delivers a weekly performance digest to the communications team via Microsoft Teams.
naftiko: "0.5"
info:
label: "LinkedIn Executive Thought Leadership Tracker"
description: "Fetches LinkedIn engagement analytics for Visa executive thought leadership posts and delivers a weekly performance digest to the communications team via Microsoft Teams."
tags:
- marketing
- linkedin
- microsoft-teams
- social-media
- reporting
- communications
capability:
exposes:
- type: mcp
namespace: exec-comms-reporting
port: 8080
tools:
- name: digest-linkedin-engagement
description: "Fetch LinkedIn organic post analytics for a given organization and post a weekly engagement digest to the communications Teams channel."
inputParameters:
- name: organization_id
in: body
type: string
description: "LinkedIn organization URN for Visa's company page."
- name: teams_channel_id
in: body
type: string
description: "Microsoft Teams channel ID for the communications team."
steps:
- name: get-post-analytics
type: call
call: "linkedin.get-organization-follower-stats"
with:
organization_id: "{{organization_id}}"
- name: post-digest
type: call
call: "msteams-comms.post-message"
with:
channel_id: "{{teams_channel_id}}"
text: "LinkedIn Weekly Digest (Visa): Total followers {{get-post-analytics.followerCount}}. Organic impressions this week: {{get-post-analytics.impressionCount}}. Engagement rate: {{get-post-analytics.engagementRate}}%."
consumes:
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: organization-stats
path: "/organizationalEntityFollowerStatistics"
operations:
- name: get-organization-follower-stats
method: GET
- type: http
namespace: msteams-comms
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-message
method: POST
When an employee changes roles in Workday, updates their Okta group memberships to provision access for new applications and deprovision access for previous role applications.
naftiko: "0.5"
info:
label: "Okta Application Provisioning for New Role"
description: "When an employee changes roles in Workday, updates their Okta group memberships to provision access for new applications and deprovision access for previous role applications."
tags:
- identity
- hr
- okta
- workday
- access-management
- role-change
capability:
exposes:
- type: mcp
namespace: role-based-provisioning
port: 8080
tools:
- name: reprovision-access-for-role-change
description: "Given a Workday employee ID, new role group ID, and previous role group ID in Okta, remove the employee from the old group and add them to the new group to align application access with their new role."
inputParameters:
- name: employee_email
in: body
type: string
description: "Work email address of the employee changing roles."
- name: new_role_group_id
in: body
type: string
description: "Okta group ID for the new role's application access."
- name: previous_role_group_id
in: body
type: string
description: "Okta group ID for the previous role's application access."
steps:
- name: get-okta-user
type: call
call: "okta-user.get-user"
with:
login: "{{employee_email}}"
- name: remove-old-group
type: call
call: "okta-groups-remove.remove-user-from-group"
with:
group_id: "{{previous_role_group_id}}"
user_id: "{{get-okta-user.id}}"
- name: add-new-group
type: call
call: "okta-groups-add.add-user-to-group"
with:
group_id: "{{new_role_group_id}}"
user_id: "{{get-okta-user.id}}"
consumes:
- type: http
namespace: okta-user
baseUri: "https://visa.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_token"
placement: header
resources:
- name: users
path: "/users/{{login}}"
inputParameters:
- name: login
in: path
operations:
- name: get-user
method: GET
- type: http
namespace: okta-groups-remove
baseUri: "https://visa.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_token"
placement: header
resources:
- name: group-members
path: "/groups/{{group_id}}/users/{{user_id}}"
inputParameters:
- name: group_id
in: path
- name: user_id
in: path
operations:
- name: remove-user-from-group
method: DELETE
- type: http
namespace: okta-groups-add
baseUri: "https://visa.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_token"
placement: header
resources:
- name: group-members
path: "/groups/{{group_id}}/users/{{user_id}}"
inputParameters:
- name: group_id
in: path
- name: user_id
in: path
operations:
- name: add-user-to-group
method: PUT
Returns user access permissions for payment processing systems from Okta.
naftiko: "0.5"
info:
label: "Okta Payment System Access Check"
description: "Returns user access permissions for payment processing systems from Okta."
tags:
- security
- okta
- access-management
capability:
exposes:
- type: mcp
namespace: okta_payment_system_
port: 8080
tools:
- name: query-data
description: "Returns user access permissions for payment processing systems from Okta."
inputParameters:
- name: query_param
in: body
type: string
description: "The query parameter."
call: "snowflake-api.run-query"
with:
query_param: "{{query_param}}"
outputParameters:
- name: results
type: object
mapping: "$.data"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
Queries Okta for users with privileged application assignments and generates a quarterly access review report delivered to the CISO team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Okta Privileged Access Review"
description: "Queries Okta for users with privileged application assignments and generates a quarterly access review report delivered to the CISO team via Microsoft Teams."
tags:
- identity
- security
- okta
- microsoft-teams
- access-management
- compliance
capability:
exposes:
- type: mcp
namespace: privileged-access-review
port: 8080
tools:
- name: run-privileged-access-review
description: "Fetch Okta users with privileged application group memberships and post an access review summary to the CISO Teams channel. Use for quarterly compliance reviews."
inputParameters:
- name: privileged_group_id
in: body
type: string
description: "Okta group ID representing privileged application access."
- name: ciso_channel_id
in: body
type: string
description: "Microsoft Teams channel ID for the CISO team."
steps:
- name: get-privileged-users
type: call
call: "okta.list-group-members"
with:
group_id: "{{privileged_group_id}}"
- name: post-review-report
type: call
call: "msteams-ciso.post-message"
with:
channel_id: "{{ciso_channel_id}}"
text: "Privileged Access Review: {{get-privileged-users.total}} users in privileged group {{privileged_group_id}}. Review and certify access in Okta."
consumes:
- type: http
namespace: okta
baseUri: "https://visa.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_token"
placement: header
resources:
- name: group-members
path: "/groups/{{group_id}}/users"
inputParameters:
- name: group_id
in: path
operations:
- name: list-group-members
method: GET
- type: http
namespace: msteams-ciso
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-message
method: POST
Looks up an Oracle ERP purchase order by number and returns structured header status, supplier details, and line item amounts.
naftiko: "0.5"
info:
label: "Oracle ERP Purchase Order Lookup"
description: "Looks up an Oracle ERP purchase order by number and returns structured header status, supplier details, and line item amounts."
tags:
- finance
- procurement
- oracle
- purchase-order
capability:
exposes:
- type: mcp
namespace: erp-procurement
port: 8080
tools:
- name: get-purchase-order
description: "Look up an Oracle Cloud ERP purchase order by PO number. Returns status, supplier name, total value, and currency. Use for procurement status checks and invoice validation."
inputParameters:
- name: po_number
in: body
type: string
description: "The Oracle purchase order number."
call: "oracle-po.get-purchase-order"
with:
po_number: "{{po_number}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: supplier
type: string
mapping: "$.supplier.SupplierName"
- name: total_amount
type: string
mapping: "$.orderAmount"
- name: currency
type: string
mapping: "$.currencyCode"
consumes:
- type: http
namespace: oracle-po
baseUri: "https://visa.fa.us2.oraclecloud.com/fscmRestApi/resources/11.13.18.05"
authentication:
type: basic
username: "$secrets.oracle_user"
password: "$secrets.oracle_password"
resources:
- name: purchase-orders
path: "/purchaseOrders/{{po_number}}"
inputParameters:
- name: po_number
in: path
operations:
- name: get-purchase-order
method: GET
At month end, queries Oracle ERP for open AP items and journal entries requiring action, then creates a period-close ServiceNow task for the finance controller team.
naftiko: "0.5"
info:
label: "Oracle Period-Close Financial Checklist"
description: "At month end, queries Oracle ERP for open AP items and journal entries requiring action, then creates a period-close ServiceNow task for the finance controller team."
tags:
- finance
- period-close
- oracle
- servicenow
- reporting
capability:
exposes:
- type: mcp
namespace: finance-period-close
port: 8080
tools:
- name: run-period-close-checklist
description: "Given a fiscal period and Oracle ledger ID, fetch open AP and pending journal items, then create a ServiceNow period-close task for the finance team."
inputParameters:
- name: fiscal_period
in: body
type: string
description: "Fiscal period in YYYYMM format."
- name: ledger_id
in: body
type: string
description: "Oracle General Ledger ledger ID."
- name: finance_group
in: body
type: string
description: "ServiceNow assignment group for the finance controller team."
steps:
- name: get-open-ap
type: call
call: "oracle-payables.get-open-invoices"
with:
fiscal_period: "{{fiscal_period}}"
ledger_id: "{{ledger_id}}"
- name: create-close-task
type: call
call: "servicenow-period.create-task"
with:
short_description: "Period close: {{fiscal_period}} — {{get-open-ap.count}} open AP items"
description: "Oracle ERP open AP items for period {{fiscal_period}}: {{get-open-ap.count}} invoices totaling {{get-open-ap.total_amount}} {{get-open-ap.currency}}. Clear before period close."
assignment_group: "{{finance_group}}"
consumes:
- type: http
namespace: oracle-payables
baseUri: "https://visa.fa.us2.oraclecloud.com/fscmRestApi/resources/11.13.18.05"
authentication:
type: basic
username: "$secrets.oracle_user"
password: "$secrets.oracle_password"
resources:
- name: invoices
path: "/invoices"
operations:
- name: get-open-invoices
method: GET
- type: http
namespace: servicenow-period
baseUri: "https://visa.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 PagerDuty incident escalates to a critical severity, automatically creates a corresponding ServiceNow P1 incident and notifies the incident commander via Microsoft Teams.
naftiko: "0.5"
info:
label: "PagerDuty Incident Escalation to ServiceNow"
description: "When a PagerDuty incident escalates to a critical severity, automatically creates a corresponding ServiceNow P1 incident and notifies the incident commander via Microsoft Teams."
tags:
- itsm
- incident-response
- pagerduty
- servicenow
- microsoft-teams
- escalation
capability:
exposes:
- type: mcp
namespace: incident-escalation
port: 8080
tools:
- name: escalate-pagerduty-incident
description: "Given a PagerDuty incident ID, fetch its details, create a P1 ServiceNow incident, and notify the incident commander via Teams. Use when on-call escalation reaches critical severity."
inputParameters:
- name: pagerduty_incident_id
in: body
type: string
description: "The PagerDuty incident ID to escalate."
- name: incident_commander_upn
in: body
type: string
description: "UPN of the incident commander to notify via Teams."
steps:
- name: get-pd-incident
type: call
call: "pagerduty.get-incident"
with:
incident_id: "{{pagerduty_incident_id}}"
- name: create-snow-incident
type: call
call: "servicenow-p1.create-incident"
with:
short_description: "P1 Escalation: {{get-pd-incident.title}}"
description: "PagerDuty incident {{pagerduty_incident_id}} escalated. Service: {{get-pd-incident.service.name}}. Status: {{get-pd-incident.status}}."
urgency: "1"
impact: "1"
- name: notify-ic
type: call
call: "msteams-ic.send-message"
with:
recipient_upn: "{{incident_commander_upn}}"
text: "P1 Incident Escalated: {{get-pd-incident.title}}. ServiceNow: {{create-snow-incident.number}}. PagerDuty: {{pagerduty_incident_id}}. Bridge required immediately."
consumes:
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.pagerduty_token"
placement: header
resources:
- name: incidents
path: "/incidents/{{incident_id}}"
inputParameters:
- name: incident_id
in: path
operations:
- name: get-incident
method: GET
- type: http
namespace: servicenow-p1
baseUri: "https://visa.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-ic
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Returns the current on-call engineer for payment processing services.
naftiko: "0.5"
info:
label: "PagerDuty Payment On-Call Lookup"
description: "Returns the current on-call engineer for payment processing services."
tags:
- operations
- pagerduty
- payments
capability:
exposes:
- type: mcp
namespace: pagerduty_payment_on
port: 8080
tools:
- name: query-data
description: "Returns the current on-call engineer for payment processing services."
inputParameters:
- name: query_param
in: body
type: string
description: "The query parameter."
call: "snowflake-api.run-query"
with:
query_param: "{{query_param}}"
outputParameters:
- name: results
type: object
mapping: "$.data"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
Updates Salesforce account records with the latest NPS survey scores and verbatim comments to enable account teams to identify at-risk relationships.
naftiko: "0.5"
info:
label: "Salesforce Account NPS Update"
description: "Updates Salesforce account records with the latest NPS survey scores and verbatim comments to enable account teams to identify at-risk relationships."
tags:
- crm
- customer-success
- salesforce
- nps
- reporting
capability:
exposes:
- type: mcp
namespace: crm-nps
port: 8080
tools:
- name: update-account-nps
description: "Given a Salesforce account ID, NPS score, and comment, update the account record with the latest survey result. Use after NPS surveys are completed by banking or merchant partners."
inputParameters:
- name: account_id
in: body
type: string
description: "The Salesforce account ID (18-character)."
- name: nps_score
in: body
type: integer
description: "The NPS score (0–10)."
- name: nps_comment
in: body
type: string
description: "Verbatim NPS comment from the partner."
- name: survey_date
in: body
type: string
description: "Date of the NPS survey in YYYY-MM-DD format."
call: "salesforce-nps.update-account"
with:
account_id: "{{account_id}}"
nps_score__c: "{{nps_score}}"
nps_comment__c: "{{nps_comment}}"
nps_date__c: "{{survey_date}}"
consumes:
- type: http
namespace: salesforce-nps
baseUri: "https://visa.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: update-account
method: PATCH
Returns issuer bank account details from Salesforce including relationship tier and volume.
naftiko: "0.5"
info:
label: "Salesforce Issuer Account Lookup"
description: "Returns issuer bank account details from Salesforce including relationship tier and volume."
tags:
- payments
- salesforce
- issuers
capability:
exposes:
- type: mcp
namespace: salesforce_issuer_ac
port: 8080
tools:
- name: query-data
description: "Returns issuer bank account details from Salesforce including relationship tier and volume."
inputParameters:
- name: query_param
in: body
type: string
description: "The query parameter."
call: "snowflake-api.run-query"
with:
query_param: "{{query_param}}"
outputParameters:
- name: results
type: object
mapping: "$.data"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
Enriches Salesforce issuer account records with transaction health scores from Snowflake to provide account managers with a real-time view of relationship health.
naftiko: "0.5"
info:
label: "Salesforce Issuer Relationship Health Dashboard Sync"
description: "Enriches Salesforce issuer account records with transaction health scores from Snowflake to provide account managers with a real-time view of relationship health."
tags:
- crm
- salesforce
- snowflake
- customer-success
- data-enrichment
- payments
capability:
exposes:
- type: mcp
namespace: issuer-health-sync
port: 8080
tools:
- name: sync-issuer-health-score
description: "Given a Salesforce account ID and issuer BIN range, query Snowflake for transaction health KPIs and update the Salesforce account with a calculated health score."
inputParameters:
- name: account_id
in: body
type: string
description: "Salesforce issuer account ID (18-character)."
- name: bin_range
in: body
type: string
description: "Bank Identification Number (BIN) range for the issuer."
steps:
- name: get-transaction-kpis
type: call
call: "snowflake-issuer.execute-query"
with:
statement: "SELECT avg_approval_rate, decline_rate, dispute_rate, transaction_volume FROM payments.issuer_health WHERE bin_range = '{{bin_range}}' AND report_date = CURRENT_DATE"
- name: update-sf-account
type: call
call: "salesforce-issuers.update-account"
with:
account_id: "{{account_id}}"
approval_rate__c: "{{get-transaction-kpis.avg_approval_rate}}"
decline_rate__c: "{{get-transaction-kpis.decline_rate}}"
dispute_rate__c: "{{get-transaction-kpis.dispute_rate}}"
consumes:
- type: http
namespace: snowflake-issuer
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: salesforce-issuers
baseUri: "https://visa.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: update-account
method: PATCH
When a Salesforce partner opportunity reaches Closed Won, creates a corresponding Oracle ERP project record and sends a Microsoft Teams notification to the partner success team.
naftiko: "0.5"
info:
label: "Salesforce Partner Opportunity Sync"
description: "When a Salesforce partner opportunity reaches Closed Won, creates a corresponding Oracle ERP project record and sends a Microsoft Teams notification to the partner success team."
tags:
- crm
- sales
- salesforce
- oracle
- microsoft-teams
- partner-management
capability:
exposes:
- type: mcp
namespace: crm-partner-sync
port: 8080
tools:
- name: sync-partner-opportunity
description: "Given a Salesforce opportunity ID, fetch deal details, create a project in Oracle ERP, and notify the partner success Teams channel."
inputParameters:
- name: opportunity_id
in: body
type: string
description: "The Salesforce opportunity record ID (18-character)."
- name: partner_channel_id
in: body
type: string
description: "Microsoft Teams channel ID for the partner success team."
steps:
- name: get-opportunity
type: call
call: "salesforce.get-opportunity"
with:
opportunity_id: "{{opportunity_id}}"
- name: create-oracle-project
type: call
call: "oracle-projects.create-project"
with:
project_name: "{{get-opportunity.Name}}"
customer_name: "{{get-opportunity.Account.Name}}"
amount: "{{get-opportunity.Amount}}"
- name: notify-team
type: call
call: "msteams-partner.post-message"
with:
channel_id: "{{partner_channel_id}}"
text: "Partner deal closed: {{get-opportunity.Name}} ({{get-opportunity.Amount}} {{get-opportunity.CurrencyIsoCode}}). Oracle project created: {{create-oracle-project.project_id}}."
consumes:
- type: http
namespace: salesforce
baseUri: "https://visa.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity/{{opportunity_id}}"
inputParameters:
- name: opportunity_id
in: path
operations:
- name: get-opportunity
method: GET
- type: http
namespace: oracle-projects
baseUri: "https://visa.fa.us2.oraclecloud.com/fscmRestApi/resources/11.13.18.05"
authentication:
type: basic
username: "$secrets.oracle_user"
password: "$secrets.oracle_password"
resources:
- name: projects
path: "/projects"
operations:
- name: create-project
method: POST
- type: http
namespace: msteams-partner
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-message
method: POST
Returns partner program tier, status, and integration details from Salesforce.
naftiko: "0.5"
info:
label: "Salesforce Partner Program Lookup"
description: "Returns partner program tier, status, and integration details from Salesforce."
tags:
- payments
- salesforce
- partners
capability:
exposes:
- type: mcp
namespace: salesforce_partner_p
port: 8080
tools:
- name: query-data
description: "Returns partner program tier, status, and integration details from Salesforce."
inputParameters:
- name: query_param
in: body
type: string
description: "The query parameter."
call: "snowflake-api.run-query"
with:
query_param: "{{query_param}}"
outputParameters:
- name: results
type: object
mapping: "$.data"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
Submits and routes change requests for Visa payment infrastructure modifications through the CAB approval workflow in ServiceNow.
naftiko: "0.5"
info:
label: "ServiceNow Change Management for Payment Infrastructure"
description: "Submits and routes change requests for Visa payment infrastructure modifications through the CAB approval workflow in ServiceNow."
tags:
- itsm
- change-management
- servicenow
- payment-infrastructure
- approval
capability:
exposes:
- type: mcp
namespace: payment-change-mgmt
port: 8080
tools:
- name: submit-payment-infrastructure-change
description: "Given a change description and maintenance window, create a ServiceNow change request for a payment infrastructure modification and assign to the CAB for review."
inputParameters:
- name: change_description
in: body
type: string
description: "Description of the proposed payment infrastructure change."
- name: risk_level
in: body
type: string
description: "Change risk level: low, medium, high, or critical."
- name: scheduled_start
in: body
type: string
description: "Planned start datetime in ISO 8601 format."
- name: scheduled_end
in: body
type: string
description: "Planned end datetime in ISO 8601 format."
call: "servicenow-change.create-change-request"
with:
short_description: "{{change_description}}"
risk: "{{risk_level}}"
start_date: "{{scheduled_start}}"
end_date: "{{scheduled_end}}"
assignment_group: "Payment_CAB"
outputParameters:
- name: change_number
type: string
mapping: "$.result.number"
consumes:
- type: http
namespace: servicenow-change
baseUri: "https://visa.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: change-requests
path: "/table/change_request"
operations:
- name: create-change-request
method: POST
Returns the status and details of a payment processing incident from ServiceNow.
naftiko: "0.5"
info:
label: "ServiceNow Payment Incident Lookup"
description: "Returns the status and details of a payment processing incident from ServiceNow."
tags:
- operations
- servicenow
- payments
capability:
exposes:
- type: mcp
namespace: servicenow_payment_i
port: 8080
tools:
- name: query-data
description: "Returns the status and details of a payment processing incident from ServiceNow."
inputParameters:
- name: query_param
in: body
type: string
description: "The query parameter."
call: "snowflake-api.run-query"
with:
query_param: "{{query_param}}"
outputParameters:
- name: results
type: object
mapping: "$.data"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
Queries cross-border transaction volumes by corridor from Snowflake.
naftiko: "0.5"
info:
label: "Snowflake Cross-Border Volume Query"
description: "Queries cross-border transaction volumes by corridor from Snowflake."
tags:
- payments
- snowflake
- cross-border
capability:
exposes:
- type: mcp
namespace: snowflake_cross_bord
port: 8080
tools:
- name: query-data
description: "Queries cross-border transaction volumes by corridor from Snowflake."
inputParameters:
- name: query_param
in: body
type: string
description: "The query parameter."
call: "snowflake-api.run-query"
with:
query_param: "{{query_param}}"
outputParameters:
- name: results
type: object
mapping: "$.data"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
Queries dispute resolution time and success rate metrics from Snowflake.
naftiko: "0.5"
info:
label: "Snowflake Dispute Resolution Metrics"
description: "Queries dispute resolution time and success rate metrics from Snowflake."
tags:
- payments
- snowflake
- disputes
capability:
exposes:
- type: mcp
namespace: snowflake_dispute_re
port: 8080
tools:
- name: query-data
description: "Queries dispute resolution time and success rate metrics from Snowflake."
inputParameters:
- name: query_param
in: body
type: string
description: "The query parameter."
call: "snowflake-api.run-query"
with:
query_param: "{{query_param}}"
outputParameters:
- name: results
type: object
mapping: "$.data"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
Queries Snowflake for fraud detection metrics including false positive rates.
naftiko: "0.5"
info:
label: "Snowflake Fraud Metrics Query"
description: "Queries Snowflake for fraud detection metrics including false positive rates."
tags:
- security
- snowflake
- fraud-detection
capability:
exposes:
- type: mcp
namespace: snowflake_fraud_metr
port: 8080
tools:
- name: query-data
description: "Queries Snowflake for fraud detection metrics including false positive rates."
inputParameters:
- name: query_param
in: body
type: string
description: "The query parameter."
call: "snowflake-api.run-query"
with:
query_param: "{{query_param}}"
outputParameters:
- name: results
type: object
mapping: "$.data"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
Queries Snowflake for daily settlement totals by currency and network.
naftiko: "0.5"
info:
label: "Snowflake Settlement Report Query"
description: "Queries Snowflake for daily settlement totals by currency and network."
tags:
- payments
- snowflake
- settlements
capability:
exposes:
- type: mcp
namespace: snowflake_settlement
port: 8080
tools:
- name: query-data
description: "Queries Snowflake for daily settlement totals by currency and network."
inputParameters:
- name: query_param
in: body
type: string
description: "The query parameter."
call: "snowflake-api.run-query"
with:
query_param: "{{query_param}}"
outputParameters:
- name: results
type: object
mapping: "$.data"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
Queries token provisioning rates and usage metrics from Snowflake.
naftiko: "0.5"
info:
label: "Snowflake Tokenization Metrics Query"
description: "Queries token provisioning rates and usage metrics from Snowflake."
tags:
- payments
- snowflake
- tokenization
capability:
exposes:
- type: mcp
namespace: snowflake_tokenizati
port: 8080
tools:
- name: query-data
description: "Queries token provisioning rates and usage metrics from Snowflake."
inputParameters:
- name: query_param
in: body
type: string
description: "The query parameter."
call: "snowflake-api.run-query"
with:
query_param: "{{query_param}}"
outputParameters:
- name: results
type: object
mapping: "$.data"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
Executes Snowflake analytics queries on Visa's transaction data and delivers a formatted daily transaction volume and approval rate report to the payments leadership Teams channel.
naftiko: "0.5"
info:
label: "Snowflake Transaction Analytics Report"
description: "Executes Snowflake analytics queries on Visa's transaction data and delivers a formatted daily transaction volume and approval rate report to the payments leadership Teams channel."
tags:
- analytics
- snowflake
- microsoft-teams
- reporting
- payments
capability:
exposes:
- type: mcp
namespace: payments-analytics
port: 8080
tools:
- name: digest-transaction-analytics
description: "Run a Snowflake transaction analytics query and post a daily volume and approval rate digest to the payments leadership Teams channel."
inputParameters:
- name: reporting_date
in: body
type: string
description: "The reporting date in YYYY-MM-DD format."
- name: region
in: body
type: string
description: "Transaction region filter (e.g., NAP, LAP, CEMEA, AP)."
- name: teams_channel_id
in: body
type: string
description: "Microsoft Teams channel ID for the payments leadership team."
steps:
- name: run-analytics-query
type: call
call: "snowflake.execute-query"
with:
statement: "SELECT region, SUM(transaction_count) as volume, AVG(approval_rate) as approval_rate, SUM(transaction_amount_usd) as total_value FROM payments.daily_transactions WHERE transaction_date = '{{reporting_date}}' AND region = '{{region}}' GROUP BY region"
- name: post-digest
type: call
call: "msteams-payments.post-message"
with:
channel_id: "{{teams_channel_id}}"
text: "Transaction Digest ({{reporting_date}}, {{region}}): Volume {{run-analytics-query.volume}}, Approval rate {{run-analytics-query.approval_rate}}%, Total value ${{run-analytics-query.total_value}}."
consumes:
- type: http
namespace: snowflake
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: msteams-payments
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-message
method: POST
Queries Splunk for PCI-DSS required log events and generates a compliance audit report, creating a ServiceNow compliance record for the QSA review process.
naftiko: "0.5"
info:
label: "Splunk PCI Compliance Log Audit"
description: "Queries Splunk for PCI-DSS required log events and generates a compliance audit report, creating a ServiceNow compliance record for the QSA review process."
tags:
- security
- compliance
- splunk
- servicenow
- pci-dss
- audit
capability:
exposes:
- type: mcp
namespace: pci-audit
port: 8080
tools:
- name: run-pci-log-audit
description: "Query Splunk for PCI-DSS required log events over a given period, summarize findings, and create a ServiceNow compliance record for the audit trail. Use for quarterly PCI assessments."
inputParameters:
- name: audit_start
in: body
type: string
description: "Start of the audit period in ISO 8601 format."
- name: audit_end
in: body
type: string
description: "End of the audit period in ISO 8601 format."
- name: pci_scope
in: body
type: string
description: "PCI scope identifier (e.g., CDE, connected-systems)."
steps:
- name: query-logs
type: call
call: "splunk-pci.search-events"
with:
query: "index=pci_logs earliest={{audit_start}} latest={{audit_end}} scope={{pci_scope}} | stats count by event_type, host"
- name: create-compliance-record
type: call
call: "servicenow-pci.create-record"
with:
short_description: "PCI log audit: {{pci_scope}} — {{audit_start}} to {{audit_end}}"
description: "Splunk PCI audit complete. Events found: {{query-logs.total_events}}. Scope: {{pci_scope}}. Period: {{audit_start}} to {{audit_end}}."
consumes:
- type: http
namespace: splunk-pci
baseUri: "https://splunk.visa.com:8089/services"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: search-jobs
path: "/search/jobs/export"
operations:
- name: search-events
method: POST
- type: http
namespace: servicenow-pci
baseUri: "https://visa.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: compliance-records
path: "/table/compliance_finding"
operations:
- name: create-record
method: POST
Retrieves PCI compliance audit log results from Splunk by search job ID.
naftiko: "0.5"
info:
label: "Splunk PCI Log Query"
description: "Retrieves PCI compliance audit log results from Splunk by search job ID."
tags:
- security
- splunk
- pci-compliance
capability:
exposes:
- type: mcp
namespace: splunk_pci_log_query
port: 8080
tools:
- name: query-data
description: "Retrieves PCI compliance audit log results from Splunk by search job ID."
inputParameters:
- name: query_param
in: body
type: string
description: "The query parameter."
call: "snowflake-api.run-query"
with:
query_param: "{{query_param}}"
outputParameters:
- name: results
type: object
mapping: "$.data"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
Returns the last refresh status and time for payment KPI dashboards.
naftiko: "0.5"
info:
label: "Tableau Payment Dashboard Refresh Status"
description: "Returns the last refresh status and time for payment KPI dashboards."
tags:
- analytics
- tableau
- dashboards
capability:
exposes:
- type: mcp
namespace: tableau_payment_dash
port: 8080
tools:
- name: query-data
description: "Returns the last refresh status and time for payment KPI dashboards."
inputParameters:
- name: query_param
in: body
type: string
description: "The query parameter."
call: "snowflake-api.run-query"
with:
query_param: "{{query_param}}"
outputParameters:
- name: results
type: object
mapping: "$.data"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
Triggers a Tableau workbook refresh for Visa's executive payment KPI dashboards and notifies the business intelligence leadership team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Tableau Payment KPI Dashboard Refresh"
description: "Triggers a Tableau workbook refresh for Visa's executive payment KPI dashboards and notifies the business intelligence leadership team via Microsoft Teams."
tags:
- analytics
- tableau
- microsoft-teams
- reporting
- dashboards
- payments
capability:
exposes:
- type: mcp
namespace: payment-dashboards
port: 8080
tools:
- name: refresh-payment-kpi-dashboard
description: "Trigger a Tableau workbook refresh for a payment KPI dashboard and notify the BI leadership Teams channel on completion."
inputParameters:
- name: workbook_id
in: body
type: string
description: "The Tableau workbook LUID to refresh."
- name: site_id
in: body
type: string
description: "Tableau server site ID."
- name: notify_channel_id
in: body
type: string
description: "Microsoft Teams channel ID for BI leadership notification."
steps:
- name: trigger-refresh
type: call
call: "tableau.refresh-workbook"
with:
site_id: "{{site_id}}"
workbook_id: "{{workbook_id}}"
- name: notify-bi-leaders
type: call
call: "msteams-bi.post-message"
with:
channel_id: "{{notify_channel_id}}"
text: "Payment KPI dashboard refresh complete. Workbook: {{workbook_id}}, Job: {{trigger-refresh.job_id}}, Status: {{trigger-refresh.status}}."
consumes:
- type: http
namespace: tableau
baseUri: "https://tableau.visa.com/api/2.8"
authentication:
type: apikey
key: "X-Tableau-Auth"
value: "$secrets.tableau_token"
placement: header
resources:
- name: workbook-refresh
path: "/sites/{{site_id}}/workbooks/{{workbook_id}}/refresh"
inputParameters:
- name: site_id
in: path
- name: workbook_id
in: path
operations:
- name: refresh-workbook
method: POST
- type: http
namespace: msteams-bi
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-message
method: POST
When 3D Secure authentication failure rates spike, queries Snowflake for issuer patterns, creates a Jira ticket, and alerts the authentication team.
naftiko: "0.5"
info:
label: "Visa 3DS Authentication Failure Handler"
description: "When 3D Secure authentication failure rates spike, queries Snowflake for issuer patterns, creates a Jira ticket, and alerts the authentication team."
tags:
- payments
- snowflake
- jira
- slack
- 3ds
capability:
exposes:
- type: mcp
namespace: visa_3ds_authenticat
port: 8080
tools:
- name: handle-event
description: "When 3D Secure authentication failure rates spike, queries Snowflake for issuer patterns, creates a Jira ticket, and alerts the authentication team."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[payments] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "payments-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Generates acquirer performance reports from Snowflake, updates Salesforce account records, and posts summaries to Slack.
naftiko: "0.5"
info:
label: "Visa Acquirer Performance Report"
description: "Generates acquirer performance reports from Snowflake, updates Salesforce account records, and posts summaries to Slack."
tags:
- payments
- snowflake
- salesforce
- slack
- acquirers
capability:
exposes:
- type: mcp
namespace: visa_acquirer_perfor
port: 8080
tools:
- name: handle-event
description: "Generates acquirer performance reports from Snowflake, updates Salesforce account records, and posts summaries to Slack."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[payments] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "payments-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When AML monitoring detects suspicious patterns, creates a ServiceNow investigation, queries Splunk for details, and pages the compliance team.
naftiko: "0.5"
info:
label: "Visa AML Transaction Monitoring Alert"
description: "When AML monitoring detects suspicious patterns, creates a ServiceNow investigation, queries Splunk for details, and pages the compliance team."
tags:
- compliance
- servicenow
- splunk
- pagerduty
- aml
capability:
exposes:
- type: mcp
namespace: visa_aml_transaction
port: 8080
tools:
- name: handle-event
description: "When AML monitoring detects suspicious patterns, creates a ServiceNow investigation, queries Splunk for details, and pages the compliance team."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[compliance] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "compliance-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a partner exceeds API rate limits, logs the event in Splunk, creates a Jira ticket, and notifies the developer relations team via Slack.
naftiko: "0.5"
info:
label: "Visa API Rate Limit Breach Handler"
description: "When a partner exceeds API rate limits, logs the event in Splunk, creates a Jira ticket, and notifies the developer relations team via Slack."
tags:
- api-management
- splunk
- jira
- slack
capability:
exposes:
- type: mcp
namespace: visa_api_rate_limit_
port: 8080
tools:
- name: handle-event
description: "When a partner exceeds API rate limits, logs the event in Splunk, creates a Jira ticket, and notifies the developer relations team via Slack."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[api-management] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "api-management-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Returns current authorization approval rates by issuer from Snowflake analytics.
naftiko: "0.5"
info:
label: "Visa Authorization Rate Check"
description: "Returns current authorization approval rates by issuer from Snowflake analytics."
tags:
- payments
- snowflake
- authorization
capability:
exposes:
- type: mcp
namespace: visa_authorization_r
port: 8080
tools:
- name: query-data
description: "Returns current authorization approval rates by issuer from Snowflake analytics."
inputParameters:
- name: query_param
in: body
type: string
description: "The query parameter."
call: "snowflake-api.run-query"
with:
query_param: "{{query_param}}"
outputParameters:
- name: results
type: object
mapping: "$.data"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
Initiates a business continuity test, verifies failover health via Datadog, creates a ServiceNow audit record, and reports results to Slack.
naftiko: "0.5"
info:
label: "Visa Business Continuity Test Workflow"
description: "Initiates a business continuity test, verifies failover health via Datadog, creates a ServiceNow audit record, and reports results to Slack."
tags:
- operations
- datadog
- servicenow
- slack
- business-continuity
capability:
exposes:
- type: mcp
namespace: visa_business_contin
port: 8080
tools:
- name: handle-event
description: "Initiates a business continuity test, verifies failover health via Datadog, creates a ServiceNow audit record, and reports results to Slack."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[operations] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "operations-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Generates a weekly card portfolio analytics digest from Snowflake, creates a Salesforce report record, and posts highlights to Slack.
naftiko: "0.5"
info:
label: "Visa Card Portfolio Analytics Digest"
description: "Generates a weekly card portfolio analytics digest from Snowflake, creates a Salesforce report record, and posts highlights to Slack."
tags:
- payments
- snowflake
- salesforce
- slack
- analytics
capability:
exposes:
- type: mcp
namespace: visa_card_portfolio_
port: 8080
tools:
- name: handle-event
description: "Generates a weekly card portfolio analytics digest from Snowflake, creates a Salesforce report record, and posts highlights to Slack."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[payments] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "payments-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a potential data breach is detected, creates a ServiceNow P1 incident, pages the security team, and initiates a Splunk forensic search.
naftiko: "0.5"
info:
label: "Visa Cardholder Data Breach Response"
description: "When a potential data breach is detected, creates a ServiceNow P1 incident, pages the security team, and initiates a Splunk forensic search."
tags:
- security
- servicenow
- pagerduty
- splunk
- data-breach
capability:
exposes:
- type: mcp
namespace: visa_cardholder_data
port: 8080
tools:
- name: handle-event
description: "When a potential data breach is detected, creates a ServiceNow P1 incident, pages the security team, and initiates a Splunk forensic search."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[security] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "security-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Queries Snowflake for chargeback rates by merchant category and region.
naftiko: "0.5"
info:
label: "Visa Chargeback Rate Query"
description: "Queries Snowflake for chargeback rates by merchant category and region."
tags:
- payments
- snowflake
- chargebacks
capability:
exposes:
- type: mcp
namespace: visa_chargeback_rate
port: 8080
tools:
- name: query-data
description: "Queries Snowflake for chargeback rates by merchant category and region."
inputParameters:
- name: query_param
in: body
type: string
description: "The query parameter."
call: "snowflake-api.run-query"
with:
query_param: "{{query_param}}"
outputParameters:
- name: results
type: object
mapping: "$.data"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
When a merchant exceeds chargeback thresholds, creates a Jira investigation ticket, updates Salesforce, and alerts the risk team via Slack.
naftiko: "0.5"
info:
label: "Visa Chargeback Threshold Alert"
description: "When a merchant exceeds chargeback thresholds, creates a Jira investigation ticket, updates Salesforce, and alerts the risk team via Slack."
tags:
- payments
- jira
- salesforce
- slack
- chargebacks
capability:
exposes:
- type: mcp
namespace: visa_chargeback_thre
port: 8080
tools:
- name: handle-event
description: "When a merchant exceeds chargeback thresholds, creates a Jira investigation ticket, updates Salesforce, and alerts the risk team via Slack."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[payments] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "payments-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Tracks Click to Pay enrollment metrics from Snowflake, updates Salesforce issuer records, and posts weekly growth stats to Slack.
naftiko: "0.5"
info:
label: "Visa Click-to-Pay Enrollment Tracker"
description: "Tracks Click to Pay enrollment metrics from Snowflake, updates Salesforce issuer records, and posts weekly growth stats to Slack."
tags:
- payments
- snowflake
- salesforce
- slack
- digital-payments
capability:
exposes:
- type: mcp
namespace: visa_click_to_pay_en
port: 8080
tools:
- name: handle-event
description: "Tracks Click to Pay enrollment metrics from Snowflake, updates Salesforce issuer records, and posts weekly growth stats to Slack."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[payments] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "payments-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Queries Snowflake for contactless adoption metrics by region, updates Salesforce records, and posts a weekly digest to Slack.
naftiko: "0.5"
info:
label: "Visa Contactless Payment Adoption Digest"
description: "Queries Snowflake for contactless adoption metrics by region, updates Salesforce records, and posts a weekly digest to Slack."
tags:
- payments
- snowflake
- salesforce
- slack
- contactless
capability:
exposes:
- type: mcp
namespace: visa_contactless_pay
port: 8080
tools:
- name: handle-event
description: "Queries Snowflake for contactless adoption metrics by region, updates Salesforce records, and posts a weekly digest to Slack."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[payments] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "payments-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a new cross-border corridor is activated, verifies regulatory compliance via Snowflake, creates a Jira task, and notifies compliance via Slack.
naftiko: "0.5"
info:
label: "Visa Cross-Border Compliance Check"
description: "When a new cross-border corridor is activated, verifies regulatory compliance via Snowflake, creates a Jira task, and notifies compliance via Slack."
tags:
- payments
- snowflake
- jira
- slack
- cross-border
capability:
exposes:
- type: mcp
namespace: visa_cross_border_co
port: 8080
tools:
- name: handle-event
description: "When a new cross-border corridor is activated, verifies regulatory compliance via Snowflake, creates a Jira task, and notifies compliance via Slack."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[payments] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "payments-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When CrowdStrike detects a new threat, queries Splunk for exposure, creates a ServiceNow incident, and pages the CSIRT team.
naftiko: "0.5"
info:
label: "Visa Cybersecurity Threat Intelligence Handler"
description: "When CrowdStrike detects a new threat, queries Splunk for exposure, creates a ServiceNow incident, and pages the CSIRT team."
tags:
- security
- crowdstrike
- splunk
- servicenow
- pagerduty
capability:
exposes:
- type: mcp
namespace: visa_cybersecurity_t
port: 8080
tools:
- name: handle-event
description: "When CrowdStrike detects a new threat, queries Splunk for exposure, creates a ServiceNow incident, and pages the CSIRT team."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[security] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "security-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When debit routing anomalies are detected in Snowflake, creates a Jira investigation task and alerts the debit network team via Slack.
naftiko: "0.5"
info:
label: "Visa Debit Network Routing Alert"
description: "When debit routing anomalies are detected in Snowflake, creates a Jira investigation task and alerts the debit network team via Slack."
tags:
- payments
- snowflake
- jira
- slack
- debit
capability:
exposes:
- type: mcp
namespace: visa_debit_network_r
port: 8080
tools:
- name: handle-event
description: "When debit routing anomalies are detected in Snowflake, creates a Jira investigation task and alerts the debit network team via Slack."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[payments] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "payments-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Queries Snowflake for developer portal API adoption metrics, creates a Jira roadmap task, and posts the digest to Slack.
naftiko: "0.5"
info:
label: "Visa Developer Portal Usage Digest"
description: "Queries Snowflake for developer portal API adoption metrics, creates a Jira roadmap task, and posts the digest to Slack."
tags:
- api-management
- snowflake
- jira
- slack
capability:
exposes:
- type: mcp
namespace: visa_developer_porta
port: 8080
tools:
- name: handle-event
description: "Queries Snowflake for developer portal API adoption metrics, creates a Jira roadmap task, and posts the digest to Slack."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[api-management] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "api-management-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Monitors token provisioning rates from Snowflake, creates Jira tickets for failures, and alerts the digital payments team via Slack.
naftiko: "0.5"
info:
label: "Visa Digital Wallet Provisioning Monitor"
description: "Monitors token provisioning rates from Snowflake, creates Jira tickets for failures, and alerts the digital payments team via Slack."
tags:
- payments
- snowflake
- jira
- slack
- tokenization
capability:
exposes:
- type: mcp
namespace: visa_digital_wallet_
port: 8080
tools:
- name: handle-event
description: "Monitors token provisioning rates from Snowflake, creates Jira tickets for failures, and alerts the digital payments team via Slack."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[payments] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "payments-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When EMV chip decline rates spike, queries Snowflake for failure patterns, creates a Jira investigation ticket, and notifies the card technology team.
naftiko: "0.5"
info:
label: "Visa EMV Chip Failure Analysis"
description: "When EMV chip decline rates spike, queries Snowflake for failure patterns, creates a Jira investigation ticket, and notifies the card technology team."
tags:
- payments
- snowflake
- jira
- slack
- emv
capability:
exposes:
- type: mcp
namespace: visa_emv_chip_failur
port: 8080
tools:
- name: handle-event
description: "When EMV chip decline rates spike, queries Snowflake for failure patterns, creates a Jira investigation ticket, and notifies the card technology team."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[payments] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "payments-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When encryption keys approach expiration, triggers rotation, creates a ServiceNow change request, and notifies the security team via Slack.
naftiko: "0.5"
info:
label: "Visa Encryption Key Rotation Workflow"
description: "When encryption keys approach expiration, triggers rotation, creates a ServiceNow change request, and notifies the security team via Slack."
tags:
- security
- servicenow
- slack
- encryption
capability:
exposes:
- type: mcp
namespace: visa_encryption_key_
port: 8080
tools:
- name: handle-event
description: "When encryption keys approach expiration, triggers rotation, creates a ServiceNow change request, and notifies the security team via Slack."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[security] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "security-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Monitors fintech partner API integration health from Datadog, creates Jira tickets for failures, and alerts the partnerships team via Slack.
naftiko: "0.5"
info:
label: "Visa Fintech Partner Integration Monitor"
description: "Monitors fintech partner API integration health from Datadog, creates Jira tickets for failures, and alerts the partnerships team via Slack."
tags:
- api-management
- datadog
- jira
- slack
- partnerships
capability:
exposes:
- type: mcp
namespace: visa_fintech_partner
port: 8080
tools:
- name: handle-event
description: "Monitors fintech partner API integration health from Datadog, creates Jira tickets for failures, and alerts the partnerships team via Slack."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[api-management] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "api-management-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Analyzes transaction routing efficiency from Snowflake, updates routing rules in the config system, and reports optimization results to Slack.
naftiko: "0.5"
info:
label: "Visa Global Transaction Routing Optimizer"
description: "Analyzes transaction routing efficiency from Snowflake, updates routing rules in the config system, and reports optimization results to Slack."
tags:
- payments
- snowflake
- slack
- routing
capability:
exposes:
- type: mcp
namespace: visa_global_transact
port: 8080
tools:
- name: handle-event
description: "Analyzes transaction routing efficiency from Snowflake, updates routing rules in the config system, and reports optimization results to Slack."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[payments] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "payments-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
After a major payment incident is resolved, collects timeline from ServiceNow, creates a Confluence post-mortem page, and notifies via Slack.
naftiko: "0.5"
info:
label: "Visa Incident Post-Mortem Generator"
description: "After a major payment incident is resolved, collects timeline from ServiceNow, creates a Confluence post-mortem page, and notifies via Slack."
tags:
- operations
- servicenow
- confluence
- slack
- incident-management
capability:
exposes:
- type: mcp
namespace: visa_incident_post_m
port: 8080
tools:
- name: handle-event
description: "After a major payment incident is resolved, collects timeline from ServiceNow, creates a Confluence post-mortem page, and notifies via Slack."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[operations] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "operations-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Monitors real-time payment SLA compliance from Datadog, creates PagerDuty incidents for breaches, and posts status to Slack.
naftiko: "0.5"
info:
label: "Visa Instant Payment SLA Monitor"
description: "Monitors real-time payment SLA compliance from Datadog, creates PagerDuty incidents for breaches, and posts status to Slack."
tags:
- payments
- datadog
- pagerduty
- slack
- instant-payments
capability:
exposes:
- type: mcp
namespace: visa_instant_payment
port: 8080
tools:
- name: handle-event
description: "Monitors real-time payment SLA compliance from Datadog, creates PagerDuty incidents for breaches, and posts status to Slack."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[payments] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "payments-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When interchange rates are updated, queries Snowflake for affected merchants, creates Jira notification tasks, and alerts the pricing team via Slack.
naftiko: "0.5"
info:
label: "Visa Interchange Rate Update Workflow"
description: "When interchange rates are updated, queries Snowflake for affected merchants, creates Jira notification tasks, and alerts the pricing team via Slack."
tags:
- payments
- snowflake
- jira
- slack
- interchange
capability:
exposes:
- type: mcp
namespace: visa_interchange_rat
port: 8080
tools:
- name: handle-event
description: "When interchange rates are updated, queries Snowflake for affected merchants, creates Jira notification tasks, and alerts the pricing team via Slack."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[payments] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "payments-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When ISO 8583 message validation errors spike, queries Splunk for patterns, creates a Jira ticket, and alerts the integration team via Slack.
naftiko: "0.5"
info:
label: "Visa ISO Message Format Validation Alert"
description: "When ISO 8583 message validation errors spike, queries Splunk for patterns, creates a Jira ticket, and alerts the integration team via Slack."
tags:
- payments
- splunk
- jira
- slack
- iso-8583
capability:
exposes:
- type: mcp
namespace: visa_iso_message_for
port: 8080
tools:
- name: handle-event
description: "When ISO 8583 message validation errors spike, queries Splunk for patterns, creates a Jira ticket, and alerts the integration team via Slack."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[payments] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "payments-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Queries Snowflake for issuer transaction metrics, updates the Salesforce account health score, and posts a digest to Slack.
naftiko: "0.5"
info:
label: "Visa Issuer Relationship Health Sync"
description: "Queries Snowflake for issuer transaction metrics, updates the Salesforce account health score, and posts a digest to Slack."
tags:
- payments
- snowflake
- salesforce
- slack
- issuers
capability:
exposes:
- type: mcp
namespace: visa_issuer_relation
port: 8080
tools:
- name: handle-event
description: "Queries Snowflake for issuer transaction metrics, updates the Salesforce account health score, and posts a digest to Slack."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[payments] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "payments-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When merchant transaction patterns deviate from their category, flags for review in Jira, updates Salesforce risk fields, and notifies via Slack.
naftiko: "0.5"
info:
label: "Visa Merchant Category Review Workflow"
description: "When merchant transaction patterns deviate from their category, flags for review in Jira, updates Salesforce risk fields, and notifies via Slack."
tags:
- payments
- jira
- salesforce
- slack
- merchants
capability:
exposes:
- type: mcp
namespace: visa_merchant_catego
port: 8080
tools:
- name: handle-event
description: "When merchant transaction patterns deviate from their category, flags for review in Jira, updates Salesforce risk fields, and notifies via Slack."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[payments] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "payments-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Returns merchant category, location, and transaction history from Snowflake.
naftiko: "0.5"
info:
label: "Visa Merchant Detail Lookup"
description: "Returns merchant category, location, and transaction history from Snowflake."
tags:
- payments
- snowflake
- merchants
capability:
exposes:
- type: mcp
namespace: visa_merchant_detail
port: 8080
tools:
- name: query-data
description: "Returns merchant category, location, and transaction history from Snowflake."
inputParameters:
- name: query_param
in: body
type: string
description: "The query parameter."
call: "snowflake-api.run-query"
with:
query_param: "{{query_param}}"
outputParameters:
- name: results
type: object
mapping: "$.data"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
When a new merchant is approved, creates the account in Salesforce, provisions API credentials, and notifies the partner team via Slack.
naftiko: "0.5"
info:
label: "Visa Merchant Onboarding Workflow"
description: "When a new merchant is approved, creates the account in Salesforce, provisions API credentials, and notifies the partner team via Slack."
tags:
- payments
- salesforce
- slack
- merchant-onboarding
capability:
exposes:
- type: mcp
namespace: visa_merchant_onboar
port: 8080
tools:
- name: handle-event
description: "When a new merchant is approved, creates the account in Salesforce, provisions API credentials, and notifies the partner team via Slack."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[payments] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "payments-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Assesses merchant risk by querying transaction patterns from Snowflake, updates the risk score in Salesforce, and alerts the risk team via Slack.
naftiko: "0.5"
info:
label: "Visa Merchant Risk Assessment"
description: "Assesses merchant risk by querying transaction patterns from Snowflake, updates the risk score in Salesforce, and alerts the risk team via Slack."
tags:
- payments
- snowflake
- salesforce
- slack
- risk
capability:
exposes:
- type: mcp
namespace: visa_merchant_risk_a
port: 8080
tools:
- name: handle-event
description: "Assesses merchant risk by querying transaction patterns from Snowflake, updates the risk score in Salesforce, and alerts the risk team via Slack."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[payments] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "payments-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When transaction volumes approach capacity thresholds, queries Snowflake trends, creates a Jira planning task, and alerts infrastructure via Slack.
naftiko: "0.5"
info:
label: "Visa Network Capacity Planning Alert"
description: "When transaction volumes approach capacity thresholds, queries Snowflake trends, creates a Jira planning task, and alerts infrastructure via Slack."
tags:
- infrastructure
- snowflake
- jira
- slack
- capacity
capability:
exposes:
- type: mcp
namespace: visa_network_capacit
port: 8080
tools:
- name: handle-event
description: "When transaction volumes approach capacity thresholds, queries Snowflake trends, creates a Jira planning task, and alerts infrastructure via Slack."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[infrastructure] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "infrastructure-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Monitors open banking API adoption and health from Snowflake, creates Jira tasks for degraded partners, and posts metrics to Slack.
naftiko: "0.5"
info:
label: "Visa Open Banking API Monitor"
description: "Monitors open banking API adoption and health from Snowflake, creates Jira tasks for degraded partners, and posts metrics to Slack."
tags:
- api-management
- snowflake
- jira
- slack
- open-banking
capability:
exposes:
- type: mcp
namespace: visa_open_banking_ap
port: 8080
tools:
- name: handle-event
description: "Monitors open banking API adoption and health from Snowflake, creates Jira tasks for degraded partners, and posts metrics to Slack."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[api-management] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "api-management-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Generates a daily API health digest from Datadog metrics, posts to Slack, and creates Jira tickets for degraded services.
naftiko: "0.5"
info:
label: "Visa Partner API Health Digest"
description: "Generates a daily API health digest from Datadog metrics, posts to Slack, and creates Jira tickets for degraded services."
tags:
- api-management
- datadog
- slack
- jira
capability:
exposes:
- type: mcp
namespace: visa_partner_api_hea
port: 8080
tools:
- name: handle-event
description: "Generates a daily API health digest from Datadog metrics, posts to Slack, and creates Jira tickets for degraded services."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[api-management] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "api-management-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When an API version is scheduled for deprecation, identifies active consumers from Snowflake, creates Jira migration tasks, and notifies via Slack.
naftiko: "0.5"
info:
label: "Visa Payment API Version Deprecation"
description: "When an API version is scheduled for deprecation, identifies active consumers from Snowflake, creates Jira migration tasks, and notifies via Slack."
tags:
- api-management
- snowflake
- jira
- slack
- deprecation
capability:
exposes:
- type: mcp
namespace: visa_payment_api_ver
port: 8080
tools:
- name: handle-event
description: "When an API version is scheduled for deprecation, identifies active consumers from Snowflake, creates Jira migration tasks, and notifies via Slack."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[api-management] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "api-management-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a dispute exceeds the resolution SLA, escalates via PagerDuty, updates ServiceNow, and notifies the dispute resolution team via Slack.
naftiko: "0.5"
info:
label: "Visa Payment Dispute Escalation"
description: "When a dispute exceeds the resolution SLA, escalates via PagerDuty, updates ServiceNow, and notifies the dispute resolution team via Slack."
tags:
- payments
- pagerduty
- servicenow
- slack
- disputes
capability:
exposes:
- type: mcp
namespace: visa_payment_dispute
port: 8080
tools:
- name: handle-event
description: "When a dispute exceeds the resolution SLA, escalates via PagerDuty, updates ServiceNow, and notifies the dispute resolution team via Slack."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[payments] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "payments-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a new fraud rule is approved, deploys to production, verifies via Datadog, logs in ServiceNow, and notifies the fraud team via Slack.
naftiko: "0.5"
info:
label: "Visa Payment Fraud Rule Deployment"
description: "When a new fraud rule is approved, deploys to production, verifies via Datadog, logs in ServiceNow, and notifies the fraud team via Slack."
tags:
- security
- datadog
- servicenow
- slack
- fraud-detection
capability:
exposes:
- type: mcp
namespace: visa_payment_fraud_r
port: 8080
tools:
- name: handle-event
description: "When a new fraud rule is approved, deploys to production, verifies via Datadog, logs in ServiceNow, and notifies the fraud team via Slack."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[security] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "security-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a payment gateway health check fails, triggers failover, creates a PagerDuty incident, and notifies the NOC via Slack.
naftiko: "0.5"
info:
label: "Visa Payment Gateway Failover Handler"
description: "When a payment gateway health check fails, triggers failover, creates a PagerDuty incident, and notifies the NOC via Slack."
tags:
- infrastructure
- pagerduty
- slack
- payments
capability:
exposes:
- type: mcp
namespace: visa_payment_gateway
port: 8080
tools:
- name: handle-event
description: "When a payment gateway health check fails, triggers failover, creates a PagerDuty incident, and notifies the NOC via Slack."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[infrastructure] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "infrastructure-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When Datadog detects network latency spikes, queries Snowflake for affected corridors, creates a Jira ticket, and alerts the network team.
naftiko: "0.5"
info:
label: "Visa Payment Network Latency Investigation"
description: "When Datadog detects network latency spikes, queries Snowflake for affected corridors, creates a Jira ticket, and alerts the network team."
tags:
- infrastructure
- datadog
- snowflake
- jira
- slack
capability:
exposes:
- type: mcp
namespace: visa_payment_network
port: 8080
tools:
- name: handle-event
description: "When Datadog detects network latency spikes, queries Snowflake for affected corridors, creates a Jira ticket, and alerts the network team."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[infrastructure] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "infrastructure-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Generates weekly capacity utilization reports from Snowflake, creates Jira planning tasks for high-utilization systems, and posts to Slack.
naftiko: "0.5"
info:
label: "Visa Payment Processing Capacity Report"
description: "Generates weekly capacity utilization reports from Snowflake, creates Jira planning tasks for high-utilization systems, and posts to Slack."
tags:
- infrastructure
- snowflake
- jira
- slack
- capacity
capability:
exposes:
- type: mcp
namespace: visa_payment_process
port: 8080
tools:
- name: handle-event
description: "Generates weekly capacity utilization reports from Snowflake, creates Jira planning tasks for high-utilization systems, and posts to Slack."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[infrastructure] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "infrastructure-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When payment processing latency exceeds SLA, creates a PagerDuty incident, posts to Slack, and opens a ServiceNow ticket.
naftiko: "0.5"
info:
label: "Visa Payment Processing SLA Alert"
description: "When payment processing latency exceeds SLA, creates a PagerDuty incident, posts to Slack, and opens a ServiceNow ticket."
tags:
- payments
- pagerduty
- slack
- servicenow
- sla
capability:
exposes:
- type: mcp
namespace: visa_payment_process
port: 8080
tools:
- name: handle-event
description: "When payment processing latency exceeds SLA, creates a PagerDuty incident, posts to Slack, and opens a ServiceNow ticket."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[payments] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "payments-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Tracks terminal certification status from Snowflake, creates Jira tasks for expiring certifications, and notifies the terminal team via Slack.
naftiko: "0.5"
info:
label: "Visa Payment Terminal Certification Tracker"
description: "Tracks terminal certification status from Snowflake, creates Jira tasks for expiring certifications, and notifies the terminal team via Slack."
tags:
- payments
- snowflake
- jira
- slack
- terminals
capability:
exposes:
- type: mcp
namespace: visa_payment_termina
port: 8080
tools:
- name: handle-event
description: "Tracks terminal certification status from Snowflake, creates Jira tasks for expiring certifications, and notifies the terminal team via Slack."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[payments] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "payments-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Runs a PCI compliance check via Splunk, creates a Jira audit ticket for findings, and notifies the compliance team via Slack.
naftiko: "0.5"
info:
label: "Visa PCI Compliance Audit Workflow"
description: "Runs a PCI compliance check via Splunk, creates a Jira audit ticket for findings, and notifies the compliance team via Slack."
tags:
- security
- splunk
- jira
- slack
- pci-compliance
capability:
exposes:
- type: mcp
namespace: visa_pci_compliance_
port: 8080
tools:
- name: handle-event
description: "Runs a PCI compliance check via Splunk, creates a Jira audit ticket for findings, and notifies the compliance team via Slack."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[security] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "security-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Queries Snowflake for prepaid program health metrics, updates Salesforce records, and posts a health summary to Slack.
naftiko: "0.5"
info:
label: "Visa Prepaid Card Program Health Check"
description: "Queries Snowflake for prepaid program health metrics, updates Salesforce records, and posts a health summary to Slack."
tags:
- payments
- snowflake
- salesforce
- slack
- prepaid
capability:
exposes:
- type: mcp
namespace: visa_prepaid_card_pr
port: 8080
tools:
- name: handle-event
description: "Queries Snowflake for prepaid program health metrics, updates Salesforce records, and posts a health summary to Slack."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[payments] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "payments-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Monitors PSD2 SCA compliance rates from Snowflake, creates Jira tickets for non-compliant issuers, and alerts the European operations team.
naftiko: "0.5"
info:
label: "Visa PSD2 Compliance Monitoring"
description: "Monitors PSD2 SCA compliance rates from Snowflake, creates Jira tickets for non-compliant issuers, and alerts the European operations team."
tags:
- compliance
- snowflake
- jira
- slack
- psd2
capability:
exposes:
- type: mcp
namespace: visa_psd2_compliance
port: 8080
tools:
- name: handle-event
description: "Monitors PSD2 SCA compliance rates from Snowflake, creates Jira tickets for non-compliant issuers, and alerts the European operations team."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[compliance] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "compliance-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Generates a QBR report from Snowflake analytics, creates a Salesforce activity record, and posts highlights to Slack.
naftiko: "0.5"
info:
label: "Visa Quarterly Business Review Generator"
description: "Generates a QBR report from Snowflake analytics, creates a Salesforce activity record, and posts highlights to Slack."
tags:
- payments
- snowflake
- salesforce
- slack
- analytics
capability:
exposes:
- type: mcp
namespace: visa_quarterly_busin
port: 8080
tools:
- name: handle-event
description: "Generates a QBR report from Snowflake analytics, creates a Salesforce activity record, and posts highlights to Slack."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[payments] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "payments-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When real-time fraud scoring triggers an alert, blocks the transaction, creates a CrowdStrike investigation, and pages the fraud ops team.
naftiko: "0.5"
info:
label: "Visa Real-Time Fraud Response"
description: "When real-time fraud scoring triggers an alert, blocks the transaction, creates a CrowdStrike investigation, and pages the fraud ops team."
tags:
- security
- crowdstrike
- pagerduty
- fraud-detection
capability:
exposes:
- type: mcp
namespace: visa_real_time_fraud
port: 8080
tools:
- name: handle-event
description: "When real-time fraud scoring triggers an alert, blocks the transaction, creates a CrowdStrike investigation, and pages the fraud ops team."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[security] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "security-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Monitors real-time payment processing metrics from Datadog, creates PagerDuty alerts for anomalies, and posts status to Slack.
naftiko: "0.5"
info:
label: "Visa Real-Time Payment Monitoring"
description: "Monitors real-time payment processing metrics from Datadog, creates PagerDuty alerts for anomalies, and posts status to Slack."
tags:
- payments
- datadog
- pagerduty
- slack
- real-time
capability:
exposes:
- type: mcp
namespace: visa_real_time_payme
port: 8080
tools:
- name: handle-event
description: "Monitors real-time payment processing metrics from Datadog, creates PagerDuty alerts for anomalies, and posts status to Slack."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[payments] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "payments-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a regulatory deadline approaches, queries Snowflake for required data, creates a Jira task, and notifies the legal team via Slack.
naftiko: "0.5"
info:
label: "Visa Regulatory Filing Workflow"
description: "When a regulatory deadline approaches, queries Snowflake for required data, creates a Jira task, and notifies the legal team via Slack."
tags:
- compliance
- snowflake
- jira
- slack
- regulatory
capability:
exposes:
- type: mcp
namespace: visa_regulatory_fili
port: 8080
tools:
- name: handle-event
description: "When a regulatory deadline approaches, queries Snowflake for required data, creates a Jira task, and notifies the legal team via Slack."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[compliance] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "compliance-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Queries Snowflake for fraud model precision and recall metrics, creates a Jira review task, and posts the digest to Slack.
naftiko: "0.5"
info:
label: "Visa Risk Model Performance Digest"
description: "Queries Snowflake for fraud model precision and recall metrics, creates a Jira review task, and posts the digest to Slack."
tags:
- security
- snowflake
- jira
- slack
- fraud-detection
capability:
exposes:
- type: mcp
namespace: visa_risk_model_perf
port: 8080
tools:
- name: handle-event
description: "Queries Snowflake for fraud model precision and recall metrics, creates a Jira review task, and posts the digest to Slack."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[security] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "security-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a new merchant application is received, screens against sanctions lists in Snowflake, creates a Jira compliance task, and notifies the compliance team.
naftiko: "0.5"
info:
label: "Visa Sanctions Screening Workflow"
description: "When a new merchant application is received, screens against sanctions lists in Snowflake, creates a Jira compliance task, and notifies the compliance team."
tags:
- compliance
- snowflake
- jira
- slack
- sanctions
capability:
exposes:
- type: mcp
namespace: visa_sanctions_scree
port: 8080
tools:
- name: handle-event
description: "When a new merchant application is received, screens against sanctions lists in Snowflake, creates a Jira compliance task, and notifies the compliance team."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[compliance] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "compliance-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When settlement reconciliation detects a mismatch, queries Snowflake for details, creates a Jira ticket, and alerts finance via Slack.
naftiko: "0.5"
info:
label: "Visa Settlement Reconciliation Alert"
description: "When settlement reconciliation detects a mismatch, queries Snowflake for details, creates a Jira ticket, and alerts finance via Slack."
tags:
- payments
- snowflake
- jira
- slack
- settlements
capability:
exposes:
- type: mcp
namespace: visa_settlement_reco
port: 8080
tools:
- name: handle-event
description: "When settlement reconciliation detects a mismatch, queries Snowflake for details, creates a Jira ticket, and alerts finance via Slack."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[payments] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "payments-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When tokens approach expiration, queries Snowflake for affected issuers, creates a Jira renewal task, and notifies the digital payments team.
naftiko: "0.5"
info:
label: "Visa Token Lifecycle Management Alert"
description: "When tokens approach expiration, queries Snowflake for affected issuers, creates a Jira renewal task, and notifies the digital payments team."
tags:
- payments
- snowflake
- jira
- slack
- tokenization
capability:
exposes:
- type: mcp
namespace: visa_token_lifecycle
port: 8080
tools:
- name: handle-event
description: "When tokens approach expiration, queries Snowflake for affected issuers, creates a Jira renewal task, and notifies the digital payments team."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[payments] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "payments-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a transaction anomaly is detected, queries Splunk for details, creates a ServiceNow incident, and pages the fraud team via PagerDuty.
naftiko: "0.5"
info:
label: "Visa Transaction Anomaly Investigation"
description: "When a transaction anomaly is detected, queries Splunk for details, creates a ServiceNow incident, and pages the fraud team via PagerDuty."
tags:
- payments
- splunk
- servicenow
- pagerduty
- fraud
capability:
exposes:
- type: mcp
namespace: visa_transaction_ano
port: 8080
tools:
- name: handle-event
description: "When a transaction anomaly is detected, queries Splunk for details, creates a ServiceNow incident, and pages the fraud team via PagerDuty."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[payments] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "payments-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Queries Snowflake for transaction volume metrics by region and card type.
naftiko: "0.5"
info:
label: "Visa Transaction Volume Query"
description: "Queries Snowflake for transaction volume metrics by region and card type."
tags:
- payments
- snowflake
- analytics
capability:
exposes:
- type: mcp
namespace: visa_transaction_vol
port: 8080
tools:
- name: query-data
description: "Queries Snowflake for transaction volume metrics by region and card type."
inputParameters:
- name: query_param
in: body
type: string
description: "The query parameter."
call: "snowflake-api.run-query"
with:
query_param: "{{query_param}}"
outputParameters:
- name: results
type: object
mapping: "$.data"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
When a new vendor is proposed, creates a security assessment in Jira, queries compliance data from Snowflake, and notifies the security team.
naftiko: "0.5"
info:
label: "Visa Vendor Security Assessment Workflow"
description: "When a new vendor is proposed, creates a security assessment in Jira, queries compliance data from Snowflake, and notifies the security team."
tags:
- security
- jira
- snowflake
- slack
- vendor-management
capability:
exposes:
- type: mcp
namespace: visa_vendor_security
port: 8080
tools:
- name: handle-event
description: "When a new vendor is proposed, creates a security assessment in Jira, queries compliance data from Snowflake, and notifies the security team."
inputParameters:
- name: event_id
in: body
type: string
description: "The triggering event identifier."
- name: context
in: body
type: string
description: "Additional context for the event."
steps:
- name: gather-data
type: call
call: "snowflake-api.run-query"
with:
event_id: "{{event_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issuetype: "Task"
summary: "[security] {{event_id}} — {{context}}"
- name: notify-team
type: call
call: "slack-api.post-message"
with:
channel: "security-ops"
text: "Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: jira-api
baseUri: "https://visa.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: slack-api
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Returns current headcount and compensation band distribution by department from Workday for finance reporting and headcount planning.
naftiko: "0.5"
info:
label: "Workday Headcount and Compensation Snapshot"
description: "Returns current headcount and compensation band distribution by department from Workday for finance reporting and headcount planning."
tags:
- hr
- finance
- reporting
- workday
- headcount
- compensation
capability:
exposes:
- type: mcp
namespace: hr-reporting
port: 8080
tools:
- name: get-headcount-snapshot
description: "Returns active employees grouped by department with compensation band distribution from Workday. Use for headcount planning and finance period-close reporting."
call: "workday-hc.list-workers"
outputParameters:
- name: workers
type: array
mapping: "$.Report_Entry"
items:
- name: employee_id
type: string
mapping: "$.Worker_ID"
- name: full_name
type: string
mapping: "$.Worker"
- name: department
type: string
mapping: "$.Organization"
- name: cost_center
type: string
mapping: "$.Cost_Center"
- name: compensation_grade
type: string
mapping: "$.Compensation_Grade"
consumes:
- type: http
namespace: workday-hc
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers"
operations:
- name: list-workers
method: GET
Assigns mandatory PCI-DSS and AML compliance training in Workday Learning to employees based on their role and tracks completion via a ServiceNow monitoring task.
naftiko: "0.5"
info:
label: "Workday Learning Compliance Assignment"
description: "Assigns mandatory PCI-DSS and AML compliance training in Workday Learning to employees based on their role and tracks completion via a ServiceNow monitoring task."
tags:
- hr
- learning
- compliance
- workday
- servicenow
- pci-dss
capability:
exposes:
- type: mcp
namespace: compliance-learning
port: 8080
tools:
- name: assign-compliance-training
description: "Given an employee ID and training course ID, assign the mandatory compliance course in Workday Learning and create a ServiceNow tracking task for completion monitoring."
inputParameters:
- name: employee_id
in: body
type: string
description: "Workday employee ID."
- name: course_id
in: body
type: string
description: "Workday Learning course ID to assign."
- name: due_date
in: body
type: string
description: "Training completion due date in YYYY-MM-DD format."
- name: compliance_type
in: body
type: string
description: "Compliance category (e.g., PCI-DSS, AML, GDPR, Ethics)."
steps:
- name: assign-course
type: call
call: "workday-lms.assign-learning"
with:
worker_id: "{{employee_id}}"
course_id: "{{course_id}}"
due_date: "{{due_date}}"
- name: create-tracking-task
type: call
call: "servicenow-learning.create-task"
with:
short_description: "{{compliance_type}} training assigned to employee {{employee_id}}"
description: "Course {{course_id}} assigned. Compliance type: {{compliance_type}}. Due: {{due_date}}."
due_date: "{{due_date}}"
consumes:
- type: http
namespace: workday-lms
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: learning-assignments
path: "/learningCourseTopics"
operations:
- name: assign-learning
method: POST
- type: http
namespace: servicenow-learning
baseUri: "https://visa.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
Returns current headcount and open positions for payment operations from Workday.
naftiko: "0.5"
info:
label: "Workday Payment Ops Headcount"
description: "Returns current headcount and open positions for payment operations from Workday."
tags:
- hr
- workday
- workforce
capability:
exposes:
- type: mcp
namespace: workday_payment_ops_
port: 8080
tools:
- name: query-data
description: "Returns current headcount and open positions for payment operations from Workday."
inputParameters:
- name: query_param
in: body
type: string
description: "The query parameter."
call: "snowflake-api.run-query"
with:
query_param: "{{query_param}}"
outputParameters:
- name: results
type: object
mapping: "$.data"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://visa.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST