BNP Paribas Capabilities
Naftiko 0.5 capability definitions for BNP Paribas - 100 capabilities showing integration workflows and service orchestrations.
Extracts payroll data from ADP, compares against general ledger entries in SAP, flags discrepancies in ServiceNow, and updates the finance reconciliation dashboard in Power BI.
naftiko: "0.5"
info:
label: "ADP Payroll Reconciliation"
description: "Extracts payroll data from ADP, compares against general ledger entries in SAP, flags discrepancies in ServiceNow, and updates the finance reconciliation dashboard in Power BI."
tags:
- payroll
- reconciliation
- adp
- sap
- servicenow
- power-bi
capability:
exposes:
- type: mcp
namespace: payroll-recon
port: 8080
tools:
- name: reconcile-payroll
description: "Extract ADP payroll, compare to SAP GL, flag discrepancies, and refresh recon dashboard."
inputParameters:
- name: pay_period
in: body
type: string
description: "The pay period identifier (e.g. 2026-03)."
- name: entity_code
in: body
type: string
description: "The legal entity code."
steps:
- name: get-payroll
type: call
call: "adp.get-payroll-summary"
with:
pay_period: "{{pay_period}}"
entity: "{{entity_code}}"
- name: get-gl-entries
type: call
call: "sap.get-gl-postings"
with:
period: "{{pay_period}}"
company_code: "{{entity_code}}"
account_group: "payroll"
- name: flag-discrepancies
type: call
call: "servicenow.create-task"
with:
short_description: "Payroll recon: {{entity_code}} — {{pay_period}}"
description: "ADP total: {{get-payroll.total_gross}}. SAP GL total: {{get-gl-entries.total_amount}}. Variance: {{get-payroll.total_gross}} vs {{get-gl-entries.total_amount}}. Headcount: {{get-payroll.employee_count}}."
assigned_group: "Finance_Payroll"
category: "payroll_reconciliation"
- name: refresh-dashboard
type: call
call: "powerbi.refresh-dataset"
with:
workspace_id: "finance_operations"
dataset_id: "payroll_recon"
consumes:
- type: http
namespace: adp
baseUri: "https://api.adp.com/hr/v2"
authentication:
type: bearer
token: "$secrets.adp_token"
resources:
- name: payroll
path: "/payroll-summaries"
operations:
- name: get-payroll-summary
method: GET
- type: http
namespace: sap
baseUri: "https://bnp-s4.sap.com/sap/opu/odata/sap/FI_GL_ACCOUNT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: gl-entries
path: "/A_GLAccountLineItem"
operations:
- name: get-gl-postings
method: GET
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.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
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: workspace_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
Triggers an Alteryx analytics workflow for financial data preparation, validates output row counts in PostgreSQL, and notifies the analytics team via Azure Event Hubs.
naftiko: "0.5"
info:
label: "Alteryx Data Preparation Workflow"
description: "Triggers an Alteryx analytics workflow for financial data preparation, validates output row counts in PostgreSQL, and notifies the analytics team via Azure Event Hubs."
tags:
- analytics
- data-preparation
- alteryx
- postgresql
- azure-event-hubs
capability:
exposes:
- type: mcp
namespace: data-prep
port: 8080
tools:
- name: run-alteryx-workflow
description: "Execute an Alteryx workflow, validate output, and notify analytics team."
inputParameters:
- name: workflow_id
in: body
type: string
description: "The Alteryx Server workflow ID."
- name: output_table
in: body
type: string
description: "The output PostgreSQL table to validate."
steps:
- name: run-workflow
type: call
call: "alteryx.run-workflow"
with:
workflow_id: "{{workflow_id}}"
- name: validate-output
type: call
call: "postgresql.run-query"
with:
query: "SELECT COUNT(*) as row_count FROM {{output_table}} WHERE updated_at >= NOW() - INTERVAL '1 hour'"
- name: notify-team
type: call
call: "eventhubs.send-event"
with:
topic: "analytics-completions"
body: "Alteryx workflow {{workflow_id}} completed. Job ID: {{run-workflow.job_id}}. Output table: {{output_table}}. Rows: {{validate-output.row_count}}."
consumes:
- type: http
namespace: alteryx
baseUri: "https://alteryx.bnpparibas.net/api/v3"
authentication:
type: bearer
token: "$secrets.alteryx_token"
resources:
- name: workflows
path: "/workflows/{{workflow_id}}/jobs"
inputParameters:
- name: workflow_id
in: path
operations:
- name: run-workflow
method: POST
- type: http
namespace: postgresql
baseUri: "https://pgrest.bnpparibas.net/api/v1"
authentication:
type: bearer
token: "$secrets.pgrest_token"
resources:
- name: queries
path: "/rpc/execute_query"
operations:
- name: run-query
method: POST
- type: http
namespace: eventhubs
baseUri: "https://bnpparibas-prod.servicebus.windows.net"
authentication:
type: bearer
token: "$secrets.eventhubs_sas_token"
resources:
- name: events
path: "/{{topic}}/messages"
inputParameters:
- name: topic
in: path
operations:
- name: send-event
method: POST
Retrieves suspicious activity from Temenos, enriches with Moody's data, creates investigation cases in ServiceNow, and logs evidence in SharePoint.
naftiko: "0.5"
info:
label: "AML Case Investigation Workflow"
description: "Retrieves suspicious activity from Temenos, enriches with Moody's data, creates investigation cases in ServiceNow, and logs evidence in SharePoint."
tags:
- compliance
- temenos-transact
- moodys
- servicenow
- sharepoint
capability:
exposes:
- type: mcp
namespace: aml-investigation
port: 8080
tools:
- name: investigate-aml-case
description: "Investigate an AML alert with enrichment and case management."
inputParameters:
- name: alert_id
in: body
type: string
description: "AML alert identifier."
steps:
- name: get-alert
type: call
call: "temenos.get-aml-alert"
with:
alert_id: "{{alert_id}}"
- name: enrich-data
type: call
call: "moodys.get-entity-info"
with:
entity_name: "{{get-alert.entity_name}}"
- name: create-case
type: call
call: "servicenow.create-incident"
with:
short_description: "AML investigation: {{get-alert.entity_name}}"
description: "Alert: {{alert_id}}. Risk: {{get-alert.risk_score}}. Moody's: {{enrich-data.rating}}."
category: "aml"
- name: store-evidence
type: call
call: "sharepoint.create-file"
with:
site_id: "compliance"
path: "AML/{{alert_id}}/evidence.json"
consumes:
- type: http
namespace: temenos
baseUri: "https://temenos.bnpparibas.com/api/v1"
authentication:
type: bearer
token: "$secrets.temenos_token"
resources:
- name: aml
path: "/compliance/aml-alerts/{{alert_id}}"
inputParameters:
- name: alert_id
in: path
operations:
- name: get-aml-alert
method: GET
- type: http
namespace: moodys
baseUri: "https://api.moodys.com/v1"
authentication:
type: bearer
token: "$secrets.moodys_api_key"
resources:
- name: entities
path: "/entities/search"
inputParameters:
- name: entity_name
in: query
operations:
- name: get-entity-info
method: GET
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.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: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/{{site_id}}/drive/root:/{{path}}:/content"
inputParameters:
- name: site_id
in: path
- name: path
in: path
operations:
- name: create-file
method: PUT
Collects Tyk gateway metrics, analyzes patterns in Elasticsearch, generates dashboards in Grafana, and alerts on anomalies via Slack.
naftiko: "0.5"
info:
label: "API Gateway Traffic Analysis Pipeline"
description: "Collects Tyk gateway metrics, analyzes patterns in Elasticsearch, generates dashboards in Grafana, and alerts on anomalies via Slack."
tags:
- api-management
- tyk
- elasticsearch
- grafana
capability:
exposes:
- type: mcp
namespace: api-traffic
port: 8080
tools:
- name: analyze-traffic
description: "Analyze API gateway traffic with dashboards and anomaly alerting."
inputParameters:
- name: api_id
in: body
type: string
description: "Tyk API identifier."
steps:
- name: get-metrics
type: call
call: "tyk.get-analytics"
with:
api_id: "{{api_id}}"
- name: index-data
type: call
call: "elasticsearch.index-document"
with:
index: "api-traffic"
body: "{{get-metrics.data}}"
- name: update-dashboard
type: call
call: "grafana.update-dashboard"
with:
dashboard_id: "api-traffic-{{api_id}}"
consumes:
- type: http
namespace: tyk
baseUri: "https://tyk.bnpparibas.com/api"
authentication:
type: apiKey
name: "x-tyk-authorization"
in: header
value: "$secrets.tyk_api_key"
resources:
- name: analytics
path: "/apis/{{api_id}}/analytics"
inputParameters:
- name: api_id
in: path
operations:
- name: get-analytics
method: GET
- type: http
namespace: elasticsearch
baseUri: "https://elastic.bnpparibas.com"
authentication:
type: basic
username: "$secrets.elastic_user"
password: "$secrets.elastic_password"
resources:
- name: documents
path: "/{{index}}/_doc"
inputParameters:
- name: index
in: path
operations:
- name: index-document
method: POST
- type: http
namespace: grafana
baseUri: "https://grafana.bnpparibas.com/api"
authentication:
type: bearer
token: "$secrets.grafana_token"
resources:
- name: dashboards
path: "/dashboards/db/{{dashboard_id}}"
inputParameters:
- name: dashboard_id
in: path
operations:
- name: update-dashboard
method: POST
Retrieves user profile and group membership from Azure Active Directory for identity management workflows.
naftiko: "0.5"
info:
label: "Azure Active Directory User Lookup"
description: "Retrieves user profile and group membership from Azure Active Directory for identity management workflows."
tags:
- identity
- azure-active-directory
capability:
exposes:
- type: mcp
namespace: azure-ad
port: 8080
tools:
- name: get-user-profile
description: "Look up an Azure AD user by principal name."
inputParameters:
- name: user_principal
in: body
type: string
description: "Azure AD user principal name."
call: "azuread-api.get-user"
with:
user_principal: "{{user_principal}}"
consumes:
- type: http
namespace: azuread-api
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: users
path: "/users/{{user_principal}}"
inputParameters:
- name: user_principal
in: path
operations:
- name: get-user
method: GET
Checks the status of an Azure DevOps build pipeline, returning latest run result, duration, and artifact links.
naftiko: "0.5"
info:
label: "Azure DevOps Pipeline Status"
description: "Checks the status of an Azure DevOps build pipeline, returning latest run result, duration, and artifact links."
tags:
- cicd
- azure-devops
capability:
exposes:
- type: mcp
namespace: azdo-pipelines
port: 8080
tools:
- name: get-pipeline-status
description: "Retrieve the latest pipeline run status from Azure DevOps."
inputParameters:
- name: project
in: body
type: string
description: "Azure DevOps project name."
- name: pipeline_id
in: body
type: string
description: "Pipeline identifier."
call: "azdo-pipelines.get-runs"
with:
project: "{{project}}"
pipeline_id: "{{pipeline_id}}"
consumes:
- type: http
namespace: azdo-pipelines
baseUri: "https://dev.azure.com/bnpparibas"
authentication:
type: bearer
token: "$secrets.azdo_token"
resources:
- name: runs
path: "/{{project}}/_apis/pipelines/{{pipeline_id}}/runs"
inputParameters:
- name: project
in: path
- name: pipeline_id
in: path
operations:
- name: get-runs
method: GET
Retrieves an SSL certificate from Azure Key Vault for service authentication or TLS configuration.
naftiko: "0.5"
info:
label: "Azure Key Vault Certificate Retrieval"
description: "Retrieves an SSL certificate from Azure Key Vault for service authentication or TLS configuration."
tags:
- security
- azure-key-vault
capability:
exposes:
- type: mcp
namespace: azure-kv-certs
port: 8080
tools:
- name: get-certificate
description: "Retrieve a certificate from Azure Key Vault by name."
inputParameters:
- name: cert_name
in: body
type: string
description: "The certificate name in Key Vault."
call: "azure-kv-certs.get-cert"
with:
cert_name: "{{cert_name}}"
consumes:
- type: http
namespace: azure-kv-certs
baseUri: "https://bnp-vault.vault.azure.net"
authentication:
type: bearer
token: "$secrets.azure_kv_token"
resources:
- name: certificates
path: "/certificates/{{cert_name}}"
inputParameters:
- name: cert_name
in: path
operations:
- name: get-cert
method: GET
Retrieves a named secret from Azure Key Vault for use in secure credential rotation workflows.
naftiko: "0.5"
info:
label: "Azure Key Vault Secret Retrieval"
description: "Retrieves a named secret from Azure Key Vault for use in secure credential rotation workflows."
tags:
- security
- azure-key-vault
- secrets-management
capability:
exposes:
- type: mcp
namespace: secrets
port: 8080
tools:
- name: get-secret
description: "Retrieve a secret value from Azure Key Vault by secret name."
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://bnpparibas-prod.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
Deploys a trained ML model from Azure Machine Learning to a real-time endpoint, validates with SonarQube code quality, and registers the deployment in ServiceNow CMDB.
naftiko: "0.5"
info:
label: "Azure Machine Learning Model Deployment"
description: "Deploys a trained ML model from Azure Machine Learning to a real-time endpoint, validates with SonarQube code quality, and registers the deployment in ServiceNow CMDB."
tags:
- machine-learning
- azure-machine-learning
- sonarqube
- servicenow
capability:
exposes:
- type: mcp
namespace: ml-ops
port: 8080
tools:
- name: deploy-model
description: "Deploy an Azure ML model to a managed endpoint, validate quality, and register in CMDB."
inputParameters:
- name: model_name
in: body
type: string
description: "The Azure ML model name."
- name: model_version
in: body
type: string
description: "The model version to deploy."
- name: endpoint_name
in: body
type: string
description: "The target managed online endpoint name."
steps:
- name: deploy-endpoint
type: call
call: "azureml.create-deployment"
with:
model_name: "{{model_name}}"
model_version: "{{model_version}}"
endpoint_name: "{{endpoint_name}}"
- name: quality-check
type: call
call: "sonarqube.get-quality-gate"
with:
project_key: "ml-{{model_name}}"
- name: register-cmdb
type: call
call: "servicenow.create-ci"
with:
name: "ml-model-{{model_name}}-v{{model_version}}"
class: "cmdb_ci_ml_model"
description: "Model {{model_name}} v{{model_version}} deployed to endpoint {{endpoint_name}}. Quality gate: {{quality-check.status}}. Deployment ID: {{deploy-endpoint.deployment_id}}."
owned_by: "Data_Science"
consumes:
- type: http
namespace: azureml
baseUri: "https://ml.azure.com/api/subscriptions/{{sub_id}}/resourceGroups/bnp-rg/providers/Microsoft.MachineLearningServices/workspaces/bnp-ml"
authentication:
type: bearer
token: "$secrets.azure_mgmt_token"
resources:
- name: deployments
path: "/endpoints/{{endpoint_name}}/deployments"
inputParameters:
- name: endpoint_name
in: path
operations:
- name: create-deployment
method: POST
- type: http
namespace: sonarqube
baseUri: "https://sonarqube.bnpparibas.net/api"
authentication:
type: bearer
token: "$secrets.sonarqube_token"
resources:
- name: quality-gates
path: "/qualitygates/project_status?projectKey={{project_key}}"
inputParameters:
- name: project_key
in: path
operations:
- name: get-quality-gate
method: GET
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cmdb
path: "/table/cmdb_ci"
operations:
- name: create-ci
method: POST
Fetches current FX exchange rates from Bloomberg Enterprise Data for a given currency pair, returning bid, ask, and mid rates.
naftiko: "0.5"
info:
label: "Bloomberg FX Rate Lookup"
description: "Fetches current FX exchange rates from Bloomberg Enterprise Data for a given currency pair, returning bid, ask, and mid rates."
tags:
- fx
- bloomberg-enterprise-data
capability:
exposes:
- type: mcp
namespace: bloomberg-fx
port: 8080
tools:
- name: get-fx-rate
description: "Retrieve the current FX rate for a currency pair from Bloomberg."
inputParameters:
- name: currency_pair
in: body
type: string
description: "Currency pair ticker (e.g. EURUSD Curncy)."
call: "bloomberg-fx.get-rate"
with:
currency_pair: "{{currency_pair}}"
consumes:
- type: http
namespace: bloomberg-fx
baseUri: "https://api.bloomberg.com/eap/catalogs/bbg/fields"
authentication:
type: bearer
token: "$secrets.bloomberg_api_key"
resources:
- name: rates
path: "/snapshots/{{currency_pair}}"
inputParameters:
- name: currency_pair
in: path
operations:
- name: get-rate
method: GET
Retrieves real-time market data for a given security from Bloomberg Enterprise Data, returning last price, bid/ask, and volume.
naftiko: "0.5"
info:
label: "Bloomberg Market Data Lookup"
description: "Retrieves real-time market data for a given security from Bloomberg Enterprise Data, returning last price, bid/ask, and volume."
tags:
- trading
- market-data
- bloomberg
- bloomberg-enterprise-data
capability:
exposes:
- type: mcp
namespace: market-data
port: 8080
tools:
- name: get-security-quote
description: "Given a Bloomberg ticker symbol, return the latest price, bid, ask, and volume from Bloomberg Enterprise Data."
inputParameters:
- name: ticker
in: body
type: string
description: "The Bloomberg ticker symbol (e.g. BNPP FP Equity)."
call: "bloomberg.get-quote"
with:
ticker: "{{ticker}}"
outputParameters:
- name: last_price
type: number
mapping: "$.data.lastPrice"
- name: bid
type: number
mapping: "$.data.bid"
- name: ask
type: number
mapping: "$.data.ask"
- name: volume
type: number
mapping: "$.data.volume"
consumes:
- type: http
namespace: bloomberg
baseUri: "https://api.bloomberg.com/eap/catalogs/bbg/fields"
authentication:
type: bearer
token: "$secrets.bloomberg_api_key"
resources:
- name: quotes
path: "/snapshots/{{ticker}}"
inputParameters:
- name: ticker
in: path
operations:
- name: get-quote
method: GET
Creates a new bond instrument in Bloomberg AIM, registers in SimCorp Dimension, generates SWIFT messages, and notifies the syndicate desk via ServiceNow.
naftiko: "0.5"
info:
label: "Bond Issuance Workflow"
description: "Creates a new bond instrument in Bloomberg AIM, registers in SimCorp Dimension, generates SWIFT messages, and notifies the syndicate desk via ServiceNow."
tags:
- capital-markets
- bloomberg-aim
- simcorp-dimension
- swift
- servicenow
capability:
exposes:
- type: mcp
namespace: bond-issuance
port: 8080
tools:
- name: issue-bond
description: "Register and notify for a new bond issuance."
inputParameters:
- name: isin
in: body
type: string
description: "Bond ISIN."
- name: issuer
in: body
type: string
description: "Issuer name."
- name: amount
in: body
type: number
description: "Issuance amount."
steps:
- name: register-aim
type: call
call: "bloomberg-aim.create-instrument"
with:
isin: "{{isin}}"
issuer: "{{issuer}}"
- name: register-simcorp
type: call
call: "simcorp.create-instrument"
with:
isin: "{{isin}}"
name: "{{issuer}} Bond"
- name: send-swift
type: call
call: "swift.send-mt564"
with:
isin: "{{isin}}"
event_type: "NEW_ISSUE"
- name: notify-desk
type: call
call: "servicenow.create-task"
with:
short_description: "New bond issuance: {{issuer}} {{isin}}"
description: "Amount: {{amount}}. SWIFT: {{send-swift.reference}}."
category: "capital_markets"
consumes:
- type: http
namespace: bloomberg-aim
baseUri: "https://aim.bloomberg.com/api/v1"
authentication:
type: bearer
token: "$secrets.bloomberg_aim_token"
resources:
- name: instruments
path: "/instruments"
operations:
- name: create-instrument
method: POST
- type: http
namespace: simcorp
baseUri: "https://simcorp.bnpparibas.net/api/v2"
authentication:
type: bearer
token: "$secrets.simcorp_token"
resources:
- name: instruments
path: "/instruments"
operations:
- name: create-instrument
method: POST
- type: http
namespace: swift
baseUri: "https://swift.bnpparibas.com/api/v1"
authentication:
type: bearer
token: "$secrets.swift_token"
resources:
- name: messages
path: "/messages/mt564"
operations:
- name: send-mt564
method: POST
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.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
Triggers a GitHub Actions deployment pipeline, monitors build status, scans with SonarQube for code quality, deploys to Azure Kubernetes Service, and logs the release in ServiceNow.
naftiko: "0.5"
info:
label: "CI/CD Pipeline Deployment Orchestrator"
description: "Triggers a GitHub Actions deployment pipeline, monitors build status, scans with SonarQube for code quality, deploys to Azure Kubernetes Service, and logs the release in ServiceNow."
tags:
- development
- ci-cd
- github-actions
- sonarqube
- azure-kubernetes-service
- servicenow
capability:
exposes:
- type: mcp
namespace: cicd
port: 8080
tools:
- name: deploy-service
description: "Trigger a full CI/CD deployment from GitHub Actions through quality gate to AKS, with ServiceNow change tracking."
inputParameters:
- name: repository
in: body
type: string
description: "The GitHub repository in owner/repo format."
- name: branch
in: body
type: string
description: "The branch to deploy."
- name: environment
in: body
type: string
description: "Target environment (staging, production)."
steps:
- name: trigger-build
type: call
call: "github.trigger-workflow"
with:
repository: "{{repository}}"
workflow: "deploy.yml"
ref: "{{branch}}"
- name: quality-scan
type: call
call: "sonarqube.get-quality-gate"
with:
project_key: "{{repository}}"
- name: deploy-to-aks
type: call
call: "aks.create-deployment"
with:
cluster: "bnp-{{environment}}-cluster"
namespace: "{{repository}}"
image_tag: "{{trigger-build.sha}}"
- name: log-change
type: call
call: "servicenow.create-change"
with:
short_description: "Deployment: {{repository}} to {{environment}}"
description: "Branch: {{branch}}. Commit: {{trigger-build.sha}}. SonarQube gate: {{quality-scan.status}}. AKS deployment: {{deploy-to-aks.deployment_id}}."
assigned_group: "Platform_Engineering"
category: "deployment"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: workflows
path: "/repos/{{repository}}/actions/workflows/{{workflow}}/dispatches"
inputParameters:
- name: repository
in: path
- name: workflow
in: path
operations:
- name: trigger-workflow
method: POST
- type: http
namespace: sonarqube
baseUri: "https://sonarqube.bnpparibas.net/api"
authentication:
type: bearer
token: "$secrets.sonarqube_token"
resources:
- name: quality-gates
path: "/qualitygates/project_status?projectKey={{project_key}}"
inputParameters:
- name: project_key
in: path
operations:
- name: get-quality-gate
method: GET
- type: http
namespace: aks
baseUri: "https://management.azure.com/subscriptions/{{sub_id}}/resourceGroups/bnp-rg/providers/Microsoft.ContainerService/managedClusters"
authentication:
type: bearer
token: "$secrets.azure_mgmt_token"
resources:
- name: deployments
path: "/{{cluster}}/deployments"
inputParameters:
- name: cluster
in: path
operations:
- name: create-deployment
method: POST
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: changes
path: "/table/change_request"
operations:
- name: create-change
method: POST
Scans code in SonarQube, checks dependencies for vulnerabilities, runs container scans, and gates deployment approval in Azure DevOps.
naftiko: "0.5"
info:
label: "CI/CD Security Gate Pipeline"
description: "Scans code in SonarQube, checks dependencies for vulnerabilities, runs container scans, and gates deployment approval in Azure DevOps."
tags:
- devsecops
- sonarqube
- docker
- azure-devops
capability:
exposes:
- type: mcp
namespace: security-gate
port: 8080
tools:
- name: run-security-gate
description: "Execute security gates before deployment approval."
inputParameters:
- name: project_key
in: body
type: string
description: "SonarQube project key."
- name: pipeline_id
in: body
type: string
description: "Azure DevOps pipeline ID."
steps:
- name: check-quality
type: call
call: "sonarqube.get-quality-gate"
with:
project_key: "{{project_key}}"
- name: scan-container
type: call
call: "docker.scan-image"
with:
project: "{{project_key}}"
- name: approve-deploy
type: call
call: "azdo.approve-gate"
with:
pipeline_id: "{{pipeline_id}}"
status: "{{check-quality.status}}"
consumes:
- type: http
namespace: sonarqube
baseUri: "https://sonar.bnpparibas.com/api"
authentication:
type: bearer
token: "$secrets.sonarqube_token"
resources:
- name: quality-gates
path: "/qualitygates/project_status"
inputParameters:
- name: project_key
in: query
operations:
- name: get-quality-gate
method: GET
- type: http
namespace: docker
baseUri: "https://registry.bnpparibas.com/v2"
authentication:
type: bearer
token: "$secrets.registry_token"
resources:
- name: scans
path: "/scans"
operations:
- name: scan-image
method: POST
- type: http
namespace: azdo
baseUri: "https://dev.azure.com/bnpparibas"
authentication:
type: bearer
token: "$secrets.azdo_token"
resources:
- name: approvals
path: "/_apis/pipelines/{{pipeline_id}}/approvals"
inputParameters:
- name: pipeline_id
in: path
operations:
- name: approve-gate
method: POST
Retrieves client data from Salesforce, runs screening checks, updates KYC status in Temenos, and logs results in ServiceNow.
naftiko: "0.5"
info:
label: "Client KYC Refresh Pipeline"
description: "Retrieves client data from Salesforce, runs screening checks, updates KYC status in Temenos, and logs results in ServiceNow."
tags:
- compliance
- salesforce
- temenos-transact
- servicenow
capability:
exposes:
- type: mcp
namespace: kyc-refresh
port: 8080
tools:
- name: refresh-kyc
description: "Refresh KYC status for a client across Salesforce, Temenos, and ServiceNow."
inputParameters:
- name: client_id
in: body
type: string
description: "Salesforce client account ID."
steps:
- name: get-client
type: call
call: "salesforce.get-account"
with:
account_id: "{{client_id}}"
- name: run-screening
type: call
call: "temenos.screen-client"
with:
name: "{{get-client.Name}}"
country: "{{get-client.BillingCountry}}"
- name: update-kyc
type: call
call: "temenos.update-kyc-status"
with:
customer_id: "{{get-client.Temenos_ID__c}}"
status: "{{run-screening.result}}"
- name: log-review
type: call
call: "servicenow.create-task"
with:
short_description: "KYC refresh: {{get-client.Name}}"
description: "Screening result: {{run-screening.result}}. Matches: {{run-screening.match_count}}."
category: "kyc_review"
consumes:
- type: http
namespace: salesforce
baseUri: "https://bnpparibas.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: temenos
baseUri: "https://temenos.bnpparibas.com/api/v1"
authentication:
type: bearer
token: "$secrets.temenos_token"
resources:
- name: screening
path: "/compliance/screen"
operations:
- name: screen-client
method: POST
- name: kyc
path: "/customers/{{customer_id}}/kyc"
inputParameters:
- name: customer_id
in: path
operations:
- name: update-kyc-status
method: PATCH
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.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
Closes accounts in Temenos, archives records in Azure Blob Storage, updates Salesforce CRM, and completes offboarding in ServiceNow.
naftiko: "0.5"
info:
label: "Client Offboarding Orchestrator"
description: "Closes accounts in Temenos, archives records in Azure Blob Storage, updates Salesforce CRM, and completes offboarding in ServiceNow."
tags:
- operations
- temenos-transact
- azure-blob-storage
- salesforce
- servicenow
capability:
exposes:
- type: mcp
namespace: client-offboarding
port: 8080
tools:
- name: offboard-client
description: "Close client accounts and archive records."
inputParameters:
- name: client_id
in: body
type: string
description: "Salesforce client ID."
steps:
- name: get-client
type: call
call: "salesforce.get-account"
with:
account_id: "{{client_id}}"
- name: close-accounts
type: call
call: "temenos.close-customer"
with:
customer_id: "{{get-client.Temenos_ID__c}}"
- name: archive-records
type: call
call: "azure-blob.upload"
with:
container: "client-archives"
blob_name: "{{client_id}}/records.json"
- name: complete-offboarding
type: call
call: "servicenow.create-task"
with:
short_description: "Client offboarding: {{get-client.Name}}"
description: "Accounts closed. Records archived. Salesforce: {{client_id}}."
consumes:
- type: http
namespace: salesforce
baseUri: "https://bnpparibas.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: temenos
baseUri: "https://temenos.bnpparibas.com/api/v1"
authentication:
type: bearer
token: "$secrets.temenos_token"
resources:
- name: customers
path: "/customers/{{customer_id}}/close"
inputParameters:
- name: customer_id
in: path
operations:
- name: close-customer
method: POST
- type: http
namespace: azure-blob
baseUri: "https://bnpdata.blob.core.windows.net"
authentication:
type: bearer
token: "$secrets.azure_storage_token"
resources:
- name: blobs
path: "/{{container}}/{{blob_name}}"
inputParameters:
- name: container
in: path
- name: blob_name
in: path
operations:
- name: upload
method: PUT
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.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
Extracts holdings from FactSet, generates performance reports in Power BI, stores in Azure Blob Storage, and distributes to clients via Salesforce.
naftiko: "0.5"
info:
label: "Client Portfolio Reporting Pipeline"
description: "Extracts holdings from FactSet, generates performance reports in Power BI, stores in Azure Blob Storage, and distributes to clients via Salesforce."
tags:
- client-reporting
- factset
- power-bi
- azure-blob-storage
- salesforce
capability:
exposes:
- type: mcp
namespace: portfolio-reporting
port: 8080
tools:
- name: generate-client-report
description: "Generate and distribute client portfolio performance reports."
inputParameters:
- name: portfolio_code
in: body
type: string
description: "Portfolio code."
- name: client_email
in: body
type: string
description: "Client email."
steps:
- name: get-holdings
type: call
call: "factset.get-holdings"
with:
portfolio_code: "{{portfolio_code}}"
- name: refresh-report
type: call
call: "powerbi.refresh-dataset"
with:
dataset_id: "client-portfolio-{{portfolio_code}}"
- name: store-report
type: call
call: "azure-blob.upload"
with:
container: "client-reports"
blob_name: "{{portfolio_code}}/latest.pdf"
- name: notify-client
type: call
call: "salesforce.create-task"
with:
subject: "Portfolio Report — {{portfolio_code}}"
description: "Report generated. Holdings: {{get-holdings.count}}. Download: {{store-report.url}}."
consumes:
- type: http
namespace: factset
baseUri: "https://api.factset.com/analytics/v3"
authentication:
type: basic
username: "$secrets.factset_user"
password: "$secrets.factset_api_key"
resources:
- name: holdings
path: "/portfolios/{{portfolio_code}}/holdings"
inputParameters:
- name: portfolio_code
in: path
operations:
- name: get-holdings
method: GET
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
- type: http
namespace: azure-blob
baseUri: "https://bnpdata.blob.core.windows.net"
authentication:
type: bearer
token: "$secrets.azure_storage_token"
resources:
- name: blobs
path: "/{{container}}/{{blob_name}}"
inputParameters:
- name: container
in: path
- name: blob_name
in: path
operations:
- name: upload
method: PUT
- type: http
namespace: salesforce
baseUri: "https://bnpparibas.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: tasks
path: "/sobjects/Task"
operations:
- name: create-task
method: POST
Calculates margin requirements from SimCorp, generates collateral calls, sends via SWIFT, and tracks responses in ServiceNow.
naftiko: "0.5"
info:
label: "Collateral Call Processing Workflow"
description: "Calculates margin requirements from SimCorp, generates collateral calls, sends via SWIFT, and tracks responses in ServiceNow."
tags:
- collateral
- simcorp-dimension
- swift
- servicenow
capability:
exposes:
- type: mcp
namespace: collateral-calls
port: 8080
tools:
- name: process-collateral-call
description: "Calculate margin and process collateral calls."
inputParameters:
- name: counterparty_id
in: body
type: string
description: "Counterparty identifier."
steps:
- name: calculate-margin
type: call
call: "simcorp.calculate-margin"
with:
counterparty_id: "{{counterparty_id}}"
- name: send-call
type: call
call: "swift.send-mt503"
with:
counterparty: "{{counterparty_id}}"
amount: "{{calculate-margin.call_amount}}"
- name: track-response
type: call
call: "servicenow.create-task"
with:
short_description: "Collateral call: {{counterparty_id}}"
description: "Amount: {{calculate-margin.call_amount}}. SWIFT: {{send-call.reference}}."
consumes:
- type: http
namespace: simcorp
baseUri: "https://simcorp.bnpparibas.net/api/v2"
authentication:
type: bearer
token: "$secrets.simcorp_token"
resources:
- name: margin
path: "/counterparties/{{counterparty_id}}/margin"
inputParameters:
- name: counterparty_id
in: path
operations:
- name: calculate-margin
method: POST
- type: http
namespace: swift
baseUri: "https://swift.bnpparibas.com/api/v1"
authentication:
type: bearer
token: "$secrets.swift_token"
resources:
- name: messages
path: "/messages/mt503"
operations:
- name: send-mt503
method: POST
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.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
Calculates margin requirements from SimCorp Dimension, matches against available collateral in SAP, and triggers margin call notifications through ServiceNow and Bloomberg messaging.
naftiko: "0.5"
info:
label: "Collateral Management Orchestrator"
description: "Calculates margin requirements from SimCorp Dimension, matches against available collateral in SAP, and triggers margin call notifications through ServiceNow and Bloomberg messaging."
tags:
- collateral-management
- simcorp-dimension
- sap
- servicenow
- bloomberg
capability:
exposes:
- type: mcp
namespace: collateral-mgmt
port: 8080
tools:
- name: process-margin-call
description: "Calculate margin requirements, check collateral availability, and issue margin call notifications."
inputParameters:
- name: agreement_id
in: body
type: string
description: "The collateral agreement identifier."
- name: counterparty_code
in: body
type: string
description: "The counterparty code."
steps:
- name: get-margin-requirement
type: call
call: "simcorp.get-margin"
with:
agreement_id: "{{agreement_id}}"
- name: get-available-collateral
type: call
call: "sap.get-collateral-pool"
with:
counterparty: "{{counterparty_code}}"
- name: create-margin-call
type: call
call: "servicenow.create-task"
with:
short_description: "Margin call: {{counterparty_code}} — Agreement {{agreement_id}}"
description: "Required margin: {{get-margin-requirement.required_amount}} {{get-margin-requirement.currency}}. Available collateral: {{get-available-collateral.total_value}}. Shortfall: {{get-margin-requirement.shortfall}}."
assigned_group: "Collateral_Management"
category: "margin_call"
priority: "2"
consumes:
- type: http
namespace: simcorp
baseUri: "https://simcorp.bnpparibas.net/api/v2"
authentication:
type: bearer
token: "$secrets.simcorp_token"
resources:
- name: margins
path: "/agreements/{{agreement_id}}/margin"
inputParameters:
- name: agreement_id
in: path
operations:
- name: get-margin
method: GET
- type: http
namespace: sap
baseUri: "https://bnp-s4.sap.com/sap/opu/odata/sap/FI_COLLATERAL_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: collateral
path: "/A_CollateralPool(Counterparty='{{counterparty}}')"
inputParameters:
- name: counterparty
in: path
operations:
- name: get-collateral-pool
method: GET
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.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
On corporate action announcement from Bloomberg, identifies impacted portfolios in SimCorp Dimension, calculates entitlements, books adjustments in SAP, and notifies portfolio managers.
naftiko: "0.5"
info:
label: "Corporate Action Processing Orchestrator"
description: "On corporate action announcement from Bloomberg, identifies impacted portfolios in SimCorp Dimension, calculates entitlements, books adjustments in SAP, and notifies portfolio managers."
tags:
- corporate-actions
- asset-management
- bloomberg
- simcorp-dimension
- sap
- servicenow
capability:
exposes:
- type: mcp
namespace: corporate-actions
port: 8080
tools:
- name: process-corporate-action
description: "On corporate action event, identify impacted portfolios, calculate entitlements, book adjustments, and notify managers."
inputParameters:
- name: event_id
in: body
type: string
description: "The Bloomberg corporate action event identifier."
- name: isin
in: body
type: string
description: "The ISIN of the affected security."
steps:
- name: get-event
type: call
call: "bloomberg.get-corporate-action"
with:
event_id: "{{event_id}}"
- name: find-portfolios
type: call
call: "simcorp.search-holdings"
with:
isin: "{{isin}}"
- name: book-adjustment
type: call
call: "sap.create-adjustment"
with:
event_type: "{{get-event.action_type}}"
isin: "{{isin}}"
ratio: "{{get-event.ratio}}"
ex_date: "{{get-event.ex_date}}"
portfolio_count: "{{find-portfolios.count}}"
- name: notify-managers
type: call
call: "servicenow.create-task"
with:
short_description: "Corporate action: {{get-event.action_type}} on {{isin}}"
description: "Event: {{get-event.description}}. Ex-date: {{get-event.ex_date}}. Ratio: {{get-event.ratio}}. Impacted portfolios: {{find-portfolios.count}}. SAP adjustment ref: {{book-adjustment.adjustment_ref}}."
assigned_group: "Portfolio_Management"
category: "corporate_action"
consumes:
- type: http
namespace: bloomberg
baseUri: "https://api.bloomberg.com/eap/catalogs/bbg"
authentication:
type: bearer
token: "$secrets.bloomberg_api_key"
resources:
- name: corporate-actions
path: "/corporate-actions/{{event_id}}"
inputParameters:
- name: event_id
in: path
operations:
- name: get-corporate-action
method: GET
- type: http
namespace: simcorp
baseUri: "https://simcorp.bnpparibas.net/api/v2"
authentication:
type: bearer
token: "$secrets.simcorp_token"
resources:
- name: holdings
path: "/holdings/search"
operations:
- name: search-holdings
method: POST
- type: http
namespace: sap
baseUri: "https://bnp-s4.sap.com/sap/opu/odata/sap/FI_CORP_ACTION_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: adjustments
path: "/A_Adjustment"
operations:
- name: create-adjustment
method: POST
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.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
Detects corporate actions from Bloomberg, updates positions in SimCorp, notifies portfolio managers via email, and logs in Confluence.
naftiko: "0.5"
info:
label: "Corporate Event Notification Pipeline"
description: "Detects corporate actions from Bloomberg, updates positions in SimCorp, notifies portfolio managers via email, and logs in Confluence."
tags:
- corporate-actions
- bloomberg
- simcorp-dimension
- confluence
capability:
exposes:
- type: mcp
namespace: corp-events
port: 8080
tools:
- name: process-corporate-event
description: "Process a corporate action event across systems."
inputParameters:
- name: event_id
in: body
type: string
description: "Bloomberg corporate action event ID."
steps:
- name: get-event
type: call
call: "bloomberg.get-corporate-action"
with:
event_id: "{{event_id}}"
- name: update-positions
type: call
call: "simcorp.apply-corporate-action"
with:
isin: "{{get-event.isin}}"
action_type: "{{get-event.action_type}}"
- name: log-action
type: call
call: "confluence.create-page"
with:
space_key: "OPS"
title: "Corporate Action: {{get-event.action_type}} — {{get-event.isin}}"
body: "Event: {{get-event.description}}. Portfolios affected: {{update-positions.count}}."
consumes:
- type: http
namespace: bloomberg
baseUri: "https://api.bloomberg.com/eap/catalogs/bbg"
authentication:
type: bearer
token: "$secrets.bloomberg_api_key"
resources:
- name: corporate-actions
path: "/corporate-actions/{{event_id}}"
inputParameters:
- name: event_id
in: path
operations:
- name: get-corporate-action
method: GET
- type: http
namespace: simcorp
baseUri: "https://simcorp.bnpparibas.net/api/v2"
authentication:
type: bearer
token: "$secrets.simcorp_token"
resources:
- name: corporate-actions
path: "/corporate-actions/apply"
operations:
- name: apply-corporate-action
method: POST
- type: http
namespace: confluence
baseUri: "https://bnpparibas.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
Validates a corporate payment against the customer account in Temenos Transact, screens beneficiary through Moody's sanctions list, executes via SAP treasury, and notifies operations via ServiceNow.
naftiko: "0.5"
info:
label: "Corporate Payment Processing Pipeline"
description: "Validates a corporate payment against the customer account in Temenos Transact, screens beneficiary through Moody's sanctions list, executes via SAP treasury, and notifies operations via ServiceNow."
tags:
- payments
- corporate-banking
- temenos-transact
- moodys
- sap
- servicenow
capability:
exposes:
- type: mcp
namespace: corporate-payments
port: 8080
tools:
- name: process-corporate-payment
description: "Validate account, screen beneficiary, execute payment, and notify operations for a corporate wire transfer."
inputParameters:
- name: debit_account_id
in: body
type: string
description: "The Temenos Transact debit account ID."
- name: beneficiary_name
in: body
type: string
description: "The beneficiary name for sanctions screening."
- name: beneficiary_country
in: body
type: string
description: "The beneficiary country ISO code."
- name: amount
in: body
type: number
description: "The payment amount."
- name: currency
in: body
type: string
description: "The payment currency ISO code."
steps:
- name: validate-account
type: call
call: "temenos.get-balance"
with:
account_id: "{{debit_account_id}}"
- name: screen-beneficiary
type: call
call: "moodys.screen-entity"
with:
entity_name: "{{beneficiary_name}}"
country: "{{beneficiary_country}}"
- name: execute-payment
type: call
call: "sap.create-payment"
with:
debit_account: "{{debit_account_id}}"
beneficiary: "{{beneficiary_name}}"
amount: "{{amount}}"
currency: "{{currency}}"
- name: notify-ops
type: call
call: "servicenow.create-task"
with:
short_description: "Corporate payment executed: {{amount}} {{currency}} to {{beneficiary_name}}"
description: "Debit account: {{debit_account_id}}. Available balance after: {{validate-account.available_balance}}. Screening result: {{screen-beneficiary.risk_level}}. SAP ref: {{execute-payment.payment_ref}}."
assigned_group: "Payment_Operations"
category: "payment_processing"
consumes:
- type: http
namespace: temenos
baseUri: "https://transact.bnpparibas.net/api/v1"
authentication:
type: bearer
token: "$secrets.temenos_token"
resources:
- name: accounts
path: "/accounts/{{account_id}}/balances"
inputParameters:
- name: account_id
in: path
operations:
- name: get-balance
method: GET
- type: http
namespace: moodys
baseUri: "https://api.moodys.com/screening/v1"
authentication:
type: bearer
token: "$secrets.moodys_api_key"
resources:
- name: entities
path: "/screen"
operations:
- name: screen-entity
method: POST
- type: http
namespace: sap
baseUri: "https://bnp-s4.sap.com/sap/opu/odata/sap/FI_PAYMENT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: payments
path: "/A_PaymentInstruction"
operations:
- name: create-payment
method: POST
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.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 counterparty exposure from SimCorp, checks Moody's rating, routes for approval in ServiceNow, and updates limits in Temenos.
naftiko: "0.5"
info:
label: "Credit Limit Approval Orchestrator"
description: "Retrieves counterparty exposure from SimCorp, checks Moody's rating, routes for approval in ServiceNow, and updates limits in Temenos."
tags:
- credit-risk
- simcorp-dimension
- moodys
- servicenow
- temenos-transact
capability:
exposes:
- type: mcp
namespace: credit-approval
port: 8080
tools:
- name: approve-credit-limit
description: "Evaluate and approve a credit limit change."
inputParameters:
- name: counterparty_id
in: body
type: string
description: "Counterparty identifier."
- name: requested_limit
in: body
type: number
description: "Requested credit limit."
steps:
- name: get-exposure
type: call
call: "simcorp.get-counterparty-exposure"
with:
counterparty_id: "{{counterparty_id}}"
- name: get-rating
type: call
call: "moodys.get-rating"
with:
entity_id: "{{counterparty_id}}"
- name: request-approval
type: call
call: "servicenow.create-change-request"
with:
short_description: "Credit limit: {{counterparty_id}} — {{requested_limit}}"
description: "Current exposure: {{get-exposure.total}}. Rating: {{get-rating.rating}}. Requested: {{requested_limit}}."
- name: update-limit
type: call
call: "temenos.update-credit-limit"
with:
counterparty_id: "{{counterparty_id}}"
limit: "{{requested_limit}}"
consumes:
- type: http
namespace: simcorp
baseUri: "https://simcorp.bnpparibas.net/api/v2"
authentication:
type: bearer
token: "$secrets.simcorp_token"
resources:
- name: exposure
path: "/counterparties/{{counterparty_id}}/exposure"
inputParameters:
- name: counterparty_id
in: path
operations:
- name: get-counterparty-exposure
method: GET
- type: http
namespace: moodys
baseUri: "https://api.moodys.com/v1"
authentication:
type: bearer
token: "$secrets.moodys_api_key"
resources:
- name: ratings
path: "/issuers/{{entity_id}}/ratings"
inputParameters:
- name: entity_id
in: path
operations:
- name: get-rating
method: GET
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: changes
path: "/table/change_request"
operations:
- name: create-change-request
method: POST
- type: http
namespace: temenos
baseUri: "https://temenos.bnpparibas.com/api/v1"
authentication:
type: bearer
token: "$secrets.temenos_token"
resources:
- name: limits
path: "/counterparties/{{counterparty_id}}/credit-limits"
inputParameters:
- name: counterparty_id
in: path
operations:
- name: update-credit-limit
method: PUT
Pulls counterparty financials from Bloomberg, credit rating from Moody's, exposure from SimCorp Dimension, and assembles a risk assessment report stored in SharePoint.
naftiko: "0.5"
info:
label: "Credit Risk Counterparty Assessment"
description: "Pulls counterparty financials from Bloomberg, credit rating from Moody's, exposure from SimCorp Dimension, and assembles a risk assessment report stored in SharePoint."
tags:
- credit-risk
- counterparty-risk
- bloomberg
- moodys
- simcorp-dimension
- sharepoint
capability:
exposes:
- type: mcp
namespace: counterparty-risk
port: 8080
tools:
- name: assess-counterparty
description: "Compile counterparty risk assessment from market data, credit rating, and exposure data."
inputParameters:
- name: counterparty_ticker
in: body
type: string
description: "The Bloomberg ticker of the counterparty."
- name: counterparty_moodys_id
in: body
type: string
description: "The Moody's issuer ID."
- name: portfolio_code
in: body
type: string
description: "The portfolio to check exposure against."
steps:
- name: get-financials
type: call
call: "bloomberg.get-quote"
with:
ticker: "{{counterparty_ticker}}"
- name: get-rating
type: call
call: "moodys.get-rating"
with:
issuer_id: "{{counterparty_moodys_id}}"
- name: get-exposure
type: call
call: "simcorp.get-counterparty-exposure"
with:
portfolio_code: "{{portfolio_code}}"
counterparty_ticker: "{{counterparty_ticker}}"
- name: store-report
type: call
call: "sharepoint.create-file"
with:
site_id: "credit_risk_reports"
file_path: "Assessments/{{counterparty_ticker}}/assessment.json"
content_type: "application/json"
consumes:
- type: http
namespace: bloomberg
baseUri: "https://api.bloomberg.com/eap/catalogs/bbg/fields"
authentication:
type: bearer
token: "$secrets.bloomberg_api_key"
resources:
- name: quotes
path: "/snapshots/{{ticker}}"
inputParameters:
- name: ticker
in: path
operations:
- name: get-quote
method: GET
- type: http
namespace: moodys
baseUri: "https://api.moodys.com/credit/v1"
authentication:
type: bearer
token: "$secrets.moodys_api_key"
resources:
- name: ratings
path: "/issuers/{{issuer_id}}/ratings"
inputParameters:
- name: issuer_id
in: path
operations:
- name: get-rating
method: GET
- type: http
namespace: simcorp
baseUri: "https://simcorp.bnpparibas.net/api/v2"
authentication:
type: bearer
token: "$secrets.simcorp_token"
resources:
- name: exposure
path: "/portfolios/{{portfolio_code}}/exposure/{{counterparty_ticker}}"
inputParameters:
- name: portfolio_code
in: path
- name: counterparty_ticker
in: path
operations:
- name: get-counterparty-exposure
method: GET
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/{{site_id}}/drive/root:/{{file_path}}:/content"
inputParameters:
- name: site_id
in: path
- name: file_path
in: path
operations:
- name: create-file
method: PUT
Validates payment in SAP, converts currency via Bloomberg FX, routes through SWIFT, and tracks delivery in ServiceNow.
naftiko: "0.5"
info:
label: "Cross-Border Payment Processing Pipeline"
description: "Validates payment in SAP, converts currency via Bloomberg FX, routes through SWIFT, and tracks delivery in ServiceNow."
tags:
- payments
- sap
- bloomberg
- swift
- servicenow
capability:
exposes:
- type: mcp
namespace: xborder-payment
port: 8080
tools:
- name: process-cross-border-payment
description: "Process and track a cross-border payment end-to-end."
inputParameters:
- name: payment_id
in: body
type: string
description: "SAP payment instruction ID."
steps:
- name: get-payment
type: call
call: "sap.get-payment"
with:
payment_id: "{{payment_id}}"
- name: get-fx-rate
type: call
call: "bloomberg.get-fx-rate"
with:
pair: "{{get-payment.currency_pair}}"
- name: send-swift
type: call
call: "swift.send-mt103"
with:
payment_ref: "{{payment_id}}"
amount: "{{get-payment.amount}}"
rate: "{{get-fx-rate.mid}}"
- name: track-delivery
type: call
call: "servicenow.create-task"
with:
short_description: "Cross-border payment: {{payment_id}}"
description: "Amount: {{get-payment.amount}}. FX: {{get-fx-rate.mid}}. SWIFT: {{send-swift.uetr}}."
consumes:
- type: http
namespace: sap
baseUri: "https://bnp-s4.sap.com/sap/opu/odata/sap"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: payments
path: "/FI_PAYMENT_SRV/A_Payment('{{payment_id}}')"
inputParameters:
- name: payment_id
in: path
operations:
- name: get-payment
method: GET
- type: http
namespace: bloomberg
baseUri: "https://api.bloomberg.com/eap/catalogs/bbg/fields"
authentication:
type: bearer
token: "$secrets.bloomberg_api_key"
resources:
- name: fx
path: "/snapshots/{{pair}}"
inputParameters:
- name: pair
in: path
operations:
- name: get-fx-rate
method: GET
- type: http
namespace: swift
baseUri: "https://swift.bnpparibas.com/api/v1"
authentication:
type: bearer
token: "$secrets.swift_token"
resources:
- name: messages
path: "/messages/mt103"
operations:
- name: send-mt103
method: POST
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.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
Triggers Informatica data flows, validates quality in Snowflake, publishes metadata to Azure Data Catalog, and notifies data stewards via Microsoft Teams.
naftiko: "0.5"
info:
label: "Data Lake Ingestion Pipeline"
description: "Triggers Informatica data flows, validates quality in Snowflake, publishes metadata to Azure Data Catalog, and notifies data stewards via Microsoft Teams."
tags:
- data-engineering
- informatica
- snowflake
- azure-data-factory
capability:
exposes:
- type: mcp
namespace: data-ingestion
port: 8080
tools:
- name: ingest-data
description: "Trigger data ingestion with quality validation and notification."
inputParameters:
- name: source_name
in: body
type: string
description: "Data source name."
- name: dataset
in: body
type: string
description: "Target dataset."
steps:
- name: trigger-flow
type: call
call: "informatica.run-task"
with:
task_name: "ingest-{{source_name}}"
- name: validate-quality
type: call
call: "snowflake.execute-statement"
with:
statement: "CALL DQ.VALIDATE('{{dataset}}')"
- name: publish-metadata
type: call
call: "adf.trigger-pipeline"
with:
pipeline_name: "catalog-{{dataset}}"
consumes:
- type: http
namespace: informatica
baseUri: "https://dm-us.informaticacloud.com/saas/api/v2"
authentication:
type: bearer
token: "$secrets.informatica_token"
resources:
- name: tasks
path: "/task/run"
operations:
- name: run-task
method: POST
- type: http
namespace: snowflake
baseUri: "https://bnpparibas.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: adf
baseUri: "https://management.azure.com"
authentication:
type: bearer
token: "$secrets.azure_mgmt_token"
resources:
- name: pipelines
path: "/subscriptions/$secrets.azure_sub_id/resourceGroups/data/providers/Microsoft.DataFactory/factories/bnp-adf/pipelines/{{pipeline_name}}/createRun"
inputParameters:
- name: pipeline_name
in: path
operations:
- name: trigger-pipeline
method: POST
Receives GDPR requests via ServiceNow, searches for personal data in Temenos and Salesforce, generates deletion reports, and logs in Confluence.
naftiko: "0.5"
info:
label: "Data Privacy Request Handler"
description: "Receives GDPR requests via ServiceNow, searches for personal data in Temenos and Salesforce, generates deletion reports, and logs in Confluence."
tags:
- compliance
- servicenow
- temenos-transact
- salesforce
- confluence
capability:
exposes:
- type: mcp
namespace: gdpr-handler
port: 8080
tools:
- name: handle-privacy-request
description: "Process a GDPR data subject request."
inputParameters:
- name: request_id
in: body
type: string
description: "ServiceNow request ID."
- name: subject_email
in: body
type: string
description: "Data subject email."
steps:
- name: get-request
type: call
call: "servicenow.get-task"
with:
task_id: "{{request_id}}"
- name: search-temenos
type: call
call: "temenos.search-customer"
with:
email: "{{subject_email}}"
- name: search-salesforce
type: call
call: "salesforce.search-contact"
with:
email: "{{subject_email}}"
- name: log-report
type: call
call: "confluence.create-page"
with:
space_key: "GDPR"
title: "DSAR: {{request_id}} — {{subject_email}}"
body: "Temenos records: {{search-temenos.count}}. Salesforce records: {{search-salesforce.count}}."
consumes:
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/task/{{task_id}}"
inputParameters:
- name: task_id
in: path
operations:
- name: get-task
method: GET
- type: http
namespace: temenos
baseUri: "https://temenos.bnpparibas.com/api/v1"
authentication:
type: bearer
token: "$secrets.temenos_token"
resources:
- name: customers
path: "/customers/search"
inputParameters:
- name: email
in: query
operations:
- name: search-customer
method: GET
- type: http
namespace: salesforce
baseUri: "https://bnpparibas.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: contacts
path: "/parameterizedSearch"
inputParameters:
- name: email
in: query
operations:
- name: search-contact
method: GET
- type: http
namespace: confluence
baseUri: "https://bnpparibas.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
Triggers Oracle database failover, verifies replication health, checks application connectivity via Datadog, and logs results in ServiceNow.
naftiko: "0.5"
info:
label: "Database Failover Test Pipeline"
description: "Triggers Oracle database failover, verifies replication health, checks application connectivity via Datadog, and logs results in ServiceNow."
tags:
- disaster-recovery
- oracle
- datadog
- servicenow
capability:
exposes:
- type: mcp
namespace: db-failover
port: 8080
tools:
- name: test-failover
description: "Execute and verify a database failover test."
inputParameters:
- name: db_name
in: body
type: string
description: "Oracle database name."
steps:
- name: trigger-failover
type: call
call: "oracle.initiate-failover"
with:
database: "{{db_name}}"
- name: verify-health
type: call
call: "datadog.query-metrics"
with:
query: "avg:oracle.db.connections{db:{{db_name}}}"
- name: log-result
type: call
call: "servicenow.create-change-request"
with:
short_description: "DR failover test: {{db_name}}"
description: "Failover status: {{trigger-failover.status}}. Connections: {{verify-health.value}}."
consumes:
- type: http
namespace: oracle
baseUri: "https://oracle.bnpparibas.com/em/api/v1"
authentication:
type: basic
username: "$secrets.oracle_user"
password: "$secrets.oracle_password"
resources:
- name: databases
path: "/databases/{{database}}/failover"
inputParameters:
- name: database
in: path
operations:
- name: initiate-failover
method: POST
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
name: "DD-API-KEY"
in: header
value: "$secrets.datadog_api_key"
resources:
- name: metrics
path: "/query"
inputParameters:
- name: query
in: query
operations:
- name: query-metrics
method: GET
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: changes
path: "/table/change_request"
operations:
- name: create-change-request
method: POST
Queries Datadog for API endpoint latency percentiles for a given service, returning p50, p95, and p99 values.
naftiko: "0.5"
info:
label: "Datadog API Latency Check"
description: "Queries Datadog for API endpoint latency percentiles for a given service, returning p50, p95, and p99 values."
tags:
- observability
- datadog
capability:
exposes:
- type: mcp
namespace: datadog-latency
port: 8080
tools:
- name: get-latency
description: "Retrieve API latency percentiles for a service from Datadog."
inputParameters:
- name: service_name
in: body
type: string
description: "The service name tag in Datadog."
call: "datadog-latency.query-metrics"
with:
query: "p99:trace.http.request{service:{{service_name}}}"
consumes:
- type: http
namespace: datadog-latency
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
name: "DD-API-KEY"
in: header
value: "$secrets.datadog_api_key"
resources:
- name: metrics
path: "/query"
inputParameters:
- name: query
in: query
operations:
- name: query-metrics
method: GET
Queries Datadog for the health status and error rate of a given service, used by SRE teams to assess production stability.
naftiko: "0.5"
info:
label: "Datadog APM Service Health"
description: "Queries Datadog for the health status and error rate of a given service, used by SRE teams to assess production stability."
tags:
- monitoring
- observability
- datadog
capability:
exposes:
- type: mcp
namespace: observability
port: 8080
tools:
- name: get-service-health
description: "Retrieve the current health status, latency, and error rate for a service from Datadog APM."
inputParameters:
- name: service_name
in: body
type: string
description: "The Datadog service name."
call: "datadog.get-service-metrics"
with:
service_name: "{{service_name}}"
outputParameters:
- name: status
type: string
mapping: "$.data.attributes.status"
- name: error_rate
type: number
mapping: "$.data.attributes.errorRate"
- name: avg_latency_ms
type: number
mapping: "$.data.attributes.avgLatencyMs"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.eu/api/v2"
authentication:
type: apiKey
name: "DD-API-KEY"
in: header
value: "$secrets.datadog_api_key"
resources:
- name: services
path: "/services/{{service_name}}/metrics"
inputParameters:
- name: service_name
in: path
operations:
- name: get-service-metrics
method: GET
On new OTC derivative trade, retrieves trade details from Bloomberg AIM, generates confirmation document in SharePoint, sends to counterparty via Axway secure file transfer, and logs in ServiceNow.
naftiko: "0.5"
info:
label: "Derivatives Trade Confirmation Workflow"
description: "On new OTC derivative trade, retrieves trade details from Bloomberg AIM, generates confirmation document in SharePoint, sends to counterparty via Axway secure file transfer, and logs in ServiceNow."
tags:
- derivatives
- trade-operations
- bloomberg-aim
- sharepoint
- axway
- servicenow
capability:
exposes:
- type: mcp
namespace: derivatives-confirm
port: 8080
tools:
- name: confirm-otc-trade
description: "Generate and send trade confirmation for an OTC derivative, logging the workflow in ServiceNow."
inputParameters:
- name: trade_ref
in: body
type: string
description: "The Bloomberg AIM trade reference."
- name: counterparty_id
in: body
type: string
description: "The counterparty identifier for secure delivery."
steps:
- name: get-trade
type: call
call: "bloomberg-aim.get-trade"
with:
trade_ref: "{{trade_ref}}"
- name: create-confirmation
type: call
call: "sharepoint.create-file"
with:
site_id: "derivatives_confirmations"
file_path: "Confirmations/{{trade_ref}}_confirm.pdf"
content_type: "application/pdf"
- name: send-to-counterparty
type: call
call: "axway.send-file"
with:
partner_id: "{{counterparty_id}}"
file_url: "{{create-confirmation.url}}"
filename: "{{trade_ref}}_confirm.pdf"
- name: log-confirmation
type: call
call: "servicenow.create-task"
with:
short_description: "OTC confirmation sent: {{trade_ref}}"
description: "Trade: {{get-trade.instrument}} {{get-trade.notional}} {{get-trade.currency}}. Counterparty: {{get-trade.counterparty}}. Confirmation delivered via Axway. Transfer ID: {{send-to-counterparty.transfer_id}}."
assigned_group: "Derivatives_Operations"
category: "trade_confirmation"
consumes:
- type: http
namespace: bloomberg-aim
baseUri: "https://aim.bloomberg.com/api/v1"
authentication:
type: bearer
token: "$secrets.bloomberg_aim_token"
resources:
- name: trades
path: "/trades/{{trade_ref}}"
inputParameters:
- name: trade_ref
in: path
operations:
- name: get-trade
method: GET
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/{{site_id}}/drive/root:/{{file_path}}:/content"
inputParameters:
- name: site_id
in: path
- name: file_path
in: path
operations:
- name: create-file
method: PUT
- type: http
namespace: axway
baseUri: "https://axway.bnpparibas.net/api/v1"
authentication:
type: bearer
token: "$secrets.axway_token"
resources:
- name: transfers
path: "/transfers"
operations:
- name: send-file
method: POST
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.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
Fetches market data from Bloomberg, runs valuation models in Azure Databricks, stores results in Snowflake, and updates positions in SimCorp.
naftiko: "0.5"
info:
label: "Derivatives Valuation Pipeline"
description: "Fetches market data from Bloomberg, runs valuation models in Azure Databricks, stores results in Snowflake, and updates positions in SimCorp."
tags:
- derivatives
- bloomberg
- azure-databricks
- snowflake
- simcorp-dimension
capability:
exposes:
- type: mcp
namespace: deriv-valuation
port: 8080
tools:
- name: value-derivatives
description: "Run derivative valuations with market data and position updates."
inputParameters:
- name: portfolio_code
in: body
type: string
description: "Portfolio code."
- name: valuation_date
in: body
type: string
description: "Valuation date YYYY-MM-DD."
steps:
- name: get-market-data
type: call
call: "bloomberg.get-curves"
with:
date: "{{valuation_date}}"
- name: run-models
type: call
call: "databricks.submit-job"
with:
job_name: "deriv-valuation"
parameters: "{{portfolio_code}},{{valuation_date}}"
- name: store-results
type: call
call: "snowflake.execute-statement"
with:
statement: "CALL DERIV.STORE_VALUATIONS('{{portfolio_code}}', '{{valuation_date}}')"
- name: update-positions
type: call
call: "simcorp.update-valuations"
with:
portfolio_code: "{{portfolio_code}}"
date: "{{valuation_date}}"
consumes:
- type: http
namespace: bloomberg
baseUri: "https://api.bloomberg.com/eap/catalogs/bbg"
authentication:
type: bearer
token: "$secrets.bloomberg_api_key"
resources:
- name: curves
path: "/curves"
inputParameters:
- name: date
in: query
operations:
- name: get-curves
method: GET
- type: http
namespace: databricks
baseUri: "https://adb-bnp.azuredatabricks.net/api/2.0"
authentication:
type: bearer
token: "$secrets.databricks_token"
resources:
- name: jobs
path: "/jobs/run-now"
operations:
- name: submit-job
method: POST
- type: http
namespace: snowflake
baseUri: "https://bnpparibas.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: simcorp
baseUri: "https://simcorp.bnpparibas.net/api/v2"
authentication:
type: bearer
token: "$secrets.simcorp_token"
resources:
- name: valuations
path: "/portfolios/{{portfolio_code}}/valuations"
inputParameters:
- name: portfolio_code
in: path
operations:
- name: update-valuations
method: PUT
Scans a Docker container image with Falco for runtime vulnerabilities, checks compliance with Open Policy Agent, and logs findings in ServiceNow for security review.
naftiko: "0.5"
info:
label: "Docker Container Security Scan Pipeline"
description: "Scans a Docker container image with Falco for runtime vulnerabilities, checks compliance with Open Policy Agent, and logs findings in ServiceNow for security review."
tags:
- security
- container-security
- docker
- falco
- open-policy-agent
- servicenow
capability:
exposes:
- type: mcp
namespace: container-security
port: 8080
tools:
- name: scan-container
description: "Scan a Docker image for vulnerabilities, check policy compliance, and log security findings."
inputParameters:
- name: image_name
in: body
type: string
description: "The Docker image name with tag (e.g. registry.bnpparibas.net/app:v1.2)."
- name: namespace
in: body
type: string
description: "The Kubernetes namespace where the image runs."
steps:
- name: vulnerability-scan
type: call
call: "falco.scan-image"
with:
image: "{{image_name}}"
- name: policy-check
type: call
call: "opa.evaluate-policy"
with:
policy_path: "container/security"
input: "{{image_name}}"
- name: log-findings
type: call
call: "servicenow.create-task"
with:
short_description: "Container scan: {{image_name}}"
description: "Falco vulnerabilities: critical={{vulnerability-scan.critical_count}}, high={{vulnerability-scan.high_count}}. OPA policy: {{policy-check.decision}}. Namespace: {{namespace}}. Base image: {{vulnerability-scan.base_image}}."
assigned_group: "AppSec_Team"
category: "container_security"
consumes:
- type: http
namespace: falco
baseUri: "https://falco.bnpparibas.net/api/v1"
authentication:
type: bearer
token: "$secrets.falco_token"
resources:
- name: scans
path: "/scans"
operations:
- name: scan-image
method: POST
- type: http
namespace: opa
baseUri: "https://opa.bnpparibas.net/v1"
authentication:
type: bearer
token: "$secrets.opa_token"
resources:
- name: policies
path: "/data/{{policy_path}}"
inputParameters:
- name: policy_path
in: path
operations:
- name: evaluate-policy
method: POST
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.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
Queries Elasticsearch for error patterns in application logs, correlates with Datadog traces, and creates a ServiceNow problem record for recurring issues.
naftiko: "0.5"
info:
label: "Elasticsearch Log Analysis Pipeline"
description: "Queries Elasticsearch for error patterns in application logs, correlates with Datadog traces, and creates a ServiceNow problem record for recurring issues."
tags:
- observability
- logging
- elasticsearch
- datadog
- servicenow
capability:
exposes:
- type: mcp
namespace: log-analysis
port: 8080
tools:
- name: analyze-error-pattern
description: "Search for error patterns in Elasticsearch, correlate with Datadog traces, and create a problem record if recurring."
inputParameters:
- name: application
in: body
type: string
description: "The application name to search logs for."
- name: error_pattern
in: body
type: string
description: "The error pattern regex to search for."
- name: time_range
in: body
type: string
description: "Time range for the search (e.g. 24h, 7d)."
steps:
- name: search-logs
type: call
call: "elasticsearch.search"
with:
index: "logs-{{application}}-*"
query: "{{error_pattern}}"
time_range: "{{time_range}}"
- name: get-traces
type: call
call: "datadog.search-traces"
with:
service: "{{application}}"
query: "status:error"
time_range: "{{time_range}}"
- name: create-problem
type: call
call: "servicenow.create-problem"
with:
short_description: "Recurring error: {{application}} — {{error_pattern}}"
description: "Error occurrences: {{search-logs.total_hits}} in last {{time_range}}. Correlated Datadog traces: {{get-traces.trace_count}}. Top error: {{search-logs.top_message}}. First seen: {{search-logs.first_occurrence}}."
assigned_group: "Application_Support"
category: "application_error"
consumes:
- type: http
namespace: elasticsearch
baseUri: "https://elasticsearch.bnpparibas.net:9200"
authentication:
type: basic
username: "$secrets.elastic_user"
password: "$secrets.elastic_password"
resources:
- name: search
path: "/{{index}}/_search"
inputParameters:
- name: index
in: path
operations:
- name: search
method: POST
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.eu/api/v2"
authentication:
type: apiKey
name: "DD-API-KEY"
in: header
value: "$secrets.datadog_api_key"
resources:
- name: traces
path: "/traces/search"
operations:
- name: search-traces
method: POST
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: problems
path: "/table/problem"
operations:
- name: create-problem
method: POST
Pulls access records from Azure Active Directory, generates a review report in SharePoint, routes approvals via ServiceNow, and revokes stale access.
naftiko: "0.5"
info:
label: "Employee Access Review Workflow"
description: "Pulls access records from Azure Active Directory, generates a review report in SharePoint, routes approvals via ServiceNow, and revokes stale access."
tags:
- security
- azure-active-directory
- sharepoint
- servicenow
capability:
exposes:
- type: mcp
namespace: access-review
port: 8080
tools:
- name: review-access
description: "Audit employee access and revoke stale permissions."
inputParameters:
- name: department
in: body
type: string
description: "Department to review."
steps:
- name: get-users
type: call
call: "azure-ad.list-users"
with:
department: "{{department}}"
- name: store-report
type: call
call: "sharepoint.create-file"
with:
site_id: "security"
path: "AccessReviews/{{department}}/review.json"
- name: create-approval
type: call
call: "servicenow.create-change-request"
with:
short_description: "Access review: {{department}}"
description: "Users reviewed: {{get-users.count}}. Report: {{store-report.url}}."
consumes:
- type: http
namespace: azure-ad
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: users
path: "/users"
inputParameters:
- name: department
in: query
operations:
- name: list-users
method: GET
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/{{site_id}}/drive/root:/{{path}}:/content"
inputParameters:
- name: site_id
in: path
- name: path
in: path
operations:
- name: create-file
method: PUT
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: changes
path: "/table/change_request"
operations:
- name: create-change-request
method: POST
On employee termination in Workday, disables Azure AD account, revokes Salesforce access, closes ServiceNow assets, and archives SharePoint personal folder.
naftiko: "0.5"
info:
label: "Employee Offboarding Orchestrator"
description: "On employee termination in Workday, disables Azure AD account, revokes Salesforce access, closes ServiceNow assets, and archives SharePoint personal folder."
tags:
- hr
- offboarding
- workday
- azure-active-directory
- salesforce
- servicenow
- sharepoint
capability:
exposes:
- type: mcp
namespace: hr-offboarding
port: 8080
tools:
- name: process-offboarding
description: "Given a Workday employee ID, disable AD account, revoke CRM access, close IT assets, and archive documents."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID of the departing employee."
- name: termination_date
in: body
type: string
description: "The termination effective date in YYYY-MM-DD format."
steps:
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{worker_id}}"
- name: disable-ad-account
type: call
call: "azuread.disable-user"
with:
user_principal_name: "{{get-employee.work_email}}"
- name: revoke-salesforce
type: call
call: "salesforce.deactivate-user"
with:
email: "{{get-employee.work_email}}"
- name: close-assets
type: call
call: "servicenow.create-task"
with:
short_description: "Offboarding asset recovery: {{get-employee.full_name}}"
description: "Employee {{get-employee.full_name}} termination date: {{termination_date}}. Recover laptop, badges, and tokens. AD disabled. Salesforce revoked."
assigned_group: "IT_Offboarding"
category: "offboarding"
- name: archive-folder
type: call
call: "sharepoint.move-folder"
with:
site_id: "employee_docs"
source_path: "Active/{{get-employee.full_name}}"
target_path: "Archived/{{get-employee.full_name}}_{{termination_date}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: 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: disable-user
method: PATCH
- type: http
namespace: salesforce
baseUri: "https://bnpparibas.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: users
path: "/sobjects/User"
operations:
- name: deactivate-user
method: PATCH
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.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
- 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:/{{source_path}}"
inputParameters:
- name: site_id
in: path
- name: source_path
in: path
operations:
- name: move-folder
method: PATCH
Queries FactSet for current portfolio holdings by portfolio ID, returning asset allocation, top positions, and total NAV.
naftiko: "0.5"
info:
label: "FactSet Portfolio Holdings"
description: "Queries FactSet for current portfolio holdings by portfolio ID, returning asset allocation, top positions, and total NAV."
tags:
- asset-management
- portfolio-management
- factset
capability:
exposes:
- type: mcp
namespace: portfolio
port: 8080
tools:
- name: get-portfolio-holdings
description: "Retrieve current holdings for a given portfolio from FactSet, including top positions and net asset value."
inputParameters:
- name: portfolio_id
in: body
type: string
description: "The FactSet portfolio identifier."
call: "factset.get-holdings"
with:
portfolio_id: "{{portfolio_id}}"
outputParameters:
- name: total_nav
type: number
mapping: "$.data.totalNAV"
- name: holdings_count
type: number
mapping: "$.data.holdingsCount"
- name: top_positions
type: string
mapping: "$.data.topPositions"
consumes:
- type: http
namespace: factset
baseUri: "https://api.factset.com/analytics/portfolio/v3"
authentication:
type: basic
username: "$secrets.factset_user"
password: "$secrets.factset_password"
resources:
- name: holdings
path: "/portfolios/{{portfolio_id}}/holdings"
inputParameters:
- name: portfolio_id
in: path
operations:
- name: get-holdings
method: GET
Fetches end-of-day pricing data for a security from FactSet, returning close price, volume, and VWAP.
naftiko: "0.5"
info:
label: "FactSet Security Pricing"
description: "Fetches end-of-day pricing data for a security from FactSet, returning close price, volume, and VWAP."
tags:
- market-data
- factset
capability:
exposes:
- type: mcp
namespace: factset-pricing
port: 8080
tools:
- name: get-security-price
description: "Retrieve end-of-day pricing for a security by ISIN from FactSet."
inputParameters:
- name: isin
in: body
type: string
description: "The ISIN of the security."
call: "factset-pricing.get-price"
with:
isin: "{{isin}}"
consumes:
- type: http
namespace: factset-pricing
baseUri: "https://api.factset.com/content/factset-prices/v1"
authentication:
type: basic
username: "$secrets.factset_user"
password: "$secrets.factset_api_key"
resources:
- name: prices
path: "/fixed-income/prices"
inputParameters:
- name: isin
in: query
operations:
- name: get-price
method: GET
Pulls fund positions from SimCorp Dimension, retrieves market prices from Bloomberg, computes NAV in Azure Databricks, publishes results to Oracle Database, and refreshes the fund reporting dashboard.
naftiko: "0.5"
info:
label: "Fund Accounting NAV Calculation Pipeline"
description: "Pulls fund positions from SimCorp Dimension, retrieves market prices from Bloomberg, computes NAV in Azure Databricks, publishes results to Oracle Database, and refreshes the fund reporting dashboard."
tags:
- fund-accounting
- asset-management
- simcorp-dimension
- bloomberg
- azure-databricks
- oracle-database
- power-bi
capability:
exposes:
- type: mcp
namespace: fund-accounting
port: 8080
tools:
- name: calculate-nav
description: "Calculate net asset value for a fund by pulling positions, pricing, computing, and publishing."
inputParameters:
- name: fund_code
in: body
type: string
description: "The SimCorp fund/portfolio code."
- name: valuation_date
in: body
type: string
description: "The NAV valuation date in YYYY-MM-DD format."
steps:
- name: get-positions
type: call
call: "simcorp.get-positions"
with:
portfolio_code: "{{fund_code}}"
- name: get-prices
type: call
call: "bloomberg.get-bulk-prices"
with:
date: "{{valuation_date}}"
universe: "fund_{{fund_code}}"
- name: compute-nav
type: call
call: "databricks.run-job"
with:
job_name: "nav_calculation"
parameters: "fund={{fund_code}}&date={{valuation_date}}&positions_value={{get-positions.total_market_value}}"
- name: publish-nav
type: call
call: "oracle.execute-procedure"
with:
procedure: "pkg_fund_nav.publish_nav"
parameters: "fund_code={{fund_code}}&nav_date={{valuation_date}}&nav_value={{compute-nav.nav_value}}"
- name: refresh-dashboard
type: call
call: "powerbi.refresh-dataset"
with:
workspace_id: "fund_reporting"
dataset_id: "fund_nav_daily"
consumes:
- type: http
namespace: simcorp
baseUri: "https://simcorp.bnpparibas.net/api/v2"
authentication:
type: bearer
token: "$secrets.simcorp_token"
resources:
- name: positions
path: "/portfolios/{{portfolio_code}}/positions"
inputParameters:
- name: portfolio_code
in: path
operations:
- name: get-positions
method: GET
- type: http
namespace: bloomberg
baseUri: "https://api.bloomberg.com/eap/catalogs/bbg"
authentication:
type: bearer
token: "$secrets.bloomberg_api_key"
resources:
- name: bulk-prices
path: "/universes/{{universe}}/prices?date={{date}}"
inputParameters:
- name: universe
in: path
- name: date
in: path
operations:
- name: get-bulk-prices
method: GET
- type: http
namespace: databricks
baseUri: "https://adb-bnpparibas.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: oracle
baseUri: "https://ords.bnpparibas.net/ords/fund"
authentication:
type: bearer
token: "$secrets.oracle_ords_token"
resources:
- name: procedures
path: "/{{procedure}}"
inputParameters:
- name: procedure
in: path
operations:
- name: execute-procedure
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/{{workspace_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: workspace_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
Calculates NAV in SimCorp, validates in Snowflake, publishes to Bloomberg, and distributes to investors via Salesforce.
naftiko: "0.5"
info:
label: "Fund NAV Publication Workflow"
description: "Calculates NAV in SimCorp, validates in Snowflake, publishes to Bloomberg, and distributes to investors via Salesforce."
tags:
- fund-accounting
- simcorp-dimension
- snowflake
- bloomberg
- salesforce
capability:
exposes:
- type: mcp
namespace: nav-publication
port: 8080
tools:
- name: publish-nav
description: "Calculate, validate, and publish fund NAV."
inputParameters:
- name: fund_code
in: body
type: string
description: "Fund code."
- name: nav_date
in: body
type: string
description: "NAV date YYYY-MM-DD."
steps:
- name: calculate-nav
type: call
call: "simcorp.calculate-nav"
with:
fund_code: "{{fund_code}}"
date: "{{nav_date}}"
- name: validate
type: call
call: "snowflake.execute-statement"
with:
statement: "CALL NAV.VALIDATE('{{fund_code}}', '{{nav_date}}')"
- name: publish
type: call
call: "bloomberg.publish-nav"
with:
fund_code: "{{fund_code}}"
nav: "{{calculate-nav.nav_per_share}}"
date: "{{nav_date}}"
- name: notify-investors
type: call
call: "salesforce.create-task"
with:
subject: "NAV Published: {{fund_code}} — {{nav_date}}"
description: "NAV: {{calculate-nav.nav_per_share}}. Published to Bloomberg."
consumes:
- type: http
namespace: simcorp
baseUri: "https://simcorp.bnpparibas.net/api/v2"
authentication:
type: bearer
token: "$secrets.simcorp_token"
resources:
- name: nav
path: "/funds/{{fund_code}}/nav"
inputParameters:
- name: fund_code
in: path
operations:
- name: calculate-nav
method: POST
- type: http
namespace: snowflake
baseUri: "https://bnpparibas.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: bloomberg
baseUri: "https://api.bloomberg.com/eap/catalogs/bbg"
authentication:
type: bearer
token: "$secrets.bloomberg_api_key"
resources:
- name: nav
path: "/nav/publish"
operations:
- name: publish-nav
method: POST
- type: http
namespace: salesforce
baseUri: "https://bnpparibas.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: tasks
path: "/sobjects/Task"
operations:
- name: create-task
method: POST
Fetches FX rates from Bloomberg, executes hedging trades via Tradeweb, books in SimCorp Dimension, and confirms via SWIFT.
naftiko: "0.5"
info:
label: "FX Hedging Execution Workflow"
description: "Fetches FX rates from Bloomberg, executes hedging trades via Tradeweb, books in SimCorp Dimension, and confirms via SWIFT."
tags:
- fx
- bloomberg
- tradeweb
- simcorp-dimension
- swift
capability:
exposes:
- type: mcp
namespace: fx-hedging
port: 8080
tools:
- name: execute-hedge
description: "Execute an FX hedge across Bloomberg, Tradeweb, SimCorp, and SWIFT."
inputParameters:
- name: currency_pair
in: body
type: string
description: "Currency pair (e.g. EUR/USD)."
- name: notional
in: body
type: number
description: "Notional amount."
- name: portfolio_code
in: body
type: string
description: "SimCorp portfolio code."
steps:
- name: get-rate
type: call
call: "bloomberg.get-fx-rate"
with:
pair: "{{currency_pair}}"
- name: execute-trade
type: call
call: "tradeweb.submit-rfq"
with:
currency_pair: "{{currency_pair}}"
amount: "{{notional}}"
- name: book-trade
type: call
call: "simcorp.create-trade"
with:
portfolio_code: "{{portfolio_code}}"
instrument: "{{currency_pair}}"
amount: "{{notional}}"
rate: "{{execute-trade.rate}}"
- name: confirm-trade
type: call
call: "swift.send-mt300"
with:
trade_ref: "{{book-trade.trade_id}}"
counterparty: "{{execute-trade.counterparty_bic}}"
consumes:
- type: http
namespace: bloomberg
baseUri: "https://api.bloomberg.com/eap/catalogs/bbg/fields"
authentication:
type: bearer
token: "$secrets.bloomberg_api_key"
resources:
- name: fx
path: "/snapshots/{{pair}}"
inputParameters:
- name: pair
in: path
operations:
- name: get-fx-rate
method: GET
- type: http
namespace: tradeweb
baseUri: "https://api.tradeweb.com/v1"
authentication:
type: bearer
token: "$secrets.tradeweb_token"
resources:
- name: rfqs
path: "/fx/rfq"
operations:
- name: submit-rfq
method: POST
- type: http
namespace: simcorp
baseUri: "https://simcorp.bnpparibas.net/api/v2"
authentication:
type: bearer
token: "$secrets.simcorp_token"
resources:
- name: trades
path: "/portfolios/{{portfolio_code}}/trades"
inputParameters:
- name: portfolio_code
in: path
operations:
- name: create-trade
method: POST
- type: http
namespace: swift
baseUri: "https://swift.bnpparibas.com/api/v1"
authentication:
type: bearer
token: "$secrets.swift_token"
resources:
- name: messages
path: "/messages/mt300"
operations:
- name: send-mt300
method: POST
Monitors ServiceNow P1 incidents, escalates via PagerDuty, creates a war room in Microsoft Teams, and posts updates to the operations channel.
naftiko: "0.5"
info:
label: "Incident Escalation Pipeline"
description: "Monitors ServiceNow P1 incidents, escalates via PagerDuty, creates a war room in Microsoft Teams, and posts updates to the operations channel."
tags:
- incident-management
- servicenow
- pagerduty
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: incident-escalation
port: 8080
tools:
- name: escalate-incident
description: "Escalate a P1 incident with war room and notifications."
inputParameters:
- name: incident_number
in: body
type: string
description: "ServiceNow incident number."
steps:
- name: get-incident
type: call
call: "servicenow.get-incident"
with:
number: "{{incident_number}}"
- name: page-oncall
type: call
call: "pagerduty.create-incident"
with:
title: "P1: {{get-incident.short_description}}"
service_id: "{{get-incident.service_id}}"
urgency: "high"
- name: create-war-room
type: call
call: "msteams.create-channel"
with:
team_id: "incident-response"
name: "WAR-{{incident_number}}"
description: "{{get-incident.short_description}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
inputParameters:
- name: number
in: query
operations:
- name: get-incident
method: GET
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{team_id}}/channels"
inputParameters:
- name: team_id
in: path
operations:
- name: create-channel
method: POST
Triggers an Informatica data quality job for client reference data, validates results against Oracle Database, flags exceptions in ServiceNow, and refreshes the data quality dashboard in Power BI.
naftiko: "0.5"
info:
label: "Informatica Data Quality Pipeline"
description: "Triggers an Informatica data quality job for client reference data, validates results against Oracle Database, flags exceptions in ServiceNow, and refreshes the data quality dashboard in Power BI."
tags:
- data-quality
- reference-data
- informatica
- oracle-database
- servicenow
- power-bi
capability:
exposes:
- type: mcp
namespace: data-quality
port: 8080
tools:
- name: run-data-quality-check
description: "Run Informatica data quality profile, validate against Oracle, flag exceptions, and refresh quality dashboard."
inputParameters:
- name: profile_name
in: body
type: string
description: "The Informatica data quality profile name."
- name: dataset
in: body
type: string
description: "The dataset or table to profile."
steps:
- name: run-profile
type: call
call: "informatica.run-job"
with:
job_name: "{{profile_name}}"
dataset: "{{dataset}}"
- name: validate-oracle
type: call
call: "oracle.execute-query"
with:
query_name: "dq_validation_{{dataset}}"
job_id: "{{run-profile.job_id}}"
- name: flag-exceptions
type: call
call: "servicenow.create-task"
with:
short_description: "Data quality exceptions: {{dataset}}"
description: "Informatica profile: {{profile_name}}. Job ID: {{run-profile.job_id}}. Records scanned: {{run-profile.records_scanned}}. Exceptions: {{validate-oracle.exception_count}}. Pass rate: {{run-profile.pass_rate}}%."
assigned_group: "Data_Governance"
category: "data_quality"
- name: refresh-dashboard
type: call
call: "powerbi.refresh-dataset"
with:
workspace_id: "data_governance"
dataset_id: "data_quality_metrics"
consumes:
- type: http
namespace: informatica
baseUri: "https://dm-us.informaticacloud.com/saas/api/v2"
authentication:
type: bearer
token: "$secrets.informatica_token"
resources:
- name: jobs
path: "/job"
operations:
- name: run-job
method: POST
- type: http
namespace: oracle
baseUri: "https://ords.bnpparibas.net/ords/dq"
authentication:
type: bearer
token: "$secrets.oracle_ords_token"
resources:
- name: queries
path: "/validations/{{query_name}}"
inputParameters:
- name: query_name
in: path
operations:
- name: execute-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.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
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: workspace_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
On critical alert from Datadog, creates a ServiceNow incident, retrieves impacted service topology from Dynatrace, and sends an urgent notification to the on-call team via Azure Event Hubs.
naftiko: "0.5"
info:
label: "Infrastructure Incident Response Orchestrator"
description: "On critical alert from Datadog, creates a ServiceNow incident, retrieves impacted service topology from Dynatrace, and sends an urgent notification to the on-call team via Azure Event Hubs."
tags:
- operations
- incident-management
- datadog
- servicenow
- dynatrace
- azure-event-hubs
capability:
exposes:
- type: mcp
namespace: incident-response
port: 8080
tools:
- name: handle-critical-alert
description: "On critical Datadog alert, create ServiceNow incident, pull Dynatrace topology, and broadcast to on-call channel."
inputParameters:
- name: alert_id
in: body
type: string
description: "The Datadog alert identifier."
- name: service_name
in: body
type: string
description: "The affected service name."
steps:
- name: get-alert
type: call
call: "datadog.get-alert"
with:
alert_id: "{{alert_id}}"
- name: get-topology
type: call
call: "dynatrace.get-service-topology"
with:
service_name: "{{service_name}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "CRITICAL: {{service_name}} — {{get-alert.title}}"
description: "Datadog alert {{alert_id}}: {{get-alert.message}}. Impacted dependencies: {{get-topology.dependencies}}. Triggered: {{get-alert.timestamp}}."
priority: "1"
assigned_group: "SRE_OnCall"
category: "infrastructure"
- name: broadcast-notification
type: call
call: "eventhubs.send-event"
with:
topic: "critical-incidents"
body: "INCIDENT {{create-incident.number}}: {{service_name}} is down. Alert: {{get-alert.title}}. Dependencies: {{get-topology.dependency_count}} services affected."
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.eu/api/v2"
authentication:
type: apiKey
name: "DD-API-KEY"
in: header
value: "$secrets.datadog_api_key"
resources:
- name: alerts
path: "/alerts/{{alert_id}}"
inputParameters:
- name: alert_id
in: path
operations:
- name: get-alert
method: GET
- type: http
namespace: dynatrace
baseUri: "https://bnpparibas.live.dynatrace.com/api/v2"
authentication:
type: bearer
token: "$secrets.dynatrace_token"
resources:
- name: topology
path: "/entities?entitySelector=type(SERVICE),entityName({{service_name}})"
inputParameters:
- name: service_name
in: path
operations:
- name: get-service-topology
method: GET
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.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: eventhubs
baseUri: "https://bnpparibas-prod.servicebus.windows.net"
authentication:
type: bearer
token: "$secrets.eventhubs_sas_token"
resources:
- name: events
path: "/{{topic}}/messages"
inputParameters:
- name: topic
in: path
operations:
- name: send-event
method: POST
Runs Docker container scans, checks Kubernetes config compliance, logs findings in Elasticsearch, and creates Jira tickets for remediation.
naftiko: "0.5"
info:
label: "Infrastructure Security Scan Pipeline"
description: "Runs Docker container scans, checks Kubernetes config compliance, logs findings in Elasticsearch, and creates Jira tickets for remediation."
tags:
- security
- docker
- kubernetes
- elasticsearch
- jira
capability:
exposes:
- type: mcp
namespace: infra-security
port: 8080
tools:
- name: scan-infrastructure
description: "Run security scans across container and Kubernetes infrastructure."
inputParameters:
- name: namespace
in: body
type: string
description: "Kubernetes namespace to scan."
steps:
- name: scan-containers
type: call
call: "docker.scan-images"
with:
namespace: "{{namespace}}"
- name: check-compliance
type: call
call: "kubernetes.audit-config"
with:
namespace: "{{namespace}}"
- name: log-findings
type: call
call: "elasticsearch.index-document"
with:
index: "security-scans"
body: "{{scan-containers.results}}"
- name: create-tickets
type: call
call: "jira.create-issue"
with:
project: "SEC"
summary: "Security scan: {{namespace}} — {{scan-containers.vulnerability_count}} findings"
description: "Container vulns: {{scan-containers.vulnerability_count}}. Config issues: {{check-compliance.issue_count}}."
issue_type: "Bug"
consumes:
- type: http
namespace: docker
baseUri: "https://registry.bnpparibas.com/v2"
authentication:
type: bearer
token: "$secrets.registry_token"
resources:
- name: scans
path: "/scans"
operations:
- name: scan-images
method: POST
- type: http
namespace: kubernetes
baseUri: "https://aks.bnpparibas.com/apis/v1"
authentication:
type: bearer
token: "$secrets.k8s_token"
resources:
- name: audit
path: "/namespaces/{{namespace}}/audit"
inputParameters:
- name: namespace
in: path
operations:
- name: audit-config
method: GET
- type: http
namespace: elasticsearch
baseUri: "https://elastic.bnpparibas.com"
authentication:
type: basic
username: "$secrets.elastic_user"
password: "$secrets.elastic_password"
resources:
- name: documents
path: "/{{index}}/_doc"
inputParameters:
- name: index
in: path
operations:
- name: index-document
method: POST
- type: http
namespace: jira
baseUri: "https://bnpparibas.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Captures swap terms from Tradeweb, books the trade in Bloomberg AIM, generates confirmations in SimCorp, and notifies middle office via ServiceNow.
naftiko: "0.5"
info:
label: "Interest Rate Swap Booking Pipeline"
description: "Captures swap terms from Tradeweb, books the trade in Bloomberg AIM, generates confirmations in SimCorp, and notifies middle office via ServiceNow."
tags:
- derivatives
- tradeweb
- bloomberg-aim
- simcorp-dimension
- servicenow
capability:
exposes:
- type: mcp
namespace: irs-booking
port: 8080
tools:
- name: book-swap
description: "Book an interest rate swap across Tradeweb, Bloomberg AIM, SimCorp, and ServiceNow."
inputParameters:
- name: trade_ref
in: body
type: string
description: "Tradeweb trade reference."
- name: portfolio_code
in: body
type: string
description: "SimCorp portfolio code."
steps:
- name: get-trade
type: call
call: "tradeweb.get-trade"
with:
trade_ref: "{{trade_ref}}"
- name: book-aim
type: call
call: "bloomberg-aim.create-trade"
with:
trade_ref: "{{trade_ref}}"
instrument_type: "IRS"
- name: confirm-simcorp
type: call
call: "simcorp.create-trade"
with:
portfolio_code: "{{portfolio_code}}"
instrument: "{{get-trade.instrument}}"
notional: "{{get-trade.notional}}"
- name: notify-mo
type: call
call: "servicenow.create-task"
with:
short_description: "IRS booked: {{trade_ref}}"
description: "Notional: {{get-trade.notional}}. Rate: {{get-trade.fixed_rate}}. SimCorp: {{confirm-simcorp.trade_id}}."
category: "trade_processing"
consumes:
- type: http
namespace: tradeweb
baseUri: "https://api.tradeweb.com/v1"
authentication:
type: bearer
token: "$secrets.tradeweb_token"
resources:
- name: trades
path: "/trades/{{trade_ref}}"
inputParameters:
- name: trade_ref
in: path
operations:
- name: get-trade
method: GET
- type: http
namespace: bloomberg-aim
baseUri: "https://aim.bloomberg.com/api/v1"
authentication:
type: bearer
token: "$secrets.bloomberg_aim_token"
resources:
- name: trades
path: "/trades"
operations:
- name: create-trade
method: POST
- type: http
namespace: simcorp
baseUri: "https://simcorp.bnpparibas.net/api/v2"
authentication:
type: bearer
token: "$secrets.simcorp_token"
resources:
- name: trades
path: "/portfolios/{{portfolio_code}}/trades"
inputParameters:
- name: portfolio_code
in: path
operations:
- name: create-trade
method: POST
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.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 the backlog summary for a Jira project, returning total issues, priority distribution, and sprint velocity.
naftiko: "0.5"
info:
label: "Jira Project Backlog Summary"
description: "Retrieves the backlog summary for a Jira project, returning total issues, priority distribution, and sprint velocity."
tags:
- project-management
- jira
capability:
exposes:
- type: mcp
namespace: jira-backlog
port: 8080
tools:
- name: get-backlog
description: "Retrieve backlog summary for a Jira project."
inputParameters:
- name: project_key
in: body
type: string
description: "The Jira project key."
call: "jira-backlog.search-issues"
with:
jql: "project = {{project_key}} AND sprint is EMPTY"
consumes:
- type: http
namespace: jira-backlog
baseUri: "https://bnpparibas.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: search
path: "/search"
inputParameters:
- name: jql
in: query
operations:
- name: search-issues
method: GET
Checks Apache Kafka cluster health, consumer group lag, and topic throughput, then logs degradation alerts in ServiceNow for platform engineering review.
naftiko: "0.5"
info:
label: "Kafka Event Stream Health Monitor"
description: "Checks Apache Kafka cluster health, consumer group lag, and topic throughput, then logs degradation alerts in ServiceNow for platform engineering review."
tags:
- infrastructure
- streaming
- apache-kafka
- servicenow
capability:
exposes:
- type: mcp
namespace: kafka-ops
port: 8080
tools:
- name: check-kafka-health
description: "Monitor Kafka cluster health and consumer group lag, creating ServiceNow alerts for degradation."
inputParameters:
- name: cluster_id
in: body
type: string
description: "The Kafka cluster identifier."
- name: consumer_group
in: body
type: string
description: "The consumer group to monitor."
steps:
- name: get-cluster-health
type: call
call: "kafka.get-cluster"
with:
cluster_id: "{{cluster_id}}"
- name: get-consumer-lag
type: call
call: "kafka.get-consumer-lag"
with:
cluster_id: "{{cluster_id}}"
consumer_group: "{{consumer_group}}"
- name: create-alert
type: call
call: "servicenow.create-incident"
with:
short_description: "Kafka lag alert: {{consumer_group}} on {{cluster_id}}"
description: "Cluster status: {{get-cluster-health.status}}. Broker count: {{get-cluster-health.broker_count}}. Consumer group {{consumer_group}} total lag: {{get-consumer-lag.total_lag}} messages."
assigned_group: "Platform_Engineering"
category: "kafka_monitoring"
consumes:
- type: http
namespace: kafka
baseUri: "https://kafka-rest.bnpparibas.net/v3"
authentication:
type: bearer
token: "$secrets.kafka_rest_token"
resources:
- name: clusters
path: "/clusters/{{cluster_id}}"
inputParameters:
- name: cluster_id
in: path
operations:
- name: get-cluster
method: GET
- name: consumer-groups
path: "/clusters/{{cluster_id}}/consumer-groups/{{consumer_group}}/lags"
inputParameters:
- name: cluster_id
in: path
- name: consumer_group
in: path
operations:
- name: get-consumer-lag
method: GET
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.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
Retrieves consumer group lag for a Kafka topic, returning current offset, end offset, and lag per partition.
naftiko: "0.5"
info:
label: "Kafka Topic Offset Check"
description: "Retrieves consumer group lag for a Kafka topic, returning current offset, end offset, and lag per partition."
tags:
- streaming
- apache-kafka
capability:
exposes:
- type: mcp
namespace: kafka-monitor
port: 8080
tools:
- name: get-consumer-lag
description: "Check consumer group offset lag for a Kafka topic."
inputParameters:
- name: group_id
in: body
type: string
description: "The Kafka consumer group ID."
call: "kafka-monitor.get-offsets"
with:
group_id: "{{group_id}}"
consumes:
- type: http
namespace: kafka-monitor
baseUri: "https://kafka-rest.bnpparibas.com/v3"
authentication:
type: bearer
token: "$secrets.kafka_rest_token"
resources:
- name: offsets
path: "/consumers/{{group_id}}/offsets"
inputParameters:
- name: group_id
in: path
operations:
- name: get-offsets
method: GET
Creates a new user in Keycloak, assigns realm roles based on Workday job profile, configures Azure AD group membership, and logs provisioning in ServiceNow.
naftiko: "0.5"
info:
label: "Keycloak Identity Provisioning Pipeline"
description: "Creates a new user in Keycloak, assigns realm roles based on Workday job profile, configures Azure AD group membership, and logs provisioning in ServiceNow."
tags:
- security
- identity-management
- keycloak
- workday
- azure-active-directory
- servicenow
capability:
exposes:
- type: mcp
namespace: identity
port: 8080
tools:
- name: provision-identity
description: "Create Keycloak user, assign roles from Workday profile, sync Azure AD groups, and log provisioning."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID of the new user."
- name: realm
in: body
type: string
description: "The Keycloak realm to provision into."
steps:
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{worker_id}}"
- name: create-user
type: call
call: "keycloak.create-user"
with:
realm: "{{realm}}"
username: "{{get-employee.work_email}}"
first_name: "{{get-employee.first_name}}"
last_name: "{{get-employee.last_name}}"
email: "{{get-employee.work_email}}"
- name: assign-ad-group
type: call
call: "azuread.add-group-member"
with:
group_id: "{{get-employee.department}}_users"
user_principal_name: "{{get-employee.work_email}}"
- name: log-provisioning
type: call
call: "servicenow.create-task"
with:
short_description: "Identity provisioned: {{get-employee.full_name}}"
description: "Keycloak user created in realm {{realm}}. Azure AD group: {{get-employee.department}}_users. Worker ID: {{worker_id}}. Department: {{get-employee.department}}."
assigned_group: "IAM_Team"
category: "identity_provisioning"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: keycloak
baseUri: "https://keycloak.bnpparibas.net/admin/realms"
authentication:
type: bearer
token: "$secrets.keycloak_admin_token"
resources:
- name: users
path: "/{{realm}}/users"
inputParameters:
- name: realm
in: path
operations:
- name: create-user
method: POST
- type: http
namespace: azuread
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: groups
path: "/groups/{{group_id}}/members/$ref"
inputParameters:
- name: group_id
in: path
operations:
- name: add-group-member
method: POST
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.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
Plans the upgrade in Azure Kubernetes Service, drains nodes, runs health checks via Datadog, and logs changes in ServiceNow.
naftiko: "0.5"
info:
label: "Kubernetes Cluster Upgrade Pipeline"
description: "Plans the upgrade in Azure Kubernetes Service, drains nodes, runs health checks via Datadog, and logs changes in ServiceNow."
tags:
- infrastructure
- azure-kubernetes-service
- datadog
- servicenow
capability:
exposes:
- type: mcp
namespace: k8s-upgrade
port: 8080
tools:
- name: upgrade-cluster
description: "Plan and execute a Kubernetes cluster upgrade with monitoring."
inputParameters:
- name: cluster_name
in: body
type: string
description: "AKS cluster name."
- name: target_version
in: body
type: string
description: "Target Kubernetes version."
steps:
- name: start-upgrade
type: call
call: "aks.upgrade-cluster"
with:
cluster_name: "{{cluster_name}}"
version: "{{target_version}}"
- name: check-health
type: call
call: "datadog.query-metrics"
with:
query: "avg:kubernetes.pods.running{cluster:{{cluster_name}}}"
- name: log-change
type: call
call: "servicenow.create-change-request"
with:
short_description: "K8s upgrade: {{cluster_name}} to {{target_version}}"
description: "Cluster: {{cluster_name}}. Target: {{target_version}}. Pods running: {{check-health.value}}."
consumes:
- type: http
namespace: aks
baseUri: "https://management.azure.com"
authentication:
type: bearer
token: "$secrets.azure_mgmt_token"
resources:
- name: clusters
path: "/subscriptions/$secrets.azure_sub_id/resourceGroups/infra/providers/Microsoft.ContainerService/managedClusters/{{cluster_name}}"
inputParameters:
- name: cluster_name
in: path
operations:
- name: upgrade-cluster
method: PUT
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
name: "DD-API-KEY"
in: header
value: "$secrets.datadog_api_key"
resources:
- name: metrics
path: "/query"
inputParameters:
- name: query
in: query
operations:
- name: query-metrics
method: GET
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: changes
path: "/table/change_request"
operations:
- name: create-change-request
method: POST
Creates a new Kubernetes namespace on AKS with resource quotas, configures Hashicorp Vault secrets injection, and registers the namespace in ServiceNow CMDB.
naftiko: "0.5"
info:
label: "Kubernetes Namespace Provisioning"
description: "Creates a new Kubernetes namespace on AKS with resource quotas, configures Hashicorp Vault secrets injection, and registers the namespace in ServiceNow CMDB."
tags:
- platform-engineering
- kubernetes
- azure-kubernetes-service
- hashicorp-vault
- servicenow
capability:
exposes:
- type: mcp
namespace: k8s-provisioning
port: 8080
tools:
- name: provision-namespace
description: "Create AKS namespace with quotas, configure Vault secrets, and register in CMDB."
inputParameters:
- name: namespace_name
in: body
type: string
description: "The Kubernetes namespace to create."
- name: team
in: body
type: string
description: "The owning team name."
- name: environment
in: body
type: string
description: "Target environment (dev, staging, production)."
steps:
- name: create-namespace
type: call
call: "aks.create-namespace"
with:
cluster: "bnp-{{environment}}-cluster"
namespace: "{{namespace_name}}"
labels: "team={{team}},env={{environment}}"
- name: configure-vault
type: call
call: "vault.create-policy"
with:
policy_name: "{{namespace_name}}-{{environment}}"
path: "secret/data/{{environment}}/{{namespace_name}}/*"
capabilities: "read,list"
- name: register-cmdb
type: call
call: "servicenow.create-ci"
with:
name: "k8s-ns-{{namespace_name}}-{{environment}}"
class: "cmdb_ci_kubernetes_namespace"
environment: "{{environment}}"
owned_by: "{{team}}"
description: "Kubernetes namespace {{namespace_name}} on {{environment}} cluster. Vault policy: {{configure-vault.policy_name}}."
consumes:
- type: http
namespace: aks
baseUri: "https://management.azure.com/subscriptions/{{sub_id}}/resourceGroups/bnp-rg/providers/Microsoft.ContainerService/managedClusters"
authentication:
type: bearer
token: "$secrets.azure_mgmt_token"
resources:
- name: namespaces
path: "/{{cluster}}/namespaces"
inputParameters:
- name: cluster
in: path
operations:
- name: create-namespace
method: POST
- type: http
namespace: vault
baseUri: "https://vault.bnpparibas.net/v1"
authentication:
type: bearer
token: "$secrets.vault_token"
resources:
- name: policies
path: "/sys/policies/acl/{{policy_name}}"
inputParameters:
- name: policy_name
in: path
operations:
- name: create-policy
method: PUT
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cmdb
path: "/table/cmdb_ci"
operations:
- name: create-ci
method: POST
Orchestrates Know Your Customer onboarding by retrieving client data from Salesforce, running screening against Moody's, creating a compliance case in ServiceNow, and notifying the relationship manager via SharePoint.
naftiko: "0.5"
info:
label: "KYC Client Onboarding Pipeline"
description: "Orchestrates Know Your Customer onboarding by retrieving client data from Salesforce, running screening against Moody's, creating a compliance case in ServiceNow, and notifying the relationship manager via SharePoint."
tags:
- compliance
- know-your-customer
- salesforce
- moodys
- servicenow
- sharepoint
capability:
exposes:
- type: mcp
namespace: kyc-onboarding
port: 8080
tools:
- name: onboard-client
description: "Given a Salesforce account ID, run KYC screening, create compliance case, and provision client documentation folder."
inputParameters:
- name: account_id
in: body
type: string
description: "The Salesforce account ID for the new client."
- name: compliance_officer_id
in: body
type: string
description: "The Workday ID of the assigned compliance officer."
steps:
- name: get-client
type: call
call: "salesforce.get-account"
with:
account_id: "{{account_id}}"
- name: screen-entity
type: call
call: "moodys.screen-entity"
with:
entity_name: "{{get-client.Name}}"
country: "{{get-client.BillingCountry}}"
- name: get-officer
type: call
call: "workday.get-worker"
with:
worker_id: "{{compliance_officer_id}}"
- name: create-case
type: call
call: "servicenow.create-case"
with:
short_description: "KYC onboarding: {{get-client.Name}}"
description: "New client KYC screening result: {{screen-entity.risk_level}}. Screening score: {{screen-entity.score}}. Assigned to: {{get-officer.full_name}}."
assigned_group: "Compliance_KYC"
category: "kyc_onboarding"
- name: provision-folder
type: call
call: "sharepoint.create-folder"
with:
site_id: "compliance_kyc_site"
folder_path: "KYC/{{get-client.Name}}_{{account_id}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://bnpparibas.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account
method: GET
- type: http
namespace: moodys
baseUri: "https://api.moodys.com/screening/v1"
authentication:
type: bearer
token: "$secrets.moodys_api_key"
resources:
- name: entities
path: "/screen"
operations:
- name: screen-entity
method: POST
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cases
path: "/table/sn_customerservice_case"
operations:
- name: create-case
method: POST
- type: http
namespace: 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:/{{folder_path}}"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
operations:
- name: create-folder
method: POST
Aggregates cash positions from Temenos, monitors intraday limits, generates alerts in Datadog, and reports to treasury via Power BI.
naftiko: "0.5"
info:
label: "Liquidity Monitoring Pipeline"
description: "Aggregates cash positions from Temenos, monitors intraday limits, generates alerts in Datadog, and reports to treasury via Power BI."
tags:
- treasury
- temenos-transact
- datadog
- power-bi
capability:
exposes:
- type: mcp
namespace: liquidity-monitor
port: 8080
tools:
- name: monitor-liquidity
description: "Monitor intraday liquidity positions with alerting and reporting."
inputParameters:
- name: entity_code
in: body
type: string
description: "Legal entity code."
steps:
- name: get-positions
type: call
call: "temenos.get-cash-positions"
with:
entity: "{{entity_code}}"
- name: check-limits
type: call
call: "datadog.query-metrics"
with:
query: "sum:treasury.liquidity{entity:{{entity_code}}}"
- name: refresh-dashboard
type: call
call: "powerbi.refresh-dataset"
with:
dataset_id: "liquidity-{{entity_code}}"
consumes:
- type: http
namespace: temenos
baseUri: "https://temenos.bnpparibas.com/api/v1"
authentication:
type: bearer
token: "$secrets.temenos_token"
resources:
- name: cash
path: "/treasury/cash-positions"
inputParameters:
- name: entity
in: query
operations:
- name: get-cash-positions
method: GET
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
name: "DD-API-KEY"
in: header
value: "$secrets.datadog_api_key"
resources:
- name: metrics
path: "/query"
inputParameters:
- name: query
in: query
operations:
- name: query-metrics
method: GET
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
Creates a loan application in Temenos, runs credit checks via Moody's, generates documents in Salesforce, and tracks approval in ServiceNow.
naftiko: "0.5"
info:
label: "Loan Origination Orchestrator"
description: "Creates a loan application in Temenos, runs credit checks via Moody's, generates documents in Salesforce, and tracks approval in ServiceNow."
tags:
- lending
- temenos-transact
- moodys
- salesforce
- servicenow
capability:
exposes:
- type: mcp
namespace: loan-origination
port: 8080
tools:
- name: originate-loan
description: "Process a loan application end-to-end."
inputParameters:
- name: customer_id
in: body
type: string
description: "Temenos customer ID."
- name: loan_amount
in: body
type: number
description: "Requested loan amount."
steps:
- name: create-application
type: call
call: "temenos.create-loan"
with:
customer_id: "{{customer_id}}"
amount: "{{loan_amount}}"
- name: check-credit
type: call
call: "moodys.get-rating"
with:
entity_id: "{{customer_id}}"
- name: generate-docs
type: call
call: "salesforce.create-task"
with:
subject: "Loan docs: {{customer_id}} — {{loan_amount}}"
description: "Credit rating: {{check-credit.rating}}. Application: {{create-application.loan_id}}."
- name: track-approval
type: call
call: "servicenow.create-change-request"
with:
short_description: "Loan approval: {{create-application.loan_id}}"
description: "Amount: {{loan_amount}}. Rating: {{check-credit.rating}}."
consumes:
- type: http
namespace: temenos
baseUri: "https://temenos.bnpparibas.com/api/v1"
authentication:
type: bearer
token: "$secrets.temenos_token"
resources:
- name: loans
path: "/loans"
operations:
- name: create-loan
method: POST
- type: http
namespace: moodys
baseUri: "https://api.moodys.com/v1"
authentication:
type: bearer
token: "$secrets.moodys_api_key"
resources:
- name: ratings
path: "/issuers/{{entity_id}}/ratings"
inputParameters:
- name: entity_id
in: path
operations:
- name: get-rating
method: GET
- type: http
namespace: salesforce
baseUri: "https://bnpparibas.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: tasks
path: "/sobjects/Task"
operations:
- name: create-task
method: POST
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: changes
path: "/table/change_request"
operations:
- name: create-change-request
method: POST
Pulls portfolio positions from SimCorp Dimension, runs Value-at-Risk computation in Azure Databricks, stores results in Azure Data Factory, and publishes to the risk dashboard in Power BI.
naftiko: "0.5"
info:
label: "Market Risk VaR Computation Pipeline"
description: "Pulls portfolio positions from SimCorp Dimension, runs Value-at-Risk computation in Azure Databricks, stores results in Azure Data Factory, and publishes to the risk dashboard in Power BI."
tags:
- market-risk
- risk-management
- simcorp-dimension
- azure-databricks
- azure-data-factory
- power-bi
capability:
exposes:
- type: mcp
namespace: market-risk
port: 8080
tools:
- name: compute-var
description: "Run end-of-day VaR computation for a portfolio, store results, and refresh risk dashboard."
inputParameters:
- name: portfolio_code
in: body
type: string
description: "The SimCorp portfolio code."
- name: valuation_date
in: body
type: string
description: "The valuation date in YYYY-MM-DD format."
- name: confidence_level
in: body
type: number
description: "VaR confidence level (e.g. 0.99)."
steps:
- name: get-positions
type: call
call: "simcorp.get-positions"
with:
portfolio_code: "{{portfolio_code}}"
- name: run-var-model
type: call
call: "databricks.run-job"
with:
job_name: "var_computation"
parameters: "portfolio={{portfolio_code}}&date={{valuation_date}}&confidence={{confidence_level}}&positions_count={{get-positions.total_market_value}}"
- name: store-results
type: call
call: "adf.trigger-pipeline"
with:
pipeline_name: "var_results_load"
parameters: "run_id={{run-var-model.run_id}}&portfolio={{portfolio_code}}&date={{valuation_date}}"
- name: refresh-risk-dashboard
type: call
call: "powerbi.refresh-dataset"
with:
workspace_id: "risk_management"
dataset_id: "market_risk_var"
consumes:
- type: http
namespace: simcorp
baseUri: "https://simcorp.bnpparibas.net/api/v2"
authentication:
type: bearer
token: "$secrets.simcorp_token"
resources:
- name: positions
path: "/portfolios/{{portfolio_code}}/positions"
inputParameters:
- name: portfolio_code
in: path
operations:
- name: get-positions
method: GET
- type: http
namespace: databricks
baseUri: "https://adb-bnpparibas.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: adf
baseUri: "https://management.azure.com/subscriptions/{{sub_id}}/resourceGroups/bnp-rg/providers/Microsoft.DataFactory/factories/bnp-adf"
authentication:
type: bearer
token: "$secrets.azure_mgmt_token"
resources:
- name: pipelines
path: "/pipelines/{{pipeline_name}}/createRun?api-version=2018-06-01"
inputParameters:
- name: pipeline_name
in: path
operations:
- name: trigger-pipeline
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/{{workspace_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: workspace_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
Computes Value at Risk from Snowflake data, generates reports in Qlik Sense, stores in Azure Blob Storage, and distributes via email.
naftiko: "0.5"
info:
label: "Market Risk VaR Report Pipeline"
description: "Computes Value at Risk from Snowflake data, generates reports in Qlik Sense, stores in Azure Blob Storage, and distributes via email."
tags:
- risk-management
- snowflake
- qlik-sense
- azure-blob-storage
capability:
exposes:
- type: mcp
namespace: var-report
port: 8080
tools:
- name: generate-var-report
description: "Compute VaR and generate risk reports."
inputParameters:
- name: portfolio_code
in: body
type: string
description: "Portfolio code."
- name: confidence_level
in: body
type: number
description: "VaR confidence level (e.g. 0.99)."
steps:
- name: compute-var
type: call
call: "snowflake.execute-statement"
with:
statement: "CALL RISK.COMPUTE_VAR('{{portfolio_code}}', {{confidence_level}})"
- name: refresh-dashboard
type: call
call: "qlik.reload-app"
with:
app_id: "var-dashboard"
- name: export-report
type: call
call: "azure-blob.upload"
with:
container: "risk-reports"
blob_name: "var/{{portfolio_code}}/latest.pdf"
consumes:
- type: http
namespace: snowflake
baseUri: "https://bnpparibas.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: qlik
baseUri: "https://qlik.bnpparibas.com/api/v1"
authentication:
type: bearer
token: "$secrets.qlik_token"
resources:
- name: apps
path: "/apps/{{app_id}}/reload"
inputParameters:
- name: app_id
in: path
operations:
- name: reload-app
method: POST
- type: http
namespace: azure-blob
baseUri: "https://bnpdata.blob.core.windows.net"
authentication:
type: bearer
token: "$secrets.azure_storage_token"
resources:
- name: blobs
path: "/{{container}}/{{blob_name}}"
inputParameters:
- name: container
in: path
- name: blob_name
in: path
operations:
- name: upload
method: PUT
Retrieves transaction details from Mastercard by authorization reference, returning amount, merchant, status, and settlement date.
naftiko: "0.5"
info:
label: "Mastercard Transaction Lookup"
description: "Retrieves transaction details from Mastercard by authorization reference, returning amount, merchant, status, and settlement date."
tags:
- payments
- mastercard
- transaction-monitoring
capability:
exposes:
- type: mcp
namespace: card-payments
port: 8080
tools:
- name: get-transaction
description: "Look up a Mastercard transaction by authorization reference number."
inputParameters:
- name: auth_ref
in: body
type: string
description: "The Mastercard authorization reference number."
call: "mastercard.get-transaction"
with:
auth_ref: "{{auth_ref}}"
outputParameters:
- name: amount
type: number
mapping: "$.transaction.amount"
- name: currency
type: string
mapping: "$.transaction.currency"
- name: merchant
type: string
mapping: "$.transaction.merchantName"
- name: status
type: string
mapping: "$.transaction.status"
consumes:
- type: http
namespace: mastercard
baseUri: "https://api.mastercard.com/transaction/v1"
authentication:
type: bearer
token: "$secrets.mastercard_api_key"
resources:
- name: transactions
path: "/authorizations/{{auth_ref}}"
inputParameters:
- name: auth_ref
in: path
operations:
- name: get-transaction
method: GET
Retrieves the current Moody's credit rating for an issuer by entity ID, returning rating, outlook, and last action date.
naftiko: "0.5"
info:
label: "Moody Credit Rating Lookup"
description: "Retrieves the current Moody's credit rating for an issuer by entity ID, returning rating, outlook, and last action date."
tags:
- credit-risk
- moodys
capability:
exposes:
- type: mcp
namespace: moodys
port: 8080
tools:
- name: get-credit-rating
description: "Look up the Moody's credit rating for an issuer."
inputParameters:
- name: entity_id
in: body
type: string
description: "The Moody's entity identifier."
call: "moodys.get-rating"
with:
entity_id: "{{entity_id}}"
consumes:
- type: http
namespace: moodys
baseUri: "https://api.moodys.com/v1"
authentication:
type: bearer
token: "$secrets.moodys_api_key"
resources:
- name: ratings
path: "/issuers/{{entity_id}}/ratings"
inputParameters:
- name: entity_id
in: path
operations:
- name: get-rating
method: GET
Checks n8n workflow execution status, retrieves execution logs, and creates ServiceNow tickets for failed automations that require manual intervention.
naftiko: "0.5"
info:
label: "n8n Workflow Automation Monitor"
description: "Checks n8n workflow execution status, retrieves execution logs, and creates ServiceNow tickets for failed automations that require manual intervention."
tags:
- automation
- n8n
- servicenow
capability:
exposes:
- type: mcp
namespace: workflow-monitor
port: 8080
tools:
- name: monitor-workflow
description: "Check n8n workflow execution status and create ServiceNow ticket for failures."
inputParameters:
- name: workflow_id
in: body
type: string
description: "The n8n workflow ID."
- name: execution_id
in: body
type: string
description: "The n8n execution ID to check."
steps:
- name: get-execution
type: call
call: "n8n.get-execution"
with:
workflow_id: "{{workflow_id}}"
execution_id: "{{execution_id}}"
- name: create-ticket
type: call
call: "servicenow.create-task"
with:
short_description: "n8n workflow failure: {{workflow_id}} — execution {{execution_id}}"
description: "Workflow status: {{get-execution.status}}. Error node: {{get-execution.error_node}}. Error message: {{get-execution.error_message}}. Started: {{get-execution.started_at}}. Failed: {{get-execution.finished_at}}."
assigned_group: "Automation_Support"
category: "workflow_failure"
consumes:
- type: http
namespace: n8n
baseUri: "https://n8n.bnpparibas.net/api/v1"
authentication:
type: bearer
token: "$secrets.n8n_api_key"
resources:
- name: executions
path: "/workflows/{{workflow_id}}/executions/{{execution_id}}"
inputParameters:
- name: workflow_id
in: path
- name: execution_id
in: path
operations:
- name: get-execution
method: GET
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.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 nostro balances from Temenos, matches against SWIFT statements, logs breaks in Oracle, and creates ServiceNow tickets for unmatched items.
naftiko: "0.5"
info:
label: "Nostro Account Reconciliation Workflow"
description: "Retrieves nostro balances from Temenos, matches against SWIFT statements, logs breaks in Oracle, and creates ServiceNow tickets for unmatched items."
tags:
- operations
- temenos-transact
- swift
- oracle
- servicenow
capability:
exposes:
- type: mcp
namespace: nostro-recon
port: 8080
tools:
- name: reconcile-nostro
description: "Reconcile nostro account balances against SWIFT statements."
inputParameters:
- name: nostro_account
in: body
type: string
description: "Nostro account number."
- name: recon_date
in: body
type: string
description: "Reconciliation date YYYY-MM-DD."
steps:
- name: get-balance
type: call
call: "temenos.get-balance"
with:
account_number: "{{nostro_account}}"
- name: get-statement
type: call
call: "swift.get-mt950"
with:
account: "{{nostro_account}}"
date: "{{recon_date}}"
- name: log-breaks
type: call
call: "oracle.insert-breaks"
with:
account: "{{nostro_account}}"
book_balance: "{{get-balance.balance}}"
statement_balance: "{{get-statement.closing_balance}}"
- name: create-ticket
type: call
call: "servicenow.create-task"
with:
short_description: "Nostro recon: {{nostro_account}} — {{recon_date}}"
description: "Book: {{get-balance.balance}}. Statement: {{get-statement.closing_balance}}. Breaks logged in Oracle."
consumes:
- type: http
namespace: temenos
baseUri: "https://temenos.bnpparibas.com/api/v1"
authentication:
type: bearer
token: "$secrets.temenos_token"
resources:
- name: accounts
path: "/accounts/{{account_number}}/balance"
inputParameters:
- name: account_number
in: path
operations:
- name: get-balance
method: GET
- type: http
namespace: swift
baseUri: "https://api.swift.com/gpi/v4"
authentication:
type: bearer
token: "$secrets.swift_gpi_token"
resources:
- name: statements
path: "/statements/mt950"
inputParameters:
- name: account
in: query
- name: date
in: query
operations:
- name: get-mt950
method: GET
- type: http
namespace: oracle
baseUri: "https://oracle.bnpparibas.com/fscmRestApi/resources/v1"
authentication:
type: basic
username: "$secrets.oracle_user"
password: "$secrets.oracle_password"
resources:
- name: recon-breaks
path: "/reconciliationBreaks"
operations:
- name: insert-breaks
method: POST
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.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
Queries Oracle Enterprise Manager for database instance status, tablespace usage, and active sessions for a given database SID.
naftiko: "0.5"
info:
label: "Oracle Database Health Check"
description: "Queries Oracle Enterprise Manager for database instance status, tablespace usage, and active sessions for a given database SID."
tags:
- databases
- oracle
- oracle-enterprise-manager
- monitoring
capability:
exposes:
- type: mcp
namespace: db-ops
port: 8080
tools:
- name: get-db-health
description: "Retrieve health metrics for an Oracle database instance including status, tablespace usage, and active session count."
inputParameters:
- name: db_sid
in: body
type: string
description: "The Oracle database SID."
call: "oem.get-db-status"
with:
db_sid: "{{db_sid}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: tablespace_pct
type: number
mapping: "$.tablespaceUsedPct"
- name: active_sessions
type: number
mapping: "$.activeSessions"
consumes:
- type: http
namespace: oem
baseUri: "https://oem.bnpparibas.net/em/websvcs/restful/emws/db"
authentication:
type: basic
username: "$secrets.oem_user"
password: "$secrets.oem_password"
resources:
- name: databases
path: "/targets/{{db_sid}}/health"
inputParameters:
- name: db_sid
in: path
operations:
- name: get-db-status
method: GET
Queries Oracle General Ledger for account balances by ledger, period, and account code, returning debit, credit, and net balance.
naftiko: "0.5"
info:
label: "Oracle GL Balance Inquiry"
description: "Queries Oracle General Ledger for account balances by ledger, period, and account code, returning debit, credit, and net balance."
tags:
- finance
- oracle
capability:
exposes:
- type: mcp
namespace: oracle-gl
port: 8080
tools:
- name: get-gl-balance
description: "Retrieve General Ledger balance for a given account and period."
inputParameters:
- name: account_code
in: body
type: string
description: "The GL account code."
- name: period
in: body
type: string
description: "Accounting period (e.g. JAN-26)."
call: "oracle-gl.get-balance"
with:
account_code: "{{account_code}}"
period: "{{period}}"
consumes:
- type: http
namespace: oracle-gl
baseUri: "https://oracle.bnpparibas.com/fscmRestApi/resources/v1"
authentication:
type: basic
username: "$secrets.oracle_user"
password: "$secrets.oracle_password"
resources:
- name: balances
path: "/generalLedgerBalances"
inputParameters:
- name: account_code
in: query
- name: period
in: query
operations:
- name: get-balance
method: GET
Screens outgoing payments against sanctions lists, logs results in Oracle, holds flagged payments in SAP, and alerts compliance via ServiceNow.
naftiko: "0.5"
info:
label: "Payment Sanctions Screening Pipeline"
description: "Screens outgoing payments against sanctions lists, logs results in Oracle, holds flagged payments in SAP, and alerts compliance via ServiceNow."
tags:
- compliance
- oracle
- sap
- servicenow
capability:
exposes:
- type: mcp
namespace: sanctions-screen
port: 8080
tools:
- name: screen-payment
description: "Screen a payment against sanctions with hold and alert capabilities."
inputParameters:
- name: payment_ref
in: body
type: string
description: "Payment reference."
- name: beneficiary_name
in: body
type: string
description: "Beneficiary name."
steps:
- name: run-screening
type: call
call: "oracle.screen-payment"
with:
payment_ref: "{{payment_ref}}"
name: "{{beneficiary_name}}"
- name: log-result
type: call
call: "oracle.log-screening"
with:
payment_ref: "{{payment_ref}}"
result: "{{run-screening.result}}"
- name: hold-payment
type: call
call: "sap.hold-payment"
with:
payment_ref: "{{payment_ref}}"
reason: "{{run-screening.match_details}}"
- name: alert-compliance
type: call
call: "servicenow.create-incident"
with:
short_description: "Sanctions hit: {{payment_ref}}"
description: "Beneficiary: {{beneficiary_name}}. Match: {{run-screening.match_details}}."
category: "sanctions"
urgency: "1"
consumes:
- type: http
namespace: oracle
baseUri: "https://oracle.bnpparibas.com/fscmRestApi/resources/v1"
authentication:
type: basic
username: "$secrets.oracle_user"
password: "$secrets.oracle_password"
resources:
- name: screening
path: "/sanctions/screen"
operations:
- name: screen-payment
method: POST
- name: logs
path: "/sanctions/logs"
operations:
- name: log-screening
method: POST
- type: http
namespace: sap
baseUri: "https://bnp-s4.sap.com/sap/opu/odata/sap"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: payments
path: "/FI_PAYMENT_SRV/A_Payment"
operations:
- name: hold-payment
method: PATCH
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.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
Triggers a dataset refresh in Power BI for a given workspace and dataset, used by finance teams to ensure dashboards reflect the latest data.
naftiko: "0.5"
info:
label: "Power BI Report Refresh"
description: "Triggers a dataset refresh in Power BI for a given workspace and dataset, used by finance teams to ensure dashboards reflect the latest data."
tags:
- analytics
- reporting
- power-bi
capability:
exposes:
- type: mcp
namespace: bi-reporting
port: 8080
tools:
- name: refresh-dataset
description: "Trigger a Power BI dataset refresh for a given workspace and dataset ID."
inputParameters:
- name: workspace_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."
call: "powerbi.refresh-dataset"
with:
workspace_id: "{{workspace_id}}"
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: datasets
path: "/groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: workspace_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
Triggers a Qlik Sense app reload, exports the report as PDF, uploads to SharePoint for stakeholder access, and notifies recipients via Azure Service Bus.
naftiko: "0.5"
info:
label: "Qlik Sense Report Distribution"
description: "Triggers a Qlik Sense app reload, exports the report as PDF, uploads to SharePoint for stakeholder access, and notifies recipients via Azure Service Bus."
tags:
- analytics
- reporting
- qlik-sense
- sharepoint
- azure-service-bus
capability:
exposes:
- type: mcp
namespace: report-distribution
port: 8080
tools:
- name: distribute-report
description: "Reload Qlik Sense app, export PDF, upload to SharePoint, and notify stakeholders."
inputParameters:
- name: app_id
in: body
type: string
description: "The Qlik Sense application ID."
- name: report_name
in: body
type: string
description: "The report name for file naming."
- name: distribution_list
in: body
type: string
description: "Comma-separated list of recipient email addresses."
steps:
- name: reload-app
type: call
call: "qlik.reload-app"
with:
app_id: "{{app_id}}"
- name: export-pdf
type: call
call: "qlik.export-report"
with:
app_id: "{{app_id}}"
format: "pdf"
- name: upload-report
type: call
call: "sharepoint.create-file"
with:
site_id: "reports_distribution"
file_path: "Reports/{{report_name}}/{{report_name}}_latest.pdf"
content_type: "application/pdf"
- name: notify-recipients
type: call
call: "servicebus.send-message"
with:
queue: "report-notifications"
body: "Report {{report_name}} is ready. Download: {{upload-report.url}}. Recipients: {{distribution_list}}."
consumes:
- type: http
namespace: qlik
baseUri: "https://qlik.bnpparibas.net/api/v1"
authentication:
type: bearer
token: "$secrets.qlik_token"
resources:
- name: apps
path: "/apps/{{app_id}}/reload"
inputParameters:
- name: app_id
in: path
operations:
- name: reload-app
method: POST
- name: exports
path: "/apps/{{app_id}}/export/{{format}}"
inputParameters:
- name: app_id
in: path
- name: format
in: path
operations:
- name: export-report
method: GET
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/{{site_id}}/drive/root:/{{file_path}}:/content"
inputParameters:
- name: site_id
in: path
- name: file_path
in: path
operations:
- name: create-file
method: PUT
- type: http
namespace: servicebus
baseUri: "https://bnpparibas-prod.servicebus.windows.net"
authentication:
type: bearer
token: "$secrets.servicebus_sas_token"
resources:
- name: queues
path: "/{{queue}}/messages"
inputParameters:
- name: queue
in: path
operations:
- name: send-message
method: POST
Exports a Qlik Sense report as PDF by app ID and sheet ID for distribution to stakeholders.
naftiko: "0.5"
info:
label: "Qlik Sense Report Export"
description: "Exports a Qlik Sense report as PDF by app ID and sheet ID for distribution to stakeholders."
tags:
- reporting
- qlik-sense
capability:
exposes:
- type: mcp
namespace: qlik-export
port: 8080
tools:
- name: export-report
description: "Export a Qlik Sense sheet as PDF."
inputParameters:
- name: app_id
in: body
type: string
description: "The Qlik Sense app identifier."
- name: sheet_id
in: body
type: string
description: "The sheet identifier."
call: "qlik-export.export-pdf"
with:
app_id: "{{app_id}}"
sheet_id: "{{sheet_id}}"
consumes:
- type: http
namespace: qlik-export
baseUri: "https://qlik.bnpparibas.com/api/v1"
authentication:
type: bearer
token: "$secrets.qlik_token"
resources:
- name: exports
path: "/apps/{{app_id}}/sheets/{{sheet_id}}/export/pdf"
inputParameters:
- name: app_id
in: path
- name: sheet_id
in: path
operations:
- name: export-pdf
method: GET
Retrieves messages from a RabbitMQ dead letter queue, logs the failure pattern in Elasticsearch, and creates a ServiceNow incident for application support to investigate.
naftiko: "0.5"
info:
label: "RabbitMQ Dead Letter Queue Processor"
description: "Retrieves messages from a RabbitMQ dead letter queue, logs the failure pattern in Elasticsearch, and creates a ServiceNow incident for application support to investigate."
tags:
- messaging
- rabbitmq
- elasticsearch
- servicenow
capability:
exposes:
- type: mcp
namespace: dlq-processor
port: 8080
tools:
- name: process-dead-letters
description: "Retrieve DLQ messages, log failure patterns, and create incident for investigation."
inputParameters:
- name: queue_name
in: body
type: string
description: "The dead letter queue name."
- name: vhost
in: body
type: string
description: "The RabbitMQ virtual host."
steps:
- name: get-messages
type: call
call: "rabbitmq.get-messages"
with:
vhost: "{{vhost}}"
queue: "{{queue_name}}"
- name: log-pattern
type: call
call: "elasticsearch.index-document"
with:
index: "dlq-failures"
body: "queue={{queue_name}}&vhost={{vhost}}&count={{get-messages.message_count}}&oldest={{get-messages.oldest_timestamp}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "DLQ accumulation: {{queue_name}} on {{vhost}}"
description: "Dead letter queue {{queue_name}} has {{get-messages.message_count}} unprocessed messages. Oldest message: {{get-messages.oldest_timestamp}}. Sample error: {{get-messages.sample_error}}."
assigned_group: "Application_Support"
category: "messaging_failure"
consumes:
- type: http
namespace: rabbitmq
baseUri: "https://rabbitmq.bnpparibas.net:15672/api"
authentication:
type: basic
username: "$secrets.rabbitmq_user"
password: "$secrets.rabbitmq_password"
resources:
- name: queues
path: "/queues/{{vhost}}/{{queue}}/get"
inputParameters:
- name: vhost
in: path
- name: queue
in: path
operations:
- name: get-messages
method: POST
- type: http
namespace: elasticsearch
baseUri: "https://elasticsearch.bnpparibas.net:9200"
authentication:
type: basic
username: "$secrets.elastic_user"
password: "$secrets.elastic_password"
resources:
- name: documents
path: "/{{index}}/_doc"
inputParameters:
- name: index
in: path
operations:
- name: index-document
method: POST
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.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
Monitors Kafka payment events, scores transactions via Azure Machine Learning, blocks suspicious payments in Temenos, and alerts via ServiceNow.
naftiko: "0.5"
info:
label: "Real-Time Fraud Detection Pipeline"
description: "Monitors Kafka payment events, scores transactions via Azure Machine Learning, blocks suspicious payments in Temenos, and alerts via ServiceNow."
tags:
- fraud
- apache-kafka
- azure-machine-learning
- temenos-transact
- servicenow
capability:
exposes:
- type: mcp
namespace: fraud-detection
port: 8080
tools:
- name: detect-fraud
description: "Score a transaction for fraud and take action."
inputParameters:
- name: transaction_id
in: body
type: string
description: "Transaction identifier."
steps:
- name: get-event
type: call
call: "kafka.get-event"
with:
topic: "payments"
key: "{{transaction_id}}"
- name: score-transaction
type: call
call: "azure-ml.score"
with:
features: "{{get-event.payload}}"
- name: block-payment
type: call
call: "temenos.hold-transaction"
with:
transaction_id: "{{transaction_id}}"
reason: "Fraud score: {{score-transaction.score}}"
- name: create-alert
type: call
call: "servicenow.create-incident"
with:
short_description: "Fraud alert: {{transaction_id}}"
description: "Score: {{score-transaction.score}}. Amount: {{get-event.amount}}."
category: "fraud"
urgency: "1"
consumes:
- type: http
namespace: kafka
baseUri: "https://kafka-rest.bnpparibas.com/v3"
authentication:
type: bearer
token: "$secrets.kafka_rest_token"
resources:
- name: events
path: "/topics/{{topic}}/records/{{key}}"
inputParameters:
- name: topic
in: path
- name: key
in: path
operations:
- name: get-event
method: GET
- type: http
namespace: azure-ml
baseUri: "https://ml-bnp.azureml.net/api/v1"
authentication:
type: bearer
token: "$secrets.azure_ml_token"
resources:
- name: scoring
path: "/models/fraud-detector/score"
operations:
- name: score
method: POST
- type: http
namespace: temenos
baseUri: "https://temenos.bnpparibas.com/api/v1"
authentication:
type: bearer
token: "$secrets.temenos_token"
resources:
- name: transactions
path: "/transactions/{{transaction_id}}/hold"
inputParameters:
- name: transaction_id
in: path
operations:
- name: hold-transaction
method: POST
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.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
Extracts position data from SimCorp, computes capital requirements in Snowflake, generates reports in Power BI, and archives in Azure Blob Storage.
naftiko: "0.5"
info:
label: "Regulatory Capital Report Pipeline"
description: "Extracts position data from SimCorp, computes capital requirements in Snowflake, generates reports in Power BI, and archives in Azure Blob Storage."
tags:
- regulatory
- simcorp-dimension
- snowflake
- power-bi
- azure-blob-storage
capability:
exposes:
- type: mcp
namespace: reg-capital
port: 8080
tools:
- name: generate-capital-report
description: "Compute and distribute regulatory capital report."
inputParameters:
- name: reporting_date
in: body
type: string
description: "Reporting date YYYY-MM-DD."
steps:
- name: get-positions
type: call
call: "simcorp.get-positions"
with:
as_of_date: "{{reporting_date}}"
- name: compute-capital
type: call
call: "snowflake.execute-statement"
with:
statement: "CALL REG.COMPUTE_CAPITAL_REQUIREMENTS('{{reporting_date}}')"
- name: refresh-report
type: call
call: "powerbi.refresh-dataset"
with:
dataset_id: "regulatory-capital"
- name: archive
type: call
call: "azure-blob.upload"
with:
container: "regulatory-reports"
blob_name: "capital/{{reporting_date}}/report.json"
consumes:
- type: http
namespace: simcorp
baseUri: "https://simcorp.bnpparibas.net/api/v2"
authentication:
type: bearer
token: "$secrets.simcorp_token"
resources:
- name: positions
path: "/positions"
inputParameters:
- name: as_of_date
in: query
operations:
- name: get-positions
method: GET
- type: http
namespace: snowflake
baseUri: "https://bnpparibas.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
- type: http
namespace: azure-blob
baseUri: "https://bnpdata.blob.core.windows.net"
authentication:
type: bearer
token: "$secrets.azure_storage_token"
resources:
- name: blobs
path: "/{{container}}/{{blob_name}}"
inputParameters:
- name: container
in: path
- name: blob_name
in: path
operations:
- name: upload
method: PUT
Extracts reporting data from Snowflake, validates via compliance rules in SimCorp Dimension, and submits to regulatory portal with ServiceNow tracking.
naftiko: "0.5"
info:
label: "Regulatory Filing Submission Pipeline"
description: "Extracts reporting data from Snowflake, validates via compliance rules in SimCorp Dimension, and submits to regulatory portal with ServiceNow tracking."
tags:
- compliance
- snowflake
- simcorp-dimension
- servicenow
capability:
exposes:
- type: mcp
namespace: regulatory-filing
port: 8080
tools:
- name: submit-regulatory-filing
description: "Extract, validate, and submit a regulatory filing."
inputParameters:
- name: report_code
in: body
type: string
description: "Regulatory report code."
- name: reporting_date
in: body
type: string
description: "Reporting date YYYY-MM-DD."
steps:
- name: extract-data
type: call
call: "snowflake-api.run-query"
with:
query: "SELECT * FROM regulatory.{{report_code}} WHERE reporting_date = '{{reporting_date}}'"
- name: validate-positions
type: call
call: "simcorp-api.get-positions"
with:
report_code: "{{report_code}}"
date: "{{reporting_date}}"
- name: track-submission
type: call
call: "servicenow-api.create-incident"
with:
short_description: "Regulatory filing: {{report_code}} for {{reporting_date}}"
description: "Records: {{extract-data.count}}. Positions validated: {{validate-positions.count}}."
category: "regulatory_filing"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://bnpparibas.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: queries
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: simcorp-api
baseUri: "https://simcorp.bnpparibas.com/api/v1"
authentication:
type: bearer
token: "$secrets.simcorp_token"
resources:
- name: positions
path: "/portfolios/positions"
operations:
- name: get-positions
method: GET
- type: http
namespace: servicenow-api
baseUri: "https://bnpparibas.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
Extracts data from Oracle Database, transforms it in Azure Databricks, generates the regulatory report in Power BI, and logs submission in ServiceNow for audit trail.
naftiko: "0.5"
info:
label: "Regulatory Report Generation Pipeline"
description: "Extracts data from Oracle Database, transforms it in Azure Databricks, generates the regulatory report in Power BI, and logs submission in ServiceNow for audit trail."
tags:
- compliance
- regulatory
- financial-reporting
- oracle-database
- azure-databricks
- power-bi
- servicenow
capability:
exposes:
- type: mcp
namespace: regulatory-reporting
port: 8080
tools:
- name: generate-regulatory-report
description: "Extract regulatory data, transform in Databricks, refresh Power BI report, and log submission for audit."
inputParameters:
- name: report_type
in: body
type: string
description: "The regulatory report type (e.g. COREP, FINREP, FRTB)."
- name: reporting_date
in: body
type: string
description: "The reporting period end date in YYYY-MM-DD format."
- name: entity_code
in: body
type: string
description: "The legal entity code for the report."
steps:
- name: extract-data
type: call
call: "oracle.execute-query"
with:
query_name: "reg_{{report_type}}_extract"
reporting_date: "{{reporting_date}}"
entity_code: "{{entity_code}}"
- name: transform-data
type: call
call: "databricks.run-job"
with:
job_name: "regulatory_{{report_type}}_transform"
parameters: "reporting_date={{reporting_date}}&entity={{entity_code}}&extract_id={{extract-data.extract_id}}"
- name: refresh-report
type: call
call: "powerbi.refresh-dataset"
with:
workspace_id: "regulatory_reports"
dataset_id: "{{report_type}}_{{entity_code}}"
- name: log-submission
type: call
call: "servicenow.create-task"
with:
short_description: "Regulatory report generated: {{report_type}} — {{entity_code}} — {{reporting_date}}"
description: "Extract ID: {{extract-data.extract_id}}. Databricks run: {{transform-data.run_id}}. Report refreshed in Power BI. Ready for supervisory submission."
assigned_group: "Regulatory_Reporting"
category: "regulatory_submission"
consumes:
- type: http
namespace: oracle
baseUri: "https://ords.bnpparibas.net/ords/reg"
authentication:
type: bearer
token: "$secrets.oracle_ords_token"
resources:
- name: queries
path: "/extracts/{{query_name}}"
inputParameters:
- name: query_name
in: path
operations:
- name: execute-query
method: POST
- type: http
namespace: databricks
baseUri: "https://adb-bnpparibas.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/{{workspace_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: workspace_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.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 a corporate client account from Salesforce by account ID, returning relationship manager, segment, AUM, and last interaction date.
naftiko: "0.5"
info:
label: "Salesforce Client Account Lookup"
description: "Retrieves a corporate client account from Salesforce by account ID, returning relationship manager, segment, AUM, and last interaction date."
tags:
- crm
- salesforce
- client-management
capability:
exposes:
- type: mcp
namespace: crm
port: 8080
tools:
- name: get-client-account
description: "Look up a Salesforce corporate client account. Returns account name, relationship manager, segment classification, and AUM."
inputParameters:
- name: account_id
in: body
type: string
description: "The Salesforce account ID."
call: "salesforce.get-account"
with:
account_id: "{{account_id}}"
outputParameters:
- name: account_name
type: string
mapping: "$.Name"
- name: relationship_manager
type: string
mapping: "$.Owner.Name"
- name: segment
type: string
mapping: "$.Client_Segment__c"
- name: aum
type: number
mapping: "$.AUM__c"
consumes:
- type: http
namespace: salesforce
baseUri: "https://bnpparibas.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account
method: GET
Fetches opportunity details from Salesforce CRM by opportunity ID, returning stage, value, and expected close date.
naftiko: "0.5"
info:
label: "Salesforce Client Opportunity Lookup"
description: "Fetches opportunity details from Salesforce CRM by opportunity ID, returning stage, value, and expected close date."
tags:
- sales
- salesforce
capability:
exposes:
- type: mcp
namespace: salesforce-crm
port: 8080
tools:
- name: get-opportunity
description: "Retrieve a Salesforce opportunity by ID."
inputParameters:
- name: opportunity_id
in: body
type: string
description: "The Salesforce opportunity identifier."
call: "salesforce-crm.get-opportunity"
with:
opportunity_id: "{{opportunity_id}}"
consumes:
- type: http
namespace: salesforce-crm
baseUri: "https://bnpparibas.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
Checks the status of a payment instruction in SAP, returning execution status, value date, and beneficiary details for treasury operations.
naftiko: "0.5"
info:
label: "SAP Payment Instruction Status"
description: "Checks the status of a payment instruction in SAP, returning execution status, value date, and beneficiary details for treasury operations."
tags:
- payments
- treasury
- sap
capability:
exposes:
- type: mcp
namespace: treasury
port: 8080
tools:
- name: get-payment-status
description: "Retrieve the status of a SAP payment instruction by document number."
inputParameters:
- name: payment_doc_number
in: body
type: string
description: "The SAP payment document number."
call: "sap.get-payment"
with:
payment_doc_number: "{{payment_doc_number}}"
outputParameters:
- name: status
type: string
mapping: "$.d.PaymentStatus"
- name: value_date
type: string
mapping: "$.d.ValueDate"
- name: amount
type: number
mapping: "$.d.Amount"
- name: currency
type: string
mapping: "$.d.Currency"
consumes:
- type: http
namespace: sap
baseUri: "https://bnp-s4.sap.com/sap/opu/odata/sap/FI_PAYMENT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
inputParameters:
- name: Accept
in: header
value: "application/json"
- name: sap-client
in: header
value: "100"
resources:
- name: payments
path: "/A_PaymentInstruction('{{payment_doc_number}}')"
inputParameters:
- name: payment_doc_number
in: path
operations:
- name: get-payment
method: GET
Retrieves change request details from ServiceNow by change number, returning approval status, risk level, and implementation plan.
naftiko: "0.5"
info:
label: "ServiceNow Change Request Lookup"
description: "Retrieves change request details from ServiceNow by change number, returning approval status, risk level, and implementation plan."
tags:
- itsm
- servicenow
capability:
exposes:
- type: mcp
namespace: servicenow-changes
port: 8080
tools:
- name: get-change-request
description: "Look up a ServiceNow change request by number."
inputParameters:
- name: number
in: body
type: string
description: "The change request number (e.g. CHG0012345)."
call: "servicenow-changes.get-change"
with:
number: "{{number}}"
consumes:
- type: http
namespace: servicenow-changes
baseUri: "https://bnpparibas.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: changes
path: "/table/change_request"
inputParameters:
- name: number
in: query
operations:
- name: get-change
method: GET
Retrieves a ServiceNow incident by number, returning status, priority, assigned group, and resolution notes for IT operations triage.
naftiko: "0.5"
info:
label: "ServiceNow Incident Lookup"
description: "Retrieves a ServiceNow incident by number, returning status, priority, assigned group, and resolution notes for IT operations triage."
tags:
- operations
- servicenow
- incident-management
capability:
exposes:
- type: mcp
namespace: itsm
port: 8080
tools:
- name: get-incident
description: "Look up a ServiceNow incident by incident number. Returns current state, priority, assigned group, and short description."
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_to
type: string
mapping: "$.result.assigned_to.display_value"
consumes:
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.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: path
operations:
- name: get-incident
method: GET
Retrieves current positions for a given portfolio from SimCorp Dimension, returning instrument, quantity, market value, and currency.
naftiko: "0.5"
info:
label: "SimCorp Dimension Position Lookup"
description: "Retrieves current positions for a given portfolio from SimCorp Dimension, returning instrument, quantity, market value, and currency."
tags:
- asset-management
- portfolio-management
- simcorp-dimension
capability:
exposes:
- type: mcp
namespace: investment-ops
port: 8080
tools:
- name: get-positions
description: "Retrieve current positions for a portfolio from SimCorp Dimension."
inputParameters:
- name: portfolio_code
in: body
type: string
description: "The SimCorp portfolio code."
call: "simcorp.get-positions"
with:
portfolio_code: "{{portfolio_code}}"
outputParameters:
- name: positions
type: string
mapping: "$.data.positions"
- name: total_market_value
type: number
mapping: "$.data.totalMarketValue"
consumes:
- type: http
namespace: simcorp
baseUri: "https://simcorp.bnpparibas.net/api/v2"
authentication:
type: bearer
token: "$secrets.simcorp_token"
resources:
- name: positions
path: "/portfolios/{{portfolio_code}}/positions"
inputParameters:
- name: portfolio_code
in: path
operations:
- name: get-positions
method: GET
Triggers an Apache Spark ETL job on Azure Databricks, monitors completion, validates output in PostgreSQL, and notifies the data team via Azure Event Hubs.
naftiko: "0.5"
info:
label: "Spark ETL Job Orchestration"
description: "Triggers an Apache Spark ETL job on Azure Databricks, monitors completion, validates output in PostgreSQL, and notifies the data team via Azure Event Hubs."
tags:
- data-engineering
- etl
- apache-spark
- azure-databricks
- postgresql
- azure-event-hubs
capability:
exposes:
- type: mcp
namespace: etl-ops
port: 8080
tools:
- name: run-etl-pipeline
description: "Run a Spark ETL job on Databricks, validate output data, and notify the data team."
inputParameters:
- name: job_name
in: body
type: string
description: "The Databricks job name."
- name: source_table
in: body
type: string
description: "The source table for the ETL job."
- name: target_table
in: body
type: string
description: "The target PostgreSQL table."
steps:
- name: run-spark-job
type: call
call: "databricks.run-job"
with:
job_name: "{{job_name}}"
parameters: "source={{source_table}}&target={{target_table}}"
- name: validate-output
type: call
call: "postgresql.run-query"
with:
query: "SELECT COUNT(*) as row_count FROM {{target_table}} WHERE load_date = CURRENT_DATE"
- name: notify-team
type: call
call: "eventhubs.send-event"
with:
topic: "etl-completions"
body: "ETL job {{job_name}} completed. Databricks run: {{run-spark-job.run_id}}. Target: {{target_table}}. Rows loaded: {{validate-output.row_count}}."
consumes:
- type: http
namespace: databricks
baseUri: "https://adb-bnpparibas.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: postgresql
baseUri: "https://pgrest.bnpparibas.net/api/v1"
authentication:
type: bearer
token: "$secrets.pgrest_token"
resources:
- name: queries
path: "/rpc/execute_query"
operations:
- name: run-query
method: POST
- type: http
namespace: eventhubs
baseUri: "https://bnpparibas-prod.servicebus.windows.net"
authentication:
type: bearer
token: "$secrets.eventhubs_sas_token"
resources:
- name: events
path: "/{{topic}}/messages"
inputParameters:
- name: topic
in: path
operations:
- name: send-event
method: POST
Loads a stress scenario from Bloomberg market data, applies it to portfolio positions in SimCorp Dimension, computes PnL impact in Azure Databricks, and stores results in SharePoint.
naftiko: "0.5"
info:
label: "Stress Testing Scenario Runner"
description: "Loads a stress scenario from Bloomberg market data, applies it to portfolio positions in SimCorp Dimension, computes PnL impact in Azure Databricks, and stores results in SharePoint."
tags:
- stress-testing
- risk-management
- bloomberg
- simcorp-dimension
- azure-databricks
- sharepoint
capability:
exposes:
- type: mcp
namespace: stress-testing
port: 8080
tools:
- name: run-stress-test
description: "Execute a stress test scenario against a portfolio, compute PnL impact, and store results."
inputParameters:
- name: scenario_name
in: body
type: string
description: "The stress scenario name (e.g. rate_shock_200bp, equity_crash_20pct)."
- name: portfolio_code
in: body
type: string
description: "The SimCorp portfolio code."
- name: valuation_date
in: body
type: string
description: "The valuation date in YYYY-MM-DD format."
steps:
- name: get-scenario-data
type: call
call: "bloomberg.get-scenario"
with:
scenario: "{{scenario_name}}"
- name: get-positions
type: call
call: "simcorp.get-positions"
with:
portfolio_code: "{{portfolio_code}}"
- name: compute-impact
type: call
call: "databricks.run-job"
with:
job_name: "stress_test_pnl"
parameters: "scenario={{scenario_name}}&portfolio={{portfolio_code}}&date={{valuation_date}}&positions_value={{get-positions.total_market_value}}"
- name: store-results
type: call
call: "sharepoint.create-file"
with:
site_id: "risk_management"
file_path: "StressTests/{{portfolio_code}}/{{scenario_name}}_{{valuation_date}}.json"
content_type: "application/json"
consumes:
- type: http
namespace: bloomberg
baseUri: "https://api.bloomberg.com/eap/catalogs/bbg"
authentication:
type: bearer
token: "$secrets.bloomberg_api_key"
resources:
- name: scenarios
path: "/scenarios/{{scenario}}"
inputParameters:
- name: scenario
in: path
operations:
- name: get-scenario
method: GET
- type: http
namespace: simcorp
baseUri: "https://simcorp.bnpparibas.net/api/v2"
authentication:
type: bearer
token: "$secrets.simcorp_token"
resources:
- name: positions
path: "/portfolios/{{portfolio_code}}/positions"
inputParameters:
- name: portfolio_code
in: path
operations:
- name: get-positions
method: GET
- type: http
namespace: databricks
baseUri: "https://adb-bnpparibas.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: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/{{site_id}}/drive/root:/{{file_path}}:/content"
inputParameters:
- name: site_id
in: path
- name: file_path
in: path
operations:
- name: create-file
method: PUT
Tracks a SWIFT gpi payment status, enriches with Temenos transaction data, and notifies operations via ServiceNow.
naftiko: "0.5"
info:
label: "SWIFT gpi Payment Tracking Pipeline"
description: "Tracks a SWIFT gpi payment status, enriches with Temenos transaction data, and notifies operations via ServiceNow."
tags:
- payments
- swift
- temenos-transact
- servicenow
capability:
exposes:
- type: mcp
namespace: swift-gpi-tracking
port: 8080
tools:
- name: track-gpi-payment
description: "Track SWIFT gpi payment end-to-end and notify on issues."
inputParameters:
- name: uetr
in: body
type: string
description: "SWIFT Unique End-to-end Transaction Reference."
steps:
- name: get-gpi-status
type: call
call: "swift-api.get-payment-status"
with:
uetr: "{{uetr}}"
- name: get-transaction
type: call
call: "temenos-api.get-transaction"
with:
reference: "{{uetr}}"
- name: notify-ops
type: call
call: "servicenow-api.create-incident"
with:
short_description: "SWIFT gpi tracking: {{uetr}}"
description: "Status: {{get-gpi-status.status}}. Amount: {{get-transaction.amount}} {{get-transaction.currency}}. Beneficiary: {{get-transaction.beneficiary}}."
category: "payment_operations"
consumes:
- type: http
namespace: swift-api
baseUri: "https://api.swiftnet.sipn.swift.com/swift-apitracker/v5"
authentication:
type: bearer
token: "$secrets.swift_api_token"
resources:
- name: payments
path: "/payments/{{uetr}}/transactions"
inputParameters:
- name: uetr
in: path
operations:
- name: get-payment-status
method: GET
- type: http
namespace: temenos-api
baseUri: "https://temenos.bnpparibas.com/api/v1"
authentication:
type: bearer
token: "$secrets.temenos_token"
resources:
- name: transactions
path: "/transactions/{{reference}}"
inputParameters:
- name: reference
in: path
operations:
- name: get-transaction
method: GET
- type: http
namespace: servicenow-api
baseUri: "https://bnpparibas.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
Retrieves the status of a SWIFT payment message by reference number, returning delivery status, acknowledgments, and timestamps.
naftiko: "0.5"
info:
label: "SWIFT Message Status Check"
description: "Retrieves the status of a SWIFT payment message by reference number, returning delivery status, acknowledgments, and timestamps."
tags:
- payments
- swift
capability:
exposes:
- type: mcp
namespace: swift-gpi
port: 8080
tools:
- name: get-message-status
description: "Check the delivery status of a SWIFT payment message by reference."
inputParameters:
- name: reference
in: body
type: string
description: "The SWIFT UETR or reference number."
call: "swift-gpi.get-status"
with:
reference: "{{reference}}"
consumes:
- type: http
namespace: swift-gpi
baseUri: "https://api.swift.com/gpi/v4"
authentication:
type: bearer
token: "$secrets.swift_gpi_token"
resources:
- name: tracking
path: "/payments/{{reference}}/status"
inputParameters:
- name: reference
in: path
operations:
- name: get-status
method: GET
Tracks a SWIFT MT103 payment message through the payment chain, checking status in SAP treasury and logging delays in ServiceNow for operations follow-up.
naftiko: "0.5"
info:
label: "SWIFT Payment Message Tracking"
description: "Tracks a SWIFT MT103 payment message through the payment chain, checking status in SAP treasury and logging delays in ServiceNow for operations follow-up."
tags:
- payments
- swift
- sap
- servicenow
capability:
exposes:
- type: mcp
namespace: swift-tracking
port: 8080
tools:
- name: track-swift-payment
description: "Track a SWIFT payment by reference, check SAP status, and log delays for follow-up."
inputParameters:
- name: swift_ref
in: body
type: string
description: "The SWIFT UETR or transaction reference."
- name: payment_doc_number
in: body
type: string
description: "The SAP payment document number."
steps:
- name: track-message
type: call
call: "swift.track-payment"
with:
uetr: "{{swift_ref}}"
- name: get-sap-status
type: call
call: "sap.get-payment"
with:
payment_doc_number: "{{payment_doc_number}}"
- name: log-status
type: call
call: "servicenow.create-task"
with:
short_description: "SWIFT tracking: {{swift_ref}}"
description: "SWIFT status: {{track-message.status}}. Last update: {{track-message.last_update}}. SAP status: {{get-sap-status.status}}. Amount: {{get-sap-status.amount}} {{get-sap-status.currency}}. Value date: {{get-sap-status.value_date}}."
assigned_group: "Payment_Operations"
category: "swift_tracking"
consumes:
- type: http
namespace: swift
baseUri: "https://api.swiftnet.sipn.swift.com/gpi/v4"
authentication:
type: bearer
token: "$secrets.swift_api_key"
resources:
- name: tracker
path: "/payments/{{uetr}}"
inputParameters:
- name: uetr
in: path
operations:
- name: track-payment
method: GET
- type: http
namespace: sap
baseUri: "https://bnp-s4.sap.com/sap/opu/odata/sap/FI_PAYMENT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: payments
path: "/A_PaymentInstruction('{{payment_doc_number}}')"
inputParameters:
- name: payment_doc_number
in: path
operations:
- name: get-payment
method: GET
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.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 the real-time account balance from Temenos Transact core banking platform by account number.
naftiko: "0.5"
info:
label: "Temenos Account Balance"
description: "Retrieves the real-time account balance from Temenos Transact core banking platform by account number."
tags:
- core-banking
- temenos-transact
capability:
exposes:
- type: mcp
namespace: temenos
port: 8080
tools:
- name: get-account-balance
description: "Retrieve the current balance for a Temenos account by account number."
inputParameters:
- name: account_number
in: body
type: string
description: "The Temenos account number."
call: "temenos.get-balance"
with:
account_number: "{{account_number}}"
consumes:
- type: http
namespace: temenos
baseUri: "https://temenos.bnpparibas.com/api/v1"
authentication:
type: bearer
token: "$secrets.temenos_token"
resources:
- name: accounts
path: "/accounts/{{account_number}}/balance"
inputParameters:
- name: account_number
in: path
operations:
- name: get-balance
method: GET
Retrieves the current balance and available balance for a customer account from Temenos Transact core banking system.
naftiko: "0.5"
info:
label: "Temenos Core Banking Account Balance"
description: "Retrieves the current balance and available balance for a customer account from Temenos Transact core banking system."
tags:
- banking
- core-banking
- temenos-transact
capability:
exposes:
- type: mcp
namespace: core-banking
port: 8080
tools:
- name: get-account-balance
description: "Retrieve current and available balance for a Temenos Transact customer account."
inputParameters:
- name: account_id
in: body
type: string
description: "The Temenos Transact account identifier."
call: "temenos.get-balance"
with:
account_id: "{{account_id}}"
outputParameters:
- name: current_balance
type: number
mapping: "$.body.currentBalance"
- name: available_balance
type: number
mapping: "$.body.availableBalance"
- name: currency
type: string
mapping: "$.body.currency"
consumes:
- type: http
namespace: temenos
baseUri: "https://transact.bnpparibas.net/api/v1"
authentication:
type: bearer
token: "$secrets.temenos_token"
resources:
- name: accounts
path: "/accounts/{{account_id}}/balances"
inputParameters:
- name: account_id
in: path
operations:
- name: get-balance
method: GET
Provisions infrastructure via Terraform, registers resources in ServiceNow CMDB, configures monitoring in Datadog, and notifies the platform team.
naftiko: "0.5"
info:
label: "Terraform Cloud Provisioning Pipeline"
description: "Provisions infrastructure via Terraform, registers resources in ServiceNow CMDB, configures monitoring in Datadog, and notifies the platform team."
tags:
- infrastructure
- terraform
- servicenow
- datadog
capability:
exposes:
- type: mcp
namespace: infra-provision
port: 8080
tools:
- name: provision-infrastructure
description: "Provision infrastructure with CMDB registration and monitoring setup."
inputParameters:
- name: workspace_id
in: body
type: string
description: "Terraform workspace ID."
- name: environment
in: body
type: string
description: "Target environment."
steps:
- name: create-run
type: call
call: "terraform.create-run"
with:
workspace_id: "{{workspace_id}}"
message: "Provision {{environment}}"
- name: register-cmdb
type: call
call: "servicenow.create-ci"
with:
name: "{{workspace_id}}-{{environment}}"
environment: "{{environment}}"
- name: setup-monitoring
type: call
call: "datadog.create-monitor"
with:
name: "Infra health: {{workspace_id}}"
type: "metric alert"
consumes:
- type: http
namespace: terraform
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: runs
path: "/runs"
operations:
- name: create-run
method: POST
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cmdb
path: "/table/cmdb_ci"
operations:
- name: create-ci
method: POST
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
name: "DD-API-KEY"
in: header
value: "$secrets.datadog_api_key"
resources:
- name: monitors
path: "/monitor"
operations:
- name: create-monitor
method: POST
Validates a Terraform plan, checks policy compliance with Open Policy Agent, requests approval via ServiceNow change request, and applies the infrastructure change on Azure.
naftiko: "0.5"
info:
label: "Terraform Infrastructure Provisioning with Approval"
description: "Validates a Terraform plan, checks policy compliance with Open Policy Agent, requests approval via ServiceNow change request, and applies the infrastructure change on Azure."
tags:
- infrastructure
- terraform
- open-policy-agent
- servicenow
- azure
capability:
exposes:
- type: mcp
namespace: infra-provision
port: 8080
tools:
- name: provision-infrastructure
description: "Validate Terraform plan, check OPA policy, create change request, and apply infrastructure on Azure."
inputParameters:
- name: workspace_name
in: body
type: string
description: "The Terraform Cloud workspace name."
- name: run_id
in: body
type: string
description: "The Terraform plan run ID."
- name: requestor_email
in: body
type: string
description: "The email of the infrastructure requestor."
steps:
- name: get-plan
type: call
call: "terraform.get-run"
with:
workspace: "{{workspace_name}}"
run_id: "{{run_id}}"
- name: check-policy
type: call
call: "opa.evaluate-policy"
with:
policy_path: "infrastructure/azure"
input: "{{get-plan.plan_json}}"
- name: create-change-request
type: call
call: "servicenow.create-change"
with:
short_description: "Terraform apply: {{workspace_name}}"
description: "Run: {{run_id}}. Resources to add: {{get-plan.resources_to_add}}. Resources to change: {{get-plan.resources_to_change}}. OPA policy result: {{check-policy.decision}}. Requestor: {{requestor_email}}."
assigned_group: "Cloud_Engineering"
category: "infrastructure_change"
consumes:
- type: http
namespace: terraform
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: runs
path: "/workspaces/{{workspace}}/runs/{{run_id}}"
inputParameters:
- name: workspace
in: path
- name: run_id
in: path
operations:
- name: get-run
method: GET
- type: http
namespace: opa
baseUri: "https://opa.bnpparibas.net/v1"
authentication:
type: bearer
token: "$secrets.opa_token"
resources:
- name: policies
path: "/data/{{policy_path}}"
inputParameters:
- name: policy_path
in: path
operations:
- name: evaluate-policy
method: POST
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: changes
path: "/table/change_request"
operations:
- name: create-change
method: POST
On trade execution, captures the trade in Bloomberg AIM, books it in SimCorp Dimension, triggers settlement instruction generation in SAP, and notifies the middle office via ServiceNow.
naftiko: "0.5"
info:
label: "Trade Lifecycle Orchestrator"
description: "On trade execution, captures the trade in Bloomberg AIM, books it in SimCorp Dimension, triggers settlement instruction generation in SAP, and notifies the middle office via ServiceNow."
tags:
- trading
- trade-operations
- bloomberg-aim
- simcorp-dimension
- sap
- servicenow
capability:
exposes:
- type: mcp
namespace: trade-lifecycle
port: 8080
tools:
- name: process-trade
description: "Given a trade reference, capture it in Bloomberg AIM, book in SimCorp, generate settlement in SAP, and notify middle office."
inputParameters:
- name: trade_ref
in: body
type: string
description: "The trade reference identifier from the execution platform."
- name: portfolio_code
in: body
type: string
description: "The portfolio code in SimCorp Dimension."
- name: trader_id
in: body
type: string
description: "The trader's employee ID."
steps:
- name: capture-trade
type: call
call: "bloomberg-aim.get-trade"
with:
trade_ref: "{{trade_ref}}"
- name: book-trade
type: call
call: "simcorp.create-trade"
with:
portfolio_code: "{{portfolio_code}}"
instrument: "{{capture-trade.instrument}}"
quantity: "{{capture-trade.quantity}}"
price: "{{capture-trade.price}}"
trade_date: "{{capture-trade.trade_date}}"
- name: generate-settlement
type: call
call: "sap.create-settlement"
with:
trade_id: "{{book-trade.trade_id}}"
counterparty: "{{capture-trade.counterparty}}"
settlement_date: "{{capture-trade.settlement_date}}"
amount: "{{capture-trade.net_amount}}"
- name: notify-middle-office
type: call
call: "servicenow.create-task"
with:
short_description: "Trade booked: {{trade_ref}} — {{capture-trade.instrument}}"
description: "Trade {{trade_ref}} booked in SimCorp ({{book-trade.trade_id}}). Settlement {{generate-settlement.settlement_ref}} due {{capture-trade.settlement_date}}. Amount: {{capture-trade.net_amount}} {{capture-trade.currency}}."
assigned_group: "Middle_Office"
category: "trade_processing"
consumes:
- type: http
namespace: bloomberg-aim
baseUri: "https://aim.bloomberg.com/api/v1"
authentication:
type: bearer
token: "$secrets.bloomberg_aim_token"
resources:
- name: trades
path: "/trades/{{trade_ref}}"
inputParameters:
- name: trade_ref
in: path
operations:
- name: get-trade
method: GET
- type: http
namespace: simcorp
baseUri: "https://simcorp.bnpparibas.net/api/v2"
authentication:
type: bearer
token: "$secrets.simcorp_token"
resources:
- name: trades
path: "/portfolios/{{portfolio_code}}/trades"
inputParameters:
- name: portfolio_code
in: path
operations:
- name: create-trade
method: POST
- type: http
namespace: sap
baseUri: "https://bnp-s4.sap.com/sap/opu/odata/sap/FI_SETTLEMENT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: settlements
path: "/A_Settlement"
operations:
- name: create-settlement
method: POST
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.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
Monitors trade settlements in SWIFT, matches against SimCorp positions, logs breaks in Snowflake, and alerts operations via ServiceNow.
naftiko: "0.5"
info:
label: "Trade Settlement Monitoring Pipeline"
description: "Monitors trade settlements in SWIFT, matches against SimCorp positions, logs breaks in Snowflake, and alerts operations via ServiceNow."
tags:
- settlement
- swift
- simcorp-dimension
- snowflake
- servicenow
capability:
exposes:
- type: mcp
namespace: settlement-monitor
port: 8080
tools:
- name: monitor-settlements
description: "Match SWIFT settlements against booked positions and track breaks."
inputParameters:
- name: settlement_date
in: body
type: string
description: "Settlement date YYYY-MM-DD."
steps:
- name: get-swift-settlements
type: call
call: "swift.get-settlements"
with:
date: "{{settlement_date}}"
- name: get-positions
type: call
call: "simcorp.get-expected-settlements"
with:
date: "{{settlement_date}}"
- name: log-breaks
type: call
call: "snowflake.execute-statement"
with:
statement: "CALL SETTLEMENT.LOG_BREAKS('{{settlement_date}}')"
- name: create-ticket
type: call
call: "servicenow.create-task"
with:
short_description: "Settlement breaks: {{settlement_date}}"
description: "SWIFT settlements: {{get-swift-settlements.count}}. Expected: {{get-positions.count}}. Review breaks in Snowflake."
category: "settlement_ops"
consumes:
- type: http
namespace: swift
baseUri: "https://api.swift.com/gpi/v4"
authentication:
type: bearer
token: "$secrets.swift_gpi_token"
resources:
- name: settlements
path: "/payments/settlements"
inputParameters:
- name: date
in: query
operations:
- name: get-settlements
method: GET
- type: http
namespace: simcorp
baseUri: "https://simcorp.bnpparibas.net/api/v2"
authentication:
type: bearer
token: "$secrets.simcorp_token"
resources:
- name: settlements
path: "/settlements/expected"
inputParameters:
- name: date
in: query
operations:
- name: get-expected-settlements
method: GET
- type: http
namespace: snowflake
baseUri: "https://bnpparibas.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.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
When a Bloomberg BQL query detects anomalous trading patterns, creates a surveillance case in ServiceNow, enriches with Salesforce client data, and stores evidence in SharePoint.
naftiko: "0.5"
info:
label: "Trade Surveillance Alert Pipeline"
description: "When a Bloomberg BQL query detects anomalous trading patterns, creates a surveillance case in ServiceNow, enriches with Salesforce client data, and stores evidence in SharePoint."
tags:
- compliance
- trade-surveillance
- bloomberg-bql
- servicenow
- salesforce
- sharepoint
capability:
exposes:
- type: mcp
namespace: trade-surveillance
port: 8080
tools:
- name: process-surveillance-alert
description: "On anomalous trade detection, create surveillance case, enrich with client data, and store evidence."
inputParameters:
- name: alert_id
in: body
type: string
description: "The surveillance alert identifier."
- name: trader_account_id
in: body
type: string
description: "The Salesforce account ID of the trader's desk."
- name: instrument
in: body
type: string
description: "The instrument ticker involved."
steps:
- name: get-trade-data
type: call
call: "bloomberg-bql.run-query"
with:
query: "get(px_last, volume) for('{{instrument}}') with(dates=range(-5d,0d))"
- name: get-desk-info
type: call
call: "salesforce.get-account"
with:
account_id: "{{trader_account_id}}"
- name: create-case
type: call
call: "servicenow.create-case"
with:
short_description: "Surveillance alert: {{alert_id}} — {{instrument}}"
description: "Anomalous pattern detected for {{instrument}}. Desk: {{get-desk-info.Name}}. RM: {{get-desk-info.Owner.Name}}. 5-day data retrieved for analysis."
assigned_group: "Compliance_Surveillance"
category: "trade_surveillance"
priority: "2"
- name: store-evidence
type: call
call: "sharepoint.create-file"
with:
site_id: "compliance_surveillance"
file_path: "Evidence/{{alert_id}}/trade_data.json"
content_type: "application/json"
consumes:
- type: http
namespace: bloomberg-bql
baseUri: "https://api.bloomberg.com/eap/catalogs/bbg"
authentication:
type: bearer
token: "$secrets.bloomberg_api_key"
resources:
- name: queries
path: "/queries"
operations:
- name: run-query
method: POST
- type: http
namespace: salesforce
baseUri: "https://bnpparibas.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account
method: GET
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cases
path: "/table/sn_customerservice_case"
operations:
- name: create-case
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/{{site_id}}/drive/root:/{{file_path}}:/content"
inputParameters:
- name: site_id
in: path
- name: file_path
in: path
operations:
- name: create-file
method: PUT
Detects anomalies in Bloomberg trade data, runs pattern analysis in Snowflake, creates cases in ServiceNow, and alerts compliance via Microsoft Teams.
naftiko: "0.5"
info:
label: "Trade Surveillance Investigation Pipeline"
description: "Detects anomalies in Bloomberg trade data, runs pattern analysis in Snowflake, creates cases in ServiceNow, and alerts compliance via Microsoft Teams."
tags:
- surveillance
- bloomberg
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: trade-surveillance
port: 8080
tools:
- name: investigate-anomaly
description: "Investigate a trade surveillance alert with analysis and case creation."
inputParameters:
- name: alert_id
in: body
type: string
description: "Surveillance alert identifier."
steps:
- name: get-trade-data
type: call
call: "bloomberg.get-trade-history"
with:
alert_id: "{{alert_id}}"
- name: analyze-patterns
type: call
call: "snowflake.execute-statement"
with:
statement: "CALL SURVEILLANCE.ANALYZE_PATTERN('{{alert_id}}')"
- name: create-case
type: call
call: "servicenow.create-incident"
with:
short_description: "Trade surveillance: {{alert_id}}"
description: "Pattern: {{analyze-patterns.pattern_type}}. Confidence: {{analyze-patterns.confidence}}."
category: "surveillance"
- name: notify-compliance
type: call
call: "msteams.send-message"
with:
recipient_upn: "compliance@bnpparibas.com"
text: "Surveillance alert {{alert_id}}: {{analyze-patterns.pattern_type}}. Case: {{create-case.number}}."
consumes:
- type: http
namespace: bloomberg
baseUri: "https://api.bloomberg.com/eap/catalogs/bbg"
authentication:
type: bearer
token: "$secrets.bloomberg_api_key"
resources:
- name: trades
path: "/trades/history"
inputParameters:
- name: alert_id
in: query
operations:
- name: get-trade-history
method: GET
- type: http
namespace: snowflake
baseUri: "https://bnpparibas.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.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: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Submits a request-for-quote on Tradeweb for a fixed income security, returning dealer quotes and best execution price.
naftiko: "0.5"
info:
label: "Tradeweb RFQ Submission"
description: "Submits a request-for-quote on Tradeweb for a fixed income security, returning dealer quotes and best execution price."
tags:
- trading
- fixed-income
- tradeweb
capability:
exposes:
- type: mcp
namespace: fixed-income-trading
port: 8080
tools:
- name: submit-rfq
description: "Submit a request-for-quote on Tradeweb for a given ISIN and notional amount."
inputParameters:
- name: isin
in: body
type: string
description: "The ISIN of the bond."
- name: notional
in: body
type: number
description: "The notional amount in the bond currency."
- name: direction
in: body
type: string
description: "BUY or SELL."
call: "tradeweb.create-rfq"
with:
isin: "{{isin}}"
notional: "{{notional}}"
direction: "{{direction}}"
consumes:
- type: http
namespace: tradeweb
baseUri: "https://api.tradeweb.com/v2"
authentication:
type: bearer
token: "$secrets.tradeweb_api_key"
resources:
- name: rfqs
path: "/rfqs"
operations:
- name: create-rfq
method: POST
Aggregates subsidiary balances from Temenos, optimizes allocation in Oracle, executes sweeps via SWIFT, and reports to treasury via Power BI.
naftiko: "0.5"
info:
label: "Treasury Cash Pooling Pipeline"
description: "Aggregates subsidiary balances from Temenos, optimizes allocation in Oracle, executes sweeps via SWIFT, and reports to treasury via Power BI."
tags:
- treasury
- temenos-transact
- oracle
- swift
- power-bi
capability:
exposes:
- type: mcp
namespace: cash-pooling
port: 8080
tools:
- name: execute-cash-pooling
description: "Aggregate balances and execute intercompany cash sweeps."
inputParameters:
- name: pool_id
in: body
type: string
description: "Cash pool identifier."
steps:
- name: get-balances
type: call
call: "temenos.get-pool-balances"
with:
pool_id: "{{pool_id}}"
- name: optimize
type: call
call: "oracle.calculate-sweeps"
with:
pool_id: "{{pool_id}}"
balances: "{{get-balances.accounts}}"
- name: execute-sweeps
type: call
call: "swift.send-mt202"
with:
sweeps: "{{optimize.sweep_instructions}}"
- name: refresh-report
type: call
call: "powerbi.refresh-dataset"
with:
dataset_id: "cash-pooling"
consumes:
- type: http
namespace: temenos
baseUri: "https://temenos.bnpparibas.com/api/v1"
authentication:
type: bearer
token: "$secrets.temenos_token"
resources:
- name: pools
path: "/treasury/pools/{{pool_id}}/balances"
inputParameters:
- name: pool_id
in: path
operations:
- name: get-pool-balances
method: GET
- type: http
namespace: oracle
baseUri: "https://oracle.bnpparibas.com/fscmRestApi/resources/v1"
authentication:
type: basic
username: "$secrets.oracle_user"
password: "$secrets.oracle_password"
resources:
- name: sweeps
path: "/treasury/sweeps/calculate"
operations:
- name: calculate-sweeps
method: POST
- type: http
namespace: swift
baseUri: "https://swift.bnpparibas.com/api/v1"
authentication:
type: bearer
token: "$secrets.swift_token"
resources:
- name: messages
path: "/messages/mt202/batch"
operations:
- name: send-mt202
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
Queries Tyk API gateway for endpoint health metrics, retrieves error rates from Datadog, and creates a ServiceNow incident if degradation is detected.
naftiko: "0.5"
info:
label: "Tyk API Gateway Health Check"
description: "Queries Tyk API gateway for endpoint health metrics, retrieves error rates from Datadog, and creates a ServiceNow incident if degradation is detected."
tags:
- api-management
- tyk
- datadog
- servicenow
capability:
exposes:
- type: mcp
namespace: api-health
port: 8080
tools:
- name: check-api-health
description: "Monitor Tyk API gateway endpoint health, correlate with Datadog errors, and alert on degradation."
inputParameters:
- name: api_id
in: body
type: string
description: "The Tyk API definition ID."
- name: service_name
in: body
type: string
description: "The corresponding Datadog service name."
steps:
- name: get-api-metrics
type: call
call: "tyk.get-api-analytics"
with:
api_id: "{{api_id}}"
- name: get-error-rate
type: call
call: "datadog.get-service-metrics"
with:
service_name: "{{service_name}}"
- name: create-alert
type: call
call: "servicenow.create-incident"
with:
short_description: "API degradation: {{api_id}}"
description: "Tyk metrics — requests: {{get-api-metrics.total_requests}}, errors: {{get-api-metrics.error_count}}, avg latency: {{get-api-metrics.avg_latency_ms}}ms. Datadog error rate: {{get-error-rate.error_rate}}%."
assigned_group: "API_Platform"
category: "api_monitoring"
consumes:
- type: http
namespace: tyk
baseUri: "https://tyk-dashboard.bnpparibas.net/api"
authentication:
type: apiKey
name: "Authorization"
in: header
value: "$secrets.tyk_api_key"
resources:
- name: analytics
path: "/apis/{{api_id}}/analytics"
inputParameters:
- name: api_id
in: path
operations:
- name: get-api-analytics
method: GET
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.eu/api/v2"
authentication:
type: apiKey
name: "DD-API-KEY"
in: header
value: "$secrets.datadog_api_key"
resources:
- name: services
path: "/services/{{service_name}}/metrics"
inputParameters:
- name: service_name
in: path
operations:
- name: get-service-metrics
method: GET
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.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
Creates vendor in SAP Ariba, runs due diligence checks, sets up payment terms in Oracle, and tracks onboarding in ServiceNow.
naftiko: "0.5"
info:
label: "Vendor Onboarding Orchestrator"
description: "Creates vendor in SAP Ariba, runs due diligence checks, sets up payment terms in Oracle, and tracks onboarding in ServiceNow."
tags:
- procurement
- sap-ariba
- oracle
- servicenow
capability:
exposes:
- type: mcp
namespace: vendor-onboarding
port: 8080
tools:
- name: onboard-vendor
description: "Onboard a new vendor across SAP Ariba, Oracle, and ServiceNow."
inputParameters:
- name: vendor_name
in: body
type: string
description: "Vendor company name."
- name: tax_id
in: body
type: string
description: "Vendor tax ID."
steps:
- name: create-vendor
type: call
call: "ariba.create-supplier"
with:
name: "{{vendor_name}}"
tax_id: "{{tax_id}}"
- name: setup-payments
type: call
call: "oracle.create-supplier"
with:
supplier_name: "{{vendor_name}}"
supplier_number: "{{create-vendor.supplier_id}}"
- name: track-onboarding
type: call
call: "servicenow.create-task"
with:
short_description: "Vendor onboarding: {{vendor_name}}"
description: "Ariba: {{create-vendor.supplier_id}}. Oracle: {{setup-payments.supplier_number}}."
category: "procurement"
consumes:
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: suppliers
path: "/supplier-management/v2/suppliers"
operations:
- name: create-supplier
method: POST
- type: http
namespace: oracle
baseUri: "https://oracle.bnpparibas.com/fscmRestApi/resources/v1"
authentication:
type: basic
username: "$secrets.oracle_user"
password: "$secrets.oracle_password"
resources:
- name: suppliers
path: "/suppliers"
operations:
- name: create-supplier
method: POST
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.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 vendor details from SAP Ariba, screens through Moody's risk database, assesses IT risk via Fortinet vulnerability scan, and creates a risk review in ServiceNow.
naftiko: "0.5"
info:
label: "Vendor Risk Assessment Orchestrator"
description: "Retrieves vendor details from SAP Ariba, screens through Moody's risk database, assesses IT risk via Fortinet vulnerability scan, and creates a risk review in ServiceNow."
tags:
- third-party-risk
- vendor-management
- sap-ariba
- moodys
- fortinet
- servicenow
capability:
exposes:
- type: mcp
namespace: vendor-risk
port: 8080
tools:
- name: assess-vendor-risk
description: "Compile vendor risk assessment from procurement, credit, and security data sources."
inputParameters:
- name: vendor_id
in: body
type: string
description: "The SAP Ariba vendor identifier."
- name: vendor_domain
in: body
type: string
description: "The vendor's primary domain for security scanning."
steps:
- name: get-vendor
type: call
call: "ariba.get-vendor"
with:
vendor_id: "{{vendor_id}}"
- name: screen-vendor
type: call
call: "moodys.screen-entity"
with:
entity_name: "{{get-vendor.company_name}}"
country: "{{get-vendor.country}}"
- name: scan-security
type: call
call: "fortinet.scan-domain"
with:
domain: "{{vendor_domain}}"
- name: create-review
type: call
call: "servicenow.create-task"
with:
short_description: "Vendor risk review: {{get-vendor.company_name}}"
description: "Ariba vendor: {{vendor_id}}. Moody's risk level: {{screen-vendor.risk_level}}. Score: {{screen-vendor.score}}. Security scan: {{scan-security.risk_grade}}. Vulnerabilities: {{scan-security.vuln_count}}. Contract value: {{get-vendor.contract_value}}."
assigned_group: "Third_Party_Risk"
category: "vendor_risk_assessment"
consumes:
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/supplier-management/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: vendors
path: "/vendors/{{vendor_id}}"
inputParameters:
- name: vendor_id
in: path
operations:
- name: get-vendor
method: GET
- type: http
namespace: moodys
baseUri: "https://api.moodys.com/screening/v1"
authentication:
type: bearer
token: "$secrets.moodys_api_key"
resources:
- name: entities
path: "/screen"
operations:
- name: screen-entity
method: POST
- type: http
namespace: fortinet
baseUri: "https://fortiguard.bnpparibas.net/api/v2"
authentication:
type: bearer
token: "$secrets.fortinet_token"
resources:
- name: scans
path: "/scans/domain"
operations:
- name: scan-domain
method: POST
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.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
Provisions a new VMware virtual machine, configures networking via Palo Alto Networks firewall rules, registers in ServiceNow CMDB, and sets up Datadog monitoring.
naftiko: "0.5"
info:
label: "VMware VM Provisioning Pipeline"
description: "Provisions a new VMware virtual machine, configures networking via Palo Alto Networks firewall rules, registers in ServiceNow CMDB, and sets up Datadog monitoring."
tags:
- infrastructure
- vmware
- palo-alto-networks
- servicenow
- datadog
capability:
exposes:
- type: mcp
namespace: vm-provisioning
port: 8080
tools:
- name: provision-vm
description: "Create a VMware VM, configure firewall rules, register in CMDB, and enable monitoring."
inputParameters:
- name: vm_name
in: body
type: string
description: "The virtual machine name."
- name: template
in: body
type: string
description: "The VMware template to clone from."
- name: network_zone
in: body
type: string
description: "The target network zone (e.g. dmz, internal, restricted)."
- name: owner_team
in: body
type: string
description: "The owning team name."
steps:
- name: create-vm
type: call
call: "vmware.clone-vm"
with:
name: "{{vm_name}}"
template: "{{template}}"
cluster: "bnp-prod-cluster"
- name: configure-firewall
type: call
call: "paloalto.create-rule"
with:
rule_name: "allow-{{vm_name}}"
source_zone: "{{network_zone}}"
destination: "{{create-vm.ip_address}}"
- name: register-cmdb
type: call
call: "servicenow.create-ci"
with:
name: "{{vm_name}}"
class: "cmdb_ci_vmware_instance"
ip_address: "{{create-vm.ip_address}}"
owned_by: "{{owner_team}}"
description: "VMware VM from template {{template}}. Zone: {{network_zone}}. Firewall rule: {{configure-firewall.rule_id}}."
- name: enable-monitoring
type: call
call: "datadog.create-monitor"
with:
name: "{{vm_name}}-health"
type: "metric alert"
query: "avg(last_5m):avg:system.cpu.idle{host:{{vm_name}}} < 10"
consumes:
- type: http
namespace: vmware
baseUri: "https://vcenter.bnpparibas.net/api"
authentication:
type: bearer
token: "$secrets.vcenter_token"
resources:
- name: vms
path: "/vcenter/vm"
operations:
- name: clone-vm
method: POST
- type: http
namespace: paloalto
baseUri: "https://panorama.bnpparibas.net/restapi/v10.2"
authentication:
type: apiKey
name: "X-PAN-KEY"
in: header
value: "$secrets.paloalto_api_key"
resources:
- name: security-rules
path: "/Policies/SecurityRules"
operations:
- name: create-rule
method: POST
- type: http
namespace: servicenow
baseUri: "https://bnpparibas.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cmdb
path: "/table/cmdb_ci"
operations:
- name: create-ci
method: POST
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.eu/api/v1"
authentication:
type: apiKey
name: "DD-API-KEY"
in: header
value: "$secrets.datadog_api_key"
resources:
- name: monitors
path: "/monitor"
operations:
- name: create-monitor
method: POST
Prepares a client portfolio review by pulling holdings from FactSet, account data from Salesforce, risk assessment from Moody's, and assembling a review deck notification in SharePoint.
naftiko: "0.5"
info:
label: "Wealth Management Client Review Orchestrator"
description: "Prepares a client portfolio review by pulling holdings from FactSet, account data from Salesforce, risk assessment from Moody's, and assembling a review deck notification in SharePoint."
tags:
- wealth-management
- client-management
- factset
- salesforce
- moodys
- sharepoint
capability:
exposes:
- type: mcp
namespace: wealth-review
port: 8080
tools:
- name: prepare-client-review
description: "Assemble a wealth management client review package from portfolio, CRM, and risk data."
inputParameters:
- name: client_account_id
in: body
type: string
description: "The Salesforce account ID for the wealth management client."
- name: portfolio_id
in: body
type: string
description: "The FactSet portfolio ID."
steps:
- name: get-client
type: call
call: "salesforce.get-account"
with:
account_id: "{{client_account_id}}"
- name: get-holdings
type: call
call: "factset.get-holdings"
with:
portfolio_id: "{{portfolio_id}}"
- name: get-risk-profile
type: call
call: "moodys.get-portfolio-risk"
with:
portfolio_id: "{{portfolio_id}}"
- name: create-review-folder
type: call
call: "sharepoint.create-folder"
with:
site_id: "wealth_management_reviews"
folder_path: "Reviews/{{get-client.Name}}/{{portfolio_id}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://bnpparibas.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account
method: GET
- type: http
namespace: factset
baseUri: "https://api.factset.com/analytics/portfolio/v3"
authentication:
type: basic
username: "$secrets.factset_user"
password: "$secrets.factset_password"
resources:
- name: holdings
path: "/portfolios/{{portfolio_id}}/holdings"
inputParameters:
- name: portfolio_id
in: path
operations:
- name: get-holdings
method: GET
- type: http
namespace: moodys
baseUri: "https://api.moodys.com/risk/v1"
authentication:
type: bearer
token: "$secrets.moodys_api_key"
resources:
- name: portfolio-risk
path: "/portfolios/{{portfolio_id}}/risk"
inputParameters:
- name: portfolio_id
in: path
operations:
- name: get-portfolio-risk
method: GET
- 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:/{{folder_path}}"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
operations:
- name: create-folder
method: POST
Searches the Workday employee directory by name or department, returning employee profiles and organizational hierarchy.
naftiko: "0.5"
info:
label: "Workday Employee Directory Search"
description: "Searches the Workday employee directory by name or department, returning employee profiles and organizational hierarchy."
tags:
- hr
- workday
capability:
exposes:
- type: mcp
namespace: workday-dir
port: 8080
tools:
- name: search-employees
description: "Search Workday employee directory by name or department."
inputParameters:
- name: search_query
in: body
type: string
description: "Search term for employee name or department."
call: "workday-dir.search-workers"
with:
query: "{{search_query}}"
consumes:
- type: http
namespace: workday-dir
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers"
inputParameters:
- name: query
in: query
operations:
- name: search-workers
method: GET
Retrieves employee details from Workday by worker ID, returning name, department, cost center, and manager for HR and compliance workflows.
naftiko: "0.5"
info:
label: "Workday Employee Lookup"
description: "Retrieves employee details from Workday by worker ID, returning name, department, cost center, and manager for HR and compliance workflows."
tags:
- hr
- workday
- employee-data
capability:
exposes:
- type: mcp
namespace: hr
port: 8080
tools:
- name: get-employee
description: "Look up a Workday employee by worker ID. Returns full name, department, cost center, and direct manager."
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: cost_center
type: string
mapping: "$.worker.costCenter"
- name: manager_id
type: string
mapping: "$.worker.managerId"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET