ABN AMRO Capabilities
Naftiko 0.5 capability definitions for ABN AMRO - 100 capabilities showing integration workflows and service orchestrations.
Reconciles ADP payroll data with Workday employee records and Snowflake cost center budgets, creating ServiceNow tasks for discrepancies found during the monthly payroll cycle.
naftiko: "0.5"
info:
label: "ADP Payroll Reconciliation"
description: "Reconciles ADP payroll data with Workday employee records and Snowflake cost center budgets, creating ServiceNow tasks for discrepancies found during the monthly payroll cycle."
tags:
- hr
- payroll
- adp
- workday
- snowflake
- servicenow
capability:
exposes:
- type: mcp
namespace: hr-payroll
port: 8080
tools:
- name: reconcile-payroll
description: "Given a pay period, reconcile ADP payroll with Workday and Snowflake budget data, flagging discrepancies."
inputParameters:
- name: pay_period
in: body
type: string
description: "The pay period in YYYY-MM format."
- name: business_unit
in: body
type: string
description: "The business unit to reconcile."
steps:
- name: get-payroll-data
type: call
call: "adp.get-payroll-summary"
with:
pay_period: "{{pay_period}}"
business_unit: "{{business_unit}}"
- name: get-headcount
type: call
call: "snowflake.execute-query"
with:
warehouse: "HR_WH"
database: "HR_DB"
query: "SELECT department, COUNT(*) as headcount, SUM(budgeted_salary) as budget_total FROM employee_budget WHERE business_unit = '{{business_unit}}' AND period = '{{pay_period}}' GROUP BY department"
- name: create-reconciliation-task
type: call
call: "servicenow.create-record"
with:
table: "u_payroll_reconciliation"
short_description: "Payroll reconciliation: {{business_unit}} — {{pay_period}}"
description: "ADP total: {{get-payroll-data.total_gross}}. Budget total from Snowflake. Review and resolve discrepancies."
assigned_group: "HR_Payroll"
consumes:
- type: http
namespace: adp
baseUri: "https://api.adp.com/hr/v2"
authentication:
type: bearer
token: "$secrets.adp_token"
resources:
- name: payroll
path: "/workers/payroll-summary?payPeriod={{pay_period}}&businessUnit={{business_unit}}"
inputParameters:
- name: pay_period
in: query
- name: business_unit
in: query
operations:
- name: get-payroll-summary
method: GET
- type: http
namespace: snowflake
baseUri: "https://abnamro.eu-west-1.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: servicenow
baseUri: "https://abnamro.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST
On AML alert, enriches with customer data from Salesforce, checks sanctions lists, creates investigation case in ServiceNow, and notifies compliance via Teams.
naftiko: "0.5"
info:
label: "AML Alert Investigation Pipeline"
description: "On AML alert, enriches with customer data from Salesforce, checks sanctions lists, creates investigation case in ServiceNow, and notifies compliance via Teams."
tags:
- aml
- compliance
- salesforce
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: aml
port: 8080
tools:
- name: aml_alert_investigation_pipeline
description: "Orchestrate aml alert investigation pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-alert
type: call
call: "aml.get-alert"
with:
alert_id: "{{resource_id}}"
- name: get-customer
type: call
call: "salesforce.get-customer"
with:
customer_id: "{{get-alert.customer_id}}"
- name: create-case
type: call
call: "servicenow.create-case"
with:
short_description: "AML investigation: {{resource_id}}"
- name: notify
type: call
call: "msteams.send-message"
with:
channel: "compliance"
text: "AML alert {{resource_id}} for {{get-customer.name}}. Case: {{create-case.number}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://abn-amro.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: salesforce-op
method: POST
- type: http
namespace: servicenow
baseUri: "https://abn-amro.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: servicenow-op
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: msteams-op
method: POST
When a transaction monitoring alert fires, retrieves alert details from the AML system, enriches with customer data from Salesforce, checks Bloomberg sanctions, and creates a Jira investigation ticket for the financial crime team.
naftiko: "0.5"
info:
label: "AML Transaction Monitoring Alert Triage"
description: "When a transaction monitoring alert fires, retrieves alert details from the AML system, enriches with customer data from Salesforce, checks Bloomberg sanctions, and creates a Jira investigation ticket for the financial crime team."
tags:
- compliance
- aml
- transaction-monitoring
- salesforce
- bloomberg
- jira
capability:
exposes:
- type: mcp
namespace: compliance-aml
port: 8080
tools:
- name: triage-aml-alert
description: "Given an AML alert ID, enrich with customer data, run sanctions check, and open a Jira investigation case."
inputParameters:
- name: alert_id
in: body
type: string
description: "The AML system alert identifier."
- name: customer_id
in: body
type: string
description: "The Salesforce account ID associated with the flagged transaction."
steps:
- name: get-alert
type: call
call: "core-banking.get-aml-alert"
with:
alert_id: "{{alert_id}}"
- name: get-customer
type: call
call: "salesforce.get-account"
with:
account_id: "{{customer_id}}"
- name: sanctions-check
type: call
call: "bloomberg.search-sanctions"
with:
entity_name: "{{get-customer.name}}"
country: "{{get-customer.billing_country}}"
- name: create-investigation
type: call
call: "jira.create-issue"
with:
project_key: "FINCRIME"
issuetype: "Investigation"
summary: "[AML Alert] {{get-alert.rule_name}} — {{get-customer.name}}"
description: "Alert: {{alert_id}}\nRule: {{get-alert.rule_name}}\nAmount: {{get-alert.amount}} {{get-alert.currency}}\nCustomer: {{get-customer.name}}\nSanctions match: {{sanctions-check.match_status}}\nRisk score: {{sanctions-check.risk_score}}"
consumes:
- type: http
namespace: core-banking
baseUri: "https://api.abnamro.com/v1/aml"
authentication:
type: bearer
token: "$secrets.core_banking_token"
resources:
- name: alerts
path: "/alerts/{{alert_id}}"
inputParameters:
- name: alert_id
in: path
operations:
- name: get-aml-alert
method: GET
- type: http
namespace: salesforce
baseUri: "https://abnamro.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account
method: GET
- type: http
namespace: bloomberg
baseUri: "https://api.bloomberg.com/eap/v1"
authentication:
type: bearer
token: "$secrets.bloomberg_token"
resources:
- name: sanctions
path: "/sanctions/screen"
operations:
- name: search-sanctions
method: POST
- type: http
namespace: jira
baseUri: "https://abnamro.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Generates annual client review documents from portfolio data, compliance records, and performance metrics, and sends to advisors.
naftiko: "0.5"
info:
label: "Annual Review Document Generator"
description: "Generates annual client review documents from portfolio data, compliance records, and performance metrics, and sends to advisors."
tags:
- client-management
- documents
- snowflake
- salesforce
capability:
exposes:
- type: mcp
namespace: client-management
port: 8080
tools:
- name: annual_review_document_generator
description: "Orchestrate annual review document generator workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: fetch-data
type: call
call: "primary.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-data
type: call
call: "processor.transform"
with:
input: "{{fetch-data.result}}"
- name: create-record
type: call
call: "servicenow.create-record"
with:
table: "records"
data: "{{process-data.output}}"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel: "operations"
text: "Workflow {{resource_id}} complete. Record: {{create-record.number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://co.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/records"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{channel}}/channels/general/messages"
operations:
- name: send-message
method: POST
Queries Apache Kafka cluster metadata for a given topic, returning partition count, replication factor, and consumer group lag for banking event streaming.
naftiko: "0.5"
info:
label: "Apache Kafka Topic Lookup"
description: "Queries Apache Kafka cluster metadata for a given topic, returning partition count, replication factor, and consumer group lag for banking event streaming."
tags:
- messaging
- event-streaming
- apache-kafka
capability:
exposes:
- type: mcp
namespace: event-platform
port: 8080
tools:
- name: get-topic-info
description: "Look up Kafka topic metadata. Returns partition count, replication factor, and consumer lag."
inputParameters:
- name: topic_name
in: body
type: string
description: "The Kafka topic name."
- name: cluster
in: body
type: string
description: "The Kafka cluster identifier."
call: "kafka.get-topic"
with:
topic_name: "{{topic_name}}"
cluster: "{{cluster}}"
outputParameters:
- name: partition_count
type: string
mapping: "$.topic.partitions"
- name: replication_factor
type: string
mapping: "$.topic.replicationFactor"
consumes:
- type: http
namespace: kafka
baseUri: "https://kafka-rest.abnamro.com/v3"
authentication:
type: bearer
token: "$secrets.kafka_rest_token"
resources:
- name: topics
path: "/clusters/{{cluster}}/topics/{{topic_name}}"
inputParameters:
- name: cluster
in: path
- name: topic_name
in: path
operations:
- name: get-topic
method: GET
Scans API gateway for deprecated endpoints, identifies consuming applications, sends deprecation notices via email, creates migration tasks in Jira, and updates Confluence docs.
naftiko: "0.5"
info:
label: "API Deprecation Notification Pipeline"
description: "Scans API gateway for deprecated endpoints, identifies consuming applications, sends deprecation notices via email, creates migration tasks in Jira, and updates Confluence docs."
tags:
- api-management
- jira
- confluence
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: api-management
port: 8080
tools:
- name: api_deprecation_notification_pipeline
description: "Orchestrate api deprecation notification pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: scan-apis
type: call
call: "kong.get-deprecated-routes"
with:
gateway_id: "{{resource_id}}"
- name: identify-consumers
type: call
call: "apigee.get-consumers"
with:
route_id: "{{scan-apis.route_id}}"
- name: create-migration
type: call
call: "jira.create-issue"
with:
project: "API"
summary: "Migrate from deprecated API: {{resource_id}}"
- name: notify
type: call
call: "msteams.send-message"
with:
channel: "api-platform"
text: "API deprecation: {{resource_id}}. Migration ticket: {{create-migration.key}}"
consumes:
- type: http
namespace: jira
baseUri: "https://abn-amro.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: jira-op
method: POST
- type: http
namespace: confluence
baseUri: "https://abn-amro.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: confluence-op
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: msteams-op
method: POST
Retrieves a secret value from Azure Key Vault for secure credential injection in downstream banking system integrations.
naftiko: "0.5"
info:
label: "Azure Key Vault Secret Retrieval"
description: "Retrieves a secret value from Azure Key Vault for secure credential injection in downstream banking system integrations."
tags:
- security
- secrets-management
- azure-key-vault
capability:
exposes:
- type: mcp
namespace: security
port: 8080
tools:
- name: get-secret
description: "Retrieve a secret from Azure Key Vault by name. Returns the secret value and version."
inputParameters:
- name: secret_name
in: body
type: string
description: "The name of the secret in Azure Key Vault."
call: "keyvault.get-secret"
with:
secret_name: "{{secret_name}}"
outputParameters:
- name: value
type: string
mapping: "$.value"
- name: version
type: string
mapping: "$.id"
consumes:
- type: http
namespace: keyvault
baseUri: "https://abnamro-vault.vault.azure.net"
authentication:
type: bearer
token: "$secrets.azure_keyvault_token"
resources:
- name: secrets
path: "/secrets/{{secret_name}}?api-version=7.4"
inputParameters:
- name: secret_name
in: path
operations:
- name: get-secret
method: GET
Executes read-only queries against ABN AMRO Azure SQL databases for reporting.
naftiko: "0.5"
info:
label: "Azure SQL Query Runner"
description: "Executes read-only queries against ABN AMRO Azure SQL databases for reporting."
tags:
- data
- azure
- sql
capability:
exposes:
- type: mcp
namespace: analytics
port: 8080
tools:
- name: run-sql-query
description: "Execute a SQL query and return results."
inputParameters:
- name: sql_query
in: body
type: string
description: "The sql_query to look up."
call: "snowflake.get-sql_query"
with:
sql_query: "{{sql_query}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://abn-amro.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: azure_sql_query_runner
method: GET
Retrieves portfolio positions and valuations from Bloomberg AIM for a given portfolio and valuation date, returning total NAV, position count, and top holdings.
naftiko: "0.5"
info:
label: "Bloomberg AIM Portfolio Valuation"
description: "Retrieves portfolio positions and valuations from Bloomberg AIM for a given portfolio and valuation date, returning total NAV, position count, and top holdings."
tags:
- asset-management
- portfolio
- bloomberg-aim
capability:
exposes:
- type: mcp
namespace: portfolio-management
port: 8080
tools:
- name: get-portfolio-valuation
description: "Look up portfolio valuation from Bloomberg AIM. Returns NAV, position count, and top holdings by weight."
inputParameters:
- name: portfolio_id
in: body
type: string
description: "The Bloomberg AIM portfolio identifier."
- name: valuation_date
in: body
type: string
description: "Valuation date in YYYY-MM-DD format."
call: "bloomberg-aim.get-valuation"
with:
portfolio_id: "{{portfolio_id}}"
valuation_date: "{{valuation_date}}"
outputParameters:
- name: nav
type: string
mapping: "$.portfolio.nav"
- name: position_count
type: string
mapping: "$.portfolio.positionCount"
- name: currency
type: string
mapping: "$.portfolio.baseCurrency"
consumes:
- type: http
namespace: bloomberg-aim
baseUri: "https://api.bloomberg.com/aim/v1"
authentication:
type: bearer
token: "$secrets.bloomberg_aim_token"
resources:
- name: portfolios
path: "/portfolios/{{portfolio_id}}/valuations?date={{valuation_date}}"
inputParameters:
- name: portfolio_id
in: path
- name: valuation_date
in: query
operations:
- name: get-valuation
method: GET
Retrieves real-time market data for a given security from Bloomberg Enterprise Data, checks for significant price movements against Snowflake historical data, and alerts the trading desk in Microsoft Teams if volatility thresholds are breached.
naftiko: "0.5"
info:
label: "Bloomberg Market Data Lookup with Risk Check"
description: "Retrieves real-time market data for a given security from Bloomberg Enterprise Data, checks for significant price movements against Snowflake historical data, and alerts the trading desk in Microsoft Teams if volatility thresholds are breached."
tags:
- trading
- market-data
- bloomberg-enterprise-data
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: trading-data
port: 8080
tools:
- name: get-security-quote-with-check
description: "Look up real-time market data for a security by Bloomberg ticker, compare against historical volatility, and alert if thresholds are breached."
inputParameters:
- name: ticker
in: body
type: string
description: "Bloomberg ticker symbol (e.g., ABNA NA Equity)."
- name: volatility_threshold
in: body
type: number
description: "Percentage threshold for volatility alerts."
steps:
- name: get-quote
type: call
call: "bloomberg.get-quote"
with:
ticker: "{{ticker}}"
- name: get-historical
type: call
call: "snowflake.execute-query"
with:
warehouse: "TRADING_WH"
database: "MARKET_DATA_DB"
query: "SELECT AVG(close_price) as avg_price, STDDEV(close_price) as std_price FROM price_history WHERE ticker = '{{ticker}}' AND trade_date >= DATEADD(day, -30, CURRENT_DATE())"
- name: alert-desk
type: call
call: "msteams.send-message"
with:
channel: "trading-desk-alerts"
text: "Market data alert: {{ticker}} | Last: {{get-quote.last_price}} | 30d avg: {{get-historical.avg_price}} | Std: {{get-historical.std_price}} | Threshold: {{volatility_threshold}}%"
consumes:
- type: http
namespace: bloomberg
baseUri: "https://api.bloomberg.com/eap/v1"
authentication:
type: bearer
token: "$secrets.bloomberg_token"
resources:
- name: quotes
path: "/market/quotes/{{ticker}}"
inputParameters:
- name: ticker
in: path
operations:
- name: get-quote
method: GET
- type: http
namespace: snowflake
baseUri: "https://abnamro.eu-west-1.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
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel}}/messages"
inputParameters:
- name: channel
in: path
operations:
- name: send-message
method: POST
Fetches real-time market data from Bloomberg Terminal API for ABN AMRO trading desks.
naftiko: "0.5"
info:
label: "Bloomberg Terminal Data Fetch"
description: "Fetches real-time market data from Bloomberg Terminal API for ABN AMRO trading desks."
tags:
- trading
- bloomberg
- market-data
capability:
exposes:
- type: mcp
namespace: trading
port: 8080
tools:
- name: get-market-data
description: "Fetch Bloomberg market data by ticker."
inputParameters:
- name: ticker
in: body
type: string
description: "The ticker to look up."
call: "salesforce.get-ticker"
with:
ticker: "{{ticker}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://abn-amro.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: bloomberg_terminal_data_fetch
method: GET
On PR merge, runs SAST scan via SonarQube, checks dependency vulnerabilities, validates container image, approves or blocks deployment, and notifies dev team.
naftiko: "0.5"
info:
label: "CI/CD Security Gate Pipeline"
description: "On PR merge, runs SAST scan via SonarQube, checks dependency vulnerabilities, validates container image, approves or blocks deployment, and notifies dev team."
tags:
- devops
- security
- github
- jira
- slack
capability:
exposes:
- type: mcp
namespace: devops
port: 8080
tools:
- name: cicd_security_gate_pipeline
description: "Orchestrate ci/cd security gate pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-pr
type: call
call: "github.get-pull-request"
with:
pr_id: "{{resource_id}}"
- name: run-sast
type: call
call: "sonarqube.analyze-project"
with:
project_key: "{{get-pr.repo}}"
- name: check-deps
type: call
call: "snyk.test-project"
with:
project_id: "{{get-pr.repo}}"
- name: notify
type: call
call: "slack.send-message"
with:
channel: "security-reviews"
text: "Security gate for {{resource_id}}: SAST {{run-sast.status}}, Deps {{check-deps.issues}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: github-op
method: POST
- type: http
namespace: jira
baseUri: "https://abn-amro.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: jira-op
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: slack-op
method: POST
Identifies incomplete client records, creates remediation tasks, tracks completion progress, and reports to client data management.
naftiko: "0.5"
info:
label: "Client Data Remediation Pipeline"
description: "Identifies incomplete client records, creates remediation tasks, tracks completion progress, and reports to client data management."
tags:
- data-quality
- client-data
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: data-quality
port: 8080
tools:
- name: client_data_remediation_pipeline
description: "Orchestrate client data remediation pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: fetch-data
type: call
call: "primary.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-data
type: call
call: "processor.transform"
with:
input: "{{fetch-data.result}}"
- name: create-record
type: call
call: "servicenow.create-record"
with:
table: "records"
data: "{{process-data.output}}"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel: "operations"
text: "Workflow {{resource_id}} complete. Record: {{create-record.number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://co.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/records"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{channel}}/channels/general/messages"
operations:
- name: send-message
method: POST
Validates client identity, screens against sanctions lists, creates client record in Salesforce, provisions ServiceNow access, and notifies relationship manager.
naftiko: "0.5"
info:
label: "Client Onboarding KYC Pipeline"
description: "Validates client identity, screens against sanctions lists, creates client record in Salesforce, provisions ServiceNow access, and notifies relationship manager."
tags:
- kyc
- onboarding
- salesforce
- servicenow
- slack
capability:
exposes:
- type: mcp
namespace: kyc
port: 8080
tools:
- name: client_onboarding_kyc_pipeline
description: "Orchestrate client onboarding kyc pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: validate-identity
type: call
call: "kyc.validate-client"
with:
client_id: "{{resource_id}}"
- name: screen-sanctions
type: call
call: "sanctions.check-lists"
with:
name: "{{validate-identity.legal_name}}"
- name: create-client
type: call
call: "salesforce.create-account"
with:
name: "{{validate-identity.legal_name}}"
kyc_status: "{{screen-sanctions.result}}"
- name: notify
type: call
call: "slack.send-message"
with:
channel: "client-onboarding"
text: "KYC complete for {{resource_id}}: {{screen-sanctions.result}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://abn-amro.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: salesforce-op
method: POST
- type: http
namespace: servicenow
baseUri: "https://abn-amro.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: servicenow-op
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: slack-op
method: POST
Triggers portfolio rebalancing based on drift analysis, executes trades, updates positions, generates client reports, and notifies advisors.
naftiko: "0.5"
info:
label: "Client Portfolio Rebalancing Pipeline"
description: "Triggers portfolio rebalancing based on drift analysis, executes trades, updates positions, generates client reports, and notifies advisors."
tags:
- wealth-management
- portfolio
- snowflake
- salesforce
capability:
exposes:
- type: mcp
namespace: wealth-management
port: 8080
tools:
- name: client_portfolio_rebalancing_pipeline
description: "Orchestrate client portfolio rebalancing pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: fetch-data
type: call
call: "primary.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-data
type: call
call: "processor.transform"
with:
input: "{{fetch-data.result}}"
- name: create-record
type: call
call: "servicenow.create-record"
with:
table: "records"
data: "{{process-data.output}}"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel: "operations"
text: "Workflow {{resource_id}} complete. Record: {{create-record.number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://co.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/records"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{channel}}/channels/general/messages"
operations:
- name: send-message
method: POST
Aggregates client information from Salesforce CRM, Bloomberg financial data, and Snowflake transaction history to produce a unified 360-degree view for relationship managers.
naftiko: "0.5"
info:
label: "Client Relationship 360 View"
description: "Aggregates client information from Salesforce CRM, Bloomberg financial data, and Snowflake transaction history to produce a unified 360-degree view for relationship managers."
tags:
- client-management
- crm
- salesforce
- bloomberg
- snowflake
capability:
exposes:
- type: mcp
namespace: client-360
port: 8080
tools:
- name: get-client-360
description: "Given a client Salesforce ID, aggregate CRM data, Bloomberg financials, and transaction history into a unified view."
inputParameters:
- name: client_id
in: body
type: string
description: "The Salesforce account ID for the client."
steps:
- name: get-crm-data
type: call
call: "salesforce.get-account"
with:
account_id: "{{client_id}}"
- name: get-financials
type: call
call: "bloomberg.get-company"
with:
company_name: "{{get-crm-data.name}}"
- name: get-transactions
type: call
call: "snowflake.execute-query"
with:
warehouse: "CRM_WH"
database: "CLIENT_DB"
query: "SELECT product_type, SUM(volume) as total_volume, COUNT(*) as txn_count FROM client_transactions WHERE client_id = '{{client_id}}' AND txn_date >= DATEADD(month, -12, CURRENT_DATE()) GROUP BY product_type"
consumes:
- type: http
namespace: salesforce
baseUri: "https://abnamro.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account
method: GET
- type: http
namespace: bloomberg
baseUri: "https://api.bloomberg.com/eap/v1"
authentication:
type: bearer
token: "$secrets.bloomberg_token"
resources:
- name: companies
path: "/companies/search"
operations:
- name: get-company
method: POST
- type: http
namespace: snowflake
baseUri: "https://abnamro.eu-west-1.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
Scans Azure and AWS configurations, validates against CIS benchmarks, creates findings in Jira, and notifies cloud security team.
naftiko: "0.5"
info:
label: "Cloud Security Posture Assessment"
description: "Scans Azure and AWS configurations, validates against CIS benchmarks, creates findings in Jira, and notifies cloud security team."
tags:
- security
- cloud
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: security
port: 8080
tools:
- name: cloud_security_posture_assessment
description: "Orchestrate cloud security posture assessment workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: fetch-data
type: call
call: "primary.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-data
type: call
call: "processor.transform"
with:
input: "{{fetch-data.result}}"
- name: create-record
type: call
call: "servicenow.create-record"
with:
table: "records"
data: "{{process-data.output}}"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel: "operations"
text: "Workflow {{resource_id}} complete. Record: {{create-record.number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://co.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/records"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{channel}}/channels/general/messages"
operations:
- name: send-message
method: POST
Orchestrates collateral valuation by pulling positions from the core banking system, fetching market prices from Bloomberg, computing haircuts via Databricks, and updating the collateral management system in Snowflake.
naftiko: "0.5"
info:
label: "Collateral Valuation Pipeline"
description: "Orchestrates collateral valuation by pulling positions from the core banking system, fetching market prices from Bloomberg, computing haircuts via Databricks, and updating the collateral management system in Snowflake."
tags:
- collateral-management
- risk-management
- bloomberg
- databricks
- snowflake
capability:
exposes:
- type: mcp
namespace: collateral
port: 8080
tools:
- name: revalue-collateral
description: "Given a collateral pool ID and valuation date, revalue all positions using market data and apply regulatory haircuts."
inputParameters:
- name: pool_id
in: body
type: string
description: "The collateral pool identifier."
- name: valuation_date
in: body
type: string
description: "Valuation date in YYYY-MM-DD format."
steps:
- name: get-positions
type: call
call: "snowflake.execute-query"
with:
warehouse: "COLLATERAL_WH"
database: "COLLATERAL_DB"
query: "SELECT security_id, quantity, collateral_type FROM collateral_positions WHERE pool_id = '{{pool_id}}'"
- name: get-market-prices
type: call
call: "bloomberg.get-bulk-prices"
with:
securities: "{{get-positions.security_ids}}"
date: "{{valuation_date}}"
- name: compute-haircuts
type: call
call: "databricks.run-job"
with:
job_id: "collateral-haircut-model"
parameters:
pool_id: "{{pool_id}}"
valuation_date: "{{valuation_date}}"
- name: update-valuations
type: call
call: "snowflake.execute-query"
with:
warehouse: "COLLATERAL_WH"
database: "COLLATERAL_DB"
query: "CALL sp_update_collateral_valuations('{{pool_id}}', '{{valuation_date}}')"
consumes:
- type: http
namespace: snowflake
baseUri: "https://abnamro.eu-west-1.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: bloomberg
baseUri: "https://api.bloomberg.com/eap/v1"
authentication:
type: bearer
token: "$secrets.bloomberg_token"
resources:
- name: bulk-prices
path: "/market/prices/bulk"
operations:
- name: get-bulk-prices
method: POST
- type: http
namespace: databricks
baseUri: "https://adb-abnamro.azuredatabricks.net/api/2.1"
authentication:
type: bearer
token: "$secrets.databricks_token"
resources:
- name: jobs
path: "/jobs/run-now"
operations:
- name: run-job
method: POST
Searches ABN AMRO Confluence knowledge base for articles matching a query.
naftiko: "0.5"
info:
label: "Confluence Knowledge Search"
description: "Searches ABN AMRO Confluence knowledge base for articles matching a query."
tags:
- collaboration
- confluence
- knowledge-base
capability:
exposes:
- type: mcp
namespace: collaboration
port: 8080
tools:
- name: search-articles
description: "Search Confluence articles by query."
inputParameters:
- name: search_query
in: body
type: string
description: "The search_query to look up."
call: "confluence.get-search_query"
with:
search_query: "{{search_query}}"
consumes:
- type: http
namespace: confluence
baseUri: "https://abn-amro.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: confluence_knowledge_search
method: GET
Processes corporate actions for portfolio adjustments, updates positions in trading systems, reconciles in Snowflake, and notifies portfolio managers.
naftiko: "0.5"
info:
label: "Corporate Action Processing Pipeline"
description: "Processes corporate actions for portfolio adjustments, updates positions in trading systems, reconciles in Snowflake, and notifies portfolio managers."
tags:
- trading
- corporate-actions
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: trading
port: 8080
tools:
- name: corporate_action_processing_pipeline
description: "Orchestrate corporate action processing pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: fetch-data
type: call
call: "primary.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-data
type: call
call: "processor.transform"
with:
input: "{{fetch-data.result}}"
- name: create-record
type: call
call: "servicenow.create-record"
with:
table: "records"
data: "{{process-data.output}}"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel: "operations"
text: "Workflow {{resource_id}} complete. Record: {{create-record.number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://co.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/records"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{channel}}/channels/general/messages"
operations:
- name: send-message
method: POST
Monitors corporate lending covenant compliance by pulling financial ratios from Snowflake, comparing against covenant thresholds, and alerting the credit team via Jira and Microsoft Teams when breaches are detected.
naftiko: "0.5"
info:
label: "Corporate Lending Covenant Monitoring"
description: "Monitors corporate lending covenant compliance by pulling financial ratios from Snowflake, comparing against covenant thresholds, and alerting the credit team via Jira and Microsoft Teams when breaches are detected."
tags:
- lending
- credit-risk
- covenant-monitoring
- snowflake
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: lending-covenants
port: 8080
tools:
- name: check-covenant-compliance
description: "Given a facility ID and reporting date, check covenant compliance and alert on breaches."
inputParameters:
- name: facility_id
in: body
type: string
description: "The lending facility identifier."
- name: reporting_date
in: body
type: string
description: "The covenant test date in YYYY-MM-DD format."
- name: borrower_name
in: body
type: string
description: "The borrower legal entity name."
steps:
- name: get-financial-ratios
type: call
call: "snowflake.execute-query"
with:
warehouse: "LENDING_WH"
database: "LENDING_DB"
query: "SELECT covenant_type, actual_value, threshold_value, CASE WHEN actual_value > threshold_value THEN 'BREACH' ELSE 'COMPLIANT' END as status FROM covenant_monitoring WHERE facility_id = '{{facility_id}}' AND test_date = '{{reporting_date}}'"
- name: create-breach-ticket
type: call
call: "jira.create-issue"
with:
project_key: "CREDIT"
issuetype: "Task"
summary: "[Covenant Check] {{borrower_name}} — {{facility_id}} — {{reporting_date}}"
description: "Covenant compliance check for {{borrower_name}} ({{facility_id}}) as of {{reporting_date}}.\nResults: {{get-financial-ratios.row_count}} covenants tested.\nReview financial ratios and escalate any breaches."
- name: notify-credit-team
type: call
call: "msteams.send-message"
with:
channel: "credit-monitoring"
text: "Covenant check complete: {{borrower_name}} ({{facility_id}}) — {{reporting_date}}. Jira: {{create-breach-ticket.key}}. Review results for potential breaches."
consumes:
- type: http
namespace: snowflake
baseUri: "https://abnamro.eu-west-1.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: jira
baseUri: "https://abnamro.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel}}/messages"
inputParameters:
- name: channel
in: path
operations:
- name: send-message
method: POST
Receives credit application, runs scoring model in Snowflake, checks exposure limits, generates decision in ServiceNow, and notifies the credit committee.
naftiko: "0.5"
info:
label: "Credit Decision Engine Pipeline"
description: "Receives credit application, runs scoring model in Snowflake, checks exposure limits, generates decision in ServiceNow, and notifies the credit committee."
tags:
- credit
- lending
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: credit
port: 8080
tools:
- name: credit_decision_engine_pipeline
description: "Orchestrate credit decision engine pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-application
type: call
call: "lending.get-credit-app"
with:
app_id: "{{resource_id}}"
- name: run-scoring
type: call
call: "snowflake.run-query"
with:
sql_query: "CALL credit_score('{{resource_id}}')"
warehouse: "CREDIT_WH"
- name: create-decision
type: call
call: "servicenow.create-record"
with:
table: "credit_decisions"
app_id: "{{resource_id}}"
score: "{{run-scoring.score}}"
- name: notify
type: call
call: "msteams.send-message"
with:
channel: "credit-committee"
text: "Credit decision for {{resource_id}}: Score {{run-scoring.score}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://abn-amro.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: snowflake-op
method: POST
- type: http
namespace: servicenow
baseUri: "https://abn-amro.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: servicenow-op
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: msteams-op
method: POST
Pulls credit exposure data from Snowflake, aggregates by counterparty, and publishes a summary dashboard refresh to Power BI for the risk management team.
naftiko: "0.5"
info:
label: "Credit Risk Exposure Report"
description: "Pulls credit exposure data from Snowflake, aggregates by counterparty, and publishes a summary dashboard refresh to Power BI for the risk management team."
tags:
- risk-management
- credit-risk
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: risk-credit
port: 8080
tools:
- name: refresh-credit-exposure
description: "Given a reporting date and portfolio segment, query Snowflake for exposure data and trigger a Power BI dataset refresh."
inputParameters:
- name: reporting_date
in: body
type: string
description: "The reporting date in YYYY-MM-DD format."
- name: portfolio_segment
in: body
type: string
description: "Portfolio segment: corporate, retail, or sme."
steps:
- name: query-exposures
type: call
call: "snowflake.execute-query"
with:
warehouse: "RISK_WH"
database: "RISK_DB"
query: "SELECT counterparty, SUM(exposure) as total_exposure, MAX(pd) as max_pd FROM credit_exposures WHERE report_date = '{{reporting_date}}' AND segment = '{{portfolio_segment}}' GROUP BY counterparty ORDER BY total_exposure DESC"
- name: refresh-dashboard
type: call
call: "powerbi.refresh-dataset"
with:
group_id: "risk-management-workspace"
dataset_id: "credit-exposure-daily"
consumes:
- type: http
namespace: snowflake
baseUri: "https://abnamro.eu-west-1.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: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/groups/{{group_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: group_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
Receives complaint from Zendesk, enriches with client history from Salesforce, creates resolution workflow in ServiceNow, and sends response via email.
naftiko: "0.5"
info:
label: "Customer Complaint Resolution Pipeline"
description: "Receives complaint from Zendesk, enriches with client history from Salesforce, creates resolution workflow in ServiceNow, and sends response via email."
tags:
- customer-service
- zendesk
- salesforce
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: customer-service
port: 8080
tools:
- name: customer_complaint_resolution_pipeline
description: "Orchestrate customer complaint resolution pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-complaint
type: call
call: "zendesk.get-ticket"
with:
ticket_id: "{{resource_id}}"
- name: get-history
type: call
call: "salesforce.get-client-history"
with:
client_id: "{{get-complaint.client_id}}"
- name: create-resolution
type: call
call: "servicenow.create-request"
with:
short_description: "Complaint resolution: {{resource_id}}"
- name: notify
type: call
call: "msteams.send-message"
with:
channel: "client-service"
text: "Complaint {{resource_id}} resolution started. Client: {{get-history.name}}"
consumes:
- type: http
namespace: zendesk
baseUri: "https://abn-amro.zendesk.com/api/v2"
authentication:
type: bearer
token: "$secrets.zendesk_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: zendesk-op
method: POST
- type: http
namespace: salesforce
baseUri: "https://abn-amro.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: salesforce-op
method: POST
- type: http
namespace: servicenow
baseUri: "https://abn-amro.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: servicenow-op
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: msteams-op
method: POST
Audits data catalog completeness, validates data classifications, creates remediation tasks, and notifies data stewards.
naftiko: "0.5"
info:
label: "Data Catalog Governance Pipeline"
description: "Audits data catalog completeness, validates data classifications, creates remediation tasks, and notifies data stewards."
tags:
- data-governance
- catalog
- jira
- slack
capability:
exposes:
- type: mcp
namespace: data-governance
port: 8080
tools:
- name: data_catalog_governance_pipeline
description: "Orchestrate data catalog governance pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: fetch-data
type: call
call: "primary.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-data
type: call
call: "processor.transform"
with:
input: "{{fetch-data.result}}"
- name: create-record
type: call
call: "servicenow.create-record"
with:
table: "records"
data: "{{process-data.output}}"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel: "operations"
text: "Workflow {{resource_id}} complete. Record: {{create-record.number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://co.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/records"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{channel}}/channels/general/messages"
operations:
- name: send-message
method: POST
Traces data lineage from Snowflake, identifies downstream dependencies in Alation catalog, assesses impact of schema changes, creates change requests in ServiceNow.
naftiko: "0.5"
info:
label: "Data Lineage Impact Analyzer"
description: "Traces data lineage from Snowflake, identifies downstream dependencies in Alation catalog, assesses impact of schema changes, creates change requests in ServiceNow."
tags:
- data-governance
- snowflake
- servicenow
- slack
capability:
exposes:
- type: mcp
namespace: data-governance
port: 8080
tools:
- name: data_lineage_impact_analyzer
description: "Orchestrate data lineage impact analyzer workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-lineage
type: call
call: "snowflake.get-lineage"
with:
table: "{{resource_id}}"
- name: get-dependencies
type: call
call: "alation.get-downstream"
with:
table: "{{resource_id}}"
- name: create-change
type: call
call: "servicenow.create-change"
with:
short_description: "Schema change impact: {{resource_id}}"
downstream_count: "{{get-dependencies.count}}"
- name: notify
type: call
call: "slack.send-message"
with:
channel: "data-eng"
text: "Impact analysis for {{resource_id}}: {{get-dependencies.count}} downstream consumers"
consumes:
- type: http
namespace: snowflake
baseUri: "https://abn-amro.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: snowflake-op
method: POST
- type: http
namespace: servicenow
baseUri: "https://abn-amro.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: servicenow-op
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: slack-op
method: POST
When a Datadog monitor triggers a critical alert for a banking service, creates a Jira incident ticket and posts a notification to the engineering Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Datadog Alert to Jira Incident"
description: "When a Datadog monitor triggers a critical alert for a banking service, creates a Jira incident ticket and posts a notification to the engineering Microsoft Teams channel."
tags:
- observability
- incident-management
- datadog
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: observability
port: 8080
tools:
- name: handle-datadog-alert
description: "Given a Datadog alert ID, create a Jira incident and notify the engineering team in Microsoft Teams."
inputParameters:
- name: alert_id
in: body
type: string
description: "The Datadog monitor alert ID."
- name: service_name
in: body
type: string
description: "The affected banking service name."
- name: severity
in: body
type: string
description: "Alert severity: critical, warning, or info."
steps:
- name: get-alert-details
type: call
call: "datadog.get-monitor"
with:
monitor_id: "{{alert_id}}"
- name: create-incident
type: call
call: "jira.create-issue"
with:
project_key: "INC"
issuetype: "Incident"
summary: "[{{severity}}] {{service_name}} — {{get-alert-details.name}}"
description: "Datadog alert {{alert_id}} triggered.\nService: {{service_name}}\nSeverity: {{severity}}\nMessage: {{get-alert-details.message}}\nMonitor URL: {{get-alert-details.url}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel: "platform-engineering-alerts"
text: "Incident Created: {{create-incident.key}} | {{service_name}} | {{severity}} | {{get-alert-details.name}} | Jira: {{create-incident.url}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.eu/api/v1"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: monitors
path: "/monitor/{{monitor_id}}"
inputParameters:
- name: monitor_id
in: path
operations:
- name: get-monitor
method: GET
- type: http
namespace: jira
baseUri: "https://abnamro.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel}}/messages"
inputParameters:
- name: channel
in: path
operations:
- name: send-message
method: POST
Retrieves the service dependency map from Datadog for ABN AMRO microservices.
naftiko: "0.5"
info:
label: "Datadog Service Map Lookup"
description: "Retrieves the service dependency map from Datadog for ABN AMRO microservices."
tags:
- observability
- datadog
- service-map
capability:
exposes:
- type: mcp
namespace: observability
port: 8080
tools:
- name: get-service-map
description: "Get Datadog service map for a service."
inputParameters:
- name: service_name
in: body
type: string
description: "The service_name to look up."
call: "datadog.get-service_name"
with:
service_name: "{{service_name}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
header: "DD-API-KEY"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: datadog_service_map_lookup
method: GET
Calculates derivatives portfolio risk metrics by extracting positions from Snowflake, computing Greeks and VaR via Databricks ML models, publishing to Power BI, and alerting the risk desk when thresholds are breached.
naftiko: "0.5"
info:
label: "Derivatives Risk Calculation Pipeline"
description: "Calculates derivatives portfolio risk metrics by extracting positions from Snowflake, computing Greeks and VaR via Databricks ML models, publishing to Power BI, and alerting the risk desk when thresholds are breached."
tags:
- risk-management
- derivatives
- trading
- snowflake
- databricks
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: risk-derivatives
port: 8080
tools:
- name: calculate-derivatives-risk
description: "Given a portfolio and valuation date, compute Greeks and VaR for the derivatives book and alert on threshold breaches."
inputParameters:
- name: portfolio_id
in: body
type: string
description: "The derivatives portfolio identifier."
- name: valuation_date
in: body
type: string
description: "Valuation date in YYYY-MM-DD format."
- name: var_confidence
in: body
type: string
description: "VaR confidence level: 95 or 99."
steps:
- name: extract-positions
type: call
call: "snowflake.execute-query"
with:
warehouse: "RISK_WH"
database: "DERIVATIVES_DB"
query: "SELECT * FROM derivatives_positions WHERE portfolio_id = '{{portfolio_id}}' AND position_date = '{{valuation_date}}'"
- name: compute-risk
type: call
call: "databricks.run-job"
with:
job_id: "derivatives-risk-engine"
parameters:
portfolio_id: "{{portfolio_id}}"
valuation_date: "{{valuation_date}}"
confidence: "{{var_confidence}}"
- name: refresh-dashboard
type: call
call: "powerbi.refresh-dataset"
with:
group_id: "trading-risk-workspace"
dataset_id: "derivatives-risk-daily"
- name: alert-risk-desk
type: call
call: "msteams.send-message"
with:
channel: "trading-risk-alerts"
text: "Derivatives risk calculation complete: Portfolio {{portfolio_id}} for {{valuation_date}}. VaR({{var_confidence}}%): {{compute-risk.var_amount}}. Delta: {{compute-risk.total_delta}}. Gamma: {{compute-risk.total_gamma}}."
consumes:
- type: http
namespace: snowflake
baseUri: "https://abnamro.eu-west-1.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: databricks
baseUri: "https://adb-abnamro.azuredatabricks.net/api/2.1"
authentication:
type: bearer
token: "$secrets.databricks_token"
resources:
- name: jobs
path: "/jobs/run-now"
operations:
- name: run-job
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/groups/{{group_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: group_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel}}/messages"
inputParameters:
- name: channel
in: path
operations:
- name: send-message
method: POST
Tracks digital banking user flows, identifies friction points in Snowflake, creates improvement tasks in Jira, and notifies product.
naftiko: "0.5"
info:
label: "Digital Banking User Journey Analyzer"
description: "Tracks digital banking user flows, identifies friction points in Snowflake, creates improvement tasks in Jira, and notifies product."
tags:
- digital-banking
- analytics
- snowflake
- jira
capability:
exposes:
- type: mcp
namespace: digital-banking
port: 8080
tools:
- name: digital_banking_user_journey_analyzer
description: "Orchestrate digital banking user journey analyzer workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: fetch-data
type: call
call: "primary.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-data
type: call
call: "processor.transform"
with:
input: "{{fetch-data.result}}"
- name: create-record
type: call
call: "servicenow.create-record"
with:
table: "records"
data: "{{process-data.output}}"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel: "operations"
text: "Workflow {{resource_id}} complete. Record: {{create-record.number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://co.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/records"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{channel}}/channels/general/messages"
operations:
- name: send-message
method: POST
Detects digital banking incidents via monitoring, creates war room in Teams, gathers diagnostics from Splunk, and coordinates resolution.
naftiko: "0.5"
info:
label: "Digital Channel Incident Response"
description: "Detects digital banking incidents via monitoring, creates war room in Teams, gathers diagnostics from Splunk, and coordinates resolution."
tags:
- incident-response
- digital
- splunk
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: incident-response
port: 8080
tools:
- name: digital_channel_incident_response
description: "Orchestrate digital channel incident response workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: fetch-data
type: call
call: "primary.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-data
type: call
call: "processor.transform"
with:
input: "{{fetch-data.result}}"
- name: create-record
type: call
call: "servicenow.create-record"
with:
table: "records"
data: "{{process-data.output}}"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel: "operations"
text: "Workflow {{resource_id}} complete. Record: {{create-record.number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://co.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/records"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{channel}}/channels/general/messages"
operations:
- name: send-message
method: POST
Queries Dynatrace for application performance metrics, compares against historical baselines in Snowflake, and creates a Jira performance ticket when degradation is detected.
naftiko: "0.5"
info:
label: "Dynatrace Performance Baseline Comparison"
description: "Queries Dynatrace for application performance metrics, compares against historical baselines in Snowflake, and creates a Jira performance ticket when degradation is detected."
tags:
- observability
- performance
- dynatrace
- snowflake
- jira
capability:
exposes:
- type: mcp
namespace: observability-metrics
port: 8080
tools:
- name: check-performance-baseline
description: "Query Dynatrace for metrics, compare against Snowflake baselines, and create a Jira ticket on degradation."
inputParameters:
- name: entity_id
in: body
type: string
description: "The Dynatrace entity ID of the service."
- name: service_name
in: body
type: string
description: "Human-readable service name."
- name: time_range
in: body
type: string
description: "Time range for metrics (e.g., last2h, last24h, last7d)."
steps:
- name: get-current-metrics
type: call
call: "dynatrace.get-metrics"
with:
entity_id: "{{entity_id}}"
time_range: "{{time_range}}"
- name: get-baseline
type: call
call: "snowflake.execute-query"
with:
warehouse: "OPS_WH"
database: "OBSERVABILITY_DB"
query: "SELECT avg_response_time, avg_error_rate, p95_response_time FROM service_baselines WHERE entity_id = '{{entity_id}}'"
- name: create-perf-ticket
type: call
call: "jira.create-issue"
with:
project_key: "PERF"
issuetype: "Task"
summary: "[Performance] {{service_name}} — baseline deviation"
description: "Service: {{service_name}} ({{entity_id}})\nCurrent response time: {{get-current-metrics.response_time_ms}}ms\nBaseline: {{get-baseline.avg_response_time}}ms\nCurrent error rate: {{get-current-metrics.error_rate}}%\nBaseline error rate: {{get-baseline.avg_error_rate}}%"
consumes:
- type: http
namespace: dynatrace
baseUri: "https://abnamro.live.dynatrace.com/api/v2"
authentication:
type: bearer
token: "$secrets.dynatrace_token"
resources:
- name: metrics
path: "/metrics/query?entityId={{entity_id}}&from={{time_range}}"
inputParameters:
- name: entity_id
in: query
- name: time_range
in: query
operations:
- name: get-metrics
method: GET
- type: http
namespace: snowflake
baseUri: "https://abnamro.eu-west-1.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: jira
baseUri: "https://abnamro.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Searches Elasticsearch for application logs by service name and time range, returning matching log entries for troubleshooting banking system issues.
naftiko: "0.5"
info:
label: "Elasticsearch Log Search"
description: "Searches Elasticsearch for application logs by service name and time range, returning matching log entries for troubleshooting banking system issues."
tags:
- observability
- logging
- elasticsearch
capability:
exposes:
- type: mcp
namespace: log-search
port: 8080
tools:
- name: search-logs
description: "Search Elasticsearch logs by service name and time range. Returns matching log entries."
inputParameters:
- name: service_name
in: body
type: string
description: "The service name to search logs for."
- name: time_range
in: body
type: string
description: "Time range (e.g., 1h, 6h, 24h)."
- name: log_level
in: body
type: string
description: "Log level filter: ERROR, WARN, INFO, DEBUG."
call: "elasticsearch.search"
with:
index: "logs-{{service_name}}-*"
query: "level:{{log_level}} AND @timestamp:[now-{{time_range}} TO now]"
outputParameters:
- name: hit_count
type: string
mapping: "$.hits.total.value"
consumes:
- type: http
namespace: elasticsearch
baseUri: "https://es.abnamro.com:9200"
authentication:
type: basic
username: "$secrets.elasticsearch_user"
password: "$secrets.elasticsearch_password"
resources:
- name: search
path: "/{{index}}/_search"
inputParameters:
- name: index
in: path
operations:
- name: search
method: POST
Searches ABN AMRO transaction logs in Elasticsearch by criteria.
naftiko: "0.5"
info:
label: "Elasticsearch Transaction Search"
description: "Searches ABN AMRO transaction logs in Elasticsearch by criteria."
tags:
- data
- elasticsearch
- transactions
capability:
exposes:
- type: mcp
namespace: analytics
port: 8080
tools:
- name: search-transactions
description: "Search transactions by query."
inputParameters:
- name: search_query
in: body
type: string
description: "The search_query to look up."
call: "elasticsearch.get-search_query"
with:
search_query: "{{search_query}}"
consumes:
- type: http
namespace: elasticsearch
baseUri: "https://abn-amro-es.com:9200"
authentication:
type: bearer
token: "$secrets.elasticsearch_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: elasticsearch_transaction_sear
method: GET
On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions Azure Active Directory account, 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 Azure Active Directory account, and sends a Microsoft Teams welcome message."
tags:
- hr
- onboarding
- workday
- servicenow
- azure-active-directory
- 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 onboarding across ServiceNow, Azure AD, 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: department
in: body
type: string
description: "The department the new hire is joining."
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"
description: "Onboarding for {{get-employee.full_name}} starting {{start_date}} in {{department}}."
- name: provision-account
type: call
call: "azuread.create-user"
with:
display_name: "{{get-employee.full_name}}"
user_principal_name: "{{get-employee.work_email}}"
department: "{{department}}"
- name: send-welcome
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{get-employee.work_email}}"
text: "Welcome to ABN AMRO, {{get-employee.first_name}}! Your IT onboarding ticket is {{open-ticket.number}}. Your Azure AD account has been provisioned."
consumes:
- type: http
namespace: workday
baseUri: "https://wd3-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://abnamro.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: azuread
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: users
path: "/users"
operations:
- name: create-user
method: POST
- type: http
namespace: 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
On role change in Workday, updates SailPoint access, modifies Okta groups, adjusts ServiceNow assignments, and notifies the employee and manager.
naftiko: "0.5"
info:
label: "Employee Role Transfer Orchestrator"
description: "On role change in Workday, updates SailPoint access, modifies Okta groups, adjusts ServiceNow assignments, and notifies the employee and manager."
tags:
- hr
- workday
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr
port: 8080
tools:
- name: employee_role_transfer_orchestrator
description: "Orchestrate employee role transfer orchestrator workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-transfer
type: call
call: "workday.get-transfer"
with:
transfer_id: "{{resource_id}}"
- name: update-access
type: call
call: "sailpoint.update-roles"
with:
user_id: "{{get-transfer.employee_id}}"
new_role: "{{get-transfer.new_role}}"
- name: update-tickets
type: call
call: "servicenow.update-assignments"
with:
employee_id: "{{get-transfer.employee_id}}"
- name: notify
type: call
call: "msteams.send-message"
with:
channel: "hr-ops"
text: "Transfer {{resource_id}} processed for {{get-transfer.employee_name}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/abn-amro"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: workday-op
method: POST
- type: http
namespace: servicenow
baseUri: "https://abn-amro.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: servicenow-op
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: msteams-op
method: POST
Monitors employee personal trading activity, validates against restricted lists, creates compliance cases, and notifies compliance officer.
naftiko: "0.5"
info:
label: "Employee Trading Compliance Monitor"
description: "Monitors employee personal trading activity, validates against restricted lists, creates compliance cases, and notifies compliance officer."
tags:
- compliance
- employee-trading
- snowflake
- servicenow
capability:
exposes:
- type: mcp
namespace: compliance
port: 8080
tools:
- name: employee_trading_compliance_monitor
description: "Orchestrate employee trading compliance monitor workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: fetch-data
type: call
call: "primary.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-data
type: call
call: "processor.transform"
with:
input: "{{fetch-data.result}}"
- name: create-record
type: call
call: "servicenow.create-record"
with:
table: "records"
data: "{{process-data.output}}"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel: "operations"
text: "Workflow {{resource_id}} complete. Record: {{create-record.number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://co.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/records"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{channel}}/channels/general/messages"
operations:
- name: send-message
method: POST
When a critical banking service goes down, sends mass notifications via Everbridge to affected stakeholders and creates a ServiceNow major incident record.
naftiko: "0.5"
info:
label: "Everbridge Mass Notification for IT Incidents"
description: "When a critical banking service goes down, sends mass notifications via Everbridge to affected stakeholders and creates a ServiceNow major incident record."
tags:
- incident-management
- business-continuity
- everbridge
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: crisis-management
port: 8080
tools:
- name: trigger-mass-notification
description: "Given an incident description and impacted service, send Everbridge notifications, create a ServiceNow major incident, and post to Teams."
inputParameters:
- name: service_name
in: body
type: string
description: "The name of the impacted banking service."
- name: incident_summary
in: body
type: string
description: "Brief description of the incident."
- name: severity
in: body
type: string
description: "Incident severity: P1, P2, P3."
- name: contact_group
in: body
type: string
description: "The Everbridge contact group to notify."
steps:
- name: send-notification
type: call
call: "everbridge.send-notification"
with:
notification_type: "Standard"
subject: "[{{severity}}] {{service_name}} — Service Disruption"
body: "{{incident_summary}}"
contact_group: "{{contact_group}}"
- name: create-major-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "[{{severity}}] {{service_name}} — {{incident_summary}}"
impact: "1"
urgency: "1"
assigned_group: "Major_Incident_Management"
category: "service_disruption"
- name: post-to-teams
type: call
call: "msteams.send-message"
with:
channel: "major-incidents"
text: "MAJOR INCIDENT: {{severity}} | {{service_name}} | {{incident_summary}} | ServiceNow: {{create-major-incident.number}} | Everbridge notification sent to {{contact_group}}"
consumes:
- type: http
namespace: everbridge
baseUri: "https://api.everbridge.net/rest"
authentication:
type: bearer
token: "$secrets.everbridge_token"
resources:
- name: notifications
path: "/notifications"
operations:
- name: send-notification
method: POST
- type: http
namespace: servicenow
baseUri: "https://abnamro.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel}}/messages"
inputParameters:
- name: channel
in: path
operations:
- name: send-message
method: POST
When a real-time fraud detection model flags a suspicious transaction in Snowflake, enriches the alert with customer data from Salesforce, blocks the card via Mastercard API, and notifies the fraud operations team in Microsoft Teams.
naftiko: "0.5"
info:
label: "Fraud Detection Alert Pipeline"
description: "When a real-time fraud detection model flags a suspicious transaction in Snowflake, enriches the alert with customer data from Salesforce, blocks the card via Mastercard API, and notifies the fraud operations team in Microsoft Teams."
tags:
- fraud-detection
- security
- snowflake
- salesforce
- mastercard
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: fraud-ops
port: 8080
tools:
- name: handle-fraud-alert
description: "Given a fraud alert ID, enrich with customer data, optionally block the card, and notify fraud ops."
inputParameters:
- name: alert_id
in: body
type: string
description: "The fraud detection alert ID from the ML pipeline."
- name: customer_id
in: body
type: string
description: "The Salesforce customer account ID."
- name: card_number_token
in: body
type: string
description: "Tokenized card number for Mastercard API."
- name: block_card
in: body
type: string
description: "Whether to block the card: true or false."
steps:
- name: get-alert-data
type: call
call: "snowflake.execute-query"
with:
warehouse: "FRAUD_WH"
database: "FRAUD_DB"
query: "SELECT * FROM fraud_alerts WHERE alert_id = '{{alert_id}}'"
- name: get-customer
type: call
call: "salesforce.get-account"
with:
account_id: "{{customer_id}}"
- name: block-card
type: call
call: "mastercard.block-card"
with:
card_token: "{{card_number_token}}"
reason: "fraud_suspected"
- name: notify-fraud-ops
type: call
call: "msteams.send-message"
with:
channel: "fraud-operations"
text: "Fraud Alert: {{alert_id}} | Customer: {{get-customer.name}} | Card blocked: {{block_card}} | Transaction details from Snowflake query. Review immediately."
consumes:
- type: http
namespace: snowflake
baseUri: "https://abnamro.eu-west-1.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
baseUri: "https://abnamro.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account
method: GET
- type: http
namespace: mastercard
baseUri: "https://api.mastercard.com/fraud/v1"
authentication:
type: bearer
token: "$secrets.mastercard_token"
resources:
- name: cards
path: "/cards/block"
operations:
- name: block-card
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel}}/messages"
inputParameters:
- name: channel
in: path
operations:
- name: send-message
method: POST
On fraud alert, collects transaction history from core banking, enriches with customer profile from Salesforce, creates investigation in ServiceNow, and escalates via PagerDuty.
naftiko: "0.5"
info:
label: "Fraud Investigation Workflow"
description: "On fraud alert, collects transaction history from core banking, enriches with customer profile from Salesforce, creates investigation in ServiceNow, and escalates via PagerDuty."
tags:
- fraud
- investigation
- salesforce
- servicenow
- pagerduty
capability:
exposes:
- type: mcp
namespace: fraud
port: 8080
tools:
- name: fraud_investigation_workflow
description: "Orchestrate fraud investigation workflow workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-transactions
type: call
call: "corebanking.get-history"
with:
account_id: "{{resource_id}}"
- name: get-profile
type: call
call: "salesforce.get-customer"
with:
account_id: "{{resource_id}}"
- name: create-investigation
type: call
call: "servicenow.create-incident"
with:
short_description: "Fraud investigation: {{resource_id}}"
- name: escalate
type: call
call: "pagerduty.create-incident"
with:
title: "Fraud alert: {{resource_id}} - {{get-profile.name}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://abn-amro.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: salesforce-op
method: POST
- type: http
namespace: servicenow
baseUri: "https://abn-amro.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: servicenow-op
method: POST
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: pagerduty-op
method: POST
Monitors FX hedging positions, calculates effectiveness in Snowflake, generates reports, creates alerts for breaches, and notifies treasury.
naftiko: "0.5"
info:
label: "FX Hedging Position Monitor"
description: "Monitors FX hedging positions, calculates effectiveness in Snowflake, generates reports, creates alerts for breaches, and notifies treasury."
tags:
- fx
- hedging
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: fx
port: 8080
tools:
- name: fx_hedging_position_monitor
description: "Orchestrate fx hedging position monitor workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: fetch-data
type: call
call: "primary.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-data
type: call
call: "processor.transform"
with:
input: "{{fetch-data.result}}"
- name: create-record
type: call
call: "servicenow.create-record"
with:
table: "records"
data: "{{process-data.output}}"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel: "operations"
text: "Workflow {{resource_id}} complete. Record: {{create-record.number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://co.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/records"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{channel}}/channels/general/messages"
operations:
- name: send-message
method: POST
Executes a foreign exchange spot trade through Reuters, validates the rate against Bloomberg market data, books the trade in the core banking system, and confirms execution to the trader via Microsoft Teams.
naftiko: "0.5"
info:
label: "FX Spot Trade Execution"
description: "Executes a foreign exchange spot trade through Reuters, validates the rate against Bloomberg market data, books the trade in the core banking system, and confirms execution to the trader via Microsoft Teams."
tags:
- trading
- foreign-exchange
- reuters
- bloomberg
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: trading-fx
port: 8080
tools:
- name: execute-fx-spot
description: "Given a currency pair and notional, validate the rate, execute on Reuters, book internally, and confirm to the trader."
inputParameters:
- name: currency_pair
in: body
type: string
description: "Currency pair (e.g., EUR/USD)."
- name: direction
in: body
type: string
description: "Trade direction: buy or sell (base currency)."
- name: notional
in: body
type: number
description: "Notional amount in base currency."
- name: trader_upn
in: body
type: string
description: "The UPN of the executing trader."
steps:
- name: get-market-rate
type: call
call: "bloomberg.get-fx-rate"
with:
currency_pair: "{{currency_pair}}"
- name: execute-trade
type: call
call: "reuters.execute-fx-spot"
with:
currency_pair: "{{currency_pair}}"
direction: "{{direction}}"
notional: "{{notional}}"
- name: book-trade
type: call
call: "core-banking.book-fx-trade"
with:
trade_id: "{{execute-trade.trade_id}}"
currency_pair: "{{currency_pair}}"
rate: "{{execute-trade.executed_rate}}"
notional: "{{notional}}"
direction: "{{direction}}"
- name: confirm-trader
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{trader_upn}}"
text: "FX Spot executed: {{direction}} {{notional}} {{currency_pair}} at {{execute-trade.executed_rate}}. Trade ID: {{execute-trade.trade_id}}. Booked: {{book-trade.booking_ref}}. Settlement: {{execute-trade.value_date}}."
consumes:
- type: http
namespace: bloomberg
baseUri: "https://api.bloomberg.com/eap/v1"
authentication:
type: bearer
token: "$secrets.bloomberg_token"
resources:
- name: fx-rates
path: "/market/fx/{{currency_pair}}"
inputParameters:
- name: currency_pair
in: path
operations:
- name: get-fx-rate
method: GET
- type: http
namespace: reuters
baseUri: "https://api.refinitiv.com/trading/fx/v1"
authentication:
type: bearer
token: "$secrets.reuters_token"
resources:
- name: spot-orders
path: "/spot/execute"
operations:
- name: execute-fx-spot
method: POST
- type: http
namespace: core-banking
baseUri: "https://api.abnamro.com/v1/trading"
authentication:
type: bearer
token: "$secrets.core_banking_token"
resources:
- name: fx-bookings
path: "/fx/book"
operations:
- name: book-fx-trade
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
Processes a GDPR data subject access request by searching for personal data across Salesforce, Snowflake, and ServiceNow, compiling results, and creating a Jira task for the DPO team to review and respond.
naftiko: "0.5"
info:
label: "GDPR Data Subject Access Request Pipeline"
description: "Processes a GDPR data subject access request by searching for personal data across Salesforce, Snowflake, and ServiceNow, compiling results, and creating a Jira task for the DPO team to review and respond."
tags:
- privacy
- gdpr
- data-protection
- salesforce
- snowflake
- servicenow
- jira
capability:
exposes:
- type: mcp
namespace: privacy-gdpr
port: 8080
tools:
- name: process-dsar
description: "Given a data subject email and request type, search for personal data across systems and create a review task."
inputParameters:
- name: subject_email
in: body
type: string
description: "The email address of the data subject."
- name: request_type
in: body
type: string
description: "DSAR type: access, erasure, portability, or rectification."
- name: request_reference
in: body
type: string
description: "The DSAR reference number."
steps:
- name: search-crm
type: call
call: "salesforce.search-contacts"
with:
email: "{{subject_email}}"
- name: search-data-warehouse
type: call
call: "snowflake.execute-query"
with:
warehouse: "PRIVACY_WH"
database: "CUSTOMER_DB"
query: "SELECT data_category, record_count, last_updated FROM data_inventory WHERE email = '{{subject_email}}'"
- name: search-itsm
type: call
call: "servicenow.search-records"
with:
table: "sys_user"
query: "email={{subject_email}}"
- name: create-review-task
type: call
call: "jira.create-issue"
with:
project_key: "PRIVACY"
issuetype: "Task"
summary: "[DSAR] {{request_type}} — {{subject_email}} — {{request_reference}}"
description: "DSAR {{request_type}} request {{request_reference}}.\nSubject: {{subject_email}}\nSalesforce records: {{search-crm.total_size}}\nSnowflake categories found: {{search-data-warehouse.row_count}}\nServiceNow records: {{search-itsm.count}}\nDeadline: 30 days from request receipt."
consumes:
- type: http
namespace: salesforce
baseUri: "https://abnamro.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: contacts
path: "/parameterizedSearch/?q={{email}}&sobject=Contact&Contact.fields=Id,Name,Email"
inputParameters:
- name: email
in: query
operations:
- name: search-contacts
method: GET
- type: http
namespace: snowflake
baseUri: "https://abnamro.eu-west-1.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: servicenow
baseUri: "https://abnamro.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/{{table}}?sysparm_query={{query}}"
inputParameters:
- name: table
in: path
- name: query
in: query
operations:
- name: search-records
method: GET
- type: http
namespace: jira
baseUri: "https://abnamro.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Checks the review status and approval state of a GitHub pull request.
naftiko: "0.5"
info:
label: "GitHub PR Review Status"
description: "Checks the review status and approval state of a GitHub pull request."
tags:
- devops
- github
- code-review
capability:
exposes:
- type: mcp
namespace: engineering
port: 8080
tools:
- name: get-pr-status
description: "Get PR review status by number."
inputParameters:
- name: pr_number
in: body
type: string
description: "The pr_number to look up."
call: "github.get-pr_number"
with:
pr_number: "{{pr_number}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: github_pr_review_status
method: GET
Retrieves the status of a GitHub pull request including checks, review status, and merge readiness for banking application repositories.
naftiko: "0.5"
info:
label: "GitHub Pull Request Status"
description: "Retrieves the status of a GitHub pull request including checks, review status, and merge readiness for banking application repositories."
tags:
- devops
- code-review
- github
capability:
exposes:
- type: mcp
namespace: source-control
port: 8080
tools:
- name: get-pr-status
description: "Look up a GitHub pull request by repo and PR number. Returns status, checks, and review state."
inputParameters:
- name: repo
in: body
type: string
description: "The GitHub repository in owner/repo format."
- name: pr_number
in: body
type: string
description: "The pull request number."
call: "github.get-pull-request"
with:
repo: "{{repo}}"
pr_number: "{{pr_number}}"
outputParameters:
- name: state
type: string
mapping: "$.state"
- name: mergeable
type: string
mapping: "$.mergeable"
- name: title
type: string
mapping: "$.title"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: pull-requests
path: "/repos/{{repo}}/pulls/{{pr_number}}"
inputParameters:
- name: repo
in: path
- name: pr_number
in: path
operations:
- name: get-pull-request
method: GET
Retrieves the current status of Grafana alerts for ABN AMRO infrastructure monitoring.
naftiko: "0.5"
info:
label: "Grafana Alert Status"
description: "Retrieves the current status of Grafana alerts for ABN AMRO infrastructure monitoring."
tags:
- monitoring
- grafana
- alerting
capability:
exposes:
- type: mcp
namespace: monitoring
port: 8080
tools:
- name: get-alert-status
description: "Get Grafana alert status by rule ID."
inputParameters:
- name: rule_id
in: body
type: string
description: "The rule_id to look up."
call: "grafana.get-rule_id"
with:
rule_id: "{{rule_id}}"
consumes:
- type: http
namespace: grafana
baseUri: "https://abn-amro-grafana.com/api"
authentication:
type: bearer
token: "$secrets.grafana_api_key"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: grafana_alert_status
method: GET
Deploys a Helm chart to Azure Kubernetes Service for banking microservices, triggers a SonarQube quality gate check beforehand, and notifies the platform team in Microsoft Teams.
naftiko: "0.5"
info:
label: "Helm Chart Deployment to AKS"
description: "Deploys a Helm chart to Azure Kubernetes Service for banking microservices, triggers a SonarQube quality gate check beforehand, and notifies the platform team in Microsoft Teams."
tags:
- devops
- deployment
- helm
- azure-kubernetes-service
- sonarqube
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: k8s-deploy
port: 8080
tools:
- name: deploy-helm-chart
description: "Given a chart name, version, and target namespace, validate quality gate, deploy to AKS, and notify the team."
inputParameters:
- name: chart_name
in: body
type: string
description: "The Helm chart name."
- name: chart_version
in: body
type: string
description: "The Helm chart version to deploy."
- name: k8s_namespace
in: body
type: string
description: "The Kubernetes namespace to deploy into."
- name: project_key
in: body
type: string
description: "The SonarQube project key for quality gate verification."
steps:
- name: check-quality-gate
type: call
call: "sonarqube.get-quality-gate"
with:
project_key: "{{project_key}}"
- name: deploy-chart
type: call
call: "azuredevops.run-pipeline"
with:
project: "banking-services"
pipeline_id: "helm-deploy"
variables:
chart: "{{chart_name}}"
version: "{{chart_version}}"
namespace: "{{k8s_namespace}}"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel: "platform-deployments"
text: "Helm deploy: {{chart_name}}:{{chart_version}} to {{k8s_namespace}}. Quality gate: {{check-quality-gate.status}}. Pipeline run: {{deploy-chart.run_id}}."
consumes:
- type: http
namespace: sonarqube
baseUri: "https://sonarqube.abnamro.com/api"
authentication:
type: bearer
token: "$secrets.sonarqube_token"
resources:
- name: quality-gates
path: "/qualitygates/project_status?projectKey={{project_key}}"
inputParameters:
- name: project_key
in: query
operations:
- name: get-quality-gate
method: GET
- type: http
namespace: azuredevops
baseUri: "https://dev.azure.com/abnamro"
authentication:
type: bearer
token: "$secrets.azuredevops_token"
resources:
- name: pipelines
path: "/{{project}}/_apis/pipelines/{{pipeline_id}}/runs?api-version=7.1"
inputParameters:
- name: project
in: path
- name: pipeline_id
in: path
operations:
- name: run-pipeline
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel}}/messages"
inputParameters:
- name: channel
in: path
operations:
- name: send-message
method: POST
On P1 incident, creates a Teams channel, pulls recent deployments from GitHub, gathers logs from Splunk, creates a bridge call, and updates StatusPage.
naftiko: "0.5"
info:
label: "Incident War Room Orchestrator"
description: "On P1 incident, creates a Teams channel, pulls recent deployments from GitHub, gathers logs from Splunk, creates a bridge call, and updates StatusPage."
tags:
- incident-management
- github
- splunk
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: incident-management
port: 8080
tools:
- name: incident_war_room_orchestrator
description: "Orchestrate incident war room orchestrator workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-incident
type: call
call: "pagerduty.get-incident"
with:
incident_id: "{{resource_id}}"
- name: get-deployments
type: call
call: "github.get-recent-deployments"
with:
repo: "{{get-incident.service}}"
- name: get-logs
type: call
call: "splunk.search-logs"
with:
query: "{{get-incident.service}} error"
time_range: "-1h"
- name: notify
type: call
call: "msteams.send-message"
with:
channel: "war-room"
text: "P1: {{get-incident.title}}. Recent deploys: {{get-deployments.count}}. Errors: {{get-logs.count}}"
consumes:
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: pagerduty-op
method: POST
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: github-op
method: POST
- type: http
namespace: splunk
baseUri: "https://abn-amro-splunk.com/services"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: splunk-op
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: msteams-op
method: POST
Triggers an Informatica data quality profiling job, stores quality scores in Snowflake for trend analysis, and alerts the data governance team in Microsoft Teams when quality thresholds are breached.
naftiko: "0.5"
info:
label: "Informatica Data Quality Pipeline with Reporting"
description: "Triggers an Informatica data quality profiling job, stores quality scores in Snowflake for trend analysis, and alerts the data governance team in Microsoft Teams when quality thresholds are breached."
tags:
- data-quality
- data-management
- informatica
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: data-quality
port: 8080
tools:
- name: run-quality-profile-with-reporting
description: "Trigger Informatica quality profiling, store scores in Snowflake, and alert on threshold breaches."
inputParameters:
- name: task_name
in: body
type: string
description: "The Informatica data quality task name."
- name: data_domain
in: body
type: string
description: "The data domain to profile (e.g., customer, transaction, risk)."
- name: quality_threshold
in: body
type: number
description: "Minimum acceptable quality score percentage."
steps:
- name: run-profiling
type: call
call: "informatica.start-quality-task"
with:
task_name: "{{task_name}}"
data_domain: "{{data_domain}}"
- name: store-results
type: call
call: "snowflake.execute-query"
with:
warehouse: "DQ_WH"
database: "DATA_QUALITY_DB"
query: "INSERT INTO dq_scores (domain, task_name, run_id, score, profiled_at) VALUES ('{{data_domain}}', '{{task_name}}', '{{run-profiling.run_id}}', '{{run-profiling.quality_score}}', CURRENT_TIMESTAMP())"
- name: notify-governance
type: call
call: "msteams.send-message"
with:
channel: "data-governance"
text: "Data Quality: {{data_domain}} ({{task_name}}) | Run: {{run-profiling.run_id}} | Score: {{run-profiling.quality_score}}% | Threshold: {{quality_threshold}}%"
consumes:
- type: http
namespace: informatica
baseUri: "https://dm-eu.informaticacloud.com/saas/api/v2"
authentication:
type: bearer
token: "$secrets.informatica_token"
resources:
- name: jobs
path: "/job"
operations:
- name: start-quality-task
method: POST
- type: http
namespace: snowflake
baseUri: "https://abnamro.eu-west-1.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
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel}}/messages"
inputParameters:
- name: channel
in: path
operations:
- name: send-message
method: POST
Fetches yield curve data from Bloomberg, runs VaR calculations in Snowflake, generates risk report in Power BI, and notifies treasury via Teams.
naftiko: "0.5"
info:
label: "Interest Rate Risk Calculator"
description: "Fetches yield curve data from Bloomberg, runs VaR calculations in Snowflake, generates risk report in Power BI, and notifies treasury via Teams."
tags:
- risk
- treasury
- snowflake
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: risk
port: 8080
tools:
- name: interest_rate_risk_calculator
description: "Orchestrate interest rate risk calculator workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-yield-curve
type: call
call: "bloomberg.get-yield-curve"
with:
currency: "{{resource_id}}"
- name: calculate-var
type: call
call: "snowflake.run-query"
with:
sql_query: "CALL calculate_var('{{resource_id}}')"
warehouse: "RISK_WH"
- name: refresh-report
type: call
call: "powerbi.refresh-dataset"
with:
dataset_id: "interest_rate_risk"
- name: notify
type: call
call: "msteams.send-message"
with:
channel: "treasury"
text: "IR risk report updated for {{resource_id}}. VaR: {{calculate-var.var_amount}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://abn-amro.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: snowflake-op
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: powerbi-op
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: msteams-op
method: POST
Validates proposed trades against investment guidelines, checks exposure limits in Snowflake, approves or blocks, and logs decisions.
naftiko: "0.5"
info:
label: "Investment Compliance Pre-Trade Check"
description: "Validates proposed trades against investment guidelines, checks exposure limits in Snowflake, approves or blocks, and logs decisions."
tags:
- compliance
- trading
- snowflake
- servicenow
capability:
exposes:
- type: mcp
namespace: compliance
port: 8080
tools:
- name: investment_compliance_pre_trade_check
description: "Orchestrate investment compliance pre-trade check workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: fetch-data
type: call
call: "primary.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-data
type: call
call: "processor.transform"
with:
input: "{{fetch-data.result}}"
- name: create-record
type: call
call: "servicenow.create-record"
with:
table: "records"
data: "{{process-data.output}}"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel: "operations"
text: "Workflow {{resource_id}} complete. Record: {{create-record.number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://co.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/records"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{channel}}/channels/general/messages"
operations:
- name: send-message
method: POST
Validates change request in ServiceNow, runs pre-deployment tests, executes Terraform plan, monitors Datadog health, and sends post-change report.
naftiko: "0.5"
info:
label: "IT Change Management Pipeline"
description: "Validates change request in ServiceNow, runs pre-deployment tests, executes Terraform plan, monitors Datadog health, and sends post-change report."
tags:
- change-management
- servicenow
- datadog
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: change-management
port: 8080
tools:
- name: it_change_management_pipeline
description: "Orchestrate it change management pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-change
type: call
call: "servicenow.get-change"
with:
change_id: "{{resource_id}}"
- name: run-tests
type: call
call: "postman.run-collection"
with:
collection_id: "pre_change_{{resource_id}}"
- name: check-health
type: call
call: "datadog.get-monitors"
with:
tag: "change:{{resource_id}}"
- name: notify
type: call
call: "msteams.send-message"
with:
channel: "change-mgmt"
text: "Change {{resource_id}} executed. Health: {{check-health.status}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://abn-amro.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: servicenow-op
method: POST
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
header: "DD-API-KEY"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: datadog-op
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: msteams-op
method: POST
Retrieves a Jira issue by key, returning summary, status, assignee, and priority for project tracking.
naftiko: "0.5"
info:
label: "Jira Issue Lookup"
description: "Retrieves a Jira issue by key, returning summary, status, assignee, and priority for project tracking."
tags:
- project-management
- jira
capability:
exposes:
- type: mcp
namespace: project-tracking
port: 8080
tools:
- name: get-jira-issue
description: "Look up a Jira issue by key. Returns summary, status, assignee, priority, and created date."
inputParameters:
- name: issue_key
in: body
type: string
description: "The Jira issue key (e.g., RISK-1234)."
call: "jira.get-issue"
with:
issue_key: "{{issue_key}}"
outputParameters:
- name: summary
type: string
mapping: "$.fields.summary"
- name: status
type: string
mapping: "$.fields.status.name"
- name: assignee
type: string
mapping: "$.fields.assignee.displayName"
consumes:
- type: http
namespace: jira
baseUri: "https://abnamro.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue/{{issue_key}}"
inputParameters:
- name: issue_key
in: path
operations:
- name: get-issue
method: GET
Retrieves the current sprint status and velocity for an ABN AMRO engineering team board.
naftiko: "0.5"
info:
label: "Jira Sprint Status"
description: "Retrieves the current sprint status and velocity for an ABN AMRO engineering team board."
tags:
- devops
- jira
- agile
capability:
exposes:
- type: mcp
namespace: engineering
port: 8080
tools:
- name: get-sprint
description: "Get current sprint status by board ID."
inputParameters:
- name: board_id
in: body
type: string
description: "The board_id to look up."
call: "jira.get-board_id"
with:
board_id: "{{board_id}}"
consumes:
- type: http
namespace: jira
baseUri: "https://abn-amro.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: jira_sprint_status
method: GET
Queries active user sessions in Keycloak, cross-references with Azure AD sign-in logs for anomalous locations, and creates a security incident in ServiceNow when suspicious sessions are detected.
naftiko: "0.5"
info:
label: "Keycloak Suspicious Session Audit"
description: "Queries active user sessions in Keycloak, cross-references with Azure AD sign-in logs for anomalous locations, and creates a security incident in ServiceNow when suspicious sessions are detected."
tags:
- identity-management
- authentication
- keycloak
- azure-active-directory
- servicenow
capability:
exposes:
- type: mcp
namespace: identity-sessions
port: 8080
tools:
- name: audit-user-sessions
description: "List Keycloak sessions, check Azure AD sign-in logs for anomalies, and create a ServiceNow security incident if suspicious."
inputParameters:
- name: realm
in: body
type: string
description: "The Keycloak realm name."
- name: user_id
in: body
type: string
description: "The Keycloak user ID."
- name: user_principal_name
in: body
type: string
description: "The user's Azure AD UPN for sign-in log lookup."
steps:
- name: get-sessions
type: call
call: "keycloak.get-sessions"
with:
realm: "{{realm}}"
user_id: "{{user_id}}"
- name: get-signin-logs
type: call
call: "azuread.get-signin-logs"
with:
user_principal_name: "{{user_principal_name}}"
- name: create-security-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "[Session Audit] Suspicious activity — {{user_principal_name}}"
description: "User: {{user_principal_name}}\nKeycloak sessions: {{get-sessions.session_count}}\nRecent sign-in locations: {{get-signin-logs.locations}}\nReview for potential account compromise."
assigned_group: "Security_Operations_Center"
category: "security_audit"
consumes:
- type: http
namespace: keycloak
baseUri: "https://auth.abnamro.com/admin/realms"
authentication:
type: bearer
token: "$secrets.keycloak_admin_token"
resources:
- name: sessions
path: "/{{realm}}/users/{{user_id}}/sessions"
inputParameters:
- name: realm
in: path
- name: user_id
in: path
operations:
- name: get-sessions
method: GET
- type: http
namespace: azuread
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: signin-logs
path: "/auditLogs/signIns?$filter=userPrincipalName eq '{{user_principal_name}}'&$top=10"
inputParameters:
- name: user_principal_name
in: query
operations:
- name: get-signin-logs
method: GET
- type: http
namespace: servicenow
baseUri: "https://abnamro.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
Performs Know Your Customer screening by querying Salesforce for client data, running sanctions checks against Bloomberg Enterprise Data, and logging results in ServiceNow for compliance audit.
naftiko: "0.5"
info:
label: "KYC Customer Screening"
description: "Performs Know Your Customer screening by querying Salesforce for client data, running sanctions checks against Bloomberg Enterprise Data, and logging results in ServiceNow for compliance audit."
tags:
- compliance
- kyc
- salesforce
- bloomberg-enterprise-data
- servicenow
capability:
exposes:
- type: mcp
namespace: compliance-kyc
port: 8080
tools:
- name: screen-customer
description: "Given a customer ID, retrieve Salesforce profile, check Bloomberg sanctions, and log screening outcome in ServiceNow."
inputParameters:
- name: customer_id
in: body
type: string
description: "The Salesforce account ID for the customer."
- name: screening_type
in: body
type: string
description: "Type of screening: initial, periodic, or event-triggered."
steps:
- name: get-customer
type: call
call: "salesforce.get-account"
with:
account_id: "{{customer_id}}"
- name: check-sanctions
type: call
call: "bloomberg.search-sanctions"
with:
entity_name: "{{get-customer.name}}"
country: "{{get-customer.billing_country}}"
- name: log-screening
type: call
call: "servicenow.create-record"
with:
table: "u_kyc_screening"
short_description: "KYC {{screening_type}} screening: {{get-customer.name}}"
description: "Customer: {{get-customer.name}} ({{customer_id}}). Sanctions result: {{check-sanctions.match_status}}. Score: {{check-sanctions.risk_score}}."
assigned_group: "Compliance_KYC"
consumes:
- type: http
namespace: salesforce
baseUri: "https://abnamro.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account
method: GET
- type: http
namespace: bloomberg
baseUri: "https://api.bloomberg.com/eap/v1"
authentication:
type: bearer
token: "$secrets.bloomberg_token"
resources:
- name: sanctions
path: "/sanctions/screen"
operations:
- name: search-sanctions
method: POST
- type: http
namespace: servicenow
baseUri: "https://abnamro.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST
Runs a liquidity stress test scenario by extracting positions from Snowflake, applying shock parameters, computing liquidity coverage ratio via Databricks, and publishing results to Power BI with compliance notification.
naftiko: "0.5"
info:
label: "Liquidity Stress Test Orchestrator"
description: "Runs a liquidity stress test scenario by extracting positions from Snowflake, applying shock parameters, computing liquidity coverage ratio via Databricks, and publishing results to Power BI with compliance notification."
tags:
- risk-management
- liquidity
- stress-testing
- snowflake
- databricks
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: risk-liquidity
port: 8080
tools:
- name: run-liquidity-stress-test
description: "Given a scenario name and stress parameters, run liquidity stress test across Snowflake and Databricks, publish results, and notify risk committee."
inputParameters:
- name: scenario_name
in: body
type: string
description: "Stress scenario name (e.g., market_crash_2008, idiosyncratic_run)."
- name: shock_severity
in: body
type: string
description: "Shock severity: mild, moderate, or severe."
- name: reporting_date
in: body
type: string
description: "Reporting date in YYYY-MM-DD format."
steps:
- name: extract-positions
type: call
call: "snowflake.execute-query"
with:
warehouse: "RISK_WH"
database: "TREASURY_DB"
query: "SELECT * FROM liquidity_positions WHERE report_date = '{{reporting_date}}'"
- name: run-model
type: call
call: "databricks.run-job"
with:
job_id: "liquidity-stress-model"
parameters:
scenario: "{{scenario_name}}"
severity: "{{shock_severity}}"
position_data: "{{extract-positions.statement_handle}}"
- name: refresh-dashboard
type: call
call: "powerbi.refresh-dataset"
with:
group_id: "risk-management-workspace"
dataset_id: "liquidity-stress-results"
- name: notify-risk-committee
type: call
call: "msteams.send-message"
with:
channel: "risk-committee"
text: "Liquidity stress test complete: {{scenario_name}} ({{shock_severity}}) for {{reporting_date}}. Databricks run: {{run-model.run_id}}. Dashboard refreshed. Review results in Power BI."
consumes:
- type: http
namespace: snowflake
baseUri: "https://abnamro.eu-west-1.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: databricks
baseUri: "https://adb-abnamro.azuredatabricks.net/api/2.1"
authentication:
type: bearer
token: "$secrets.databricks_token"
resources:
- name: jobs
path: "/jobs/run-now"
operations:
- name: run-job
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/groups/{{group_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: group_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel}}/messages"
inputParameters:
- name: channel
in: path
operations:
- name: send-message
method: POST
Orchestrates a new loan application by pulling applicant data from Salesforce, running credit scoring via Snowflake ML models, creating a ServiceNow case for underwriting review, and notifying the relationship manager in Microsoft Teams.
naftiko: "0.5"
info:
label: "Loan Application Processing Pipeline"
description: "Orchestrates a new loan application by pulling applicant data from Salesforce, running credit scoring via Snowflake ML models, creating a ServiceNow case for underwriting review, and notifying the relationship manager in Microsoft Teams."
tags:
- lending
- loan-origination
- salesforce
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: lending
port: 8080
tools:
- name: process-loan-application
description: "Given a loan application ID and applicant Salesforce ID, orchestrate credit scoring and underwriting workflow."
inputParameters:
- name: application_id
in: body
type: string
description: "The loan application reference number."
- name: applicant_id
in: body
type: string
description: "The Salesforce account ID of the applicant."
- name: loan_amount
in: body
type: number
description: "Requested loan amount in EUR."
- name: loan_type
in: body
type: string
description: "Loan type: mortgage, corporate, sme, or consumer."
steps:
- name: get-applicant
type: call
call: "salesforce.get-account"
with:
account_id: "{{applicant_id}}"
- name: run-credit-score
type: call
call: "snowflake.execute-query"
with:
warehouse: "LENDING_WH"
database: "LENDING_DB"
query: "SELECT credit_score, pd_estimate, lgd_estimate FROM ml_credit_scores WHERE customer_id = '{{applicant_id}}' ORDER BY scored_at DESC LIMIT 1"
- name: create-case
type: call
call: "servicenow.create-record"
with:
table: "u_loan_underwriting"
short_description: "Loan underwriting: {{get-applicant.name}} — EUR {{loan_amount}}"
description: "Application: {{application_id}}\nApplicant: {{get-applicant.name}}\nType: {{loan_type}}\nAmount: EUR {{loan_amount}}\nCredit score: {{run-credit-score.credit_score}}\nPD: {{run-credit-score.pd_estimate}}"
assigned_group: "Underwriting_{{loan_type}}"
- name: notify-rm
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{get-applicant.owner_email}}"
text: "Loan application {{application_id}} for {{get-applicant.name}} (EUR {{loan_amount}}) is now in underwriting. Credit score: {{run-credit-score.credit_score}}. ServiceNow case: {{create-case.number}}."
consumes:
- type: http
namespace: salesforce
baseUri: "https://abnamro.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account
method: GET
- type: http
namespace: snowflake
baseUri: "https://abnamro.eu-west-1.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: servicenow
baseUri: "https://abnamro.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Validates incoming market data feeds against expected patterns, identifies anomalies in Snowflake, creates alerts in PagerDuty, and logs quality metrics in Grafana.
naftiko: "0.5"
info:
label: "Market Data Quality Monitor"
description: "Validates incoming market data feeds against expected patterns, identifies anomalies in Snowflake, creates alerts in PagerDuty, and logs quality metrics in Grafana."
tags:
- market-data
- quality
- snowflake
- pagerduty
- grafana
capability:
exposes:
- type: mcp
namespace: market-data
port: 8080
tools:
- name: market_data_quality_monitor
description: "Orchestrate market data quality monitor workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: validate-feeds
type: call
call: "bloomberg.validate-feed"
with:
feed_id: "{{resource_id}}"
- name: check-anomalies
type: call
call: "snowflake.run-query"
with:
sql_query: "CALL check_market_data_quality('{{resource_id}}')"
warehouse: "MARKET_WH"
- name: create-alert
type: call
call: "pagerduty.create-incident"
with:
title: "Market data quality: {{resource_id}}"
severity: "{{check-anomalies.severity}}"
- name: log-metrics
type: call
call: "grafana.push-metrics"
with:
dashboard_uid: "market-data-quality"
quality_score: "{{check-anomalies.score}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://abn-amro.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: snowflake-op
method: POST
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: pagerduty-op
method: POST
- type: http
namespace: grafana
baseUri: "https://abn-amro-grafana.com/api"
authentication:
type: bearer
token: "$secrets.grafana_api_key"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: grafana-op
method: POST
Computes daily Value-at-Risk across the trading book by pulling positions from Snowflake, running Monte Carlo simulation in Databricks, storing results, and publishing the risk report to Power BI with breach alerts.
naftiko: "0.5"
info:
label: "Market Risk VaR Reporting Pipeline"
description: "Computes daily Value-at-Risk across the trading book by pulling positions from Snowflake, running Monte Carlo simulation in Databricks, storing results, and publishing the risk report to Power BI with breach alerts."
tags:
- risk-management
- market-risk
- var
- snowflake
- databricks
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: risk-market
port: 8080
tools:
- name: compute-daily-var
description: "Given a trading book and date, compute VaR using Monte Carlo simulation and publish results."
inputParameters:
- name: trading_book
in: body
type: string
description: "The trading book identifier."
- name: valuation_date
in: body
type: string
description: "Valuation date in YYYY-MM-DD format."
- name: simulation_count
in: body
type: number
description: "Number of Monte Carlo simulations (e.g., 10000)."
steps:
- name: extract-positions
type: call
call: "snowflake.execute-query"
with:
warehouse: "RISK_WH"
database: "TRADING_DB"
query: "SELECT * FROM trading_positions WHERE book_id = '{{trading_book}}' AND position_date = '{{valuation_date}}'"
- name: run-simulation
type: call
call: "databricks.run-job"
with:
job_id: "monte-carlo-var"
parameters:
book_id: "{{trading_book}}"
date: "{{valuation_date}}"
simulations: "{{simulation_count}}"
- name: refresh-report
type: call
call: "powerbi.refresh-dataset"
with:
group_id: "risk-management-workspace"
dataset_id: "market-risk-var-daily"
- name: alert-risk-management
type: call
call: "msteams.send-message"
with:
channel: "market-risk"
text: "Daily VaR computed: {{trading_book}} for {{valuation_date}}. VaR(99%): {{run-simulation.var_99}}. VaR(95%): {{run-simulation.var_95}}. Simulations: {{simulation_count}}. Dashboard refreshed."
consumes:
- type: http
namespace: snowflake
baseUri: "https://abnamro.eu-west-1.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: databricks
baseUri: "https://adb-abnamro.azuredatabricks.net/api/2.1"
authentication:
type: bearer
token: "$secrets.databricks_token"
resources:
- name: jobs
path: "/jobs/run-now"
operations:
- name: run-job
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/groups/{{group_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: group_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel}}/messages"
inputParameters:
- name: channel
in: path
operations:
- name: send-message
method: POST
When Microsoft Defender raises a security alert, enriches with Azure AD user context, creates a ServiceNow security incident, and notifies the SOC team in Microsoft Teams.
naftiko: "0.5"
info:
label: "Microsoft Defender Threat Alert Triage"
description: "When Microsoft Defender raises a security alert, enriches with Azure AD user context, creates a ServiceNow security incident, and notifies the SOC team in Microsoft Teams."
tags:
- security
- threat-detection
- microsoft-defender
- azure-active-directory
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: security-ops
port: 8080
tools:
- name: triage-defender-alert
description: "Given a Defender alert ID, enrich with user context, create a security incident, and notify the SOC."
inputParameters:
- name: alert_id
in: body
type: string
description: "The Microsoft Defender alert ID."
- name: user_principal_name
in: body
type: string
description: "The UPN of the affected user."
steps:
- name: get-alert
type: call
call: "defender.get-alert"
with:
alert_id: "{{alert_id}}"
- name: get-user-context
type: call
call: "azuread.get-user"
with:
user_principal_name: "{{user_principal_name}}"
- name: create-security-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "[Security] {{get-alert.title}} — {{get-user-context.display_name}}"
description: "Defender Alert: {{alert_id}}\nSeverity: {{get-alert.severity}}\nCategory: {{get-alert.category}}\nUser: {{get-user-context.display_name}} ({{user_principal_name}})\nDepartment: {{get-user-context.department}}\nDescription: {{get-alert.description}}"
assigned_group: "Security_Operations_Center"
impact: "2"
- name: notify-soc
type: call
call: "msteams.send-message"
with:
channel: "soc-alerts"
text: "Security Alert: {{get-alert.title}} | Severity: {{get-alert.severity}} | User: {{get-user-context.display_name}} | ServiceNow: {{create-security-incident.number}}"
consumes:
- type: http
namespace: defender
baseUri: "https://api.security.microsoft.com/api"
authentication:
type: bearer
token: "$secrets.defender_token"
resources:
- name: alerts
path: "/alerts/{{alert_id}}"
inputParameters:
- name: alert_id
in: path
operations:
- name: get-alert
method: GET
- type: http
namespace: azuread
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: users
path: "/users/{{user_principal_name}}"
inputParameters:
- name: user_principal_name
in: path
operations:
- name: get-user
method: GET
- type: http
namespace: servicenow
baseUri: "https://abnamro.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel}}/messages"
inputParameters:
- name: channel
in: path
operations:
- name: send-message
method: POST
Queries Microsoft Entra for conditional access policies applied to a user, returning policy names, grant controls, and session controls for security audit.
naftiko: "0.5"
info:
label: "Microsoft Entra Conditional Access Policy Check"
description: "Queries Microsoft Entra for conditional access policies applied to a user, returning policy names, grant controls, and session controls for security audit."
tags:
- security
- identity-management
- microsoft-entra
capability:
exposes:
- type: mcp
namespace: identity-security
port: 8080
tools:
- name: get-conditional-access
description: "List conditional access policies affecting a user. Returns policy names, states, and grant conditions."
inputParameters:
- name: user_principal_name
in: body
type: string
description: "The user principal name (UPN) to check policies for."
call: "entra.get-policies"
with:
user_principal_name: "{{user_principal_name}}"
outputParameters:
- name: policy_count
type: string
mapping: "$.value.length"
consumes:
- type: http
namespace: entra
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: policies
path: "/identity/conditionalAccess/policies?$filter=conditions/users/includeUsers/any(u:u eq '{{user_principal_name}}')"
inputParameters:
- name: user_principal_name
in: query
operations:
- name: get-policies
method: GET
Triggers a Microsoft Purview data classification scan on a specified data source and returns scan status and discovered sensitive data types for data governance compliance.
naftiko: "0.5"
info:
label: "Microsoft Purview Data Classification Scan"
description: "Triggers a Microsoft Purview data classification scan on a specified data source and returns scan status and discovered sensitive data types for data governance compliance."
tags:
- data-governance
- classification
- microsoft-purview
capability:
exposes:
- type: mcp
namespace: data-governance
port: 8080
tools:
- name: trigger-classification-scan
description: "Trigger a Purview classification scan on a data source. Returns scan run ID and status."
inputParameters:
- name: data_source_name
in: body
type: string
description: "The Purview registered data source name."
- name: scan_name
in: body
type: string
description: "The scan definition name."
call: "purview.run-scan"
with:
data_source_name: "{{data_source_name}}"
scan_name: "{{scan_name}}"
outputParameters:
- name: run_id
type: string
mapping: "$.scanRunId"
- name: status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: purview
baseUri: "https://abnamro-purview.purview.azure.com"
authentication:
type: bearer
token: "$secrets.purview_token"
resources:
- name: scans
path: "/scan/datasources/{{data_source_name}}/scans/{{scan_name}}/runs?api-version=2023-09-01"
inputParameters:
- name: data_source_name
in: path
- name: scan_name
in: path
operations:
- name: run-scan
method: POST
Receives mortgage application, runs credit check, validates documents in SharePoint, creates workflow in ServiceNow, and notifies the applicant via email.
naftiko: "0.5"
info:
label: "Mortgage Application Processor"
description: "Receives mortgage application, runs credit check, validates documents in SharePoint, creates workflow in ServiceNow, and notifies the applicant via email."
tags:
- lending
- mortgage
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: lending
port: 8080
tools:
- name: mortgage_application_processor
description: "Orchestrate mortgage application processor workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-application
type: call
call: "lending.get-application"
with:
app_id: "{{resource_id}}"
- name: run-credit-check
type: call
call: "creditbureau.check-score"
with:
ssn: "{{get-application.ssn}}"
- name: create-workflow
type: call
call: "servicenow.create-request"
with:
short_description: "Mortgage: {{resource_id}}"
credit_score: "{{run-credit-check.score}}"
- name: notify
type: call
call: "msteams.send-message"
with:
channel: "lending-ops"
text: "Mortgage {{resource_id}} processed. Score: {{run-credit-check.score}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://abn-amro.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: servicenow-op
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: msteams-op
method: POST
Queries the MuleSoft Anypoint Platform for API deployment status and health metrics, compares against SLA thresholds in Datadog, and creates a ServiceNow incident when error rates exceed acceptable levels.
naftiko: "0.5"
info:
label: "MuleSoft API Health Check with Incident Creation"
description: "Queries the MuleSoft Anypoint Platform for API deployment status and health metrics, compares against SLA thresholds in Datadog, and creates a ServiceNow incident when error rates exceed acceptable levels."
tags:
- api-management
- integration
- mulesoft
- datadog
- servicenow
capability:
exposes:
- type: mcp
namespace: api-gateway
port: 8080
tools:
- name: check-api-health-with-escalation
description: "Check MuleSoft API health, compare against Datadog SLA metrics, and create a ServiceNow incident on degradation."
inputParameters:
- name: api_id
in: body
type: string
description: "The MuleSoft Anypoint API instance ID."
- name: environment
in: body
type: string
description: "Deployment environment: sandbox or production."
- name: error_rate_threshold
in: body
type: number
description: "Error rate threshold percentage for escalation."
steps:
- name: get-api-status
type: call
call: "mulesoft.get-api-status"
with:
api_id: "{{api_id}}"
environment: "{{environment}}"
- name: get-datadog-metrics
type: call
call: "datadog.get-metrics"
with:
query: "avg:mulesoft.api.error_rate{api_id:{{api_id}},env:{{environment}}}"
time_range: "1h"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "API degradation: {{api_id}} in {{environment}}"
description: "MuleSoft API {{api_id}} ({{environment}}) is degraded.\nStatus: {{get-api-status.status}}\nError rate: {{get-datadog-metrics.error_rate}}%\nThreshold: {{error_rate_threshold}}%"
assigned_group: "API_Platform"
category: "api_degradation"
consumes:
- type: http
namespace: mulesoft
baseUri: "https://anypoint.mulesoft.com/apimanager/api/v1"
authentication:
type: bearer
token: "$secrets.mulesoft_token"
resources:
- name: apis
path: "/organizations/{{org_id}}/environments/{{environment}}/apis/{{api_id}}"
inputParameters:
- name: api_id
in: path
- name: environment
in: path
operations:
- name: get-api-status
method: GET
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.eu/api/v1"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: metrics
path: "/query"
operations:
- name: get-metrics
method: GET
- type: http
namespace: servicenow
baseUri: "https://abnamro.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
Reconciles nostro accounts with correspondent banks, identifies breaks in Snowflake, creates resolution tickets, and notifies operations.
naftiko: "0.5"
info:
label: "Nostro Reconciliation Pipeline"
description: "Reconciles nostro accounts with correspondent banks, identifies breaks in Snowflake, creates resolution tickets, and notifies operations."
tags:
- operations
- reconciliation
- snowflake
- servicenow
capability:
exposes:
- type: mcp
namespace: operations
port: 8080
tools:
- name: nostro_reconciliation_pipeline
description: "Orchestrate nostro reconciliation pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: fetch-data
type: call
call: "primary.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-data
type: call
call: "processor.transform"
with:
input: "{{fetch-data.result}}"
- name: create-record
type: call
call: "servicenow.create-record"
with:
table: "records"
data: "{{process-data.output}}"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel: "operations"
text: "Workflow {{resource_id}} complete. Record: {{create-record.number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://co.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/records"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{channel}}/channels/general/messages"
operations:
- name: send-message
method: POST
Checks if a user has access to a specific Okta application at ABN AMRO.
naftiko: "0.5"
info:
label: "Okta Application Assignment Check"
description: "Checks if a user has access to a specific Okta application at ABN AMRO."
tags:
- security
- okta
- access-management
capability:
exposes:
- type: mcp
namespace: identity
port: 8080
tools:
- name: check-app-access
description: "Check user application access in Okta."
inputParameters:
- name: user_email
in: body
type: string
description: "The user_email to look up."
call: "okta.get-user_email"
with:
user_email: "{{user_email}}"
consumes:
- type: http
namespace: okta
baseUri: "https://abn-amro.okta.com/api/v1"
authentication:
type: apiKey
key: "$secrets.okta_api_token"
header: "Authorization"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: okta_application_assignment_ch
method: GET
Queries distributed traces from the OpenTelemetry-backed tracing backend for a given trace ID, returning span details and latency breakdown for banking microservice debugging.
naftiko: "0.5"
info:
label: "OpenTelemetry Trace Lookup"
description: "Queries distributed traces from the OpenTelemetry-backed tracing backend for a given trace ID, returning span details and latency breakdown for banking microservice debugging."
tags:
- observability
- tracing
- opentelemetry
capability:
exposes:
- type: mcp
namespace: distributed-tracing
port: 8080
tools:
- name: get-trace
description: "Look up a distributed trace by trace ID. Returns span tree, total duration, and error spans."
inputParameters:
- name: trace_id
in: body
type: string
description: "The OpenTelemetry trace ID (32-char hex)."
call: "otel.get-trace"
with:
trace_id: "{{trace_id}}"
outputParameters:
- name: span_count
type: string
mapping: "$.spans.length"
- name: total_duration_ms
type: string
mapping: "$.duration"
consumes:
- type: http
namespace: otel
baseUri: "https://tracing.abnamro.com/api/v2"
authentication:
type: bearer
token: "$secrets.otel_token"
resources:
- name: traces
path: "/traces/{{trace_id}}"
inputParameters:
- name: trace_id
in: path
operations:
- name: get-trace
method: GET
Captures operational risk events, categorizes by Basel taxonomy, calculates capital charges in Snowflake, and notifies risk management.
naftiko: "0.5"
info:
label: "Operational Risk Event Pipeline"
description: "Captures operational risk events, categorizes by Basel taxonomy, calculates capital charges in Snowflake, and notifies risk management."
tags:
- risk
- operational-risk
- snowflake
- servicenow
capability:
exposes:
- type: mcp
namespace: risk
port: 8080
tools:
- name: operational_risk_event_pipeline
description: "Orchestrate operational risk event pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: fetch-data
type: call
call: "primary.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-data
type: call
call: "processor.transform"
with:
input: "{{fetch-data.result}}"
- name: create-record
type: call
call: "servicenow.create-record"
with:
table: "records"
data: "{{process-data.output}}"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel: "operations"
text: "Workflow {{resource_id}} complete. Record: {{create-record.number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://co.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/records"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{channel}}/channels/general/messages"
operations:
- name: send-message
method: POST
Retrieves the current on-call schedule for ABN AMRO incident response teams.
naftiko: "0.5"
info:
label: "PagerDuty On-Call Schedule"
description: "Retrieves the current on-call schedule for ABN AMRO incident response teams."
tags:
- devops
- pagerduty
- on-call
capability:
exposes:
- type: mcp
namespace: incident-mgmt
port: 8080
tools:
- name: get-on-call
description: "Get current on-call schedule by policy."
inputParameters:
- name: policy_id
in: body
type: string
description: "The policy_id to look up."
call: "pagerduty.get-policy_id"
with:
policy_id: "{{policy_id}}"
consumes:
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: pagerduty_on_call_schedule
method: GET
Extracts payment batches from SWIFT, reconciles against core banking ledger, identifies breaks, creates Jira tickets, and reports to operations.
naftiko: "0.5"
info:
label: "Payment Processing Reconciliation"
description: "Extracts payment batches from SWIFT, reconciles against core banking ledger, identifies breaks, creates Jira tickets, and reports to operations."
tags:
- payments
- reconciliation
- jira
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: payments
port: 8080
tools:
- name: payment_processing_reconciliation
description: "Orchestrate payment processing reconciliation workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-payments
type: call
call: "swift.get-batch"
with:
batch_id: "{{resource_id}}"
- name: reconcile
type: call
call: "snowflake.run-query"
with:
sql_query: "CALL reconcile_payments('{{resource_id}}')"
warehouse: "PAYMENTS_WH"
- name: create-breaks
type: call
call: "jira.create-issue"
with:
project: "PAY"
summary: "Payment breaks: batch {{resource_id}}"
- name: notify
type: call
call: "msteams.send-message"
with:
channel: "payment-ops"
text: "Reconciliation complete for batch {{resource_id}}. Breaks: {{reconcile.break_count}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://abn-amro.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: snowflake-op
method: POST
- type: http
namespace: jira
baseUri: "https://abn-amro.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: jira-op
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: msteams-op
method: POST
Queries a SEPA or SWIFT payment transaction status from the core banking system, checks processing SLA compliance against Snowflake benchmarks, and escalates overdue payments via ServiceNow.
naftiko: "0.5"
info:
label: "Payment Transaction Status with SLA Check"
description: "Queries a SEPA or SWIFT payment transaction status from the core banking system, checks processing SLA compliance against Snowflake benchmarks, and escalates overdue payments via ServiceNow."
tags:
- payments
- banking
- snowflake
- servicenow
capability:
exposes:
- type: mcp
namespace: payments
port: 8080
tools:
- name: get-payment-status-with-sla
description: "Look up a payment transaction by reference, check SLA compliance, and escalate if overdue."
inputParameters:
- name: payment_reference
in: body
type: string
description: "The unique payment reference or end-to-end ID."
- name: expected_sla_hours
in: body
type: number
description: "Expected SLA in hours for payment settlement."
steps:
- name: get-payment
type: call
call: "core-banking.get-payment"
with:
reference: "{{payment_reference}}"
- name: check-sla
type: call
call: "snowflake.execute-query"
with:
warehouse: "PAYMENTS_WH"
database: "PAYMENTS_DB"
query: "SELECT TIMESTAMPDIFF(hour, initiated_at, CURRENT_TIMESTAMP()) as hours_elapsed FROM payment_tracking WHERE reference = '{{payment_reference}}'"
- name: escalate-overdue
type: call
call: "servicenow.create-record"
with:
table: "u_payment_escalation"
short_description: "Payment SLA breach: {{payment_reference}}"
description: "Payment {{payment_reference}} status: {{get-payment.status}}. Hours elapsed: {{check-sla.hours_elapsed}}. Expected SLA: {{expected_sla_hours}} hours."
assigned_group: "Payment_Operations"
consumes:
- type: http
namespace: core-banking
baseUri: "https://api.abnamro.com/v1/payments"
authentication:
type: bearer
token: "$secrets.core_banking_token"
resources:
- name: transactions
path: "/transactions/{{reference}}"
inputParameters:
- name: reference
in: path
operations:
- name: get-payment
method: GET
- type: http
namespace: snowflake
baseUri: "https://abnamro.eu-west-1.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: servicenow
baseUri: "https://abnamro.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST
Triggers a Postman collection run for banking API regression tests, logs results to Snowflake for trend analysis, and notifies the QA team in Microsoft Teams with pass/fail summary.
naftiko: "0.5"
info:
label: "Postman API Regression Suite with Reporting"
description: "Triggers a Postman collection run for banking API regression tests, logs results to Snowflake for trend analysis, and notifies the QA team in Microsoft Teams with pass/fail summary."
tags:
- testing
- api-testing
- postman
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: api-testing
port: 8080
tools:
- name: run-api-regression-suite
description: "Run a Postman collection, log results to Snowflake, and notify the QA team."
inputParameters:
- name: collection_id
in: body
type: string
description: "The Postman collection UID."
- name: environment_id
in: body
type: string
description: "The Postman environment UID."
- name: suite_name
in: body
type: string
description: "Human-readable test suite name."
steps:
- name: run-tests
type: call
call: "postman.run-collection"
with:
collection: "{{collection_id}}"
environment: "{{environment_id}}"
- name: log-results
type: call
call: "snowflake.execute-query"
with:
warehouse: "QA_WH"
database: "QA_DB"
query: "INSERT INTO api_test_results (suite_name, run_id, status, executed_at) VALUES ('{{suite_name}}', '{{run-tests.run_id}}', '{{run-tests.status}}', CURRENT_TIMESTAMP())"
- name: notify-qa
type: call
call: "msteams.send-message"
with:
channel: "qa-api-testing"
text: "API Regression: {{suite_name}} | Run: {{run-tests.run_id}} | Status: {{run-tests.status}} | Results logged to Snowflake."
consumes:
- type: http
namespace: postman
baseUri: "https://api.getpostman.com"
authentication:
type: bearer
token: "$secrets.postman_api_key"
resources:
- name: collection-runs
path: "/collections/{{collection}}/runs"
inputParameters:
- name: collection
in: path
operations:
- name: run-collection
method: POST
- type: http
namespace: snowflake
baseUri: "https://abnamro.eu-west-1.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
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel}}/messages"
inputParameters:
- name: channel
in: path
operations:
- name: send-message
method: POST
Triggers a Power BI dataset refresh, validates the refresh completed successfully by checking status, and notifies the analytics team in Microsoft Teams with the result.
naftiko: "0.5"
info:
label: "Power BI Dashboard Refresh with Validation"
description: "Triggers a Power BI dataset refresh, validates the refresh completed successfully by checking status, and notifies the analytics team in Microsoft Teams with the result."
tags:
- analytics
- reporting
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: analytics
port: 8080
tools:
- name: refresh-and-validate-powerbi
description: "Trigger a Power BI dataset refresh, check completion status, and notify the analytics team."
inputParameters:
- name: group_id
in: body
type: string
description: "The Power BI workspace (group) ID."
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID."
- name: report_name
in: body
type: string
description: "Human-readable report name for notifications."
steps:
- name: trigger-refresh
type: call
call: "powerbi.refresh-dataset"
with:
group_id: "{{group_id}}"
dataset_id: "{{dataset_id}}"
- name: check-status
type: call
call: "powerbi.get-refresh-history"
with:
group_id: "{{group_id}}"
dataset_id: "{{dataset_id}}"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel: "analytics-reports"
text: "Power BI refresh: {{report_name}} | Status: {{check-status.status}} | Duration: {{check-status.duration}} | Dataset: {{dataset_id}}"
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/groups/{{group_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: group_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
- name: get-refresh-history
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel}}/messages"
inputParameters:
- name: channel
in: path
operations:
- name: send-message
method: POST
Checks the last refresh status of a Power BI dataset used for ABN AMRO reporting.
naftiko: "0.5"
info:
label: "Power BI Dataset Refresh Status"
description: "Checks the last refresh status of a Power BI dataset used for ABN AMRO reporting."
tags:
- analytics
- power-bi
- reporting
capability:
exposes:
- type: mcp
namespace: analytics
port: 8080
tools:
- name: get-refresh-status
description: "Get Power BI dataset refresh status."
inputParameters:
- name: dataset_id
in: body
type: string
description: "The dataset_id to look up."
call: "powerbi.get-dataset_id"
with:
dataset_id: "{{dataset_id}}"
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: power_bi_dataset_refresh_statu
method: GET
Queries Prometheus for active alerts on Kubernetes-hosted banking microservices, enriches with Datadog APM trace data, and creates Jira incident tickets for critical alerts.
naftiko: "0.5"
info:
label: "Prometheus Alert Triage and Escalation"
description: "Queries Prometheus for active alerts on Kubernetes-hosted banking microservices, enriches with Datadog APM trace data, and creates Jira incident tickets for critical alerts."
tags:
- observability
- alerting
- prometheus
- datadog
- jira
capability:
exposes:
- type: mcp
namespace: monitoring
port: 8080
tools:
- name: triage-prometheus-alerts
description: "Query Prometheus alerts, enrich with Datadog traces, and create Jira incidents for critical ones."
inputParameters:
- name: namespace
in: body
type: string
description: "The Kubernetes namespace to filter alerts."
- name: severity_filter
in: body
type: string
description: "Minimum severity to triage: critical, warning, or info."
steps:
- name: get-alerts
type: call
call: "prometheus.query-alerts"
with:
namespace: "{{namespace}}"
- name: get-traces
type: call
call: "datadog.get-traces"
with:
service: "{{namespace}}"
time_range: "1h"
- name: create-incident
type: call
call: "jira.create-issue"
with:
project_key: "INC"
issuetype: "Incident"
summary: "[Prometheus] {{namespace}} — {{get-alerts.alert_count}} active alerts"
description: "Namespace: {{namespace}}\nActive alerts: {{get-alerts.alert_count}}\nSeverity filter: {{severity_filter}}\nDatadog traces available for correlation."
consumes:
- type: http
namespace: prometheus
baseUri: "https://prometheus.abnamro.com/api/v1"
authentication:
type: bearer
token: "$secrets.prometheus_token"
resources:
- name: alerts
path: "/alerts?filter=namespace%3D{{namespace}}"
inputParameters:
- name: namespace
in: query
operations:
- name: query-alerts
method: GET
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.eu/api/v2"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: traces
path: "/traces?service={{service}}&timeRange={{time_range}}"
inputParameters:
- name: service
in: query
- name: time_range
in: query
operations:
- name: get-traces
method: GET
- type: http
namespace: jira
baseUri: "https://abnamro.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Extracts position data from trading systems, calculates RWA in Snowflake, generates Basel III reports, files with DNB via API, and notifies risk management.
naftiko: "0.5"
info:
label: "Regulatory Capital Reporting Pipeline"
description: "Extracts position data from trading systems, calculates RWA in Snowflake, generates Basel III reports, files with DNB via API, and notifies risk management."
tags:
- regulatory
- capital
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: regulatory
port: 8080
tools:
- name: regulatory_capital_reporting_pipeline
description: "Orchestrate regulatory capital reporting pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-positions
type: call
call: "trading.get-positions"
with:
date: "{{resource_id}}"
- name: calculate-rwa
type: call
call: "snowflake.run-query"
with:
sql_query: "CALL calculate_rwa('{{resource_id}}')"
warehouse: "CAPITAL_WH"
- name: file-report
type: call
call: "servicenow.create-record"
with:
table: "regulatory_filings"
report_date: "{{resource_id}}"
- name: notify
type: call
call: "msteams.send-message"
with:
channel: "risk-management"
text: "Capital report filed for {{resource_id}}. RWA: {{calculate-rwa.total_rwa}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://abn-amro.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: snowflake-op
method: POST
- type: http
namespace: servicenow
baseUri: "https://abn-amro.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: servicenow-op
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: msteams-op
method: POST
Extracts regulatory reporting data from Snowflake, transforms via Informatica, and loads into Oracle for DNB (Dutch Central Bank) submission, notifying compliance via Microsoft Teams upon completion.
naftiko: "0.5"
info:
label: "Regulatory Reporting Data Pipeline"
description: "Extracts regulatory reporting data from Snowflake, transforms via Informatica, and loads into Oracle for DNB (Dutch Central Bank) submission, notifying compliance via Microsoft Teams upon completion."
tags:
- regulatory-compliance
- reporting
- snowflake
- informatica
- oracle-cloud
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: regulatory-reporting
port: 8080
tools:
- name: run-regulatory-extract
description: "Given a report type and period, extract data from Snowflake, trigger Informatica transformation, and notify compliance team."
inputParameters:
- name: report_type
in: body
type: string
description: "Regulatory report type: corep, finrep, anacredit, or srep."
- name: reporting_period
in: body
type: string
description: "Reporting period in YYYY-QN format (e.g., 2026-Q1)."
steps:
- name: extract-data
type: call
call: "snowflake.execute-query"
with:
warehouse: "REG_REPORTING_WH"
database: "REGULATORY_DB"
query: "CALL sp_extract_{{report_type}}('{{reporting_period}}')"
- name: trigger-transform
type: call
call: "informatica.start-task"
with:
task_name: "{{report_type}}_transform_{{reporting_period}}"
task_type: "mapping"
- name: notify-compliance
type: call
call: "msteams.send-message"
with:
channel: "regulatory-reporting"
text: "Regulatory extract complete: {{report_type}} for {{reporting_period}}. Informatica job: {{trigger-transform.run_id}}. Data staged for DNB submission review."
consumes:
- type: http
namespace: snowflake
baseUri: "https://abnamro.eu-west-1.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: informatica
baseUri: "https://dm-eu.informaticacloud.com/saas/api/v2"
authentication:
type: bearer
token: "$secrets.informatica_token"
resources:
- name: tasks
path: "/job"
operations:
- name: start-task
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel}}/messages"
inputParameters:
- name: channel
in: path
operations:
- name: send-message
method: POST
When a periodic access certification is due, pulls user entitlements from SailPoint, cross-references with Workday org data, and creates a Jira review task for the user's manager.
naftiko: "0.5"
info:
label: "SailPoint Access Review Orchestrator"
description: "When a periodic access certification is due, pulls user entitlements from SailPoint, cross-references with Workday org data, and creates a Jira review task for the user's manager."
tags:
- identity-management
- access-review
- sailpoint
- workday
- jira
capability:
exposes:
- type: mcp
namespace: identity-access
port: 8080
tools:
- name: initiate-access-review
description: "Given a user identity ID, pull entitlements from SailPoint, get manager info from Workday, and create a Jira access review task."
inputParameters:
- name: identity_id
in: body
type: string
description: "The SailPoint identity ID."
- name: employee_id
in: body
type: string
description: "The Workday employee ID."
- name: review_campaign
in: body
type: string
description: "The access review campaign name."
steps:
- name: get-entitlements
type: call
call: "sailpoint.get-entitlements"
with:
identity_id: "{{identity_id}}"
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{employee_id}}"
- name: create-review-task
type: call
call: "jira.create-issue"
with:
project_key: "IAM"
issuetype: "Task"
summary: "[Access Review] {{get-employee.full_name}} — {{review_campaign}}"
description: "Review entitlements for {{get-employee.full_name}} ({{identity_id}}).\nDepartment: {{get-employee.department}}\nManager: {{get-employee.manager_name}}\nEntitlements count: {{get-entitlements.count}}\nEntitlements: {{get-entitlements.summary}}"
assignee: "{{get-employee.manager_email}}"
consumes:
- type: http
namespace: sailpoint
baseUri: "https://abnamro.api.identitynow.com/v3"
authentication:
type: bearer
token: "$secrets.sailpoint_token"
resources:
- name: identities
path: "/identities/{{identity_id}}/entitlements"
inputParameters:
- name: identity_id
in: path
operations:
- name: get-entitlements
method: GET
- type: http
namespace: workday
baseUri: "https://wd3-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: jira
baseUri: "https://abnamro.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Retrieves a Salesforce opportunity by ID, returning stage, amount, close date, and owner for the sales team.
naftiko: "0.5"
info:
label: "Salesforce Opportunity Lookup"
description: "Retrieves a Salesforce opportunity by ID, returning stage, amount, close date, and owner for the sales team."
tags:
- sales
- crm
- salesforce
capability:
exposes:
- type: mcp
namespace: sales-crm
port: 8080
tools:
- name: get-opportunity
description: "Look up a Salesforce opportunity by ID. Returns name, stage, amount, close date, and owner."
inputParameters:
- name: opportunity_id
in: body
type: string
description: "The Salesforce opportunity ID."
call: "salesforce.get-opportunity"
with:
opportunity_id: "{{opportunity_id}}"
outputParameters:
- name: name
type: string
mapping: "$.Name"
- name: stage
type: string
mapping: "$.StageName"
- name: amount
type: string
mapping: "$.Amount"
- name: close_date
type: string
mapping: "$.CloseDate"
consumes:
- type: http
namespace: salesforce
baseUri: "https://abnamro.my.salesforce.com/services/data/v59.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
Downloads updated sanctions lists from Bloomberg, updates the screening database in Snowflake, triggers a batch re-screening of all active clients, and notifies compliance of any new matches via Jira and Microsoft Teams.
naftiko: "0.5"
info:
label: "Sanctions List Update and Screening Refresh"
description: "Downloads updated sanctions lists from Bloomberg, updates the screening database in Snowflake, triggers a batch re-screening of all active clients, and notifies compliance of any new matches via Jira and Microsoft Teams."
tags:
- compliance
- sanctions
- bloomberg
- snowflake
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: compliance-sanctions
port: 8080
tools:
- name: refresh-sanctions-screening
description: "Download latest sanctions lists, update screening database, run batch re-screening, and alert on new matches."
inputParameters:
- name: list_type
in: body
type: string
description: "Sanctions list type: eu, ofac, un, or all."
- name: trigger_date
in: body
type: string
description: "The date of the list update in YYYY-MM-DD format."
steps:
- name: download-lists
type: call
call: "bloomberg.get-sanctions-lists"
with:
list_type: "{{list_type}}"
effective_date: "{{trigger_date}}"
- name: update-database
type: call
call: "snowflake.execute-query"
with:
warehouse: "COMPLIANCE_WH"
database: "SANCTIONS_DB"
query: "CALL sp_update_sanctions_list('{{list_type}}', '{{trigger_date}}')"
- name: run-batch-screening
type: call
call: "snowflake.execute-query"
with:
warehouse: "COMPLIANCE_WH"
database: "SANCTIONS_DB"
query: "CALL sp_batch_screen_active_clients('{{list_type}}')"
- name: create-review-ticket
type: call
call: "jira.create-issue"
with:
project_key: "SANCTIONS"
issuetype: "Task"
summary: "[Sanctions Update] {{list_type}} list refresh — {{trigger_date}}"
description: "Sanctions list updated: {{list_type}} as of {{trigger_date}}.\nNew entries: {{download-lists.new_entries_count}}\nBatch screening complete. Review any new matches."
- name: notify-compliance
type: call
call: "msteams.send-message"
with:
channel: "compliance-sanctions"
text: "Sanctions list refreshed: {{list_type}} ({{trigger_date}}). New entries: {{download-lists.new_entries_count}}. Batch re-screening complete. Jira: {{create-review-ticket.key}}"
consumes:
- type: http
namespace: bloomberg
baseUri: "https://api.bloomberg.com/eap/v1"
authentication:
type: bearer
token: "$secrets.bloomberg_token"
resources:
- name: sanctions-lists
path: "/sanctions/lists"
operations:
- name: get-sanctions-lists
method: POST
- type: http
namespace: snowflake
baseUri: "https://abnamro.eu-west-1.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: jira
baseUri: "https://abnamro.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel}}/messages"
inputParameters:
- name: channel
in: path
operations:
- name: send-message
method: POST
Retrieves submitted expense reports from SAP Concur, validates against Workday cost center data, and opens a ServiceNow task for finance review when policy exceptions are detected.
naftiko: "0.5"
info:
label: "SAP Expense Report Processing"
description: "Retrieves submitted expense reports from SAP Concur, validates against Workday cost center data, and opens a ServiceNow task for finance review when policy exceptions are detected."
tags:
- finance
- expense-management
- sap-concur
- workday
- servicenow
capability:
exposes:
- type: mcp
namespace: finance-expense
port: 8080
tools:
- name: review-expense-report
description: "Given a Concur expense report ID and employee ID, fetch report details, validate cost center, and flag policy violations to ServiceNow."
inputParameters:
- name: expense_report_id
in: body
type: string
description: "The SAP Concur expense report ID."
- name: employee_id
in: body
type: string
description: "The Workday employee ID of the expense submitter."
steps:
- name: get-expense-report
type: call
call: "concur.get-expense-report"
with:
report_id: "{{expense_report_id}}"
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{employee_id}}"
- name: open-review-task
type: call
call: "servicenow.create-task"
with:
short_description: "Expense policy review: {{get-expense-report.report_name}} — {{get-employee.full_name}}"
description: "Report {{expense_report_id}} total: {{get-expense-report.total_amount}} {{get-expense-report.currency}}. Cost center: {{get-employee.cost_center}}. Submitted: {{get-expense-report.submit_date}}."
assigned_group: "Finance_Audit"
category: "expense_review"
consumes:
- type: http
namespace: concur
baseUri: "https://www.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_token"
resources:
- name: expense-reports
path: "/expense/reports/{{report_id}}"
inputParameters:
- name: report_id
in: path
operations:
- name: get-expense-report
method: GET
- type: http
namespace: workday
baseUri: "https://wd3-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://abnamro.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/task"
operations:
- name: create-task
method: POST
Retrieves change request details by number from ABN AMRO ServiceNow instance.
naftiko: "0.5"
info:
label: "ServiceNow Change Request Lookup"
description: "Retrieves change request details by number from ABN AMRO ServiceNow instance."
tags:
- itsm
- servicenow
- change-management
capability:
exposes:
- type: mcp
namespace: itsm
port: 8080
tools:
- name: get-change-request
description: "Look up a change request by number."
inputParameters:
- name: change_number
in: body
type: string
description: "The change_number to look up."
call: "servicenow.get-change_number"
with:
change_number: "{{change_number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://abn-amro.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: servicenow_change_request_look
method: GET
Retrieves a ServiceNow incident by number, returning status, priority, assigned group, and resolution notes for support teams.
naftiko: "0.5"
info:
label: "ServiceNow Incident Lookup"
description: "Retrieves a ServiceNow incident by number, returning status, priority, assigned group, and resolution notes for support teams."
tags:
- it-service-management
- servicenow
capability:
exposes:
- type: mcp
namespace: itsm
port: 8080
tools:
- name: get-incident
description: "Look up a ServiceNow incident by number. Returns state, priority, assigned group, short description, and resolution notes."
inputParameters:
- name: incident_number
in: body
type: string
description: "The ServiceNow incident number (e.g., INC0012345)."
call: "servicenow.get-incident"
with:
incident_number: "{{incident_number}}"
outputParameters:
- name: state
type: string
mapping: "$.result.state"
- name: priority
type: string
mapping: "$.result.priority"
- name: assigned_group
type: string
mapping: "$.result.assignment_group.display_value"
consumes:
- type: http
namespace: servicenow
baseUri: "https://abnamro.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident?sysparm_query=number={{incident_number}}"
inputParameters:
- name: incident_number
in: query
operations:
- name: get-incident
method: GET
Retrieves a document from SharePoint by site and document path, returning the download URL, modified date, and author for banking document management.
naftiko: "0.5"
info:
label: "SharePoint Document Retrieval"
description: "Retrieves a document from SharePoint by site and document path, returning the download URL, modified date, and author for banking document management."
tags:
- document-management
- sharepoint
capability:
exposes:
- type: mcp
namespace: document-mgmt
port: 8080
tools:
- name: get-document
description: "Retrieve a document from SharePoint. Returns download URL, last modified date, and author."
inputParameters:
- name: site_id
in: body
type: string
description: "The SharePoint site ID."
- name: document_path
in: body
type: string
description: "The document path relative to the site root."
call: "sharepoint.get-document"
with:
site_id: "{{site_id}}"
document_path: "{{document_path}}"
outputParameters:
- name: download_url
type: string
mapping: "$.@microsoft.graph.downloadUrl"
- name: last_modified
type: string
mapping: "$.lastModifiedDateTime"
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: drive-items
path: "/{{site_id}}/drive/root:/{{document_path}}"
inputParameters:
- name: site_id
in: path
- name: document_path
in: path
operations:
- name: get-document
method: GET
Executes a SQL query against ABN AMRO's Snowflake data warehouse and returns the result set for analytics and reporting purposes.
naftiko: "0.5"
info:
label: "Snowflake Query Execution"
description: "Executes a SQL query against ABN AMRO's Snowflake data warehouse and returns the result set for analytics and reporting purposes."
tags:
- data
- analytics
- snowflake
capability:
exposes:
- type: mcp
namespace: data-warehouse
port: 8080
tools:
- name: run-query
description: "Execute a SQL query on Snowflake. Returns the query result set and row count."
inputParameters:
- name: warehouse
in: body
type: string
description: "The Snowflake warehouse to use."
- name: database
in: body
type: string
description: "The Snowflake database to query."
- name: query
in: body
type: string
description: "The SQL query to execute."
call: "snowflake.execute-query"
with:
warehouse: "{{warehouse}}"
database: "{{database}}"
query: "{{query}}"
outputParameters:
- name: statement_handle
type: string
mapping: "$.statementHandle"
- name: row_count
type: string
mapping: "$.resultSetMetaData.numRows"
consumes:
- type: http
namespace: snowflake
baseUri: "https://abnamro.eu-west-1.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
Collects access control evidence from Okta, change management evidence from ServiceNow, monitoring evidence from Datadog, and compiles in Confluence.
naftiko: "0.5"
info:
label: "SOC2 Evidence Collection Pipeline"
description: "Collects access control evidence from Okta, change management evidence from ServiceNow, monitoring evidence from Datadog, and compiles in Confluence."
tags:
- compliance
- audit
- servicenow
- confluence
capability:
exposes:
- type: mcp
namespace: compliance
port: 8080
tools:
- name: soc2_evidence_collection_pipeline
description: "Orchestrate soc2 evidence collection pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-access-evidence
type: call
call: "okta.get-access-logs"
with:
period: "{{resource_id}}"
- name: get-change-evidence
type: call
call: "servicenow.get-changes"
with:
period: "{{resource_id}}"
- name: get-monitoring-evidence
type: call
call: "datadog.get-alerts-history"
with:
period: "{{resource_id}}"
- name: compile-report
type: call
call: "confluence.create-page"
with:
space: "AUDIT"
title: "SOC2 Evidence: {{resource_id}}"
consumes:
- type: http
namespace: okta
baseUri: "https://abn-amro.okta.com/api/v1"
authentication:
type: apiKey
key: "$secrets.okta_api_token"
header: "Authorization"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: okta-op
method: POST
- type: http
namespace: servicenow
baseUri: "https://abn-amro.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: servicenow-op
method: POST
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
header: "DD-API-KEY"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: datadog-op
method: POST
- type: http
namespace: confluence
baseUri: "https://abn-amro.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: confluence-op
method: POST
Searches Splunk SIEM for security events matching a query pattern at ABN AMRO.
naftiko: "0.5"
info:
label: "Splunk Security Log Search"
description: "Searches Splunk SIEM for security events matching a query pattern at ABN AMRO."
tags:
- security
- splunk
- siem
capability:
exposes:
- type: mcp
namespace: security
port: 8080
tools:
- name: search-security-logs
description: "Search security logs by query."
inputParameters:
- name: query
in: body
type: string
description: "The query to look up."
call: "splunk.get-query"
with:
query: "{{query}}"
consumes:
- type: http
namespace: splunk
baseUri: "https://abn-amro-splunk.com/services"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: splunk_security_log_search
method: GET
Loads stress scenario parameters, runs calculations in Snowflake, generates reports in Power BI, submits to regulators via ServiceNow, and notifies risk team.
naftiko: "0.5"
info:
label: "Stress Testing Scenario Runner"
description: "Loads stress scenario parameters, runs calculations in Snowflake, generates reports in Power BI, submits to regulators via ServiceNow, and notifies risk team."
tags:
- risk
- stress-testing
- snowflake
- power-bi
- servicenow
capability:
exposes:
- type: mcp
namespace: risk
port: 8080
tools:
- name: stress_testing_scenario_runner
description: "Orchestrate stress testing scenario runner workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: load-scenario
type: call
call: "risk-engine.get-scenario"
with:
scenario_id: "{{resource_id}}"
- name: run-calculations
type: call
call: "snowflake.run-query"
with:
sql_query: "CALL run_stress_test('{{resource_id}}')"
warehouse: "RISK_WH"
- name: generate-report
type: call
call: "powerbi.refresh-dataset"
with:
dataset_id: "stress_testing"
- name: notify
type: call
call: "msteams.send-message"
with:
channel: "risk-team"
text: "Stress test {{resource_id}} complete. Impact: {{run-calculations.pnl_impact}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://abn-amro.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: snowflake-op
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: powerbi-op
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: msteams-op
method: POST
Retrieves SWIFT message details by reference number for ABN AMRO payment operations.
naftiko: "0.5"
info:
label: "SWIFT Message Lookup"
description: "Retrieves SWIFT message details by reference number for ABN AMRO payment operations."
tags:
- payments
- swift
- banking
capability:
exposes:
- type: mcp
namespace: payments
port: 8080
tools:
- name: get-swift-msg
description: "Look up SWIFT message by reference."
inputParameters:
- name: message_ref
in: body
type: string
description: "The message_ref to look up."
call: "servicenow.get-message_ref"
with:
message_ref: "{{message_ref}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://abn-amro.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: swift_message_lookup
method: GET
Initiates a SWIFT payment through the core banking system, validates the BIC code, creates the payment instruction, and tracks the transaction status with Microsoft Teams notifications at each stage.
naftiko: "0.5"
info:
label: "SWIFT Payment Initiation and Tracking"
description: "Initiates a SWIFT payment through the core banking system, validates the BIC code, creates the payment instruction, and tracks the transaction status with Microsoft Teams notifications at each stage."
tags:
- payments
- swift
- banking
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: payments-swift
port: 8080
tools:
- name: initiate-swift-payment
description: "Given payment details, validate BIC, create SWIFT payment instruction, and notify the treasury team of status changes."
inputParameters:
- name: debtor_iban
in: body
type: string
description: "Debtor IBAN."
- name: creditor_iban
in: body
type: string
description: "Creditor IBAN."
- name: creditor_bic
in: body
type: string
description: "Creditor bank BIC/SWIFT code."
- name: amount
in: body
type: number
description: "Payment amount."
- name: currency
in: body
type: string
description: "Payment currency (ISO 4217)."
- name: reference
in: body
type: string
description: "Payment reference for the beneficiary."
steps:
- name: validate-bic
type: call
call: "core-banking.validate-bic"
with:
bic: "{{creditor_bic}}"
- name: create-payment
type: call
call: "core-banking.create-swift-payment"
with:
debtor_iban: "{{debtor_iban}}"
creditor_iban: "{{creditor_iban}}"
creditor_bic: "{{creditor_bic}}"
amount: "{{amount}}"
currency: "{{currency}}"
reference: "{{reference}}"
- name: notify-treasury
type: call
call: "msteams.send-message"
with:
channel: "treasury-payments"
text: "SWIFT payment initiated: {{create-payment.payment_id}} | {{amount}} {{currency}} to {{creditor_iban}} ({{creditor_bic}}) | Reference: {{reference}} | Status: {{create-payment.status}}"
consumes:
- type: http
namespace: core-banking
baseUri: "https://api.abnamro.com/v1/payments"
authentication:
type: bearer
token: "$secrets.core_banking_token"
resources:
- name: bic-validation
path: "/bic/validate"
operations:
- name: validate-bic
method: POST
- name: swift-payments
path: "/swift"
operations:
- name: create-swift-payment
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel}}/messages"
inputParameters:
- name: channel
in: path
operations:
- name: send-message
method: POST
Triggers a Terraform deployment through Azure DevOps pipelines for banking infrastructure changes, with approval gating and Teams notification.
naftiko: "0.5"
info:
label: "Terraform Infrastructure Deployment"
description: "Triggers a Terraform deployment through Azure DevOps pipelines for banking infrastructure changes, with approval gating and Teams notification."
tags:
- infrastructure
- devops
- terraform
- azure-devops
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: infra-deploy
port: 8080
tools:
- name: deploy-infrastructure
description: "Given a Terraform workspace and environment, trigger an Azure DevOps pipeline run and notify the platform team."
inputParameters:
- name: workspace
in: body
type: string
description: "The Terraform workspace name."
- name: environment
in: body
type: string
description: "Target environment: dev, staging, or production."
- name: change_ticket
in: body
type: string
description: "The ServiceNow change request number for audit trail."
steps:
- name: trigger-pipeline
type: call
call: "azuredevops.run-pipeline"
with:
project: "banking-infra"
pipeline_id: "terraform-apply"
variables:
workspace: "{{workspace}}"
environment: "{{environment}}"
change_ticket: "{{change_ticket}}"
- name: notify-platform
type: call
call: "msteams.send-message"
with:
channel: "platform-deployments"
text: "Infrastructure deployment triggered: {{workspace}} to {{environment}}. Pipeline run: {{trigger-pipeline.run_id}}. Change ticket: {{change_ticket}}."
consumes:
- type: http
namespace: azuredevops
baseUri: "https://dev.azure.com/abnamro"
authentication:
type: bearer
token: "$secrets.azuredevops_token"
resources:
- name: pipelines
path: "/{{project}}/_apis/pipelines/{{pipeline_id}}/runs?api-version=7.1"
inputParameters:
- name: project
in: path
- name: pipeline_id
in: path
operations:
- name: run-pipeline
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel}}/messages"
inputParameters:
- name: channel
in: path
operations:
- name: send-message
method: POST
Analyzes trade execution quality metrics, compares against benchmarks in Snowflake, identifies improvements, and reports to trading desk.
naftiko: "0.5"
info:
label: "Trade Execution Quality Analyzer"
description: "Analyzes trade execution quality metrics, compares against benchmarks in Snowflake, identifies improvements, and reports to trading desk."
tags:
- trading
- analytics
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: trading
port: 8080
tools:
- name: trade_execution_quality_analyzer
description: "Orchestrate trade execution quality analyzer workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: fetch-data
type: call
call: "primary.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-data
type: call
call: "processor.transform"
with:
input: "{{fetch-data.result}}"
- name: create-record
type: call
call: "servicenow.create-record"
with:
table: "records"
data: "{{process-data.output}}"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel: "operations"
text: "Workflow {{resource_id}} complete. Record: {{create-record.number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://co.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/records"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{channel}}/channels/general/messages"
operations:
- name: send-message
method: POST
Reconciles trade settlement data between Bloomberg Tradebook and the core banking system, identifies breaks, and creates Jira tickets for operations to investigate discrepancies.
naftiko: "0.5"
info:
label: "Trade Settlement Reconciliation"
description: "Reconciles trade settlement data between Bloomberg Tradebook and the core banking system, identifies breaks, and creates Jira tickets for operations to investigate discrepancies."
tags:
- operations
- settlement
- reconciliation
- bloomberg-tradebook
- snowflake
- jira
capability:
exposes:
- type: mcp
namespace: trade-ops
port: 8080
tools:
- name: reconcile-settlements
description: "Given a trade date, compare Tradebook and core banking settlement records, identify breaks, and create Jira tickets."
inputParameters:
- name: trade_date
in: body
type: string
description: "The trade date to reconcile in YYYY-MM-DD format."
- name: asset_class
in: body
type: string
description: "Asset class: equities, fixed_income, fx, or derivatives."
steps:
- name: get-tradebook-settlements
type: call
call: "bloomberg-tradebook.get-settlements"
with:
trade_date: "{{trade_date}}"
asset_class: "{{asset_class}}"
- name: get-internal-settlements
type: call
call: "snowflake.execute-query"
with:
warehouse: "OPS_WH"
database: "SETTLEMENTS_DB"
query: "SELECT trade_id, counterparty, amount, currency, status FROM settlements WHERE trade_date = '{{trade_date}}' AND asset_class = '{{asset_class}}'"
- name: create-break-ticket
type: call
call: "jira.create-issue"
with:
project_key: "TRADEOPS"
issuetype: "Task"
summary: "[Settlement Break] {{asset_class}} — {{trade_date}}"
description: "Reconciliation results for {{trade_date}} ({{asset_class}}).\nTradebook records: {{get-tradebook-settlements.count}}\nInternal records: {{get-internal-settlements.row_count}}\nReview breaks and resolve."
consumes:
- type: http
namespace: bloomberg-tradebook
baseUri: "https://api.bloomberg.com/tradebook/v1"
authentication:
type: bearer
token: "$secrets.bloomberg_tradebook_token"
resources:
- name: settlements
path: "/settlements?tradeDate={{trade_date}}&assetClass={{asset_class}}"
inputParameters:
- name: trade_date
in: query
- name: asset_class
in: query
operations:
- name: get-settlements
method: GET
- type: http
namespace: snowflake
baseUri: "https://abnamro.eu-west-1.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: jira
baseUri: "https://abnamro.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Validates a bond trade against pre-trade compliance limits in Snowflake, submits the order to Tradeweb for execution, books the trade in the core banking system, and confirms to the trader via Microsoft Teams.
naftiko: "0.5"
info:
label: "Tradeweb Bond Execution with Compliance Check"
description: "Validates a bond trade against pre-trade compliance limits in Snowflake, submits the order to Tradeweb for execution, books the trade in the core banking system, and confirms to the trader via Microsoft Teams."
tags:
- trading
- fixed-income
- tradeweb
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: trading-execution
port: 8080
tools:
- name: execute-bond-trade
description: "Validate pre-trade limits, submit a bond trade to Tradeweb, book internally, and confirm to the trader."
inputParameters:
- name: isin
in: body
type: string
description: "The ISIN of the bond to trade."
- name: direction
in: body
type: string
description: "Trade direction: buy or sell."
- name: notional
in: body
type: number
description: "Notional amount in the bond's denomination currency."
- name: trader_upn
in: body
type: string
description: "The UPN of the executing trader."
steps:
- name: check-limits
type: call
call: "snowflake.execute-query"
with:
warehouse: "TRADING_WH"
database: "COMPLIANCE_DB"
query: "SELECT remaining_limit FROM pre_trade_limits WHERE isin = '{{isin}}' AND direction = '{{direction}}'"
- name: submit-order
type: call
call: "tradeweb.submit-order"
with:
isin: "{{isin}}"
direction: "{{direction}}"
notional: "{{notional}}"
- name: book-trade
type: call
call: "core-banking.book-trade"
with:
trade_id: "{{submit-order.trade_id}}"
isin: "{{isin}}"
direction: "{{direction}}"
notional: "{{notional}}"
price: "{{submit-order.execution_price}}"
- name: confirm-trader
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{trader_upn}}"
text: "Bond trade executed: {{direction}} {{notional}} {{isin}} at {{submit-order.execution_price}}. Yield: {{submit-order.yield}}. Settlement: {{submit-order.settlement_date}}. Trade ID: {{submit-order.trade_id}}."
consumes:
- type: http
namespace: snowflake
baseUri: "https://abnamro.eu-west-1.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: tradeweb
baseUri: "https://api.tradeweb.com/v2"
authentication:
type: bearer
token: "$secrets.tradeweb_token"
resources:
- name: orders
path: "/orders"
operations:
- name: submit-order
method: POST
- type: http
namespace: core-banking
baseUri: "https://api.abnamro.com/v1/trading"
authentication:
type: bearer
token: "$secrets.core_banking_token"
resources:
- name: bookings
path: "/book"
operations:
- name: book-trade
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
Collects cash positions from multiple bank accounts, aggregates in Snowflake, updates treasury dashboard in Power BI, and sends morning report to CFO.
naftiko: "0.5"
info:
label: "Treasury Cash Position Aggregator"
description: "Collects cash positions from multiple bank accounts, aggregates in Snowflake, updates treasury dashboard in Power BI, and sends morning report to CFO."
tags:
- treasury
- cash-management
- snowflake
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: treasury
port: 8080
tools:
- name: treasury_cash_position_aggregator
description: "Orchestrate treasury cash position aggregator workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-positions
type: call
call: "swift.get-mt940"
with:
date: "{{resource_id}}"
- name: aggregate
type: call
call: "snowflake.run-query"
with:
sql_query: "CALL aggregate_cash('{{resource_id}}')"
warehouse: "TREASURY_WH"
- name: refresh-dashboard
type: call
call: "powerbi.refresh-dataset"
with:
dataset_id: "cash_positions"
- name: notify
type: call
call: "msteams.send-message"
with:
channel: "treasury-mgmt"
text: "Cash position report for {{resource_id}}: Total: {{aggregate.total_balance}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://abn-amro.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: snowflake-op
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: powerbi-op
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: msteams-op
method: POST
Queries vendor data from SAP Ariba, runs risk scoring in Snowflake, creates assessment record in ServiceNow, and notifies procurement.
naftiko: "0.5"
info:
label: "Vendor Risk Assessment Pipeline"
description: "Queries vendor data from SAP Ariba, runs risk scoring in Snowflake, creates assessment record in ServiceNow, and notifies procurement."
tags:
- procurement
- vendor-risk
- snowflake
- servicenow
- slack
capability:
exposes:
- type: mcp
namespace: procurement
port: 8080
tools:
- name: vendor_risk_assessment_pipeline
description: "Orchestrate vendor risk assessment pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-vendor
type: call
call: "sap.get-vendor"
with:
vendor_id: "{{resource_id}}"
- name: score-risk
type: call
call: "snowflake.run-query"
with:
sql_query: "CALL score_vendor_risk('{{resource_id}}')"
warehouse: "PROC_WH"
- name: create-assessment
type: call
call: "servicenow.create-record"
with:
table: "vendor_assessments"
vendor_id: "{{resource_id}}"
- name: notify
type: call
call: "slack.send-message"
with:
channel: "procurement"
text: "Vendor {{resource_id}} risk score: {{score-risk.risk_level}}"
consumes:
- type: http
namespace: sap
baseUri: "https://abn-amro-sap.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: sap-op
method: POST
- type: http
namespace: snowflake
baseUri: "https://abn-amro.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: snowflake-op
method: POST
- type: http
namespace: servicenow
baseUri: "https://abn-amro.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: servicenow-op
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: slack-op
method: POST
Validates wire transfers against AML rules, screens beneficiaries, creates compliance records, and notifies compliance team.
naftiko: "0.5"
info:
label: "Wire Transfer Compliance Pipeline"
description: "Validates wire transfers against AML rules, screens beneficiaries, creates compliance records, and notifies compliance team."
tags:
- payments
- compliance
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: payments
port: 8080
tools:
- name: wire_transfer_compliance_pipeline
description: "Orchestrate wire transfer compliance pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: fetch-data
type: call
call: "primary.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-data
type: call
call: "processor.transform"
with:
input: "{{fetch-data.result}}"
- name: create-record
type: call
call: "servicenow.create-record"
with:
table: "records"
data: "{{process-data.output}}"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel: "operations"
text: "Workflow {{resource_id}} complete. Record: {{create-record.number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://co.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/records"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{channel}}/channels/general/messages"
operations:
- name: send-message
method: POST
Retrieves employee compensation details from Workday for ABN AMRO HR operations.
naftiko: "0.5"
info:
label: "Workday Compensation Lookup"
description: "Retrieves employee compensation details from Workday for ABN AMRO HR operations."
tags:
- hr
- workday
- compensation
capability:
exposes:
- type: mcp
namespace: hr
port: 8080
tools:
- name: get-compensation
description: "Look up employee compensation by ID."
inputParameters:
- name: employee_id
in: body
type: string
description: "The employee_id to look up."
call: "workday.get-employee_id"
with:
employee_id: "{{employee_id}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/abn-amro"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: workday_compensation_lookup
method: GET
Retrieves employee details from Workday by worker ID, returning name, department, manager, cost center, and employment status.
naftiko: "0.5"
info:
label: "Workday Employee Lookup"
description: "Retrieves employee details from Workday by worker ID, returning name, department, manager, cost center, and employment status."
tags:
- hr
- employee-data
- workday
capability:
exposes:
- type: mcp
namespace: hr-data
port: 8080
tools:
- name: get-employee
description: "Look up an employee in Workday by worker ID. Returns full name, department, manager, cost center, and status."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID."
call: "workday.get-worker"
with:
worker_id: "{{worker_id}}"
outputParameters:
- name: full_name
type: string
mapping: "$.worker.fullName"
- name: department
type: string
mapping: "$.worker.department"
- name: manager
type: string
mapping: "$.worker.managerName"
- name: cost_center
type: string
mapping: "$.worker.costCenter"
consumes:
- type: http
namespace: workday
baseUri: "https://wd3-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